Skip to content

Commit 2443b85

Browse files
authored
Merge pull request #95 from bhomie:caret-options
Add caret options
2 parents 0eaca00 + ab884f1 commit 2443b85

6 files changed

Lines changed: 127 additions & 16 deletions

File tree

public/css/style.scss

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,6 @@ a:hover {
299299
}
300300

301301
#caret {
302-
width: 2px;
303302
height: 1.5rem;
304303
background: var(--caret-color);
305304
animation-name: caretFlash;
@@ -309,32 +308,54 @@ a:hover {
309308
position: absolute;
310309
border-radius: var(--roundness);
311310
// transition: 0.05s;
311+
transform-origin: top left;
312312
}
313313

314-
#caret.size125{
315-
height: 2rem;
314+
#caret.default{
316315
width: 2px;
317316
}
318317

318+
#caret.block{
319+
width: .7em;
320+
margin-left: 0.25em;
321+
border-radius: 0;
322+
}
323+
324+
#caret.outline{
325+
@extend #caret, .block;
326+
background: transparent;
327+
border: 1px solid var(--caret-color);
328+
}
329+
330+
#caret.underline{
331+
height: 2px;
332+
width: 0.8em;
333+
margin-top: 1.3em;
334+
margin-left: 0.3em;
335+
}
336+
337+
#caret.underline.size125{margin-top: 1.8em;}
338+
#caret.underline.size15{margin-top: 2.1em;}
339+
#caret.underline.size2{margin-top: 2.7em;}
340+
341+
#caret.size125{
342+
transform: scale(1.25);
343+
}
344+
319345
#caret.size15{
320-
height: 2.25rem;
321-
width: 3px;
346+
transform: scale(1.45);
322347
}
323348

324349
#caret.size2{
325-
height: 3rem;
326-
width: 4px;
350+
transform: scale(1.9);
327351
}
328352

