mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2025-10-24 23:07:25 +08:00
words mode now follows the same format as timed tests - only allowing 3 lines at once
This commit is contained in:
parent
8115dd041e
commit
31b2325b10
1 changed files with 80 additions and 71 deletions
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue