Merge pull request #6 from Miodec/master

updated repo
This commit is contained in:
UnrealApex 2021-03-16 08:03:20 -07:00 committed by GitHub
commit e5963ddb77
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 1198 additions and 1058 deletions

View file

@ -2012,6 +2012,9 @@ class Leaderboard {
logBoard() {
console.log(this.board);
}
getMinWpm() {
return this.board[this.board.length - 1].wpm;
}
removeDuplicates(insertedAt, uid) {
//return true if a better result is found
let found = false;
@ -2042,29 +2045,52 @@ class Leaderboard {
insert(a) {
let insertedAt = -1;
if (a.mode == this.mode && parseInt(a.mode2) === parseInt(this.mode2)) {
this.board.forEach((b, index) => {
if (insertedAt !== -1) return;
if (a.wpm === b.wpm) {
if (a.acc === b.acc) {
if (a.timestamp < b.timestamp) {
this.board.splice(index, 0, {
uid: a.uid,
name: a.name,
wpm: parseFloat(a.wpm),
raw: parseFloat(a.rawWpm),
acc: parseFloat(a.acc),
consistency: isNaN(parseInt(a.consistency))
? "-"
: parseInt(a.consistency),
mode: a.mode,
mode2: parseInt(a.mode2),
timestamp: a.timestamp,
hidden: a.hidden === undefined ? false : a.hidden,
});
insertedAt = index;
if (
this.board.length !== this.size ||
(this.board.length === this.size && a.wpm > this.getMinWpm())
) {
this.board.forEach((b, index) => {
if (insertedAt !== -1) return;
if (a.wpm === b.wpm) {
if (a.acc === b.acc) {
if (a.timestamp < b.timestamp) {
this.board.splice(index, 0, {
uid: a.uid,
name: a.name,
wpm: parseFloat(a.wpm),
raw: parseFloat(a.rawWpm),
acc: parseFloat(a.acc),
consistency: isNaN(parseInt(a.consistency))
? "-"
: parseInt(a.consistency),
mode: a.mode,
mode2: parseInt(a.mode2),
timestamp: a.timestamp,
hidden: a.hidden === undefined ? false : a.hidden,
});
insertedAt = index;
}
} else {
if (a.acc > b.acc) {
this.board.splice(index, 0, {
uid: a.uid,
name: a.name,
wpm: parseFloat(a.wpm),
raw: parseFloat(a.rawWpm),
acc: parseFloat(a.acc),
consistency: isNaN(parseInt(a.consistency))
? "-"
: parseInt(a.consistency),
mode: a.mode,
mode2: parseInt(a.mode2),
timestamp: a.timestamp,
hidden: a.hidden === undefined ? false : a.hidden,
});
insertedAt = index;
}
}
} else {
if (a.acc > b.acc) {
if (a.wpm > b.wpm) {
this.board.splice(index, 0, {
uid: a.uid,
name: a.name,
@ -2082,65 +2108,51 @@ class Leaderboard {
insertedAt = index;
}
}
} else {
if (a.wpm > b.wpm) {
this.board.splice(index, 0, {
uid: a.uid,
name: a.name,
wpm: parseFloat(a.wpm),
raw: parseFloat(a.rawWpm),
acc: parseFloat(a.acc),
consistency: isNaN(parseInt(a.consistency))
? "-"
: parseInt(a.consistency),
mode: a.mode,
mode2: parseInt(a.mode2),
timestamp: a.timestamp,
hidden: a.hidden === undefined ? false : a.hidden,
});
insertedAt = index;
});
if (this.board.length < this.size && insertedAt === -1) {
this.board.push({
uid: a.uid,
name: a.name,
wpm: parseFloat(a.wpm),
raw: parseFloat(a.rawWpm),
acc: parseFloat(a.acc),
consistency: isNaN(parseInt(a.consistency))
? "-"
: parseInt(a.consistency),
mode: a.mode,
mode2: parseInt(a.mode2),
timestamp: a.timestamp,
hidden: a.hidden === undefined ? false : a.hidden,
});
insertedAt = this.board.length - 1;
}
// console.log("before duplicate remove");
// console.log(this.board);
let newBest = false;
let foundAt = null;
if (insertedAt >= 0) {
// if (this.removeDuplicates(insertedAt, a.uid)) {
// insertedAt = -2;
// }
foundAt = this.removeDuplicates(insertedAt, a.uid);
if (foundAt >= insertedAt) {
//new better result
newBest = true;
}
}
});
if (this.board.length < this.size && insertedAt === -1) {
this.board.push({
uid: a.uid,
name: a.name,
wpm: parseFloat(a.wpm),
raw: parseFloat(a.rawWpm),
acc: parseFloat(a.acc),
consistency: isNaN(parseInt(a.consistency))
? "-"
: parseInt(a.consistency),
mode: a.mode,
mode2: parseInt(a.mode2),
timestamp: a.timestamp,
hidden: a.hidden === undefined ? false : a.hidden,
});
insertedAt = this.board.length - 1;
// console.log(this.board);
this.clipBoard();
return {
insertedAt: insertedAt,
newBest: newBest,
foundAt: foundAt,
};
} else {
return {
insertedAt: -999,
};
}
// console.log("before duplicate remove");
// console.log(this.board);
let newBest = false;
let foundAt = null;
if (insertedAt >= 0) {
// if (this.removeDuplicates(insertedAt, a.uid)) {
// insertedAt = -2;
// }
foundAt = this.removeDuplicates(insertedAt, a.uid);
if (foundAt >= insertedAt) {
//new better result
newBest = true;
}
}
// console.log(this.board);
this.clipBoard();
return {
insertedAt: insertedAt,
newBest: newBest,
foundAt: foundAt,
};
} else {
return {
insertedAt: -999,
@ -2373,69 +2385,86 @@ async function checkLeaderboards(
["15", "60"].includes(String(resultObj.mode2)) &&
resultObj.language === "english"
) {
return await db.runTransaction(async (t) => {
const lbdoc = await t.get(
db
.collection("leaderboards")
.where("mode", "==", String(resultObj.mode))
.where("mode2", "==", String(resultObj.mode2))
.where("type", "==", type)
);
let lbData;
let docid = `${String(resultObj.mode)}_${String(
resultObj.mode2
)}_${type}`;
if (lbdoc.docs.length === 0) {
console.log(
`no ${resultObj.mode} ${resultObj.mode2} ${type} leaderboard found - creating`
);
let toAdd = {
size: 20,
mode: String(resultObj.mode),
mode2: String(resultObj.mode2),
type: type,
};
t.set(
return db
.runTransaction(async (t) => {
const lbdoc = await t.get(
db
.collection("leaderboards")
.doc(
`${String(resultObj.mode)}_${String(resultObj.mode2)}_${type}`
),
toAdd
.where("mode", "==", String(resultObj.mode))
.where("mode2", "==", String(resultObj.mode2))
.where("type", "==", type)
);
lbData = toAdd;
} else {
lbData = lbdoc.docs[0].data();
}
let boardInfo = lbData;
let boardData = lbData.board;
let lb = new Leaderboard(
boardInfo.size,
resultObj.mode,
resultObj.mode2,
boardInfo.type,
boardData
);
let insertResult = lb.insert(resultObj);
let lbData;
let docid = `${String(resultObj.mode)}_${String(
resultObj.mode2
)}_${type}`;
if (lbdoc.docs.length === 0) {
console.log(
`no ${resultObj.mode} ${resultObj.mode2} ${type} leaderboard found - creating`
);
let toAdd = {
size: 20,
mode: String(resultObj.mode),
mode2: String(resultObj.mode2),
type: type,
};
t.set(
db
.collection("leaderboards")
.doc(
`${String(resultObj.mode)}_${String(resultObj.mode2)}_${type}`
),
toAdd
);
lbData = toAdd;
} else {
lbData = lbdoc.docs[0].data();
}
let boardInfo = lbData;
if (
boardInfo.minWpm === undefined ||
boardInfo.board.length !== boardInfo.size ||
(boardInfo.minWpm !== undefined &&
resultObj.wpm > boardInfo.minWpm &&
boardInfo.board.length === boardInfo.size)
) {
let boardData = lbData.board;
let lb = new Leaderboard(
boardInfo.size,
resultObj.mode,
resultObj.mode2,
boardInfo.type,
boardData
);
let insertResult = lb.insert(resultObj);
if (insertResult.insertedAt >= 0) {
//update the database here
// console.log(
// `leaderboard changed ${resultObj.mode} ${
// resultObj.mode2
// } ${type} - ${JSON.stringify(lb.board)}`
// );
t.update(db.collection("leaderboards").doc(docid), {
size: lb.size,
type: lb.type,
board: lb.board,
});
}
if (insertResult.insertedAt >= 0) {
t.update(db.collection("leaderboards").doc(docid), {
size: lb.size,
type: lb.type,
board: lb.board,
minWpm: lb.getMinWpm(),
});
}
return {
insertedAt: insertResult,
};
});
return {
insertedAt: insertResult,
};
} else {
//not above leaderboard minwpm
return {
insertedAt: -999,
};
}
})
.catch((error) => {
console.error(
`error in transaction checking leaderboards - ${error}`
);
return {
insertedAt: null,
};
});
} else {
return {
insertedAt: null,
@ -2559,13 +2588,13 @@ exports.scheduledFunctionCrontab = functions.pubsub
announceDailyLbResult(lbdata);
t = new Date();
db.collection("leaderboards_history")
.doc(
`${t.getUTCDate()}_${t.getUTCMonth()}_${t.getUTCFullYear()}_${
lbdata.mode
}_${lbdata.mode2}`
)
.set(lbdata);
// db.collection("leaderboards_history")
// .doc(
// `${t.getUTCDate()}_${t.getUTCMonth()}_${t.getUTCFullYear()}_${
// lbdata.mode
// }_${lbdata.mode2}`
// )
// .set(lbdata);
db.collection("leaderboards").doc(doc.id).set(
{
board: [],

View file

@ -110,6 +110,11 @@ const refactoredSrc = [
"./src/js/config-set.js",
"./src/js/test/focus.js",
"./src/js/account-icon.js",
"./src/js/test/practise-missed.js",
"./src/js/test/test-ui.js",
"./src/js/test/keymap.js",
"./src/js/test/live-wpm.js",
"./src/js/test/caps-warning.js",
];
//legacy files

View file

@ -467,7 +467,7 @@ function getAccountDataAndInit() {
AccountIcon.loading(false);
console.error(e);
Notifications.add(
"Error downloading user data - refresh to try again. Client likely could not connect to the backend, if error persists contact Miodec.",
"Error downloading user data. Client likely could not connect to the backend - refresh to try again. If error persists try clearing your cache and website data or contact Miodec.",
-1
);
$("#top #menu .account .icon").html('<i class="fas fa-fw fa-times"></i>');

View file

@ -446,6 +446,7 @@ let commands = {
id: "toggleKeymap",
display: "Change keymap mode...",
subgroup: true,
alias: "keyboard",
exec: () => {
currentCommands.push(commandsKeymapMode);
showCommandLine();
@ -454,6 +455,7 @@ let commands = {
{
id: "changeKeymapStyle",
display: "Change keymap style...",
alias: "keyboard",
subgroup: true,
exec: () => {
currentCommands.push(commandsKeymapStyle);
@ -463,6 +465,7 @@ let commands = {
{
id: "changeKeymapLayout",
display: "Change keymap layout...",
alias: "keyboard",
subgroup: true,
exec: () => {
currentCommands.push(commandsKeymapLayouts);
@ -590,17 +593,19 @@ let commands = {
restartTest(true);
},
available: () => {
return resultVisible;
return TestUI.resultVisible;
},
},
{
id: "practiceMissedWords",
display: "Practice missed words",
exec: () => {
initPractiseMissedWords();
PractiseMissed.init(setMode, restartTest);
},
available: () => {
return resultVisible && Object.keys(TestStats.missedWords).length > 0;
return (
TestUI.resultVisible && Object.keys(TestStats.missedWords).length > 0
);
},
},
{
@ -610,17 +615,17 @@ let commands = {
toggleResultWordsDisplay();
},
available: () => {
return resultVisible;
return TestUI.resultVisible;
},
},
{
id: "saveScreenshot",
display: "Save screenshot",
exec: () => {
copyResultToClipboard();
TestUI.screenshot();
},
available: () => {
return resultVisible;
return TestUI.resultVisible;
},
},
{
@ -1534,7 +1539,12 @@ function updateCommandsTagsList() {
DB.getSnapshot().tags.forEach((tag) => {
tag.active = false;
});
updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox);
TestUI.updateModesNotice(
sameWordset,
textHasTab,
paceCaret,
activeFunbox
);
saveActiveTagsToCookie();
},
});
@ -1554,7 +1564,7 @@ function updateCommandsTagsList() {
sticky: true,
exec: () => {
toggleTag(tag.id);
updateTestModesNotice(
TestUI.updateModesNotice(
sameWordset,
textHasTab,
paceCaret,

View file

@ -69,164 +69,30 @@ export function swapElements(
}
}
export function updateTestModesNotice(
sameWordset,
textHasTab,
paceCaret,
activeFunbox
) {
let anim = false;
if ($(".pageTest #testModesNotice").text() === "") anim = true;
$(".pageTest #testModesNotice").empty();
if (sameWordset) {
$(".pageTest #testModesNotice").append(
`<div class="text-button" function="restartTest()" style="color:var(--error-color);"><i class="fas fa-sync-alt"></i>repeated</div>`
);
}
if (textHasTab) {
$(".pageTest #testModesNotice").append(
`<div class="text-button"><i class="fas fa-long-arrow-alt-right"></i>shift + tab to restart</div>`
);
}
if (Config.mode === "zen") {
$(".pageTest #testModesNotice").append(
`<div class="text-button"><i class="fas fa-poll"></i>shift + enter to finish zen </div>`
);
}
// /^[0-9a-zA-Z_.-]+$/.test(name);
if (/_\d+k$/g.test(Config.language) && Config.mode !== "quote") {
$(".pageTest #testModesNotice").append(
`<div class="text-button" commands="commandsLanguages"><i class="fas fa-globe-americas"></i>${Config.language.replace(
/_/g,
" "
)}</div>`
);
}
if (Config.difficulty === "expert") {
$(".pageTest #testModesNotice").append(
`<div class="text-button" commands="commandsDifficulty"><i class="fas fa-star-half-alt"></i>expert</div>`
);
} else if (Config.difficulty === "master") {
$(".pageTest #testModesNotice").append(
`<div class="text-button" commands="commandsDifficulty"><i class="fas fa-star"></i>master</div>`
);
}
if (Config.blindMode) {
$(".pageTest #testModesNotice").append(
`<div class="text-button" function="toggleBlindMode()"><i class="fas fa-eye-slash"></i>blind</div>`
);
}
if (Config.paceCaret !== "off") {
let speed = "";
try {
speed = ` (${Math.round(paceCaret.wpm)} wpm)`;
} catch {}
$(".pageTest #testModesNotice").append(
`<div class="text-button" commands="commandsPaceCaret"><i class="fas fa-tachometer-alt"></i>${
Config.paceCaret === "average"
? "average"
: Config.paceCaret === "pb"
? "pb"
: "custom"
} pace${speed}</div>`
);
}
if (Config.minWpm !== "off") {
$(".pageTest #testModesNotice").append(
`<div class="text-button" commands="commandsMinWpm"><i class="fas fa-bomb"></i>min ${Config.minWpmCustomSpeed} wpm</div>`
);
}
if (Config.minAcc !== "off") {
$(".pageTest #testModesNotice").append(
`<div class="text-button" commands="commandsMinAcc"><i class="fas fa-bomb"></i>min ${Config.minAccCustom}% acc</div>`
);
}
if (activeFunbox !== "none") {
$(".pageTest #testModesNotice").append(
`<div class="text-button" commands="commandsFunbox"><i class="fas fa-gamepad"></i>${activeFunbox.replace(
/_/g,
" "
)}</div>`
);
}
if (Config.confidenceMode === "on") {
$(".pageTest #testModesNotice").append(
`<div class="text-button" commands="commandsConfidenceMode"><i class="fas fa-backspace"></i>confidence</div>`
);
}
if (Config.confidenceMode === "max") {
$(".pageTest #testModesNotice").append(
`<div class="text-button" commands="commandsConfidenceMode"><i class="fas fa-backspace"></i>max confidence</div>`
);
}
if (Config.stopOnError != "off") {
$(".pageTest #testModesNotice").append(
`<div class="text-button" commands="commandsStopOnError"><i class="fas fa-hand-paper"></i>stop on ${Config.stopOnError}</div>`
);
}
if (Config.layout !== "default") {
$(".pageTest #testModesNotice").append(
`<div class="text-button" commands="commandsLayouts"><i class="fas fa-keyboard"></i>${Config.layout}</div>`
);
}
if (Config.oppositeShiftMode === "on") {
$(".pageTest #testModesNotice").append(
`<div class="text-button" commands="commandsOppositeShiftMode"><i class="fas fa-exchange-alt"></i>opposite shift</div>`
);
}
let tagsString = "";
try {
DB.getSnapshot().tags.forEach((tag) => {
if (tag.active === true) {
tagsString += tag.name + ", ";
}
});
if (tagsString !== "") {
$(".pageTest #testModesNotice").append(
`<div class="text-button" commands="commandsTags"><i class="fas fa-tag"></i>${tagsString.substring(
0,
tagsString.length - 2
)}</div>`
);
}
} catch {}
if (anim) {
$(".pageTest #testModesNotice")
.css("transition", "none")
.css("opacity", 0)
.animate(
{
opacity: 1,
},
125,
() => {
$(".pageTest #testModesNotice").css("transition", ".125s");
}
);
}
}
export function focusWords() {
if (!$("#wordsWrapper").hasClass("hidden")) {
$("#wordsInput").focus();
}
}
export function updateKeytips() {
if (Config.swapEscAndTab) {
$(".pageSettings .tip").html(`
tip: You can also change all these settings quickly using the
command line (
<key>tab</key>
)`);
$("#bottom .keyTips").html(`
<key>esc</key> - restart test<br>
<key>tab</key> - command line`);
} else {
$(".pageSettings .tip").html(`
tip: You can also change all these settings quickly using the
command line (
<key>esc</key>
)`);
$("#bottom .keyTips").html(`
<key>tab</key> - restart test<br>
<key>esc</key> - command line`);
}
}

View file

@ -15,6 +15,7 @@ import {
swapElements,
updateTestModesNotice,
focusWords,
updateKeytips,
} from "./dom-util";
import * as Misc from "./misc";
import * as CloudFunctions from "./cloud-functions";
@ -38,3 +39,8 @@ import Config from "./config";
import * as ConfigSet from "./config-set";
import * as Focus from "./focus";
import * as AccountIcon from "./account-icon";
import * as PractiseMissed from "./practise-missed";
import * as TestUI from "./test-ui";
import * as Keymap from "./keymap";
import * as LiveWpm from "./live-wpm";
import * as CapsWarning from "./caps-warning";

File diff suppressed because it is too large Load diff

View file

@ -757,7 +757,7 @@ function toggleTag(tagid, nosave = false) {
}
}
});
updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox);
TestUI.updateModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox);
if (!nosave) saveActiveTagsToCookie();
}

View file

@ -0,0 +1,26 @@
import Config from "./config";
function show() {
if ($("#capsWarning").hasClass("hidden")) {
$("#capsWarning").removeClass("hidden");
}
}
function hide() {
if (!$("#capsWarning").hasClass("hidden")) {
$("#capsWarning").addClass("hidden");
}
}
$(document).keydown(function (event) {
try {
if (
!Config.capsLockBackspace &&
event.originalEvent.getModifierState("CapsLock")
) {
show();
} else {
hide();
}
} catch {}
});

View file

@ -27,9 +27,9 @@ export function hide() {
$("#caret").addClass("hidden");
}
export function show() {
export function show(currentInput) {
if ($("#result").hasClass("hidden")) {
updatePosition("");
updatePosition(currentInput);
$("#caret").removeClass("hidden");
startAnimation();
}

250
src/js/test/keymap.js Normal file
View file

@ -0,0 +1,250 @@
import Config from "./config";
import * as ThemeColors from "./theme-colors";
import layouts from "./layouts";
//TODO remove after wordslist and currentinput and current word index are in a module
export function highlightKey(currentKey) {
try {
if ($(".active-key") != undefined) {
$(".active-key").removeClass("active-key");
}
// var currentKey = wordsList[currentWordIndex]
// .substring(currentInput.length, currentInput.length + 1)
// .toString()
// .toUpperCase();
let highlightKey;
switch (currentKey) {
case "\\":
case "|":
highlightKey = "#KeyBackslash";
break;
case "}":
case "]":
highlightKey = "#KeyRightBracket";
break;
case "{":
case "[":
highlightKey = "#KeyLeftBracket";
break;
case '"':
case "'":
highlightKey = "#KeyQuote";
break;
case ":":
case ";":
highlightKey = "#KeySemicolon";
break;
case "<":
case ",":
highlightKey = "#KeyComma";
break;
case ">":
case ".":
highlightKey = "#KeyPeriod";
break;
case "?":
case "/":
highlightKey = "#KeySlash";
break;
case "":
highlightKey = "#KeySpace";
break;
default:
highlightKey = `#Key${currentKey}`;
}
$(highlightKey).addClass("active-key");
if (highlightKey === "#KeySpace") {
$("#KeySpace2").addClass("active-key");
}
} catch (e) {
console.log("could not update highlighted keymap key: " + e.message);
}
}
export function flashKey(key, correct) {
if (key == undefined) return;
switch (key) {
case "\\":
case "|":
key = "#KeyBackslash";
break;
case "}":
case "]":
key = "#KeyRightBracket";
break;
case "{":
case "[":
key = "#KeyLeftBracket";
break;
case '"':
case "'":
key = "#KeyQuote";
break;
case ":":
case ";":
key = "#KeySemicolon";
break;
case "<":
case ",":
key = "#KeyComma";
break;
case ">":
case ".":
key = "#KeyPeriod";
break;
case "?":
case "/":
key = "#KeySlash";
break;
case "" || "Space":
key = "#KeySpace";
break;
default:
key = `#Key${key.toUpperCase()}`;
}
if (key == "#KeySpace") {
key = ".key-split-space";
}
try {
if (correct || Config.blindMode) {
$(key)
.stop(true, true)
.css({
color: ThemeColors.bg,
backgroundColor: ThemeColors.main,
borderColor: ThemeColors.main,
})
.animate(
{
color: ThemeColors.sub,
backgroundColor: "transparent",
borderColor: ThemeColors.sub,
},
500,
"easeOutExpo"
);
} else {
$(key)
.stop(true, true)
.css({
color: ThemeColors.bg,
backgroundColor: ThemeColors.error,
borderColor: ThemeColors.error,
})
.animate(
{
color: ThemeColors.sub,
backgroundColor: "transparent",
borderColor: ThemeColors.sub,
},
500,
"easeOutExpo"
);
}
} catch (e) {}
}
export function hide() {
$(".keymap").addClass("hidden");
}
export function show() {
$(".keymap").removeClass("hidden");
}
//TODO remove setkeymaplayout after userconfig is a module
export function refreshKeys(layout, setKeymapLayout) {
try {
let lts = layouts[layout]; //layout to show
let layoutString = layout;
if (Config.keymapLayout === "overrideSync") {
if (Config.layout === "default") {
lts = layouts["qwerty"];
layoutString = "default";
} else {
lts = layouts[Config.layout];
layoutString = Config.layout;
}
}
if (lts.keymapShowTopRow) {
$(".keymap .r1").removeClass("hidden");
} else {
$(".keymap .r1").addClass("hidden");
}
$($(".keymap .r5 .keymap-key .letter")[0]).text(
layoutString.replace(/_/g, " ")
);
if (lts.iso) {
$(".keymap .r4 .keymap-key.first").removeClass("hidden-key");
} else {
$(".keymap .r4 .keymap-key.first").addClass("hidden-key");
}
var toReplace = lts.keys.slice(1, 48);
var count = 0;
$(".keymap .letter")
.map(function () {
if (count < toReplace.length) {
var key = toReplace[count].charAt(0);
this.innerHTML = key;
switch (key) {
case "\\":
case "|":
this.parentElement.id = "KeyBackslash";
break;
case "}":
case "]":
this.parentElement.id = "KeyRightBracket";
break;
case "{":
case "[":
this.parentElement.id = "KeyLeftBracket";
break;
case '"':
case "'":
this.parentElement.id = "KeyQuote";
break;
case ":":
case ";":
this.parentElement.id = "KeySemicolon";
break;
case "<":
case ",":
this.parentElement.id = "KeyComma";
break;
case ">":
case ".":
this.parentElement.id = "KeyPeriod";
break;
case "?":
case "/":
this.parentElement.id = "KeySlash";
break;
case "":
this.parentElement.id = "KeySpace";
break;
default:
this.parentElement.id = `Key${key.toUpperCase()}`;
}
}
count++;
// }
})
.get();
} catch (e) {
console.log(
"something went wrong when changing layout, resettings: " + e.message
);
setKeymapLayout("qwerty", true);
}
}

65
src/js/test/live-wpm.js Normal file
View file

@ -0,0 +1,65 @@
import Config from "./config";
export function update(wpm, raw) {
// if (!testActive || !Config.showLiveWpm) {
// hideLiveWpm();
// } else {
// showLiveWpm();
// }
let number = wpm;
if (Config.blindMode) {
number = raw;
}
if (Config.alwaysShowCPM) {
number = Math.round(number * 5);
}
document.querySelector("#miniTimerAndLiveWpm .wpm").innerHTML = number;
document.querySelector("#liveWpm").innerHTML = number;
}
export function show() {
if (!Config.showLiveWpm) return;
if (Config.timerStyle === "mini") {
// $("#miniTimerAndLiveWpm .wpm").css("opacity", Config.timerOpacity);
if (!$("#miniTimerAndLiveWpm .wpm").hasClass("hidden")) return;
$("#miniTimerAndLiveWpm .wpm")
.removeClass("hidden")
.css("opacity", 0)
.animate(
{
opacity: Config.timerOpacity,
},
125
);
} else {
// $("#liveWpm").css("opacity", Config.timerOpacity);
if (!$("#liveWpm").hasClass("hidden")) return;
$("#liveWpm").removeClass("hidden").css("opacity", 0).animate(
{
opacity: Config.timerOpacity,
},
125
);
}
}
export function hide() {
$("#liveWpm").animate(
{
opacity: Config.timerOpacity,
},
125,
() => {
$("#liveWpm").addClass("hidden");
}
);
$("#miniTimerAndLiveWpm .wpm").animate(
{
opacity: Config.timerOpacity,
},
125,
() => {
$("#miniTimerAndLiveWpm .wpm").addClass("hidden");
}
);
}

View file

@ -0,0 +1,49 @@
import * as TestStats from "./test-stats";
import * as Notifications from "./notification-center";
import Config from "./config";
import * as CustomText from "./custom-text";
//TODO remove after adding them to modules
let setMode;
let restartTest;
export let before = {
mode: null,
punctuation: null,
numbers: null,
};
export function init(setMode, restartTest) {
if (this.setMode === undefined) this.setMode = setMode;
if (this.restartTest === undefined) this.restartTest = restartTest;
if (Object.keys(TestStats.missedWords).length == 0) {
Notifications.add("You haven't missed any words.", 0);
return;
}
let mode = before.mode === null ? Config.mode : before.mode;
let punctuation =
before.punctuation === null ? Config.punctuation : before.punctuation;
let numbers = before.numbers === null ? Config.numbers : before.numbers;
setMode("custom");
let newCustomText = [];
Object.keys(TestStats.missedWords).forEach((missedWord) => {
for (let i = 0; i < TestStats.missedWords[missedWord]; i++) {
newCustomText.push(missedWord);
}
});
CustomText.setText(newCustomText);
CustomText.setIsWordRandom(true);
CustomText.setWord(50);
restartTest();
before.mode = mode;
before.punctuation = punctuation;
before.numbers = numbers;
}
export function resetBefore() {
before.mode = null;
before.punctuation = null;
before.numbers = null;
}

382
src/js/test/test-ui.js Normal file
View file

@ -0,0 +1,382 @@
import * as Notifications from "./notification-center";
import * as ThemeColors from "./theme-colors";
import Config from "./config";
import * as DB from "./config";
export let currentWordElementIndex = 0;
export let resultVisible = false;
export let activeWordTop = 0;
export let testRestarting = false;
export let lineTransition = false;
export let currentTestLine = 0;
export let resultCalculating = false;
export function setResultVisible(val) {
resultVisible = val;
}
export function setCurrentWordElementIndex(val) {
currentWordElementIndex = val;
}
export function setActiveWordTop(val) {
activeWordTop = val;
}
export function setTestRestarting(val) {
testRestarting = val;
}
export function setResultCalculating(val) {
resultCalculating = val;
}
export function reset() {
currentTestLine = 0;
currentWordElementIndex = 0;
}
export function updateActiveElement(backspace) {
let active = document.querySelector("#words .active");
if (Config.mode == "zen" && backspace) {
active.remove();
} else if (active !== null) {
if (Config.highlightMode == "word") {
active.querySelectorAll("letter").forEach((e) => {
e.classList.remove("correct");
});
}
active.classList.remove("active");
}
try {
let activeWord = document.querySelectorAll("#words .word")[
currentWordElementIndex
];
activeWord.classList.add("active");
activeWord.classList.remove("error");
activeWordTop = document.querySelector("#words .active").offsetTop;
if (Config.highlightMode == "word") {
activeWord.querySelectorAll("letter").forEach((e) => {
e.classList.add("correct");
});
}
} catch (e) {}
}
export function flipColors(tf) {
if (tf) {
$("#words").addClass("flipped");
} else {
$("#words").removeClass("flipped");
}
}
export function colorful(tc) {
if (tc) {
$("#words").addClass("colorfulMode");
} else {
$("#words").removeClass("colorfulMode");
}
}
export function screenshot() {
$(".pageTest .ssWatermark").removeClass("hidden");
$(".pageTest .buttons").addClass("hidden");
let src = $("#middle");
var sourceX = src.position().left; /*X position from div#target*/
var sourceY = src.position().top; /*Y position from div#target*/
var sourceWidth = src.width(); /*clientWidth/offsetWidth from div#target*/
var sourceHeight = src.height(); /*clientHeight/offsetHeight from div#target*/
$("#notificationCenter").addClass("hidden");
$("#commandLineMobileButton").addClass("hidden");
$(".pageTest .loginTip").addClass("hidden");
try {
html2canvas(document.body, {
backgroundColor: ThemeColors.bg,
height: sourceHeight + 50,
width: sourceWidth + 50,
x: sourceX - 25,
y: sourceY - 25,
}).then(function (canvas) {
canvas.toBlob(function (blob) {
try {
if (navigator.userAgent.toLowerCase().indexOf("firefox") > -1) {
open(URL.createObjectURL(blob));
$("#notificationCenter").removeClass("hidden");
$("#commandLineMobileButton").removeClass("hidden");
$(".pageTest .ssWatermark").addClass("hidden");
$(".pageTest .buttons").removeClass("hidden");
if (firebase.auth().currentUser == null)
$(".pageTest .loginTip").removeClass("hidden");
} else {
navigator.clipboard
.write([
new ClipboardItem(
Object.defineProperty({}, blob.type, {
value: blob,
enumerable: true,
})
),
])
.then(() => {
$("#notificationCenter").removeClass("hidden");
$("#commandLineMobileButton").removeClass("hidden");
Notifications.add("Copied to clipboard", 1, 2);
$(".pageTest .ssWatermark").addClass("hidden");
$(".pageTest .buttons").removeClass("hidden");
if (firebase.auth().currentUser == null)
$(".pageTest .loginTip").removeClass("hidden");
});
}
} catch (e) {
$("#notificationCenter").removeClass("hidden");
$("#commandLineMobileButton").removeClass("hidden");
Notifications.add(
"Error saving image to clipboard: " + e.message,
-1
);
$(".pageTest .ssWatermark").addClass("hidden");
$(".pageTest .buttons").removeClass("hidden");
if (firebase.auth().currentUser == null)
$(".pageTest .loginTip").removeClass("hidden");
}
});
});
} catch (e) {
$("#notificationCenter").removeClass("hidden");
$("#commandLineMobileButton").removeClass("hidden");
Notifications.add("Error creating image: " + e.message, -1);
$(".pageTest .ssWatermark").addClass("hidden");
$(".pageTest .buttons").removeClass("hidden");
if (firebase.auth().currentUser == null)
$(".pageTest .loginTip").removeClass("hidden");
}
}
export function lineJump(currentTop) {
//last word of the line
if (currentTestLine > 0) {
let hideBound = currentTop;
let toHide = [];
let wordElements = $("#words .word");
for (let i = 0; i < currentWordElementIndex; i++) {
if ($(wordElements[i]).hasClass("hidden")) continue;
let forWordTop = Math.floor(wordElements[i].offsetTop);
if (forWordTop < hideBound - 10) {
toHide.push($($("#words .word")[i]));
}
}
const wordHeight = $(document.querySelector(".word")).outerHeight(true);
if (Config.smoothLineScroll && toHide.length > 0) {
lineTransition = true;
$("#words").prepend(
`<div class="smoothScroller" style="position: fixed;height:${wordHeight}px;width:100%"></div>`
);
$("#words .smoothScroller").animate(
{
height: 0,
},
125,
() => {
$("#words .smoothScroller").remove();
}
);
$("#paceCaret").animate(
{
top: document.querySelector("#paceCaret").offsetTop - wordHeight,
},
125
);
$("#words").animate(
{
marginTop: `-${wordHeight}px`,
},
125,
() => {
activeWordTop = document.querySelector("#words .active").offsetTop;
currentWordElementIndex -= toHide.length;
lineTransition = false;
toHide.forEach((el) => el.remove());
$("#words").css("marginTop", "0");
}
);
} else {
toHide.forEach((el) => el.remove());
currentWordElementIndex -= toHide.length;
$("#paceCaret").css({
top: document.querySelector("#paceCaret").offsetTop - wordHeight,
});
}
}
currentTestLine++;
}
export function updateModesNotice(
sameWordset,
textHasTab,
paceCaret,
activeFunbox
) {
let anim = false;
if ($(".pageTest #testModesNotice").text() === "") anim = true;
$(".pageTest #testModesNotice").empty();
if (sameWordset) {
$(".pageTest #testModesNotice").append(
`<div class="text-button" function="restartTest()" style="color:var(--error-color);"><i class="fas fa-sync-alt"></i>repeated</div>`
);
}
if (textHasTab) {
$(".pageTest #testModesNotice").append(
`<div class="text-button"><i class="fas fa-long-arrow-alt-right"></i>shift + tab to restart</div>`
);
}
if (Config.mode === "zen") {
$(".pageTest #testModesNotice").append(
`<div class="text-button"><i class="fas fa-poll"></i>shift + enter to finish zen </div>`
);
}
// /^[0-9a-zA-Z_.-]+$/.test(name);
if (/_\d+k$/g.test(Config.language) && Config.mode !== "quote") {
$(".pageTest #testModesNotice").append(
`<div class="text-button" commands="commandsLanguages"><i class="fas fa-globe-americas"></i>${Config.language.replace(
/_/g,
" "
)}</div>`
);
}
if (Config.difficulty === "expert") {
$(".pageTest #testModesNotice").append(
`<div class="text-button" commands="commandsDifficulty"><i class="fas fa-star-half-alt"></i>expert</div>`
);
} else if (Config.difficulty === "master") {
$(".pageTest #testModesNotice").append(
`<div class="text-button" commands="commandsDifficulty"><i class="fas fa-star"></i>master</div>`
);
}
if (Config.blindMode) {
$(".pageTest #testModesNotice").append(
`<div class="text-button" function="toggleBlindMode()"><i class="fas fa-eye-slash"></i>blind</div>`
);
}
if (Config.paceCaret !== "off") {
let speed = "";
try {
speed = ` (${Math.round(paceCaret.wpm)} wpm)`;
} catch {}
$(".pageTest #testModesNotice").append(
`<div class="text-button" commands="commandsPaceCaret"><i class="fas fa-tachometer-alt"></i>${
Config.paceCaret === "average"
? "average"
: Config.paceCaret === "pb"
? "pb"
: "custom"
} pace${speed}</div>`
);
}
if (Config.minWpm !== "off") {
$(".pageTest #testModesNotice").append(
`<div class="text-button" commands="commandsMinWpm"><i class="fas fa-bomb"></i>min ${Config.minWpmCustomSpeed} wpm</div>`
);
}
if (Config.minAcc !== "off") {
$(".pageTest #testModesNotice").append(
`<div class="text-button" commands="commandsMinAcc"><i class="fas fa-bomb"></i>min ${Config.minAccCustom}% acc</div>`
);
}
if (activeFunbox !== "none") {
$(".pageTest #testModesNotice").append(
`<div class="text-button" commands="commandsFunbox"><i class="fas fa-gamepad"></i>${activeFunbox.replace(
/_/g,
" "
)}</div>`
);
}
if (Config.confidenceMode === "on") {
$(".pageTest #testModesNotice").append(
`<div class="text-button" commands="commandsConfidenceMode"><i class="fas fa-backspace"></i>confidence</div>`
);
}
if (Config.confidenceMode === "max") {
$(".pageTest #testModesNotice").append(
`<div class="text-button" commands="commandsConfidenceMode"><i class="fas fa-backspace"></i>max confidence</div>`
);
}
if (Config.stopOnError != "off") {
$(".pageTest #testModesNotice").append(
`<div class="text-button" commands="commandsStopOnError"><i class="fas fa-hand-paper"></i>stop on ${Config.stopOnError}</div>`
);
}
if (Config.layout !== "default") {
$(".pageTest #testModesNotice").append(
`<div class="text-button" commands="commandsLayouts"><i class="fas fa-keyboard"></i>${Config.layout}</div>`
);
}
if (Config.oppositeShiftMode === "on") {
$(".pageTest #testModesNotice").append(
`<div class="text-button" commands="commandsOppositeShiftMode"><i class="fas fa-exchange-alt"></i>opposite shift</div>`
);
}
let tagsString = "";
try {
DB.getSnapshot().tags.forEach((tag) => {
if (tag.active === true) {
tagsString += tag.name + ", ";
}
});
if (tagsString !== "") {
$(".pageTest #testModesNotice").append(
`<div class="text-button" commands="commandsTags"><i class="fas fa-tag"></i>${tagsString.substring(
0,
tagsString.length - 2
)}</div>`
);
}
} catch {}
if (anim) {
$(".pageTest #testModesNotice")
.css("transition", "none")
.css("opacity", 0)
.animate(
{
opacity: 1,
},
125,
() => {
$(".pageTest #testModesNotice").css("transition", ".125s");
}
);
}
}
export function arrangeCharactersRightToLeft() {
$("#words").addClass("rightToLeftTest");
}
export function arrangeCharactersLeftToRight() {
$("#words").removeClass("rightToLeftTest");
}
$(document.body).on("click", "#copyResultToClipboardButton", () => {
screenshot();
});

View file

@ -140,7 +140,7 @@ function setDifficulty(diff, nosave) {
}
ConfigSet.difficulty(diff);
if (!nosave) restartTest(false, nosave);
updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox);
TestUI.updateModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox);
if (!nosave) saveConfigToCookie();
}
@ -160,7 +160,7 @@ function toggleBlindMode() {
blind = false;
}
ConfigSet.blindMode(blind);
updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox);
TestUI.updateModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox);
saveConfigToCookie();
}
@ -169,7 +169,7 @@ function setBlindMode(blind, nosave) {
blind = false;
}
ConfigSet.blindMode(blind);
updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox);
TestUI.updateModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox);
if (!nosave) saveConfigToCookie();
}
@ -237,7 +237,7 @@ function setStopOnError(soe, nosave) {
if (Config.stopOnError !== "off") {
ConfigSet.confidenceMode("off");
}
updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox);
TestUI.updateModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox);
if (!nosave) saveConfigToCookie();
}
@ -314,7 +314,7 @@ function setPaceCaret(val, nosave) {
// val = "off";
// }
ConfigSet.paceCaret(val);
updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox);
TestUI.updateModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox);
initPaceCaret(nosave);
if (!nosave) saveConfigToCookie();
}
@ -333,7 +333,7 @@ function setMinWpm(minwpm, nosave) {
minwpm = "off";
}
ConfigSet.minWpm(minwpm);
updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox);
TestUI.updateModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox);
if (!nosave) saveConfigToCookie();
}
@ -351,7 +351,7 @@ function setMinAcc(min, nosave) {
min = "off";
}
ConfigSet.minAcc(min);
updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox);
TestUI.updateModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox);
if (!nosave) saveConfigToCookie();
}
@ -450,13 +450,13 @@ function setFlipTestColors(flip, nosave) {
flip = false;
}
ConfigSet.flipTestColors(flip);
flipTestColors(flip);
TestUI.flipColors(flip);
if (!nosave) saveConfigToCookie();
}
function toggleFlipTestColors() {
ConfigSet.flipTestColors(!Config.flipTestColors);
flipTestColors(Config.flipTestColors);
TestUI.flipColors(Config.flipTestColors);
saveConfigToCookie();
}
@ -466,13 +466,13 @@ function setColorfulMode(extra, nosave) {
extra = false;
}
ConfigSet.colorfulMode(extra);
applyColorfulMode(extra);
TestUI.colorful(extra);
if (!nosave) saveConfigToCookie();
}
function toggleColorfulMode() {
ConfigSet.colorfulMode(!Config.colorfulMode);
applyColorfulMode(Config.colorfulMode);
TestUI.colorful(Config.colorfulMode);
saveConfigToCookie();
}
@ -586,11 +586,21 @@ function setShowLiveWpm(live, nosave) {
live = false;
}
ConfigSet.showLiveWpm(live);
if (live) {
LiveWpm.show();
} else {
LiveWpm.hide();
}
if (!nosave) saveConfigToCookie();
}
function toggleShowLiveWpm() {
ConfigSet.showLiveWpm(!Config.showLiveWpm);
if (Config.showLiveWpm) {
LiveWpm.show();
} else {
LiveWpm.hide();
}
saveConfigToCookie();
}
@ -953,7 +963,7 @@ function setConfidenceMode(cm, nosave) {
ConfigSet.stopOnError("off");
}
updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox);
TestUI.updateModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox);
if (!nosave) saveConfigToCookie();
}
@ -1085,9 +1095,9 @@ function setLayout(layout, nosave) {
layout = "qwerty";
}
ConfigSet.layout(layout);
updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox);
TestUI.updateModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox);
if (Config.keymapLayout === "overrideSync") {
refreshKeymapKeys(Config.keymapLayout);
Keymap.refreshKeys(Config.keymapLayout, setKeymapLayout);
}
if (!nosave) saveConfigToCookie();
}
@ -1131,109 +1141,15 @@ function setKeymapStyle(style, nosave) {
if (!nosave) saveConfigToCookie();
}
function keymapShowIsoKey(tf) {
if (tf) {
$(".keymap .r4 .keymap-key.first").removeClass("hidden-key");
} else {
$(".keymap .r4 .keymap-key.first").addClass("hidden-key");
}
}
function setKeymapLayout(layout, nosave) {
if (layout == null || layout == undefined) {
layout = "qwerty";
}
ConfigSet.keymapLayout(layout);
refreshKeymapKeys(layout);
Keymap.refreshKeys(layout, setKeymapLayout);
if (!nosave) saveConfigToCookie();
}
function refreshKeymapKeys(layout) {
try {
let lts = layouts[layout]; //layout to show
let layoutString = layout;
if (Config.keymapLayout === "overrideSync") {
if (Config.layout === "default") {
lts = layouts["qwerty"];
layoutString = "default";
} else {
lts = layouts[Config.layout];
layoutString = Config.layout;
}
}
if (lts.keymapShowTopRow) {
$(".keymap .r1").removeClass("hidden");
} else {
$(".keymap .r1").addClass("hidden");
}
$($(".keymap .r5 .keymap-key .letter")[0]).text(
layoutString.replace(/_/g, " ")
);
keymapShowIsoKey(lts.iso);
var toReplace = lts.keys.slice(1, 48);
var count = 0;
$(".keymap .letter")
.map(function () {
if (count < toReplace.length) {
var key = toReplace[count].charAt(0);
this.innerHTML = key;
switch (key) {
case "\\":
case "|":
this.parentElement.id = "KeyBackslash";
break;
case "}":
case "]":
this.parentElement.id = "KeyRightBracket";
break;
case "{":
case "[":
this.parentElement.id = "KeyLeftBracket";
break;
case '"':
case "'":
this.parentElement.id = "KeyQuote";
break;
case ":":
case ";":
this.parentElement.id = "KeySemicolon";
break;
case "<":
case ",":
this.parentElement.id = "KeyComma";
break;
case ">":
case ".":
this.parentElement.id = "KeyPeriod";
break;
case "?":
case "/":
this.parentElement.id = "KeySlash";
break;
case "":
this.parentElement.id = "KeySpace";
break;
default:
this.parentElement.id = `Key${key.toUpperCase()}`;
}
}
count++;
// }
})
.get();
} catch (e) {
console.log(
"something went wrong when changing layout, resettings: " + e.message
);
setKeymapLayout("qwerty", true);
}
}
function setFontSize(fontSize, nosave) {
if (fontSize == null || fontSize == undefined) {
fontSize = 1;
@ -1529,5 +1445,5 @@ function applyConfig(configObj) {
$("#nitropay_ad_about").remove();
}
}
updateTestModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox);
TestUI.updateModesNotice(sameWordset, textHasTab, paceCaret, activeFunbox);
}

