words mode now follows the same format as timed tests - only allowing 3 lines at once

This commit is contained in:
Jack 2020-07-13 15:53:12 +01:00
parent 8115dd041e
commit 31b2325b10

View file

@ -300,7 +300,11 @@ function initWords() {
}
if (config.mode == "time" || config.mode == "words") {
let wordsBound = config.mode == "time" ? 60 : config.words;
// let wordsBound = config.mode == "time" ? 60 : config.words;
let wordsBound = 60;
if (config.mode === "words" && config.words < wordsBound) {
wordsBound = config.words;
}
for (let i = 0; i < wordsBound; i++) {
randomWord = language[Math.floor(Math.random() * language.length)];
previousWord = wordsList[i - 1];
@ -462,6 +466,11 @@ function punctuateWord(previousWord, currentWord, index, maxindex) {
}
function addWord() {
if (
wordsList.length - inputHistory.length > 60 ||
(config.mode === "words" && wordsList.length >= config.words)
)
return;
let language = words[config.language];
let randomWord = language[Math.floor(Math.random() * language.length)];
previousWord = wordsList[wordsList.length - 1];
@ -488,35 +497,35 @@ function addWord() {
function showWords() {
$("#words").empty();
if (
config.mode == "words" ||
config.mode == "custom" ||
config.mode == "quote"
) {
$("#words").css("height", "auto");
for (let i = 0; i < wordsList.length; i++) {
let w = "<div class='word'>";
for (let c = 0; c < wordsList[i].length; c++) {
w += "<letter>" + wordsList[i].charAt(c) + "</letter>";
}
w += "</div>";
$("#words").append(w);
// if (
// config.mode == "words" ||
// config.mode == "custom" ||
// config.mode == "quote"
// ) {
// $("#words").css("height", "auto");
// for (let i = 0; i < wordsList.length; i++) {
// let w = "<div class='word'>";
// for (let c = 0; c < wordsList[i].length; c++) {
// w += "<letter>" + wordsList[i].charAt(c) + "</letter>";
// }
// w += "</div>";
// $("#words").append(w);
// }
// } else if (config.mode == "time") {
for (let i = 0; i < wordsList.length; i++) {
let w = "<div class='word'>";
for (let c = 0; c < wordsList[i].length; c++) {
w += "<letter>" + wordsList[i].charAt(c) + "</letter>";
}
} else if (config.mode == "time") {
for (let i = 0; i < wordsList.length; i++) {
let w = "<div class='word'>";
for (let c = 0; c < wordsList[i].length; c++) {
w += "<letter>" + wordsList[i].charAt(c) + "</letter>";
}
w += "</div>";
$("#words").append(w);
}
$("#words").removeClass("hidden");
const wordHeight = $($(".word")[0]).outerHeight(true);
$("#words")
.css("height", wordHeight * 3 + "px")
.css("overflow", "hidden");
w += "</div>";
$("#words").append(w);
}
$("#words").removeClass("hidden");
const wordHeight = $($(".word")[0]).outerHeight(true);
$("#words")
.css("height", wordHeight * 3 + "px")
.css("overflow", "hidden");
// }
updateActiveElement();
updateCaretPosition();
}
@ -840,17 +849,17 @@ function updateCaretPosition() {
duration
);
let browserHeight = window.innerHeight;
let middlePos = browserHeight / 2 - $("#caret").outerHeight() / 2;
let contentHeight = document.body.scrollHeight;
// let browserHeight = window.innerHeight;
// let middlePos = browserHeight / 2 - $("#caret").outerHeight() / 2;
// let contentHeight = document.body.scrollHeight;
if (newTop >= middlePos && contentHeight > browserHeight) {
window.scrollTo({
left: 0,
top: newTop - middlePos,
behavior: "smooth",
});
}
// if (newTop >= middlePos && contentHeight > browserHeight) {
// window.scrollTo({
// left: 0,
// top: newTop - middlePos,
// behavior: "smooth",
// });
// }
} catch (e) {}
}
@ -2546,41 +2555,41 @@ $(document).keydown((event) => {
if (currentInput == "") return;
event.preventDefault();
let currentWord = wordsList[currentWordIndex];
if (config.mode == "time") {
// let currentTop = Math.floor($($("#words .word")[currentWordIndex]).position().top);
// let nextTop = Math.floor($($("#words .word")[currentWordIndex + 1]).position().top);
let currentTop = Math.floor(
document.querySelectorAll("#words .word")[currentWordIndex].offsetTop
);
let nextTop = Math.floor(
document.querySelectorAll("#words .word")[currentWordIndex + 1]
.offsetTop
);
if (nextTop > currentTop || activeWordJumped) {
//last word of the line
if (currentTestLine > 0) {
let hideBound = currentTop;
if (activeWordJumped) {
hideBound = activeWordTopBeforeJump;
}
activeWordJumped = false;
let toHide = [];
let wordElements = $("#words .word");
for (let i = 0; i < currentWordIndex + 1; i++) {
if ($(wordElements[i]).hasClass("hidden")) continue;
// let forWordTop = Math.floor($(wordElements[i]).position().top);
let forWordTop = Math.floor(wordElements[i].offsetTop);
if (forWordTop < hideBound) {
// $($("#words .word")[i]).addClass("hidden");
toHide.push($($("#words .word")[i]));
}
}
toHide.forEach((el) => el.addClass("hidden"));
// if (config.mode == "time") {
// let currentTop = Math.floor($($("#words .word")[currentWordIndex]).position().top);
// let nextTop = Math.floor($($("#words .word")[currentWordIndex + 1]).position().top);
let currentTop = Math.floor(
document.querySelectorAll("#words .word")[currentWordIndex].offsetTop
);
let nextTop = Math.floor(
document.querySelectorAll("#words .word")[currentWordIndex + 1]
.offsetTop
);
if (nextTop > currentTop || activeWordJumped) {
//last word of the line
if (currentTestLine > 0) {
let hideBound = currentTop;
if (activeWordJumped) {
hideBound = activeWordTopBeforeJump;
}
currentTestLine++;
activeWordJumped = false;
let toHide = [];
let wordElements = $("#words .word");
for (let i = 0; i < currentWordIndex + 1; i++) {
if ($(wordElements[i]).hasClass("hidden")) continue;
// let forWordTop = Math.floor($(wordElements[i]).position().top);
let forWordTop = Math.floor(wordElements[i].offsetTop);
if (forWordTop < hideBound) {
// $($("#words .word")[i]).addClass("hidden");
toHide.push($($("#words .word")[i]));
}
}
toHide.forEach((el) => el.addClass("hidden"));
}
currentTestLine++;
}
// }
if (config.blindMode) $("#words .word.active letter").addClass("correct");
document
.querySelector("#words .word.active")
@ -2624,7 +2633,7 @@ $(document).keydown((event) => {
) {
updateTimer();
}
if (config.mode == "time") {
if (config.mode == "time" || config.mode == "words") {
addWord();
}
}