diff --git a/src/js/test/pace-caret.js b/src/js/test/pace-caret.js index d6e4af60a..00af76c62 100644 --- a/src/js/test/pace-caret.js +++ b/src/js/test/pace-caret.js @@ -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 ( diff --git a/src/js/test/test-logic.js b/src/js/test/test-logic.js index cc24e0713..8acb1f073 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; } @@ -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); diff --git a/src/js/test/test-ui.js b/src/js/test/test-ui.js index 54cfccaa8..ff32aa26e 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() { 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 = ``; + } 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("
"); @@ -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}` );