mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2025-10-06 13:40:16 +08:00
Merge branch 'master' into mongo
This commit is contained in:
commit
c5aace859d
24 changed files with 1704 additions and 342 deletions
|
@ -86,7 +86,7 @@ The installation process of NodeJS is fairly simple, navigate to the NodeJS [web
|
|||
Once you have completed the above steps, you are ready to build and run Monkeytype.
|
||||
|
||||
1. Run `npm install` in the project root directory to install dependencies.
|
||||
1. Run `npm run start:dev` to start a local dev server on [port 5000](http://localhost:5000). It will watch for changes and rebuild when you edit files in `src/` or `public/` directories. Use <kbd>Ctrl+ C</kbd> to abort it.
|
||||
1. Run `npm run start:dev` to start a local dev server on [port 5000](http://localhost:5000). It will watch for changes and rebuild when you edit files in `src/` or `public/` directories. Use <kbd>Ctrl+C</kbd> to abort it.
|
||||
- Run `firebase use {your-project-id}` if you run into any errors for this.
|
||||
|
||||
### Standards and Guidelines
|
||||
|
|
|
@ -19,6 +19,15 @@ import * as AllTimeStats from "./all-time-stats";
|
|||
import * as PbTables from "./pb-tables";
|
||||
import axiosInstance from "./axios-instance";
|
||||
|
||||
let filterDebug = false;
|
||||
//toggle filterdebug
|
||||
export function toggleFilterDebug() {
|
||||
filterDebug = !filterDebug;
|
||||
if (filterDebug) {
|
||||
console.log("filterDebug is on");
|
||||
}
|
||||
}
|
||||
|
||||
export async function getDataAndInit() {
|
||||
try {
|
||||
await DB.initSnapshot();
|
||||
|
@ -370,20 +379,37 @@ export function update() {
|
|||
if (resdiff == undefined) {
|
||||
resdiff = "normal";
|
||||
}
|
||||
if (!ResultFilters.getFilter("difficulty", resdiff)) return;
|
||||
if (!ResultFilters.getFilter("mode", result.mode)) return;
|
||||
if (!ResultFilters.getFilter("difficulty", resdiff)) {
|
||||
if (filterDebug)
|
||||
console.log(`skipping result due to difficulty filter`, result);
|
||||
return;
|
||||
}
|
||||
if (!ResultFilters.getFilter("mode", result.mode)) {
|
||||
if (filterDebug)
|
||||
console.log(`skipping result due to mode filter`, result);
|
||||
return;
|
||||
}
|
||||
|
||||
if (result.mode == "time") {
|
||||
let timefilter = "custom";
|
||||
if ([15, 30, 60, 120].includes(parseInt(result.mode2))) {
|
||||
timefilter = result.mode2;
|
||||
}
|
||||
if (!ResultFilters.getFilter("time", timefilter)) return;
|
||||
if (!ResultFilters.getFilter("time", timefilter)) {
|
||||
if (filterDebug)
|
||||
console.log(`skipping result due to time filter`, result);
|
||||
return;
|
||||
}
|
||||
} else if (result.mode == "words") {
|
||||
let wordfilter = "custom";
|
||||
if ([10, 25, 50, 100, 200].includes(parseInt(result.mode2))) {
|
||||
wordfilter = result.mode2;
|
||||
}
|
||||
if (!ResultFilters.getFilter("words", wordfilter)) return;
|
||||
if (!ResultFilters.getFilter("words", wordfilter)) {
|
||||
if (filterDebug)
|
||||
console.log(`skipping result due to word filter`, result);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (result.quoteLength != null) {
|
||||
|
@ -400,10 +426,17 @@ export function update() {
|
|||
if (
|
||||
filter !== null &&
|
||||
!ResultFilters.getFilter("quoteLength", filter)
|
||||
)
|
||||
) {
|
||||
if (filterDebug)
|
||||
console.log(`skipping result due to quoteLength filter`, result);
|
||||
return;
|
||||
}
|
||||
}
|
||||
let langFilter = ResultFilters.getFilter("language", result.language);
|
||||
|
||||
let langFilter = ResultFilters.getFilter(
|
||||
"language",
|
||||
result.language ?? "english"
|
||||
);
|
||||
|
||||
if (
|
||||
result.language === "english_expanded" &&
|
||||
|
@ -411,22 +444,44 @@ export function update() {
|
|||
) {
|
||||
langFilter = true;
|
||||
}
|
||||
if (!langFilter) return;
|
||||
if (!langFilter) {
|
||||
if (filterDebug)
|
||||
console.log(`skipping result due to language filter`, result);
|
||||
return;
|
||||
}
|
||||
|
||||
let puncfilter = "off";
|
||||
if (result.punctuation) {
|
||||
puncfilter = "on";
|
||||
}
|
||||
if (!ResultFilters.getFilter("punctuation", puncfilter)) return;
|
||||
if (!ResultFilters.getFilter("punctuation", puncfilter)) {
|
||||
if (filterDebug)
|
||||
console.log(`skipping result due to punctuation filter`, result);
|
||||
return;
|
||||
}
|
||||
|
||||
let numfilter = "off";
|
||||
if (result.numbers) {
|
||||
numfilter = "on";
|
||||
}
|
||||
if (!ResultFilters.getFilter("numbers", numfilter)) return;
|
||||
if (!ResultFilters.getFilter("numbers", numfilter)) {
|
||||
if (filterDebug)
|
||||
console.log(`skipping result due to numbers filter`, result);
|
||||
return;
|
||||
}
|
||||
|
||||
if (result.funbox === "none" || result.funbox === undefined) {
|
||||
if (!ResultFilters.getFilter("funbox", "none")) return;
|
||||
if (!ResultFilters.getFilter("funbox", "none")) {
|
||||
if (filterDebug)
|
||||
console.log(`skipping result due to funbox filter`, result);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if (!ResultFilters.getFilter("funbox", result.funbox)) return;
|
||||
if (!ResultFilters.getFilter("funbox", result.funbox)) {
|
||||
if (filterDebug)
|
||||
console.log(`skipping result due to funbox filter`, result);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
let tagHide = true;
|
||||
|
@ -454,7 +509,11 @@ export function update() {
|
|||
});
|
||||
}
|
||||
|
||||
if (tagHide) return;
|
||||
if (tagHide) {
|
||||
if (filterDebug)
|
||||
console.log(`skipping result due to tag filter`, result);
|
||||
return;
|
||||
}
|
||||
|
||||
let timeSinceTest = Math.abs(result.timestamp - Date.now()) / 1000;
|
||||
|
||||
|
@ -472,7 +531,11 @@ export function update() {
|
|||
datehide = false;
|
||||
}
|
||||
|
||||
if (datehide) return;
|
||||
if (datehide) {
|
||||
if (filterDebug)
|
||||
console.log(`skipping result due to date filter`, result);
|
||||
return;
|
||||
}
|
||||
|
||||
filteredResults.push(result);
|
||||
} catch (e) {
|
||||
|
@ -498,12 +561,17 @@ export function update() {
|
|||
if (Object.keys(activityChartData).includes(String(resultDate))) {
|
||||
activityChartData[resultDate].amount++;
|
||||
activityChartData[resultDate].time +=
|
||||
result.testDuration + result.incompleteTestSeconds;
|
||||
result.testDuration +
|
||||
result.incompleteTestSeconds -
|
||||
(result.afkDuration ?? 0);
|
||||
activityChartData[resultDate].totalWpm += result.wpm;
|
||||
} else {
|
||||
activityChartData[resultDate] = {
|
||||
amount: 1,
|
||||
time: result.testDuration + result.incompleteTestSeconds,
|
||||
time:
|
||||
result.testDuration +
|
||||
result.incompleteTestSeconds -
|
||||
(result.afkDuration ?? 0),
|
||||
totalWpm: result.wpm,
|
||||
};
|
||||
}
|
||||
|
@ -517,13 +585,16 @@ export function update() {
|
|||
tt = (parseFloat(result.mode2) / parseFloat(result.wpm)) * 60;
|
||||
}
|
||||
} else {
|
||||
tt = parseFloat(result.testDuration);
|
||||
}
|
||||
if (result.incompleteTestSeconds != undefined) {
|
||||
tt += result.incompleteTestSeconds;
|
||||
} else if (result.restartCount != undefined && result.restartCount > 0) {
|
||||
tt += (tt / 4) * result.restartCount;
|
||||
tt = result.testDuration;
|
||||
}
|
||||
|
||||
tt += (result.incompleteTestSeconds ?? 0) - (result.afkDuration ?? 0);
|
||||
|
||||
// if (result.incompleteTestSeconds != undefined) {
|
||||
// tt += result.incompleteTestSeconds;
|
||||
// } else if (result.restartCount != undefined && result.restartCount > 0) {
|
||||
// tt += (tt / 4) * result.restartCount;
|
||||
// }
|
||||
totalSecondsFiltered += tt;
|
||||
|
||||
if (last10 < 10) {
|
||||
|
@ -684,24 +755,9 @@ export function update() {
|
|||
$(".pageAccount .triplegroup.stats").removeClass("hidden");
|
||||
}
|
||||
|
||||
let th = Math.floor(totalSeconds / 3600);
|
||||
let tm = Math.floor((totalSeconds % 3600) / 60);
|
||||
let ts = Math.floor((totalSeconds % 3600) % 60);
|
||||
$(".pageAccount .timeTotal .val").text(`
|
||||
|
||||
${th < 10 ? "0" + th : th}:${tm < 10 ? "0" + tm : tm}:${
|
||||
ts < 10 ? "0" + ts : ts
|
||||
}
|
||||
`);
|
||||
let tfh = Math.floor(totalSecondsFiltered / 3600);
|
||||
let tfm = Math.floor((totalSecondsFiltered % 3600) / 60);
|
||||
let tfs = Math.floor((totalSecondsFiltered % 3600) % 60);
|
||||
$(".pageAccount .timeTotalFiltered .val").text(`
|
||||
|
||||
${tfh < 10 ? "0" + tfh : tfh}:${tfm < 10 ? "0" + tfm : tfm}:${
|
||||
tfs < 10 ? "0" + tfs : tfs
|
||||
}
|
||||
`);
|
||||
$(".pageAccount .timeTotalFiltered .val").text(
|
||||
Misc.secondsToString(Math.round(totalSecondsFiltered), true)
|
||||
);
|
||||
|
||||
$(".pageAccount .highestWpm .val").text(topWpm);
|
||||
$(".pageAccount .averageWpm .val").text(Math.round(totalWpm / testCount));
|
||||
|
@ -745,9 +801,9 @@ export function update() {
|
|||
)}%)`
|
||||
);
|
||||
|
||||
$(".pageAccount .avgRestart .val").text(
|
||||
(testRestarts / testCount).toFixed(1)
|
||||
);
|
||||
$(".pageAccount .testsCompleted .avgres").text(`
|
||||
${(testRestarts / testCount).toFixed(1)} restarts per completed test
|
||||
`);
|
||||
|
||||
if (ChartController.accountHistory.data.datasets[0].data.length > 0) {
|
||||
ChartController.accountHistory.options.plugins.trendlineLinear = true;
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import * as DB from "./db";
|
||||
import * as Misc from "./misc";
|
||||
|
||||
export function clear() {
|
||||
$(".pageAccount .globalTimeTyping .val").text(`-`);
|
||||
|
@ -8,15 +9,12 @@ export function clear() {
|
|||
|
||||
export function update() {
|
||||
if (DB.getSnapshot().globalStats.time != undefined) {
|
||||
let th = Math.floor(DB.getSnapshot().globalStats.time / 3600);
|
||||
let tm = Math.floor((DB.getSnapshot().globalStats.time % 3600) / 60);
|
||||
let ts = Math.floor((DB.getSnapshot().globalStats.time % 3600) % 60);
|
||||
$(".pageAccount .globalTimeTyping .val").text(`
|
||||
|
||||
${th < 10 ? "0" + th : th}:${tm < 10 ? "0" + tm : tm}:${
|
||||
ts < 10 ? "0" + ts : ts
|
||||
}
|
||||
`);
|
||||
// let th = Math.floor(DB.getSnapshot().globalStats.time / 3600);
|
||||
// let tm = Math.floor((DB.getSnapshot().globalStats.time % 3600) / 60);
|
||||
// let ts = Math.floor((DB.getSnapshot().globalStats.time % 3600) % 60);
|
||||
$(".pageAccount .globalTimeTyping .val").text(
|
||||
Misc.secondsToString(Math.round(DB.getSnapshot().globalStats.time), true)
|
||||
);
|
||||
}
|
||||
if (DB.getSnapshot().globalStats.started != undefined) {
|
||||
$(".pageAccount .globalTestsStarted .val").text(
|
||||
|
|
|
@ -364,7 +364,8 @@ export let accountActivity = new Chart(
|
|||
data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];
|
||||
if (tooltipItem.datasetIndex === 0) {
|
||||
return `Time Typing: ${Misc.secondsToString(
|
||||
resultData.y
|
||||
Math.round(resultData.y),
|
||||
true
|
||||
)}\nTests Completed: ${resultData.amount}`;
|
||||
} else if (tooltipItem.datasetIndex === 1) {
|
||||
return `Average Wpm: ${Misc.roundTo2(resultData.y)}`;
|
||||
|
|
|
@ -201,7 +201,7 @@ let commandsTags = {
|
|||
};
|
||||
|
||||
export function updateTagCommands() {
|
||||
if (DB.getSnapshot().tags.length > 0) {
|
||||
if (DB.getSnapshot()?.tags?.length > 0) {
|
||||
commandsTags.list = [];
|
||||
|
||||
commandsTags.list.push({
|
||||
|
@ -266,7 +266,7 @@ let commandsPresets = {
|
|||
};
|
||||
|
||||
export function updatePresetCommands() {
|
||||
if (DB.getSnapshot().presets.length > 0) {
|
||||
if (DB.getSnapshot()?.presets?.length > 0) {
|
||||
commandsPresets.list = [];
|
||||
|
||||
DB.getSnapshot().presets.forEach((preset) => {
|
||||
|
|
229
src/js/config.js
229
src/js/config.js
|
@ -1652,180 +1652,101 @@ export function apply(configObj) {
|
|||
|
||||
try {
|
||||
setEnableAds(configObj.enableAds, true);
|
||||
let addemo = false;
|
||||
if (
|
||||
firebase.app().options.projectId === "monkey-type-dev-67af4" ||
|
||||
window.location.hostname === "localhost"
|
||||
) {
|
||||
addemo = true;
|
||||
}
|
||||
// let addemo = false;
|
||||
// if (
|
||||
// firebase.app().options.projectId === "monkey-type-dev-67af4" ||
|
||||
// window.location.hostname === "localhost"
|
||||
// ) {
|
||||
// addemo = true;
|
||||
// }
|
||||
|
||||
if (config.enableAds === "max" || config.enableAds === "on") {
|
||||
if (config.enableAds === "max") {
|
||||
window["nitroAds"].createAd("nitropay_ad_left", {
|
||||
refreshLimit: 10,
|
||||
refreshTime: 30,
|
||||
renderVisibleOnly: false,
|
||||
refreshVisibleOnly: true,
|
||||
sizes: [["160", "600"]],
|
||||
report: {
|
||||
enabled: true,
|
||||
wording: "Report Ad",
|
||||
position: "bottom-right",
|
||||
},
|
||||
mediaQuery: "(min-width: 1330px)",
|
||||
demo: addemo,
|
||||
});
|
||||
$("#nitropay_ad_left").removeClass("hidden");
|
||||
//
|
||||
|
||||
window["nitroAds"].createAd("nitropay_ad_right", {
|
||||
refreshLimit: 10,
|
||||
refreshTime: 30,
|
||||
renderVisibleOnly: false,
|
||||
refreshVisibleOnly: true,
|
||||
sizes: [["160", "600"]],
|
||||
report: {
|
||||
enabled: true,
|
||||
wording: "Report Ad",
|
||||
position: "bottom-right",
|
||||
},
|
||||
mediaQuery: "(min-width: 1330px)",
|
||||
demo: addemo,
|
||||
});
|
||||
$("#nitropay_ad_right").removeClass("hidden");
|
||||
$("#ad_rich_media").removeClass("hidden");
|
||||
$("#ad_rich_media").html(
|
||||
`<div class="vm-placement" data-id="60bf737ee04cb761c88aafb1" style="display:none"></div>`
|
||||
);
|
||||
} else {
|
||||
$("#nitropay_ad_left").remove();
|
||||
$("#nitropay_ad_right").remove();
|
||||
$("#ad_rich_media").remove();
|
||||
}
|
||||
|
||||
window["nitroAds"].createAd("nitropay_ad_footer", {
|
||||
refreshLimit: 10,
|
||||
refreshTime: 30,
|
||||
renderVisibleOnly: false,
|
||||
refreshVisibleOnly: true,
|
||||
sizes: [["970", "90"]],
|
||||
report: {
|
||||
enabled: true,
|
||||
wording: "Report Ad",
|
||||
position: "bottom-right",
|
||||
},
|
||||
mediaQuery: "(min-width: 1025px)",
|
||||
demo: addemo,
|
||||
});
|
||||
$("#nitropay_ad_footer").removeClass("hidden");
|
||||
//<div class="vm-placement" data-id="60bf73dae04cb761c88aafb5"></div>
|
||||
|
||||
window["nitroAds"].createAd("nitropay_ad_footer2", {
|
||||
refreshLimit: 10,
|
||||
refreshTime: 30,
|
||||
renderVisibleOnly: false,
|
||||
refreshVisibleOnly: true,
|
||||
sizes: [["728", "90"]],
|
||||
report: {
|
||||
enabled: true,
|
||||
wording: "Report Ad",
|
||||
position: "bottom-right",
|
||||
},
|
||||
mediaQuery: "(min-width: 730px) and (max-width: 1024px)",
|
||||
demo: addemo,
|
||||
});
|
||||
$("#nitropay_ad_footer2").removeClass("hidden");
|
||||
$("#ad_footer").html(
|
||||
`<div class="vm-placement" data-id="60bf73dae04cb761c88aafb5"></div>`
|
||||
);
|
||||
$("#ad_footer").removeClass("hidden");
|
||||
|
||||
window["nitroAds"].createAd("nitropay_ad_footer3", {
|
||||
refreshLimit: 10,
|
||||
refreshTime: 30,
|
||||
renderVisibleOnly: false,
|
||||
refreshVisibleOnly: true,
|
||||
sizes: [["320", "50"]],
|
||||
report: {
|
||||
enabled: true,
|
||||
wording: "Report Ad",
|
||||
position: "bottom-right",
|
||||
},
|
||||
mediaQuery: "(max-width: 730px)",
|
||||
demo: addemo,
|
||||
});
|
||||
$("#nitropay_ad_footer3").removeClass("hidden");
|
||||
// $("#ad_footer2").html(`<div class="vm-placement" data-id="60bf73e9e04cb761c88aafb7"></div>`);
|
||||
// $("#ad_footer2").removeClass("hidden");
|
||||
|
||||
window["nitroAds"].createAd("nitropay_ad_about", {
|
||||
refreshLimit: 10,
|
||||
refreshTime: 30,
|
||||
renderVisibleOnly: false,
|
||||
refreshVisibleOnly: true,
|
||||
report: {
|
||||
enabled: true,
|
||||
wording: "Report Ad",
|
||||
position: "bottom-right",
|
||||
},
|
||||
demo: addemo,
|
||||
});
|
||||
$("#nitropay_ad_about").removeClass("hidden");
|
||||
$("#ad_about1").html(
|
||||
`<div class="vm-placement" data-id="60bf73dae04cb761c88aafb5"></div>`
|
||||
);
|
||||
$("#ad_about1").removeClass("hidden");
|
||||
|
||||
window["nitroAds"].createAd("nitropay_ad_settings1", {
|
||||
refreshLimit: 10,
|
||||
refreshTime: 30,
|
||||
renderVisibleOnly: false,
|
||||
refreshVisibleOnly: true,
|
||||
report: {
|
||||
enabled: true,
|
||||
wording: "Report Ad",
|
||||
position: "bottom-right",
|
||||
},
|
||||
demo: addemo,
|
||||
});
|
||||
$("#nitropay_ad_settings1").removeClass("hidden");
|
||||
$("#ad_about2").html(
|
||||
`<div class="vm-placement" data-id="60bf73dae04cb761c88aafb5"></div>`
|
||||
);
|
||||
$("#ad_about2").removeClass("hidden");
|
||||
|
||||
window["nitroAds"].createAd("nitropay_ad_settings2", {
|
||||
refreshLimit: 10,
|
||||
refreshTime: 30,
|
||||
renderVisibleOnly: false,
|
||||
refreshVisibleOnly: true,
|
||||
report: {
|
||||
enabled: true,
|
||||
wording: "Report Ad",
|
||||
position: "bottom-right",
|
||||
},
|
||||
demo: addemo,
|
||||
});
|
||||
$("#nitropay_ad_settings2").removeClass("hidden");
|
||||
$("#ad_settings0").html(
|
||||
`<div class="vm-placement" data-id="60bf73dae04cb761c88aafb5"></div>`
|
||||
);
|
||||
$("#ad_settings0").removeClass("hidden");
|
||||
|
||||
window["nitroAds"].createAd("nitropay_ad_account", {
|
||||
refreshLimit: 10,
|
||||
refreshTime: 30,
|
||||
renderVisibleOnly: false,
|
||||
refreshVisibleOnly: true,
|
||||
report: {
|
||||
enabled: true,
|
||||
wording: "Report Ad",
|
||||
position: "bottom-right",
|
||||
},
|
||||
demo: addemo,
|
||||
});
|
||||
$("#nitropay_ad_account").removeClass("hidden");
|
||||
$("#ad_settings1").html(
|
||||
`<div class="vm-placement" data-id="60bf73dae04cb761c88aafb5"></div>`
|
||||
);
|
||||
$("#ad_settings1").removeClass("hidden");
|
||||
|
||||
$("#ad_settings2").html(
|
||||
`<div class="vm-placement" data-id="60bf73dae04cb761c88aafb5"></div>`
|
||||
);
|
||||
$("#ad_settings2").removeClass("hidden");
|
||||
|
||||
$("#ad_settings3").html(
|
||||
`<div class="vm-placement" data-id="60bf73dae04cb761c88aafb5"></div>`
|
||||
);
|
||||
$("#ad_settings3").removeClass("hidden");
|
||||
|
||||
$("#ad_account").html(
|
||||
`<div class="vm-placement" data-id="60bf73dae04cb761c88aafb5"></div>`
|
||||
);
|
||||
$("#ad_account").removeClass("hidden");
|
||||
} else {
|
||||
$(".footerads").remove();
|
||||
$("#nitropay_ad_left").remove();
|
||||
$("#nitropay_ad_right").remove();
|
||||
$("#nitropay_ad_footer").remove();
|
||||
$("#nitropay_ad_footer2").remove();
|
||||
$("#nitropay_ad_footer3").remove();
|
||||
$("#nitropay_ad_settings1").remove();
|
||||
$("#nitropay_ad_settings2").remove();
|
||||
$("#nitropay_ad_account").remove();
|
||||
$("#nitropay_ad_about").remove();
|
||||
$("#ad_left").remove();
|
||||
$("#ad_right").remove();
|
||||
$("#ad_footer").remove();
|
||||
$("#ad_footer2").remove();
|
||||
$("#ad_footer3").remove();
|
||||
$("#ad_settings0").remove();
|
||||
$("#ad_settings1").remove();
|
||||
$("#ad_settings2").remove();
|
||||
$("#ad_settings3").remove();
|
||||
$("#ad_account").remove();
|
||||
$("#ad_about1").remove();
|
||||
$("#ad_about2").remove();
|
||||
}
|
||||
} catch (e) {
|
||||
Notifications.add("Error initialising ads: " + e.message);
|
||||
console.log("error initialising ads " + e.message);
|
||||
$(".footerads").remove();
|
||||
$("#nitropay_ad_left").remove();
|
||||
$("#nitropay_ad_right").remove();
|
||||
$("#nitropay_ad_footer").remove();
|
||||
$("#nitropay_ad_footer2").remove();
|
||||
$("#nitropay_ad_footer3").remove();
|
||||
$("#nitropay_ad_settings1").remove();
|
||||
$("#nitropay_ad_settings2").remove();
|
||||
$("#nitropay_ad_account").remove();
|
||||
$("#nitropay_ad_about").remove();
|
||||
$("#ad_left").remove();
|
||||
$("#ad_right").remove();
|
||||
$("#ad_footer").remove();
|
||||
$("#ad_footer2").remove();
|
||||
$("#ad_footer3").remove();
|
||||
$("#ad_settings0").remove();
|
||||
$("#ad_settings1").remove();
|
||||
$("#ad_settings2").remove();
|
||||
$("#ad_settings3").remove();
|
||||
$("#ad_account").remove();
|
||||
$("#ad_about1").remove();
|
||||
$("#ad_about2").remove();
|
||||
}
|
||||
}
|
||||
TestUI.updateModesNotice();
|
||||
|
|
|
@ -25,3 +25,5 @@ global.crownTest = async () => {
|
|||
await DB.getUserHighestWpm("time", 60, false, "english", "normal")
|
||||
);
|
||||
};
|
||||
|
||||
global.filterDebug = Account.toggleFilterDebug;
|
||||
|
|
|
@ -13,7 +13,7 @@ import * as ResultFilters from "./result-filters";
|
|||
import Config from "./config";
|
||||
import * as SimplePopups from "./simple-popups";
|
||||
import * as AccountController from "./account-controller";
|
||||
import {toggleGlarses} from "./test-logic";
|
||||
import { toggleGlarses } from "./test-logic";
|
||||
import "./caps-warning";
|
||||
import "./support-popup";
|
||||
import "./version-popup";
|
||||
|
@ -22,3 +22,4 @@ import "./import-settings-popup";
|
|||
import "./input-controller";
|
||||
import "./ready";
|
||||
import "./about-page";
|
||||
import * as Account from "./account";
|
||||
|
|
|
@ -167,7 +167,7 @@ function handleBackspace(event) {
|
|||
// }
|
||||
|
||||
if (
|
||||
/^[ £§`~!@#$%^&*()_+\-=[\]{};':"|,./<>?]*$/g.test(
|
||||
/^[ £§`~!@#$%^&*()_+\\\-=[\]{};':"|,./<>?]*$/g.test(
|
||||
TestLogic.input.getCurrent()
|
||||
)
|
||||
) {
|
||||
|
@ -186,24 +186,29 @@ function handleBackspace(event) {
|
|||
TestLogic.input.popHistory();
|
||||
TestLogic.corrected.popHistory();
|
||||
} else {
|
||||
const regex = new RegExp(/[ £§`~!@#$%^&*()_+\-=[\]{};':"|,./<>?]/, "g");
|
||||
const regex = new RegExp(
|
||||
/[ £§`~!@#$%^&*()_+\\\-=[\]{};':"|,./<>?]/,
|
||||
"g"
|
||||
);
|
||||
|
||||
let input = TestLogic.input.getCurrent();
|
||||
|
||||
regex.test(input);
|
||||
// let puncIndex = regex.lastIndex;
|
||||
let puncIndex = input.lastIndexOfRegex(
|
||||
/[ £§`~!@#$%^&*()_+\-=[\]{};':"|,./<>?]/g
|
||||
/[ £§`~!@#$%^&*()_+\\\-=[\]{};':"|,./<>?]/g
|
||||
);
|
||||
while (
|
||||
/[ £§`~!@#$%^&*()_+\-=[\]{};':"|,./<>?]/g.test(input.slice(-1))
|
||||
/[ £§`~!@#$%^&*()_+\\\-=[\]{};':"|,./<>?]/g.test(input.slice(-1))
|
||||
) {
|
||||
input = input.substring(0, input.length - 1);
|
||||
}
|
||||
puncIndex = input.lastIndexOfRegex(
|
||||
/[ £§`~!@#$%^&*()_+\-=[\]{};':"|,./<>?]/g
|
||||
/[ £§`~!@#$%^&*()_+\\\-=[\]{};':"|,./<>?]/g
|
||||
);
|
||||
TestLogic.input.setCurrent(
|
||||
input.substring(0, puncIndex == 0 ? 0 : puncIndex + 1)
|
||||
);
|
||||
TestLogic.input.setCurrent(input.substring(0, puncIndex + 1));
|
||||
}
|
||||
} else {
|
||||
TestLogic.input.setCurrent(
|
||||
|
|
|
@ -365,5 +365,25 @@ const layouts = {
|
|||
" "
|
||||
],
|
||||
},
|
||||
APT: {
|
||||
keymapShowTopRow: false,
|
||||
keys: [
|
||||
"`~", "1!", "2@", "3#", "4$", "5%", "6^", "7&", "8*", "9(", "0)", "-_", "=+",
|
||||
"wW", "cC", "dD", "lL", "'\"", "/?", "yY", "oO", "uU", "qQ", "[{", "]}", "\\|",
|
||||
"rR", "sS", "tT", "hH", "kK", "pP", "nN", "eE", "iI", "aA", ";:",
|
||||
"\\|", "vV", "bB", "gG", "mM", ",<", ".>", "fF", "jJ", "xX", "zZ",
|
||||
" "
|
||||
]
|
||||
},
|
||||
Thai_Kedmanee: {
|
||||
keymapShowTopRow: true,
|
||||
keys: [
|
||||
"-%", "ๅ+", "/๑", "_๒", "ภ๓", "ถ๔", "ุู", "ึ฿", "ค๕", "ต๖", "จ๗", "ข๘", "ช๙",
|
||||
"ๆ๐", "ไ\"", "ำฎ", "พฑ", "ะธ", "ัํ", "ี๊", "รณ", "นฯ", "ยญ", "บฐ", "ล,", "ฃฅ",
|
||||
"ฟฤ", "หฆ", "กฏ", "ดโ", "เฌ", "้็", "่๋", "าษ", "สศ", "วซ", "ง.",
|
||||
"ฃฅ", "ผ(", "ป)", "แฉ", "อฮ", "ิฺ", "ื์", "ท?", "มฒ", "ใฬ", "ฝฦ",
|
||||
" "
|
||||
]
|
||||
},
|
||||
}
|
||||
export default layouts;
|
||||
|
|
|
@ -34,9 +34,15 @@ export function getCSS() {
|
|||
|
||||
export function apply() {
|
||||
let filterCSS = getCSS();
|
||||
$(".customBackground").css({
|
||||
let css = {
|
||||
filter: filterCSS,
|
||||
});
|
||||
width: `calc(100% + ${filters.blur.value * 4}rem)`,
|
||||
height: `calc(100% + ${filters.blur.value * 4}rem)`,
|
||||
left: `-${filters.blur.value * 2}rem`,
|
||||
top: `-${filters.blur.value * 2}rem`,
|
||||
position: "absolute",
|
||||
};
|
||||
$(".customBackground img").css(css);
|
||||
}
|
||||
|
||||
function syncSliders() {
|
||||
|
|
|
@ -1251,13 +1251,15 @@ export function finish(difficultyFailed = false) {
|
|||
if (afkSecondsPercent > 0) {
|
||||
$("#result .stats .time .bottom .afk").text(afkSecondsPercent + "% afk");
|
||||
}
|
||||
TodayTracker.addSeconds(
|
||||
testtime +
|
||||
(TestStats.incompleteSeconds < 0
|
||||
? 0
|
||||
: Misc.roundTo2(TestStats.incompleteSeconds)) -
|
||||
afkseconds
|
||||
);
|
||||
if (!difficultyFailed) {
|
||||
TodayTracker.addSeconds(
|
||||
testtime +
|
||||
(TestStats.incompleteSeconds < 0
|
||||
? 0
|
||||
: Misc.roundTo2(TestStats.incompleteSeconds)) -
|
||||
afkseconds
|
||||
);
|
||||
}
|
||||
$("#result .stats .time .bottom .timeToday").text(TodayTracker.getString());
|
||||
$("#result .stats .key .bottom").text(testtime + "s");
|
||||
$("#words").removeClass("blurred");
|
||||
|
|
|
@ -165,25 +165,29 @@ export function clearRandom() {
|
|||
}
|
||||
|
||||
export function applyCustomBackground() {
|
||||
$(".customBackground").css({
|
||||
backgroundImage: `url(${Config.customBackground})`,
|
||||
backgroundAttachment: "fixed",
|
||||
});
|
||||
// $(".customBackground").css({
|
||||
// backgroundImage: `url(${Config.customBackground})`,
|
||||
// backgroundAttachment: "fixed",
|
||||
// });
|
||||
if (Config.customBackground === "") {
|
||||
$("#words").removeClass("noErrorBorder");
|
||||
$(".customBackground img").remove();
|
||||
} else {
|
||||
$("#words").addClass("noErrorBorder");
|
||||
$(".customBackground").html(`<img src="${Config.customBackground}"></img>`);
|
||||
}
|
||||
}
|
||||
|
||||
export function applyCustomBackgroundSize() {
|
||||
if (Config.customBackgroundSize == "max") {
|
||||
$(".customBackground").css({
|
||||
backgroundSize: "100% 100%",
|
||||
$(".customBackground img").css({
|
||||
// width: "calc(100%)",
|
||||
// height: "calc(100%)",
|
||||
objectFit: "",
|
||||
});
|
||||
} else if (Config.customBackgroundSize != "") {
|
||||
$(".customBackground").css({
|
||||
backgroundSize: Config.customBackgroundSize,
|
||||
$(".customBackground img").css({
|
||||
objectFit: Config.customBackgroundSize,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -141,6 +141,9 @@ body {
|
|||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
z-index: -999;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
html {
|
||||
|
@ -2091,7 +2094,7 @@ key {
|
|||
}
|
||||
|
||||
.source {
|
||||
width: 25vw;
|
||||
max-width: 30rem;
|
||||
}
|
||||
|
||||
.tags .bottom .fas {
|
||||
|
@ -3365,7 +3368,7 @@ key {
|
|||
|
||||
.val {
|
||||
font-size: 3rem;
|
||||
line-height: 3rem;
|
||||
line-height: 3.5rem;
|
||||
}
|
||||
|
||||
&.chart {
|
||||
|
|
|
@ -70,18 +70,26 @@
|
|||
<meta name="twitter:title" content="Monkeytype" />
|
||||
<meta name="twitter:image" content="https://monkeytype.com/mtsocial.png" />
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<script type="text/javascript">
|
||||
<!-- <script type="text/javascript">
|
||||
window["nitroAds"] = window["nitroAds"] || {
|
||||
createAd: function () {
|
||||
window.nitroAds.queue.push(["createAd", arguments]);
|
||||
},
|
||||
queue: [],
|
||||
};
|
||||
</script>
|
||||
<script async src="https://s.nitropay.com/ads-693.js"></script>
|
||||
</script> -->
|
||||
<!-- <script async src="https://s.nitropay.com/ads-693.js"></script> -->
|
||||
<script
|
||||
src="https://hb.vntsm.com/v3/live/ad-manager.min.js"
|
||||
type="text/javascript"
|
||||
data-site-id="60b78af12119122b8958910f"
|
||||
data-mode="scan"
|
||||
async
|
||||
></script>
|
||||
</head>
|
||||
<div class="customBackground"></div>
|
||||
<body>
|
||||
<div id="ad_rich_media" class="hidden"></div>
|
||||
<div id="backgroundLoader" style="display: none"></div>
|
||||
<div id="notificationCenter">
|
||||
<div class="history"></div>
|
||||
|
@ -921,7 +929,6 @@
|
|||
<div id="timer" class="timerMain"></div>
|
||||
</div>
|
||||
<div style="display: flex; justify-content: space-around">
|
||||
<div id="nitropay_ad_left" class="hidden"></div>
|
||||
<div id="centerContent" class="hidden">
|
||||
<div id="top">
|
||||
<div class="logo">
|
||||
|
@ -1609,7 +1616,7 @@
|
|||
raw wpm and mapped onto a scale from 0 to 100.
|
||||
</p>
|
||||
</div>
|
||||
<div id="nitropay_ad_about" class="hidden"></div>
|
||||
<div id="ad_about1" class="hidden"></div>
|
||||
<div class="section">
|
||||
<h1>results screen</h1>
|
||||
<p>
|
||||
|
@ -1743,6 +1750,7 @@
|
|||
adding themes and more
|
||||
</p>
|
||||
</div>
|
||||
<div id="ad_about2" class="hidden"></div>
|
||||
<div class="section">
|
||||
<h1 id="supporters_title">supporters</h1>
|
||||
<div class="supporters">
|
||||
|
@ -2010,6 +2018,7 @@
|
|||
<a href="#group_dangerZone">danger zone</a>
|
||||
</div>
|
||||
</div>
|
||||
<div id="ad_settings0" class="hidden"></div>
|
||||
<div
|
||||
id="group_account"
|
||||
class="sectionGroupTitle hidden"
|
||||
|
@ -2666,7 +2675,7 @@
|
|||
<div class="sectionSpacer"></div>
|
||||
</div>
|
||||
|
||||
<div id="nitropay_ad_settings1" class="hidden"></div>
|
||||
<div id="ad_settings1" class="hidden"></div>
|
||||
|
||||
<div id="group_sound" class="sectionGroupTitle" group="sound">
|
||||
sound
|
||||
|
@ -3385,7 +3394,7 @@
|
|||
<div class="sectionSpacer"></div>
|
||||
</div>
|
||||
|
||||
<div id="nitropay_ad_settings2" class="hidden"></div>
|
||||
<div id="ad_settings2" class="hidden"></div>
|
||||
|
||||
<div id="group_theme" class="sectionGroupTitle" group="theme">
|
||||
theme
|
||||
|
@ -4109,7 +4118,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div id="nitropay_ad_account" class="hidden"></div>
|
||||
<div id="ad_account" class="hidden"></div>
|
||||
|
||||
<div class="group topFilters">
|
||||
<!-- <div
|
||||
|
@ -4254,6 +4263,28 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="triplegroup stats">
|
||||
<div class="group testsStarted">
|
||||
<div class="title">tests started</div>
|
||||
<div class="val">-</div>
|
||||
</div>
|
||||
<div class="group testsCompleted">
|
||||
<div class="title">
|
||||
tests completed
|
||||
<span
|
||||
data-balloon-length="xlarge"
|
||||
aria-label="Due to the increasing number of results in the database, you can now only see your last 1000 results in detail. Total time spent typing, started and completed tests stats will still be up to date at the top of the page, above the filters."
|
||||
data-balloon-pos="up"
|
||||
>
|
||||
<i class="fas fa-question-circle"></i>
|
||||
</span>
|
||||
</div>
|
||||
<div class="val">-</div>
|
||||
<div class="avgres">-</div>
|
||||
</div>
|
||||
<div class="group timeTotalFiltered">
|
||||
<div class="title">time typing</div>
|
||||
<div class="val">-</div>
|
||||
</div>
|
||||
<div class="group highestWpm">
|
||||
<div class="title">highest wpm</div>
|
||||
<div class="val">-</div>
|
||||
|
@ -4289,36 +4320,7 @@
|
|||
</div>
|
||||
<div class="val">-</div>
|
||||
</div>
|
||||
|
||||
<div class="group testsStarted">
|
||||
<div class="title">tests started</div>
|
||||
<div class="val">-</div>
|
||||
</div>
|
||||
<div class="group testsCompleted">
|
||||
<div class="title">
|
||||
tests completed
|
||||
<span
|
||||
data-balloon-length="xlarge"
|
||||
aria-label="Due to the increasing number of results in the database, you can now only see your last 1000 results in detail. Total time spent typing, started and completed tests stats will still be up to date at the top of the page, above the filters."
|
||||
data-balloon-pos="up"
|
||||
>
|
||||
<i class="fas fa-question-circle"></i>
|
||||
</span>
|
||||
</div>
|
||||
<div class="val">-</div>
|
||||
</div>
|
||||
<div class="group avgRestart">
|
||||
<div class="title">
|
||||
avg restarts
|
||||
<br />
|
||||
per completed test
|
||||
</div>
|
||||
<div class="val">-</div>
|
||||
</div>
|
||||
<div class="group timeTotalFiltered">
|
||||
<div class="title">time typing</div>
|
||||
<div class="val">-</div>
|
||||
</div>
|
||||
<div></div>
|
||||
<div class="group avgAcc">
|
||||
<div class="title">avg accuracy</div>
|
||||
<div class="val">-</div>
|
||||
|
@ -4457,22 +4459,21 @@
|
|||
</div>
|
||||
<div class="footerads">
|
||||
<div
|
||||
id="nitropay_ad_footer"
|
||||
id="ad_footer"
|
||||
style="display: flex; justify-content: center; justify-self: center"
|
||||
></div>
|
||||
<div
|
||||
id="nitropay_ad_footer2"
|
||||
id="ad_footer2"
|
||||
class="hidden"
|
||||
style="display: flex; justify-content: center; justify-self: center"
|
||||
></div>
|
||||
<div
|
||||
id="nitropay_ad_footer3"
|
||||
<!-- <div
|
||||
id="ad_footer3"
|
||||
class="hidden"
|
||||
style="display: flex; justify-content: center; justify-self: center"
|
||||
></div>
|
||||
></div> -->
|
||||
</div>
|
||||
</div>
|
||||
<div id="nitropay_ad_right" class="hidden"></div>
|
||||
</div>
|
||||
</body>
|
||||
<!-- The core Firebase JS SDK is always required and must be listed first -->
|
||||
|
|
|
@ -216,6 +216,10 @@
|
|||
"name": "urdu",
|
||||
"languages": ["urdu", "urdu_1k"]
|
||||
},
|
||||
{
|
||||
"name": "albanian",
|
||||
"languanges": ["albanian", "albanian_1k"]
|
||||
},
|
||||
{
|
||||
"name": "code",
|
||||
"languages": [
|
||||
|
|
|
@ -115,6 +115,8 @@
|
|||
,"esperanto_h_sistemo_36k"
|
||||
,"urdu"
|
||||
,"urdu_1k"
|
||||
,"albanian"
|
||||
,"albanian_1k"
|
||||
,"twitch_emotes"
|
||||
,"pig_latin"
|
||||
,"code_python"
|
||||
|
|
206
static/languages/albanian.json
Normal file
206
static/languages/albanian.json
Normal file
|
@ -0,0 +1,206 @@
|
|||
{
|
||||
"name": "albanian",
|
||||
"leftToRight": true,
|
||||
"words": [
|
||||
"të",
|
||||
"e",
|
||||
"në",
|
||||
"do",
|
||||
"nuk",
|
||||
"është",
|
||||
"më",
|
||||
"po",
|
||||
"që",
|
||||
"dhe",
|
||||
"për",
|
||||
"një",
|
||||
"me",
|
||||
"se",
|
||||
"ta",
|
||||
"unë",
|
||||
"ka",
|
||||
"ti",
|
||||
"jo",
|
||||
"te",
|
||||
"mirë",
|
||||
"mund",
|
||||
"ju",
|
||||
"çfarë",
|
||||
"nga",
|
||||
"si",
|
||||
"duhet",
|
||||
"ne",
|
||||
"kjo",
|
||||
"kam",
|
||||
"këtë",
|
||||
"ai",
|
||||
"por",
|
||||
"shumë",
|
||||
"jam",
|
||||
"di",
|
||||
"këtu",
|
||||
"je",
|
||||
"ke",
|
||||
"a",
|
||||
"mos",
|
||||
"atë",
|
||||
"tani",
|
||||
"ajo",
|
||||
"ishte",
|
||||
"u",
|
||||
"ku",
|
||||
"vetëm",
|
||||
"nëse",
|
||||
"dua",
|
||||
"kur",
|
||||
"janë",
|
||||
"edhe",
|
||||
"mua",
|
||||
"ata",
|
||||
"rregull",
|
||||
"kemi",
|
||||
"sa",
|
||||
"na",
|
||||
"ty",
|
||||
"gjithë",
|
||||
"pse",
|
||||
"duke",
|
||||
"eshte",
|
||||
"oh",
|
||||
"apo",
|
||||
"ky",
|
||||
"tij",
|
||||
"gjë",
|
||||
"pak",
|
||||
"jemi",
|
||||
"parë",
|
||||
"diçka",
|
||||
"bëj",
|
||||
"kush",
|
||||
"keq",
|
||||
"nje",
|
||||
"im",
|
||||
"faleminderit",
|
||||
"qe",
|
||||
"per",
|
||||
"jeni",
|
||||
"keni",
|
||||
"vjen",
|
||||
"dy",
|
||||
"mendoj",
|
||||
"lutem",
|
||||
"jetë",
|
||||
"para",
|
||||
"tjetër",
|
||||
"bërë",
|
||||
"kështu",
|
||||
"atje",
|
||||
"kanë",
|
||||
"së",
|
||||
"hej",
|
||||
"pra",
|
||||
"sepse",
|
||||
"them",
|
||||
"ja",
|
||||
"time",
|
||||
"tek",
|
||||
"bën",
|
||||
"pa",
|
||||
"ime",
|
||||
"duket",
|
||||
"asgjë",
|
||||
"ndonjë",
|
||||
"vërtetë",
|
||||
"shkojmë",
|
||||
"eja",
|
||||
"bukur",
|
||||
"ndoshta",
|
||||
"shiko",
|
||||
"gjitha",
|
||||
"çka",
|
||||
"pas",
|
||||
"disa",
|
||||
"kohë",
|
||||
"tim",
|
||||
"zot",
|
||||
"qenë",
|
||||
"këto",
|
||||
"zotëri",
|
||||
"ma",
|
||||
"ashtu",
|
||||
"njeri",
|
||||
"çdo",
|
||||
"prit",
|
||||
"mendon",
|
||||
"une",
|
||||
"tënde",
|
||||
"kurrë",
|
||||
"ato",
|
||||
"atëherë",
|
||||
"kishte",
|
||||
"tuaj",
|
||||
"shkoj",
|
||||
"hajde",
|
||||
"dreqin",
|
||||
"ose",
|
||||
"aty",
|
||||
"saj",
|
||||
"deri",
|
||||
"kaq",
|
||||
"ia",
|
||||
"tyre",
|
||||
"jashtë",
|
||||
"shtëpi",
|
||||
"thotë",
|
||||
"prej",
|
||||
"marrë",
|
||||
"vdekur",
|
||||
"mire",
|
||||
"sikur",
|
||||
"punë",
|
||||
"isha",
|
||||
"tha",
|
||||
"as",
|
||||
"dreq",
|
||||
"gati",
|
||||
"bëjmë",
|
||||
"aq",
|
||||
"brenda",
|
||||
"ditë",
|
||||
"yt",
|
||||
"gjithçka",
|
||||
"fundit",
|
||||
"herë",
|
||||
"shoh",
|
||||
"pastaj",
|
||||
"vend",
|
||||
"dikush",
|
||||
"kisha",
|
||||
"shko",
|
||||
"vërtet",
|
||||
"le",
|
||||
"thjesht",
|
||||
"bësh",
|
||||
"jote",
|
||||
"tënd",
|
||||
"dashur",
|
||||
"zoti",
|
||||
"besoj",
|
||||
"marr",
|
||||
"akoma",
|
||||
"juaj",
|
||||
"fal",
|
||||
"kete",
|
||||
"ndodh",
|
||||
"sigurisht",
|
||||
"sot",
|
||||
"përse",
|
||||
"jep",
|
||||
"poshtë",
|
||||
"mjaft",
|
||||
"epo",
|
||||
"njerëz",
|
||||
"shpejt",
|
||||
"asnjë"
|
||||
]
|
||||
}
|
1006
static/languages/albanian_1k.json
Normal file
1006
static/languages/albanian_1k.json
Normal file
File diff suppressed because it is too large
Load diff
|
@ -355,7 +355,7 @@
|
|||
"puesto",
|
||||
"ahí",
|
||||
"propia",
|
||||
"m",
|
||||
"manosear",
|
||||
"libro",
|
||||
"igual",
|
||||
"político",
|
||||
|
@ -366,7 +366,7 @@
|
|||
"creo",
|
||||
"tengo",
|
||||
"dios",
|
||||
"c",
|
||||
"cecina",
|
||||
"española",
|
||||
"condiciones",
|
||||
"México",
|
||||
|
@ -585,7 +585,7 @@
|
|||
"cine",
|
||||
"salir",
|
||||
"comunicación",
|
||||
"b",
|
||||
"balística",
|
||||
"experiencia",
|
||||
"demasiado",
|
||||
"plan",
|
||||
|
@ -614,7 +614,7 @@
|
|||
"color",
|
||||
"actividades",
|
||||
"mesa",
|
||||
"p",
|
||||
"bursatil",
|
||||
"decía",
|
||||
"cuyo",
|
||||
"debido",
|
||||
|
@ -702,7 +702,7 @@
|
|||
"ve",
|
||||
"derecha",
|
||||
"ambiente",
|
||||
"i",
|
||||
"ruedín",
|
||||
"habrá",
|
||||
"precisamente",
|
||||
"enfermedad",
|
||||
|
@ -774,7 +774,7 @@
|
|||
"carrera",
|
||||
"cierta",
|
||||
"sola",
|
||||
"PSOE",
|
||||
"sonda",
|
||||
"lejos",
|
||||
"juez",
|
||||
"características",
|
||||
|
@ -900,7 +900,7 @@
|
|||
"cama",
|
||||
"aun",
|
||||
"presenta",
|
||||
"PP",
|
||||
"rifle",
|
||||
"revolución",
|
||||
"busca",
|
||||
"abril",
|
||||
|
@ -913,7 +913,7 @@
|
|||
"pequeña",
|
||||
"armas",
|
||||
"debía",
|
||||
"ii",
|
||||
"lubricante",
|
||||
"esfuerzo",
|
||||
"humana",
|
||||
"posibilidades",
|
||||
|
@ -1232,7 +1232,7 @@
|
|||
"afirma",
|
||||
"oficiales",
|
||||
"diálogo",
|
||||
"vi",
|
||||
"ví",
|
||||
"respeto",
|
||||
"tratado",
|
||||
"llevaba",
|
||||
|
@ -1289,7 +1289,7 @@
|
|||
"institución",
|
||||
"edificio",
|
||||
"nota",
|
||||
"franco",
|
||||
"constelaciones",
|
||||
"jugar",
|
||||
"temerario",
|
||||
"representa",
|
||||
|
@ -1339,7 +1339,7 @@
|
|||
"agentes",
|
||||
"planta",
|
||||
"Venezuela",
|
||||
"f",
|
||||
"bellota",
|
||||
"actuación",
|
||||
"iban",
|
||||
"actos",
|
||||
|
@ -1366,14 +1366,14 @@
|
|||
"pagar",
|
||||
"colegio",
|
||||
"sabes",
|
||||
"l",
|
||||
"lastre",
|
||||
"personaje",
|
||||
"áreas",
|
||||
"audiencia",
|
||||
"doce",
|
||||
"haga",
|
||||
"periódico",
|
||||
"v",
|
||||
"inundación",
|
||||
"distribución",
|
||||
"ausencia",
|
||||
"entrevista",
|
||||
|
@ -1663,7 +1663,7 @@
|
|||
"cuarenta",
|
||||
"encontró",
|
||||
"poesía",
|
||||
"t",
|
||||
"tranvía",
|
||||
"planes",
|
||||
"ejercitar",
|
||||
"negocios",
|
||||
|
@ -1745,7 +1745,7 @@
|
|||
"éstas",
|
||||
"saben",
|
||||
"generalmente",
|
||||
"h",
|
||||
"hermandad",
|
||||
"dormir",
|
||||
"individuo",
|
||||
"cuerpos",
|
||||
|
@ -2033,7 +2033,7 @@
|
|||
"mezcla",
|
||||
"drogas",
|
||||
"vivienda",
|
||||
"x",
|
||||
"mezcal",
|
||||
"escuchar",
|
||||
"coronel",
|
||||
"completamente",
|
||||
|
@ -2047,7 +2047,7 @@
|
|||
"porcentaje",
|
||||
"artes",
|
||||
"vienen",
|
||||
"iii",
|
||||
"fisco",
|
||||
"villa",
|
||||
"ah",
|
||||
"Nicaragua",
|
||||
|
@ -2130,7 +2130,7 @@
|
|||
"indios",
|
||||
"raíz",
|
||||
"John",
|
||||
"xix",
|
||||
"gozo",
|
||||
"recordó",
|
||||
"absoluto",
|
||||
"agricultura",
|
||||
|
@ -2599,7 +2599,7 @@
|
|||
"cumplimiento",
|
||||
"transición",
|
||||
"campeón",
|
||||
"xx",
|
||||
"termostato",
|
||||
"verse",
|
||||
"anteriormente",
|
||||
"defender",
|
||||
|
@ -2711,7 +2711,7 @@
|
|||
"subir",
|
||||
"iniciar",
|
||||
"droga",
|
||||
"iv",
|
||||
"tsunami",
|
||||
"asegurar",
|
||||
"entusiasmo",
|
||||
"prestigio",
|
||||
|
@ -3215,7 +3215,7 @@
|
|||
"dama",
|
||||
"líquido",
|
||||
"estarán",
|
||||
"xviii",
|
||||
"parmesano",
|
||||
"decidir",
|
||||
"tribunales",
|
||||
"calma",
|
||||
|
@ -3410,7 +3410,7 @@
|
|||
"condena",
|
||||
"daban",
|
||||
"respaldo",
|
||||
"PNV",
|
||||
"textil",
|
||||
"sufre",
|
||||
"tristeza",
|
||||
"regionales",
|
||||
|
@ -3563,7 +3563,7 @@
|
|||
"veremos",
|
||||
"domicilio",
|
||||
"escucha",
|
||||
"UGT",
|
||||
"autoescuela",
|
||||
"novia",
|
||||
"caras",
|
||||
"reflejo",
|
||||
|
@ -3710,7 +3710,7 @@
|
|||
"grasa",
|
||||
"incluyen",
|
||||
"poseen",
|
||||
"xvi",
|
||||
"embrismo",
|
||||
"compuesto",
|
||||
"determinación",
|
||||
"viejas",
|
||||
|
@ -3755,7 +3755,7 @@
|
|||
"escenas",
|
||||
"montaje",
|
||||
"supongo",
|
||||
"TVE",
|
||||
"vasto",
|
||||
"abandono",
|
||||
"Irene",
|
||||
"modificación",
|
||||
|
@ -3972,7 +3972,7 @@
|
|||
"retirada",
|
||||
"decirse",
|
||||
"soberanía",
|
||||
"xvii",
|
||||
"parlamentarismo",
|
||||
"basado",
|
||||
"Núñez",
|
||||
"anuales",
|
||||
|
@ -4063,7 +4063,7 @@
|
|||
"cálculo",
|
||||
"malas",
|
||||
"propietario",
|
||||
"puta",
|
||||
"auriculares",
|
||||
"efectuar",
|
||||
"fuimos",
|
||||
"vivió",
|
||||
|
@ -5373,7 +5373,7 @@
|
|||
"clínico",
|
||||
"entraba",
|
||||
"tele",
|
||||
"w",
|
||||
"wolframio",
|
||||
"crímenes",
|
||||
"emisoras",
|
||||
"plantear",
|
||||
|
@ -5841,7 +5841,7 @@
|
|||
"placas",
|
||||
"introduce",
|
||||
"placa",
|
||||
"vii",
|
||||
"placenta",
|
||||
"volúmenes",
|
||||
"establecidos",
|
||||
"parámetros",
|
||||
|
@ -6167,7 +6167,7 @@
|
|||
"frenar",
|
||||
"quieras",
|
||||
"salarial",
|
||||
"xiii",
|
||||
"fisgar",
|
||||
"catedrático",
|
||||
"hubo",
|
||||
"patente",
|
||||
|
@ -6211,7 +6211,7 @@
|
|||
"afectada",
|
||||
"IVA",
|
||||
"portal",
|
||||
"xxi",
|
||||
"pomada",
|
||||
"despertó",
|
||||
"levantado",
|
||||
"rompe",
|
||||
|
@ -6401,7 +6401,7 @@
|
|||
"participado",
|
||||
"tregua",
|
||||
"horizontal",
|
||||
"che",
|
||||
"cheque",
|
||||
"divina",
|
||||
"Márquez",
|
||||
"sociología",
|
||||
|
@ -6610,7 +6610,7 @@
|
|||
"grita",
|
||||
"joyas",
|
||||
"mercancías",
|
||||
"ce",
|
||||
"ceniza",
|
||||
"ocupaba",
|
||||
"salí",
|
||||
"Barça",
|
||||
|
@ -6726,7 +6726,7 @@
|
|||
"producciones",
|
||||
"pedirle",
|
||||
"trasladado",
|
||||
"xii",
|
||||
"metalingüística",
|
||||
"buscado",
|
||||
"romana",
|
||||
"exponer",
|
||||
|
@ -6842,7 +6842,7 @@
|
|||
"generado",
|
||||
"mármol",
|
||||
"tomarse",
|
||||
"xv",
|
||||
"marciano",
|
||||
"engaño",
|
||||
"esplendor",
|
||||
"formó",
|
||||
|
@ -7166,7 +7166,7 @@
|
|||
"bs",
|
||||
"medianoche",
|
||||
"moción",
|
||||
"q",
|
||||
"quarán",
|
||||
"unió",
|
||||
"mencionada",
|
||||
"encargó",
|
||||
|
@ -7473,7 +7473,7 @@
|
|||
"meterse",
|
||||
"mono",
|
||||
"publicados",
|
||||
"RTVE",
|
||||
"futbolista",
|
||||
"matado",
|
||||
"privilegios",
|
||||
"echado",
|
||||
|
@ -7723,7 +7723,7 @@
|
|||
"acude",
|
||||
"aprecia",
|
||||
"girar",
|
||||
"ja",
|
||||
"jarrón",
|
||||
"ligado",
|
||||
"fundamentos",
|
||||
"magnífica",
|
||||
|
@ -7953,7 +7953,7 @@
|
|||
"significados",
|
||||
"visuales",
|
||||
"vacíos",
|
||||
"viii",
|
||||
"visualización",
|
||||
"bancario",
|
||||
"dominicano",
|
||||
"japoneses",
|
||||
|
@ -8288,7 +8288,7 @@
|
|||
"desconcierto",
|
||||
"descubrimientos",
|
||||
"detectado",
|
||||
"to",
|
||||
"toco",
|
||||
"apartados",
|
||||
"frescos",
|
||||
"lata",
|
||||
|
@ -8460,7 +8460,7 @@
|
|||
"reconstruir",
|
||||
"secuencias",
|
||||
"coincidieron",
|
||||
"Guevara",
|
||||
"transistor",
|
||||
"antropología",
|
||||
"Benítez",
|
||||
"disparar",
|
||||
|
@ -8647,7 +8647,7 @@
|
|||
"hortalizas",
|
||||
"inventado",
|
||||
"subraya",
|
||||
"xiv",
|
||||
"algoritmos",
|
||||
"Cantabria",
|
||||
"chimenea",
|
||||
"perdona",
|
||||
|
@ -9095,7 +9095,7 @@
|
|||
"incumplimiento",
|
||||
"manzano",
|
||||
"trágica",
|
||||
"xi",
|
||||
"trucha",
|
||||
"campesina",
|
||||
"contenía",
|
||||
"Liaño",
|
||||
|
@ -9318,7 +9318,7 @@
|
|||
"condado",
|
||||
"dormida",
|
||||
"explorar",
|
||||
"ix",
|
||||
"internacionalización",
|
||||
"literarias",
|
||||
"Palencia",
|
||||
"activamente",
|
||||
|
@ -9500,7 +9500,7 @@
|
|||
"arrastra",
|
||||
"ciclismo",
|
||||
"conoces",
|
||||
"du",
|
||||
"dudoso",
|
||||
"realizador",
|
||||
"velo",
|
||||
"cobran",
|
||||
|
@ -9752,7 +9752,7 @@
|
|||
"irregulares",
|
||||
"narcotraficantes",
|
||||
"salva",
|
||||
"Stalin",
|
||||
"toalla",
|
||||
"desarrolladas",
|
||||
"incluía",
|
||||
"maduro",
|
||||
|
|
|
@ -288,7 +288,7 @@
|
|||
"tú",
|
||||
"derecho",
|
||||
"verdad",
|
||||
"maría",
|
||||
"María",
|
||||
"unidos",
|
||||
"podría",
|
||||
"sería",
|
||||
|
@ -566,7 +566,7 @@
|
|||
"importancia",
|
||||
"cuales",
|
||||
"contrario",
|
||||
"manuel",
|
||||
"Manuel",
|
||||
"García",
|
||||
"fuerte",
|
||||
"sol",
|
||||
|
@ -683,7 +683,7 @@
|
|||
"viene",
|
||||
"permite",
|
||||
"análisis",
|
||||
"argentina",
|
||||
"Argentina",
|
||||
"acto",
|
||||
"hechos",
|
||||
"tiempos",
|
||||
|
@ -774,7 +774,7 @@
|
|||
"carrera",
|
||||
"cierta",
|
||||
"sola",
|
||||
"PSOE",
|
||||
"rincón",
|
||||
"lejos",
|
||||
"juez",
|
||||
"características",
|
||||
|
@ -832,12 +832,12 @@
|
|||
"llamado",
|
||||
"técnica",
|
||||
"título",
|
||||
"s",
|
||||
"electricidad",
|
||||
"principios",
|
||||
"octubre",
|
||||
"volvió",
|
||||
"período",
|
||||
"g",
|
||||
"gastrópodo",
|
||||
"encontrar",
|
||||
"democracia",
|
||||
"aumento",
|
||||
|
@ -900,7 +900,7 @@
|
|||
"cama",
|
||||
"aun",
|
||||
"presenta",
|
||||
"PP",
|
||||
"pomada",
|
||||
"revolución",
|
||||
"busca",
|
||||
"abril",
|
||||
|
@ -989,7 +989,7 @@
|
|||
"líder",
|
||||
"hospital",
|
||||
"diversas",
|
||||
"rafael",
|
||||
"Rafael",
|
||||
"vuelve",
|
||||
"destino",
|
||||
"torno",
|
||||
|
|
|
@ -149,7 +149,6 @@
|
|||
<ul>
|
||||
<li>
|
||||
Allow you to view result history of previous tests you completed
|
||||
completed
|
||||
</li>
|
||||
<li>
|
||||
Save results from tests you take and show you statistics based on
|
||||
|
|
125
static/quotes/albanian.json
Normal file
125
static/quotes/albanian.json
Normal file
|
@ -0,0 +1,125 @@
|
|||
{
|
||||
"language": "albanian",
|
||||
"groups": [
|
||||
[0, 100],
|
||||
[101, 300],
|
||||
[301, 600],
|
||||
[601, 9999]
|
||||
],
|
||||
"quotes": [
|
||||
{
|
||||
"text": "O malet' e Shqipërisë e ju o lisat' e gjatë!Fushat e gjëra me lule, q'u kam ndër mënt dit' e natë!Ju bregore bukuroshe e ju lumenjt' e kulluar!Çuka, kodra, brinja, gërxhe dhe pylle të gjelbëruar!Do të këndonj bagëtinë që mbani ju e ushqeni,O vendëthit e bekuar, ju mëndjen ma dëfreni.",
|
||||
"source": "Bagëti e Bujqësi",
|
||||
"length": 284,
|
||||
"id": 1
|
||||
},
|
||||
{
|
||||
"text": "Njeriu në jetë ka nevoj për 1 filxhan shkencë, 1 shishe kujdes, dhe 1 oqean durim",
|
||||
"source": "Naim Frashëri",
|
||||
"length": 81,
|
||||
"id": 2
|
||||
},
|
||||
{
|
||||
"text": "Nëse do të mbjellësh për një vit, mbill misër e grurë. Nëse do të mbjellësh përgjithmonë, mbill arsim e kulturë.",
|
||||
"source": "Sami Frashëri",
|
||||
"length": 112,
|
||||
"id": 3
|
||||
},
|
||||
{
|
||||
"text": "Njeriu mund të zgjedhë cilëndo fe që ka trashëguar apo që i pëlqen, por s'mund të zgjedhë një tjetër kombësi dhe të luftojë të tijën, pa vënë në ballë një vulë të madhe prej tradhtari.",
|
||||
"source": "Fan Noli",
|
||||
"length": 184,
|
||||
"id": 4
|
||||
},
|
||||
{
|
||||
"text": "Thjeshtësia dhe natyrshmëria janë shumë herë veshja e vetme e një mendimi të thellë që mbetet brez pas brezi.",
|
||||
"source": "Mitrush Kuteli",
|
||||
"length": 109,
|
||||
"id": 5
|
||||
},
|
||||
{
|
||||
"text": "Vritmëni, po ma ruani gjakun se do t’u duhet nipërve dhe stërnipërve tuaj të shkruajnë gjuhën shqipe.",
|
||||
"source": "Petro Nini Luarasi",
|
||||
"length": 101,
|
||||
"id": 6
|
||||
},
|
||||
{
|
||||
"text": "Duke u ngritur përmbi egoizmat e pafuqishëm dhe mëritë e pafrytshme vetjake, le të ulim kokat e të punojmë për formimin e një Shqipërie ku poshtërsia keqbërëse e armiqve tanë trashëgimtarë t'i lërë vendin drejtësisë dhe ndershmërisë së mëkëmbur të stërgjyshërve tanë. Boll duke krasitur degë kuturu, dhe me një vendosmëri të ftohtë por të pamëshirshme, le të japim goditjen përfundimtare në rrënjët e së keqes.",
|
||||
"source": "Faik Konica",
|
||||
"length": 410,
|
||||
"id": 7
|
||||
},
|
||||
{
|
||||
"text": "Le të sulemi nën flamurin e kuq në flakë të luftës, që të na drithërohet trupi nga dehja e barutit, që të na ndizet shpirti nga zjarri i shenjtë i lirisë dhe le të vdesirn duke thirrur: “Rroftë Shqipëria“.",
|
||||
"source": "Fan Noli",
|
||||
"length": 205,
|
||||
"id": 8
|
||||
},
|
||||
{
|
||||
"text": "“Kujdestar surrat patate, mirë ja bëmë zotërisë sate.” “Ç’ti bëj drejtorit që është zemërmirë, pa jua tregoja unëqejfin juve.”",
|
||||
"source": "Lulekuqe mbi mure",
|
||||
"length": 126,
|
||||
"id": 9
|
||||
},
|
||||
{
|
||||
"text": "“Shitën gomarin, blenë biçikleta e çoç u duket vetja.” “Po si jeni ? C'thonë këta katundaret këtej. Marrin ndonjëçikë erë nga jeta?”",
|
||||
"source": "Zonja nga Qyteti",
|
||||
"length": 132,
|
||||
"id": 10
|
||||
},
|
||||
{
|
||||
"text": "OHANA do te thote familje dhe familja do te thote qe askush nuk braktiset apo harrohet",
|
||||
"source": "Lilo & Stitch",
|
||||
"length": 86,
|
||||
"id": 11
|
||||
},
|
||||
{
|
||||
"text": "Ty Milona kaur i derit, je ardhur ne keto ane... Mato ty njeri i madh.... Ha gjiz agush ha, se te ben esell.....",
|
||||
"source": "Njeriu me top",
|
||||
"length": 112,
|
||||
"id": 12
|
||||
},
|
||||
{
|
||||
"text": "Kam dëgjuar se Bin Bashi i Gjirokastrës paguan shumë para për kokën time. Çoj selam e i thuaj se Çerçiz Topulli me shokët është shëndosh e mirë si do vet zoti. Ti vër gishtin kokës e ta di sigurt se unë QË KUR KAM LER AS JAM SHITUR E AS JAM BLER",
|
||||
"source": "Liri a vdekje",
|
||||
"length": 245,
|
||||
"id": 13
|
||||
},
|
||||
{
|
||||
"text": "Në pyestë nënëja për mua. I thoni që u martua. Në pyeste se ç'nuse mori. Tre plumba te kraharori. Në pyeste se ç'krushq i vanë. Sorrat e korbat e hanë.",
|
||||
"source": "Balada E Kurbinit",
|
||||
"length": 151,
|
||||
"id": 14
|
||||
},
|
||||
{
|
||||
"text": "Çe ke në terezi ti, i fut një tralala edhe…“Po kjo tona, kjo tona thuaj, që nuk hahet as me vaj e as me uthull.“Krushqi me Jovan Bregun? Pu pu pu…“Irenkë pse të djeg miza moj xhan?“Po kur u bë dhe Sandër Mafishja, i biri i tetos të bëjë dashuriçka poshtë e përpjetë, mos ngeltë njeri më këmbë.“S’kisha bërë ndonjëherë nga këto anonimet, thashë ta provoja njëherë.“A drejtor, a drejtor. O të bëj krushk , o plaça në vend plaça!“Me kë ishe të keqen xhaxhi? Me një shoqe me pantallona eee?“O Fredi, është babai im ai. Pse ai që shani ju, nuk është i imi ai?“I zbret shkallët fap e fap e fap, flutur që iu bëftë mamaja.“Po qan ti? Epo qaj plas. Irena mos qaj ti Irena, mos qaj.“Desh ju lashë dhe juve pa fejuar.“Po unë zgjodha njerinë o ba.“Plasën çokollatat edhe këndeja. Po pse mo kaq budallenj jeni ju djemtë e fisit tonë?“Të kam ndjekur, të kam vëzhguar e, të kam studiuar ee.“Po mi shoqe po. Po jo mi shoqe jo. Vani, po qenkan thyer vezët mor i uruar! – Po jo moj Liri, ishin ca si të buta vetë.",
|
||||
"source": "Pallati 176",
|
||||
"length": 997,
|
||||
"id": 15
|
||||
},
|
||||
{
|
||||
"text": "E gjetëm Vangjel Gjino, u poqën fiqtë Po bota, ç’do thotë bota? Ka ligj, por ka dhe Maliq. E hodhët dobiçin në ferrë dhe tani vini të na bëni budallaçka ne. Është fati im, më ra nga qielli. Jam grua e martuar, kam një burrë. Bëri ç’bëri, mori atë që deshi.",
|
||||
"source": "Përrallë nga e kaluara",
|
||||
"length": 256,
|
||||
"id": 16
|
||||
},
|
||||
{
|
||||
"text": "Pulave u ka hije të kakarisin vetëm në kotec. Me cilin sy e pe, me atë me xham apo me atë pa xham? - Do pi, do dehem. – Të piftë dreqi në bark!",
|
||||
"source": "Kapedani",
|
||||
"length": 143,
|
||||
"id": 17
|
||||
},
|
||||
{
|
||||
"text": "Gërmo Tare, gërmo se qenin e ngordhur ke për të gjetur. Çohu, se të ka sjellë babi bukë lepurushi.",
|
||||
"source": "Përballimi",
|
||||
"length": 98,
|
||||
"id": 18
|
||||
},
|
||||
{
|
||||
"text": "Jo po ta dijë ai se po u nxeva unë, i thyej të gjitha, me pjata e filxhanë.",
|
||||
"source": "Shi ne Plazh",
|
||||
"length": 75,
|
||||
"id": 19
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1430,7 +1430,7 @@
|
|||
"id": 238
|
||||
},
|
||||
{
|
||||
"text": "Worte sind, meinen nicht so bescheidenen Meinung nach, unsere wohl unerschöpflichste Quelle der Magie, Harry. Sie können Schmerz sowohl zufügen als auch lindern.",
|
||||
"text": "Worte sind, meiner nicht so bescheidenen Meinung nach, unsere wohl unerschöpflichste Quelle der Magie, Harry. Sie können Schmerz sowohl zufügen als auch lindern.",
|
||||
"source": "Harry Potter und die Heiligtümer des Todes",
|
||||
"length": 161,
|
||||
"id": 239
|
||||
|
@ -1742,13 +1742,13 @@
|
|||
"id": 290
|
||||
},
|
||||
{
|
||||
"text": "Sie stolpert, und neben ihr bewegte sich etwas. Als sie sich umdrehte, sah sie einen zweiten Mann auf sich zukommen. Irgendetwas stimmte nicht mit ihm – mit seiner Haut, mit seinem Gesicht es sah nicht echt au. Fast wie aus Papier. Sie versuchte, ihn wegzustoßen, doch es war, als boxe man in einen Luftsack. Eine Faust flog ihr entgegen, doch im Gegensatz zu seinem Körper war die Faust kompakt und kräftig, und er riss ihr den Kopf zurück. Sie strauchelte, und er wollte sie packen, doch dann war Skulduggery zur Stelle und schleuderte ihn weg.",
|
||||
"text": "Sie stolpert, und neben ihr bewegte sich etwas. Als sie sich umdrehte, sah sie einen zweiten Mann auf sich zukommen. Irgendetwas stimmte nicht mit ihm - mit seiner Haut, mit seinem Gesicht es sah nicht echt au. Fast wie aus Papier. Sie versuchte, ihn wegzustoßen, doch es war, als boxe man in einen Luftsack. Eine Faust flog ihr entgegen, doch im Gegensatz zu seinem Körper war die Faust kompakt und kräftig, und er riss ihr den Kopf zurück. Sie strauchelte, und er wollte sie packen, doch dann war Skulduggery zur Stelle und schleuderte ihn weg.",
|
||||
"source": "Skulduggery Pleasant – Der Gentleman mit der Feuerhand",
|
||||
"length": 546,
|
||||
"id": 291
|
||||
},
|
||||
{
|
||||
"text": "Das Leben ist ein Kreislauf Skulduggery, nicht wahr? Es wiederholt sich alles, das ist unser Schicksal. Du – von meiner Gnade abhängig. Ich – gnadenlos.",
|
||||
"text": "Das Leben ist ein Kreislauf Skulduggery, nicht wahr? Es wiederholt sich alles, das ist unser Schicksal. Du - von meiner Gnade abhängig. Ich - gnadenlos.",
|
||||
"source": "Skulduggery Pleasant – Der Gentleman mit der Feuerhand",
|
||||
"length": 152,
|
||||
"id": 292
|
||||
|
@ -1844,7 +1844,7 @@
|
|||
"id": 307
|
||||
},
|
||||
{
|
||||
"text": "Ich mag sie. Durch sie probierst du neue Sachen aus, das tut dir gut. Ich mein’s ernst – du wirst als hättest du weniger Angst, wenn du bei ihr bist. Das ist schön und es macht mich auch irgendwie traurig.",
|
||||
"text": "Ich mag sie. Durch sie probierst du neue Sachen aus, das tut dir gut. Ich mein’s ernst - du wirst als hättest du weniger Angst, wenn du bei ihr bist. Das ist schön und es macht mich auch irgendwie traurig.",
|
||||
"source": "Tote Mädchen lügen nicht",
|
||||
"length": 205,
|
||||
"id": 308
|
||||
|
@ -1868,13 +1868,13 @@
|
|||
"id": 311
|
||||
},
|
||||
{
|
||||
"text": "Millionen sterben an Krankheiten, die wir heilen können. Millionen leben in Armut, obwohl es genug für alle gibt. Wir zerstören unsere Biosphäre, obwohl wir wissen, dass sie unsere einzige Heimat ist. Wir bedrohen uns gegenseitig mit Atomwaffen, auch wenn wir wissen, wohin das führen kann. Wir lieben Lebendiges, lassen aber massenhaftes Artensterben zu. Und dann der Ganze Rest – Genozid, Folter, Versklavung, häusliche Gewalt bis hin zum Mord, Kindesmissbrauch, Schießereien an Schulen, Vergewaltigung, tagtäglich eine schier endlose Zahl skandalöser Gräueltaten. Wir leben mit all diesen Grausamkeiten und sind nicht mal erstaunt, wenn wir trotzdem unser Glück, sogar Liebe finden. Künstliche Intelligenzen sind da weniger gut geschützt.",
|
||||
"text": "Millionen sterben an Krankheiten, die wir heilen können. Millionen leben in Armut, obwohl es genug für alle gibt. Wir zerstören unsere Biosphäre, obwohl wir wissen, dass sie unsere einzige Heimat ist. Wir bedrohen uns gegenseitig mit Atomwaffen, auch wenn wir wissen, wohin das führen kann. Wir lieben Lebendiges, lassen aber massenhaftes Artensterben zu. Und dann der Ganze Rest - Genozid, Folter, Versklavung, häusliche Gewalt bis hin zum Mord, Kindesmissbrauch, Schießereien an Schulen, Vergewaltigung, tagtäglich eine schier endlose Zahl skandalöser Gräueltaten. Wir leben mit all diesen Grausamkeiten und sind nicht mal erstaunt, wenn wir trotzdem unser Glück, sogar Liebe finden. Künstliche Intelligenzen sind da weniger gut geschützt.",
|
||||
"source": "Maschinen wie ich",
|
||||
"length": 741,
|
||||
"id": 312
|
||||
},
|
||||
{
|
||||
"text": "Werkseinstellungen – ein modernes Synonym für Schicksal.",
|
||||
"text": "Werkseinstellungen - ein modernes Synonym für Schicksal.",
|
||||
"source": "Maschinen wie ich",
|
||||
"length": 56,
|
||||
"id": 313
|
||||
|
@ -1910,7 +1910,7 @@
|
|||
"id": 318
|
||||
},
|
||||
{
|
||||
"text": "Vielleicht bin ich tot. Vielleicht wird da nie noch was sein. Die Lebenden in ihrer Welt weitermachen – sich berühren, gehen. Und ich werde in dieser leeren Welt bleiben und lautlos gegen die Glasscheiben zwischen uns pochen.",
|
||||
"text": "Vielleicht bin ich tot. Vielleicht wird da nie noch was sein. Die Lebenden in ihrer Welt weitermachen - sich berühren, gehen. Und ich werde in dieser leeren Welt bleiben und lautlos gegen die Glasscheiben zwischen uns pochen.",
|
||||
"source": "Bevor ich sterbe",
|
||||
"length": 225,
|
||||
"id": 319
|
||||
|
@ -1946,7 +1946,7 @@
|
|||
"id": 324
|
||||
},
|
||||
{
|
||||
"text": "Ich möchte, dass ihr alle wisst, dass wir die erste Verteidigungslinie sind. Genau genommen sind wir die einzige Verteidigungslinie. Falls wir scheitern, wird es für die anderen – wer immer das sein wird – nicht mehr allzu viel zu tun geben. Was ich damit sagen will, ist, dass Versagen an dieser Stelle keine wirklich clevere Alternative ist. Wir dürfen nicht versagen. Hat das jeder verstanden? Versagen ist negativ, und wir tun uns auch auf lange Sicht keinen Gefallen damit, und ich glaube, ich habe jetzt den Faden verloren und weiß nicht mehr, was ich eigentlich sagen wollte. Aber ich weiß, womit ich angefangen habe, und das müsst ihr euch merken. Hat jemand meinen Hut gesehen?",
|
||||
"text": "Ich möchte, dass ihr alle wisst, dass wir die erste Verteidigungslinie sind. Genau genommen sind wir die einzige Verteidigungslinie. Falls wir scheitern, wird es für die anderen - wer immer das sein wird - nicht mehr allzu viel zu tun geben. Was ich damit sagen will, ist, dass Versagen an dieser Stelle keine wirklich clevere Alternative ist. Wir dürfen nicht versagen. Hat das jeder verstanden? Versagen ist negativ, und wir tun uns auch auf lange Sicht keinen Gefallen damit, und ich glaube, ich habe jetzt den Faden verloren und weiß nicht mehr, was ich eigentlich sagen wollte. Aber ich weiß, womit ich angefangen habe, und das müsst ihr euch merken. Hat jemand meinen Hut gesehen?",
|
||||
"source": "Skulduggery Pleasant – Das Groteskerium kehrt zurück",
|
||||
"length": 686,
|
||||
"id": 325
|
||||
|
|
Loading…
Add table
Reference in a new issue