329353
@keyframes caretFlash {
330-
0% {
331-
background: transparent;
354+
0%, 100% {
355+
opacity: 0;
332356
}
333357
50% {
334-
background: var(--caret-color);
335-
}
336-
100% {
337-
background: transparent;
358+
opacity: 1;
338359
}
339360
}
340361

@@ -942,7 +963,7 @@ key {
942963
margin-left: 2rem;
943964
display: grid;
944965
grid-auto-flow: column;
945-
grid-template-columns: 1fr 1fr;
966+
grid-auto-columns: 1fr;
946967
gap: .5rem;
947968
grid-area: buttons;
948969
.button{

public/index.html

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,16 @@ <h1>smooth caret</h1>
262262
<div class="button off" tabindex="0" onclick="this.blur();">off</div>
263263
</div>
264264
</div>
265+
<div class="section caretStyle" section="">
266+
<h1>caret style</h1>
267+
<div class="text">What the caret will look like in the test</div>
268+
<div class="buttons">
269+
<div class="button" caret="default" tabindex="0" onclick="this.blur();">|</div>
270+
<div class="button" caret="block" tabindex="0" onclick="this.blur();"></div>
271+
<div class="button" caret="outline" tabindex="0" onclick="this.blur();"></div>
272+
<div class="button" caret="underline" tabindex="0" onclick="this.blur();">_</div>
273+
</div>
274+
</div>
265275
<div class="section quickTab">
266276
<h1>quick tab mode</h1>
267277
<div class="text">Press <key>tab</key> to quickly restart the test. This function disables tab navigation on some parts of the website.</div>

public/js/commandline.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,15 @@ let commands = {
5858
showCommandLine();
5959
}
6060
},
61+
{
62+
id: "changeCaretStyle",
63+
display: "Change caret...",
64+
subgroup: true,
65+
exec: () => {
66+
currentCommands.push(commandsCaretStyle);
67+
showCommandLine();
68+
}
69+
},
6170
{
6271
id: "changeTheme",
6372
display: "Change theme...",
@@ -189,6 +198,40 @@ let commandsDifficulty = {
189198
}
190199

191200

201+
let commandsCaretStyle = {
202+
title: "Change caret...",
203+
list: [
204+
{
205+
id: "setCaretStyleDefault",
206+
display: "line",
207+
exec: () => {
208+
setCaretStyle('default');
209+
}
210+
},
211+
{
212+
id: "setCaretStyleBlock",
213+
display: "block",
214+
exec: () => {
215+
setCaretStyle('block');
216+
}
217+
},
218+
{
219+
id: "setCaretStyleOutline",
220+
display: "outline-block",
221+
exec: () => {
222+
setCaretStyle('outline');
223+
}
224+
},
225+
{
226+
id: "setCaretStyleUnderline",
227+
display: "underline",
228+
exec: () => {
229+
setCaretStyle('underline');
230+
}
231+
}
232+
]
233+
}
234+
192235
let commandsWordCount = {
193236
title: "Change word count...",
194237
list: [

public/js/script.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ function showCaret() {
313313

314314
function stopCaretAnimation() {
315315
$("#caret").css("animation-name", "none");
316-
$("#caret").css("background-color", "var(--caret-color)");
316+
$("#caret").css("opacity", "1");
317317
}
318318

319319
function startCaretAnimation() {

public/js/settings.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ function updateSettingsPage(){
2121
setActiveLanguageButton();
2222
setActiveFontSizeButton();
2323
setActiveDifficultyButton();
24+
setActiveCaretStyleButton();
2425

2526
if (config.showKeyTips) {
2627
$(".pageSettings .tip").removeClass('hidden');
@@ -51,6 +52,11 @@ function setActiveLanguageButton() {
5152
$(`.pageSettings .section.languages .language[language=${config.language}]`).addClass('active');
5253
}
5354

55+
function setActiveCaretStyleButton() {
56+
$(`.pageSettings .section.caretStyle .buttons .button`).removeClass('active');
57+
$(`.pageSettings .section.caretStyle .buttons .button[caret=`+config.caretStyle+`]`).addClass('active');
58+
}
59+
5460
function setSettingsButton(buttonSection,tf) {
5561
if (tf) {
5662
$(".pageSettings .section."+buttonSection+" .buttons .button.on").addClass('active');
@@ -175,4 +181,12 @@ $(document).on("click",".pageSettings .section.difficulty .button", (e) => {
175181
setDifficulty(difficulty);
176182
showNotification('Difficulty changed', 1000);
177183
setActiveDifficultyButton();
178-
})
184+
})
185+
186+
//caret style
187+
$(document).on("click",".pageSettings .section.caretStyle .button", (e) => {
188+
let caretStyle = $(e.currentTarget).attr('caret');
189+
setCaretStyle(caretStyle);
190+
showNotification('Caret style updated', 1000);
191+
setActiveCaretStyleButton();
192+
})

public/js/userconfig.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ function loadConfigFromCookie() {
4141
changeLanguage(newConfig.language,true);
4242
changeFontSize(newConfig.fontSize,true);
4343
setFreedomMode(newConfig.freedomMode,true);
44+
setCaretStyle(newConfig.caretStyle,true);
4445
setDifficulty(newConfig.difficulty,true);
4546
if(newConfig.resultFilters == null || newConfig.resultFilters == undefined){
4647
newConfig.resultFilters = ["all"];
@@ -67,6 +68,28 @@ function setDifficulty(diff, nosave){
6768
if(!nosave) saveConfigToCookie();
6869
}
6970

71+
function setCaretStyle(caretStyle, nosave) {
72+
if (caretStyle == null || caretStyle == undefined) {
73+
caretStyle = 'default';
74+
}
75+
config.caretStyle = caretStyle;
76+
$("#caret").removeClass('default');
77+
$("#caret").removeClass('underline');
78+
$("#caret").removeClass('outline');
79+
$("#caret").removeClass('block');
80+
81+
if (caretStyle == 'default') {
82+
$("#caret").addClass('default');
83+
} else if (caretStyle == 'block') {
84+
$("#caret").addClass('block');
85+
} else if (caretStyle == 'outline') {
86+
$("#caret").addClass('outline');
87+
} else if (caretStyle == 'underline') {
88+
$("#caret").addClass('underline');
89+
}
90+
if(!nosave) saveConfigToCookie();
91+
}
92+
7093
//key tips
7194
function setKeyTips(keyTips, nosave) {
7295
config.showKeyTips = keyTips;

0 commit comments

Comments
 (0)