View file

@ -620,7 +620,7 @@
"caldo",
"estero",
"largo",
"pricipale",
"principale",
"verde",
"romano",
"umano",

View file

@ -136,13 +136,13 @@
"momento",
"millones",
"esto",
"españa",
"España",
"hombre",
"están",
"pues",
"hoy",
"lugar",
"madrid",
"Madrid",
"nacional",
"trabajo",
"otras",
@ -185,7 +185,7 @@
"fueron",
"mujer",
"frente",
"josé",
"José",
"tras",
"cosas",
"fin",
@ -198,7 +198,7 @@
"será",
"historia",
"muchos",
"juan",
"Juan",
"tipo",
"cuatro",
"dentro",
@ -262,7 +262,7 @@
"modo",
"problemas",
"cinco",
"carlos",
"Carlos",
"hombres",
"información",
"ojos",
@ -295,7 +295,7 @@
"junto",
"cabeza",
"aquel",
"luis",
"Luis",
"cuanto",
"tierra",
"equipo",
@ -355,7 +355,7 @@
"puesto",
"ahí",
"propia",
"m",
"temerario",
"libro",
"igual",
"político",
@ -366,7 +366,7 @@
"creo",
"tengo",
"dios",
"c",
"petróleo",
"española",
"condiciones",
"méxico",
@ -392,7 +392,7 @@
"saber",
"obras",
"razón",
"ex",
"paragüero",
"niños",
"presencia",
"tema",
@ -487,7 +487,7 @@
"resultados",
"educación",
"atención",
"gonzález",
"González",
"capacidad",
"efecto",
"necesario",
@ -567,15 +567,15 @@
"cuales",
"contrario",
"manuel",
"garcía",
"García",
"fuerte",
"sol",
"jóvenes",
"apoyo",
"habría",
"civil",
"miguel",
"pedro",
"Miguel",
"Pedro",
"partidos",
"libre",
"fuentes",
@ -585,7 +585,7 @@
"cine",
"salir",
"comunicación",
"b",
"metalingüística",
"experiencia",
"demasiado",
"plan",
@ -614,12 +614,12 @@
"color",
"actividades",
"mesa",
"p",
"ferretería",
"decía",
"cuyo",
"debido",
"alta",
"francisco",
"Francisco",
"secretario",
"objeto",
"quizá",
@ -691,7 +691,7 @@
"radio",
"puedo",
"crecimiento",
"francia",
"Francia",
"compañía",
"amigo",
"autoridades",
@ -702,7 +702,7 @@
"ve",
"derecha",
"ambiente",
"i",
"triptongo",
"habrá",
"precisamente",
"enfermedad",
@ -730,7 +730,7 @@
"baja",
"artículo",
"principales",
"fernando",
"Fernando",
"metros",
"marcha",
"régimen",
@ -753,7 +753,7 @@
"actitud",
"deja",
"dejó",
"d",
"avión",
"llevar",
"negro",
"texto",
@ -774,7 +774,7 @@
"carrera",
"cierta",
"sola",
"psoe",
"PSOE",
"lejos",
"juez",
"características",
@ -802,7 +802,7 @@
"conciencia",
"tenían",
"atrás",
"felipe",
"Felipe",
"creación",
"chile",
"precio",
@ -851,7 +851,7 @@
"u",
"hija",
"sueño",
"parís",
"París",
"capaz",
"ocasión",
"industria",
@ -900,20 +900,20 @@
"cama",
"aun",
"presenta",
"pp",
"PP",
"revolución",
"busca",
"abril",
"rodríguez",
"Rodríguez",
"fiscal",
"lópez",
"López",
"victoria",
"violencia",
"primeras",
"pequeña",
"armas",
"debía",
"ii",
"vehículo",
"esfuerzo",
"humana",
"posibilidades",
@ -928,7 +928,7 @@
"carne",
"llama",
"particular",
"jorge",
"Jorge",
"trabajar",
"propuesta",
"muerto",
@ -951,7 +951,7 @@
"sistemas",
"encuentran",
"siguientes",
"martín",
"Martín",
"suficiente",
"marzo",
"propios",
@ -973,7 +973,7 @@
"generales",
"septiembre",
"blanca",
"r",
"auricular",
"aquellas",
"teoría",
"animales",
@ -985,7 +985,7 @@
"conseguir",
"máximo",
"noviembre",
"j",
"trapo",
"líder",
"hospital",
"diversas",
@ -998,7 +998,7 @@
"niveles",
"afirmó",
"explicó",
"n",
"adorable",
"somos",
"términos",
"premio",

