Merge pull request #1432 from Estebene/repeat-caret-pace

Added repeat caret pace
This commit is contained in:
Jack 2021-05-16 00:55:39 +01:00 committed by GitHub
commit cb6de50a93
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 105 additions and 73 deletions

View file

@ -6,7 +6,7 @@ import * as DB from "./db";
export let settings = null;
function resetCaretPosition() {
if (Config.paceCaret === "off") return;
if (Config.paceCaret === "off" && !TestLogic.isPaceRepeat) return;
if (!$("#paceCaret").hasClass("hidden")) {
$("#paceCaret").addClass("hidden");
}
@ -69,8 +69,9 @@ export async function init() {
console.log("avg pace " + wpm);
} else if (Config.paceCaret === "custom") {
wpm = Config.paceCaretCustomSpeed;
} else if (TestLogic.isPaceRepeat == true) {
wpm = TestLogic.lastTestWpm;
}
if (wpm < 1 || wpm == false || wpm == undefined || Number.isNaN(wpm)) {
settings = null;
return;
@ -102,9 +103,6 @@ export function update(expectedStepEnd) {
if ($("#paceCaret").hasClass("hidden")) {
$("#paceCaret").removeClass("hidden");
}
if ($("#paceCaret").hasClass("off")) {
return;
}
try {
settings.currentLetterIndex++;
if (

View file

@ -164,6 +164,8 @@ export let input = new Input();
export let corrected = new Corrected();
export let currentWordIndex = 0;
export let isRepeated = false;
export let isPaceRepeat = false;
export let lastTestWpm = 0;
export let hasTab = false;
export let randomQuote = null;
export let bailout = false;
@ -176,6 +178,10 @@ export function setRepeated(tf) {
isRepeated = tf;
}
export function setPaceRepeat(tf) {
isPaceRepeat = tf;
}
export function setHasTab(tf) {
hasTab = tf;
}
@ -336,7 +342,7 @@ export function startTest() {
}
try {
if (Config.paceCaret !== "off") PaceCaret.start();
if (Config.paceCaret !== "off" || isPaceRepeat) PaceCaret.start();
} catch (e) {}
//use a recursive self-adjusting timer to avoid time drift
TestStats.setStart(performance.now());
@ -739,18 +745,20 @@ export function restart(
$("#typingTest").css("opacity", 0).removeClass("hidden");
if (!withSameWordset) {
setRepeated(false);
setPaceRepeat(false);
setHasTab(false);
await init();
PaceCaret.init(nosave);
} else {
setRepeated(true);
setPaceRepeat(true);
setActive(false);
Replay.stopReplayRecording();
words.resetCurrentIndex();
input.reset();
PaceCaret.init();
TestUI.showWords();
Funbox.activate();
PaceCaret.init();
}
if (Config.mode === "quote") {
setRepeated(false);
@ -1020,6 +1028,9 @@ export function finish(difficultyFailed = false) {
inf = true;
}
TestTimer.clear();
lastTestWpm = stats.wpm;
let testtime = stats.time;
let afkseconds = TestStats.calculateAfkSeconds();
let afkSecondsPercent = Misc.roundTo2((afkseconds / testtime) * 100);

View file

@ -184,7 +184,6 @@ export function colorful(tc) {
}
}
export function screenshot() {
let revealReplay = false;
function revertScreenshot() {
@ -196,9 +195,10 @@ export function screenshot() {
if (firebase.auth().currentUser == null)
$(".pageTest .loginTip").removeClass("hidden");
}
if (!$("#resultReplay").hasClass('hidden')) {
revealReplay = true;
Replay.pauseReplay()
Replay.pauseReplay();
}
$("#resultReplay").addClass("hidden");
$(".pageTest .ssWatermark").removeClass("hidden");
@ -282,78 +282,99 @@ export function updateWordElement(showError) {
}
}
} else {
let correctSoFar = false;
if (currentWord.slice(0, input.length) == input) {
// this is when input so far is correct
correctSoFar = true;
}
let wordHighlightClassString = correctSoFar ? "correct" : "incorrect";
if (Config.blindMode) {
wordHighlightClassString = "correct";
let correctSoFar = false;
if (currentWord.slice(0, input.length) == input) {
// this is when input so far is correct
correctSoFar = true;
}
let wordHighlightClassString = correctSoFar ? "correct" : "incorrect";
if (Config.blindMode) {
wordHighlightClassString = "correct";
}
for (let i = 0; i < input.length; i++) {
let charCorrect;
if (currentWord[i] == input[i]) {
charCorrect = true;
} else {
charCorrect = false;
}
for (let i = 0; i < input.length; i++) {
let charCorrect;
if (currentWord[i] == input[i]) {
charCorrect = true;
let correctClass = "correct";
if (Config.highlightMode == "off") {
correctClass = "";
}
let currentLetter = currentWord[i];
let tabChar = "";
let nlChar = "";
if (currentLetter === "\t") {
tabChar = "tabChar";
currentLetter = `<i class="fas fa-long-arrow-alt-right"></i>`;
} else if (currentLetter === "\n") {
nlChar = "nlChar";
currentLetter = `<i class="fas fa-angle-down"></i>`;
}
if (charCorrect) {
ret += `<letter class="${
Config.highlightMode == "word"
? wordHighlightClassString
: correctClass
} ${tabChar}${nlChar}">${currentLetter}</letter>`;
} else {
if (!showError) {
if (currentLetter !== undefined) {
ret += `<letter class="${
Config.highlightMode == "word"
? wordHighlightClassString
: correctClass
} ${tabChar}${nlChar}">${currentLetter}</letter>`;
}
} else {
charCorrect = false;
}
let correctClass = "correct";
if (Config.highlightMode == "off") {
correctClass = "";
}
let currentLetter = currentWord[i];
let tabChar = "";
let nlChar = "";
if (currentLetter === "\t") {
tabChar = "tabChar";
currentLetter = `<i class="fas fa-long-arrow-alt-right"></i>`;
} else if (currentLetter === "\n") {
nlChar = "nlChar";
currentLetter = `<i class="fas fa-angle-down"></i>`;
}
if (charCorrect) {
ret += `<letter class="${Config.highlightMode == "word" ? wordHighlightClassString : correctClass} ${tabChar}${nlChar}">${currentLetter}</letter>`;
} else {
if (!showError) {
if (currentLetter !== undefined) {
ret += `<letter class="${Config.highlightMode == "word" ? wordHighlightClassString : correctClass} ${tabChar}${nlChar}">${currentLetter}</letter>`;
}
} else {
if (currentLetter == undefined) {
if (!Config.hideExtraLetters) {
let letter = input[i];
if (letter == " " || letter == "\t" || letter == "\n") {
letter = "_";
}
ret += `<letter class="${Config.highlightMode == "word" ? wordHighlightClassString : 'incorrect'} extra ${tabChar}${nlChar}">${letter}</letter>`;
if (currentLetter == undefined) {
if (!Config.hideExtraLetters) {
let letter = input[i];
if (letter == " " || letter == "\t" || letter == "\n") {
letter = "_";
}
} else {
ret +=
`<letter class="${Config.highlightMode == "word" ? wordHighlightClassString : 'incorrect'} ${tabChar}${nlChar}">` +
currentLetter +
(Config.indicateTypos ? `<hint>${input[i]}</hint>` : "") +
"</letter>";
ret += `<letter class="${
Config.highlightMode == "word"
? wordHighlightClassString
: "incorrect"
} extra ${tabChar}${nlChar}">${letter}</letter>`;
}
}
}
}
if (input.length < currentWord.length) {
for (let i = input.length; i < currentWord.length; i++) {
if (currentWord[i] === "\t") {
ret += `<letter class='tabChar'><i class="fas fa-long-arrow-alt-right"></i></letter>`;
} else if (currentWord[i] === "\n") {
ret += `<letter class='nlChar'><i class="fas fa-angle-down"></i></letter>`;
} else {
ret += `<letter class="${Config.highlightMode == "word" ? wordHighlightClassString : ''}">` + currentWord[i] + "</letter>";
ret +=
`<letter class="${
Config.highlightMode == "word"
? wordHighlightClassString
: "incorrect"
} ${tabChar}${nlChar}">` +
currentLetter +
(Config.indicateTypos ? `<hint>${input[i]}</hint>` : "") +
"</letter>";
}
}
}
}
if (input.length < currentWord.length) {
for (let i = input.length; i < currentWord.length; i++) {
if (currentWord[i] === "\t") {
ret += `<letter class='tabChar'><i class="fas fa-long-arrow-alt-right"></i></letter>`;
} else if (currentWord[i] === "\n") {
ret += `<letter class='nlChar'><i class="fas fa-angle-down"></i></letter>`;
} else {
ret +=
`<letter class="${
Config.highlightMode == "word" ? wordHighlightClassString : ""
}">` +
currentWord[i] +
"</letter>";
}
}
}
}
wordAtIndex.innerHTML = ret;
if (newlineafter) $("#words").append("<div class='newline'></div>");
@ -470,7 +491,7 @@ export function updateModesNotice() {
);
}
if (Config.paceCaret !== "off") {
if (Config.paceCaret !== "off" || TestLogic.isPaceRepeat) {
let speed = "";
try {
speed = ` (${Math.round(PaceCaret.settings.wpm)} wpm)`;
@ -481,6 +502,8 @@ export function updateModesNotice() {
? "average"
: Config.paceCaret === "pb"
? "pb"
: Config.paceCaret == "off"
? "repeated"
: "custom"
} pace${speed}</div>`
);