diff --git a/src/js/test/pace-caret.js b/src/js/test/pace-caret.js index d6e4af60a..156a840a8 100644 --- a/src/js/test/pace-caret.js +++ b/src/js/test/pace-caret.js @@ -40,7 +40,9 @@ export async function init() { mode2 = TestLogic.randomQuote.id; } let wpm; - if (Config.paceCaret === "pb") { + if (TestLogic.isPaceRepeat == true) { + wpm = TestLogic.lastTestWpm; + } else if (Config.paceCaret === "pb") { wpm = await DB.getLocalPB( Config.mode, mode2, diff --git a/src/js/test/test-logic.js b/src/js/test/test-logic.js index cc24e0713..e7935c7bb 100644 --- a/src/js/test/test-logic.js +++ b/src/js/test/test-logic.js @@ -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; } @@ -739,11 +745,13 @@ 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(); @@ -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); diff --git a/src/js/test/test-ui.js b/src/js/test/test-ui.js index d940e80a1..bb0619808 100644 --- a/src/js/test/test-ui.js +++ b/src/js/test/test-ui.js @@ -184,7 +184,6 @@ export function colorful(tc) { } } - export function screenshot() { function revertScreenshot() { $("#notificationCenter").removeClass("hidden"); @@ -196,9 +195,9 @@ export function screenshot() { $(".pageTest .loginTip").removeClass("hidden"); } let revealReplay = false; - if (!$("#resultReplay").hasClass('hidden')) { + if (!$("#resultReplay").hasClass("hidden")) { revealReplay = true; - Replay.pauseReplay() + Replay.pauseReplay(); } $("#resultReplay").addClass("hidden"); $(".pageTest .ssWatermark").removeClass("hidden"); @@ -282,78 +281,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 = ``; + } else if (currentLetter === "\n") { + nlChar = "nlChar"; + currentLetter = ``; + } + + if (charCorrect) { + ret += `${currentLetter}`; + } else { + if (!showError) { + if (currentLetter !== undefined) { + ret += `${currentLetter}`; + } } 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 = ``; - } else if (currentLetter === "\n") { - nlChar = "nlChar"; - currentLetter = ``; - } - - if (charCorrect) { - ret += `${currentLetter}`; - } else { - if (!showError) { - if (currentLetter !== undefined) { - ret += `${currentLetter}`; - } - } else { - if (currentLetter == undefined) { - if (!Config.hideExtraLetters) { - let letter = input[i]; - if (letter == " " || letter == "\t" || letter == "\n") { - letter = "_"; - } - ret += `${letter}`; + if (currentLetter == undefined) { + if (!Config.hideExtraLetters) { + let letter = input[i]; + if (letter == " " || letter == "\t" || letter == "\n") { + letter = "_"; } - } else { - ret += - `` + - currentLetter + - (Config.indicateTypos ? `${input[i]}` : "") + - ""; + ret += `${letter}`; } - } - } - } - - if (input.length < currentWord.length) { - for (let i = input.length; i < currentWord.length; i++) { - if (currentWord[i] === "\t") { - ret += ``; - } else if (currentWord[i] === "\n") { - ret += ``; } else { - ret += `` + currentWord[i] + ""; + ret += + `` + + currentLetter + + (Config.indicateTypos ? `${input[i]}` : "") + + ""; } } } + } + + if (input.length < currentWord.length) { + for (let i = input.length; i < currentWord.length; i++) { + if (currentWord[i] === "\t") { + ret += ``; + } else if (currentWord[i] === "\n") { + ret += ``; + } else { + ret += + `` + + currentWord[i] + + ""; + } + } + } } wordAtIndex.innerHTML = ret; if (newlineafter) $("#words").append("
"); @@ -477,7 +497,9 @@ export function updateModesNotice() { } catch {} $(".pageTest #testModesNotice").append( `
${ - Config.paceCaret === "average" + TestLogic.isPaceRepeat + ? "repeated" + : Config.paceCaret === "average" ? "average" : Config.paceCaret === "pb" ? "pb"