View file

@ -500,7 +500,7 @@
"id": 82
},
{
"text": "Populär ist der Text nicht, aber bedeutend: Das Grundgesetz ist das wichtigste Dokument unseres demokratischen Selbstverständnisses und die freiheitlichste Verfassung, die Deutschland in seiner Geschichte je hatte. Dass unsere Verfassung Grundgesetz heißt, ist Ausdruck der Teilung Deutschlands nach dem Zweiten Weltkrieg. Der Begriff Grundgesetz betonte den offenen, provisorischen Charakter der Bestimmungen, an deren Formulierung mitzuwirken Vertretern der sowjetischen Besatzungszone damals versagt war. Darum wurde in einem eigenen Artikel 146 ausdrücklich festgelegt, dass dieses Provisorium seine Gültigkeit verliert, sobald eine vom gesamten deutschen Volk in freier Entscheidung beschlossene Verfassung vorlieg.t Das ursprünglich provisorisch gemeinte Grundgesetz ist heute, nach dem Beitritt der neuen Länder zur Bundesrepublik Deutschland 1990, die unbestrittene Grundlage der politischen Verfassung des Landes im Sinne einer freiheitlich-demokratischen Gesellschaft geworden.",
"text": "Populär ist der Text nicht, aber bedeutend: Das Grundgesetz ist das wichtigste Dokument unseres demokratischen Selbstverständnisses und die freiheitlichste Verfassung, die Deutschland in seiner Geschichte je hatte. Dass unsere Verfassung Grundgesetz heißt, ist Ausdruck der Teilung Deutschlands nach dem Zweiten Weltkrieg. Der Begriff Grundgesetz betonte den offenen, provisorischen Charakter der Bestimmungen, an deren Formulierung mitzuwirken Vertretern der sowjetischen Besatzungszone damals versagt war. Darum wurde in einem eigenen Artikel 146 ausdrücklich festgelegt, dass dieses Provisorium seine Gültigkeit verliert, sobald eine vom gesamten deutschen Volk in freier Entscheidung beschlossene Verfassung vorliegt. Das ursprünglich provisorisch gemeinte Grundgesetz ist heute, nach dem Beitritt der neuen Länder zur Bundesrepublik Deutschland 1990, die unbestrittene Grundlage der politischen Verfassung des Landes im Sinne einer freiheitlich-demokratischen Gesellschaft geworden.",
"source": "Grundgesetz: Geleitwort Prof. Dr. Norbert Lammert",
"length": 987,
"id": 83