From 28044334c1304719371c8d3e7d5db0ae3e656ea7 Mon Sep 17 00:00:00 2001 From: Jack Date: Sun, 22 Aug 2021 17:29:40 +0100 Subject: [PATCH] allowing to load challenges from command line, keeping track of which challenge is active --- src/js/challenge-controller.js | 12 +++++++++++- src/js/commandline-lists.js | 25 +++++++++++++++++++++++++ src/js/config.js | 14 ++++++++++++++ src/js/popups/custom-text-popup.js | 2 ++ src/js/test/test-ui.js | 7 +++++++ 5 files changed, 59 insertions(+), 1 deletion(-) diff --git a/src/js/challenge-controller.js b/src/js/challenge-controller.js index 3cdbe9d0f..8deb30ec2 100644 --- a/src/js/challenge-controller.js +++ b/src/js/challenge-controller.js @@ -6,6 +6,15 @@ import * as CustomText from "./custom-text"; import * as TestLogic from "./test-logic"; import * as Funbox from "./funbox"; +export let active = null; + +export function clearActive() { + if (active) { + Notifications.add("Challenge cleared", 0); + active = null; + } +} + export async function setup(challengeName) { let list = await Misc.getChallengeList(); let challenge = list.filter((c) => c.name === challengeName)[0]; @@ -92,10 +101,11 @@ export async function setup(challengeName) { $(".page.pageTest").removeClass("hidden"); if (notitext === undefined) { - Notifications.add(`Challenge '${challengeName}' loaded.`, 0); + Notifications.add(`Challenge '${challenge.display}' loaded.`, 0); } else { Notifications.add("Challenge loaded. " + notitext, 0); } + active = challenge; } catch (e) { Notifications.add("Something went wrong: " + e, -1); } diff --git a/src/js/commandline-lists.js b/src/js/commandline-lists.js index cb2484a34..601680741 100644 --- a/src/js/commandline-lists.js +++ b/src/js/commandline-lists.js @@ -17,6 +17,7 @@ import * as PresetController from "./preset-controller"; import * as Commandline from "./commandline"; import * as CustomText from "./custom-text"; import * as Settings from "./settings"; +import * as ChallengeController from "./challenge-controller"; export let current = []; @@ -2151,6 +2152,24 @@ Misc.getThemesList().then((themes) => { }); }); +export let commandsChallenges = { + title: "Load challenge...", + list: [], +}; + +Misc.getChallengeList().then((challenges) => { + challenges.forEach((challenge) => { + commandsChallenges.list.push({ + id: "loadChallenge" + Misc.capitalizeFirstLetter(challenge.name), + noIcon: true, + display: challenge.display, + exec: () => { + ChallengeController.setup(challenge.name); + }, + }); + }); +}); + // export function showFavouriteThemesAtTheTop() { export function updateThemeCommands() { if (Config.favThemes.length > 0) { @@ -2790,6 +2809,12 @@ export let defaultCommands = { return canBailOut(); }, }, + { + id: "loadChallenge", + display: "Load challenge...", + icon: "fa-award", + subgroup: commandsChallenges, + }, { id: "joinDiscord", display: "Join the Discord server", diff --git a/src/js/config.js b/src/js/config.js index c4a2740e4..da9661329 100644 --- a/src/js/config.js +++ b/src/js/config.js @@ -18,6 +18,7 @@ import * as UI from "./ui"; import * as CommandlineLists from "./commandline-lists"; import * as BackgroundFilter from "./custom-background-filter"; import LayoutList from "./layouts"; +import * as ChallengeContoller from "./challenge-controller"; export let localStorageConfig = null; export let dbConfigLoaded = false; @@ -170,6 +171,7 @@ export function setNumbers(numb, nosave) { } else { $("#top .config .numbersMode .text-button").addClass("active"); } + ChallengeContoller.clearActive(); if (!nosave) saveToLocalStorage(); } @@ -197,6 +199,7 @@ export function setPunctuation(punc, nosave) { } else { $("#top .config .punctuationMode .text-button").addClass("active"); } + ChallengeContoller.clearActive(); if (!nosave) saveToLocalStorage(); } @@ -284,6 +287,7 @@ export function setMode(mode, nosave) { } // setPaceCaret("off", true); } + ChallengeContoller.clearActive(); if (!nosave) saveToLocalStorage(); } @@ -335,6 +339,7 @@ export function setFavThemes(themes, nosave) { export function setFunbox(funbox, nosave) { config.funbox = funbox ? funbox : "none"; + ChallengeContoller.clearActive(); if (!nosave) { saveToLocalStorage(); } @@ -507,6 +512,7 @@ export function setPaceCaret(val, nosave) { // val = "off"; // } config.paceCaret = val; + ChallengeContoller.clearActive(); TestUI.updateModesNotice(); PaceCaret.init(nosave); if (!nosave) saveToLocalStorage(); @@ -633,6 +639,7 @@ export function setShowAllLines(sal, nosave) { sal = false; } config.showAllLines = sal; + ChallengeContoller.clearActive(); if (!nosave) { saveToLocalStorage(); TestLogic.restart(); @@ -837,6 +844,7 @@ export function setShowLiveWpm(live, nosave) { } else { LiveWpm.hide(); } + ChallengeContoller.clearActive(); if (!nosave) saveToLocalStorage(); } @@ -912,6 +920,7 @@ export function setHighlightMode(mode, nosave) { } config.highlightMode = mode; // if(TestLogic.active){ + ChallengeContoller.clearActive(); try { if (!nosave) TestUI.updateWordElement(config.blindMode); } catch {} @@ -1025,6 +1034,7 @@ export function setTimeConfig(time, nosave) { $("#top .config .time .text-button[timeConfig='" + time + "']").addClass( "active" ); + ChallengeContoller.clearActive(); if (!nosave) saveToLocalStorage(); } @@ -1075,6 +1085,7 @@ export function setWordCount(wordCount, nosave) { $( "#top .config .wordCount .text-button[wordCount='" + wordCount + "']" ).addClass("active"); + ChallengeContoller.clearActive(); if (!nosave) saveToLocalStorage(); } @@ -1349,6 +1360,7 @@ export function setKeymapMode(mode, nosave) { $(".active-key").removeClass("active-key"); $(".keymap-key").attr("style", ""); config.keymapMode = mode; + ChallengeContoller.clearActive(); if (!nosave) TestLogic.restart(false, nosave); if (!nosave) saveToLocalStorage(); } @@ -1397,6 +1409,7 @@ export function setKeymapLayout(layout, nosave) { layout = "qwerty"; } config.keymapLayout = layout; + ChallengeContoller.clearActive(); Keymap.refreshKeys(layout, setKeymapLayout); if (!nosave) saveToLocalStorage(); } @@ -1406,6 +1419,7 @@ export function setLayout(layout, nosave) { layout = "qwerty"; } config.layout = layout; + ChallengeContoller.clearActive(); TestUI.updateModesNotice(); if (config.keymapLayout === "overrideSync") { Keymap.refreshKeys(config.keymapLayout, setKeymapLayout); diff --git a/src/js/popups/custom-text-popup.js b/src/js/popups/custom-text-popup.js index bac873f4d..ed17b8612 100644 --- a/src/js/popups/custom-text-popup.js +++ b/src/js/popups/custom-text-popup.js @@ -4,6 +4,7 @@ import * as Misc from "./misc"; import * as Notifications from "./notifications"; import * as TestLogic from "./test-logic"; import * as WordFilterPopup from "./word-filter-popup"; +import * as ChallengeController from "./challenge-controller"; let wrapper = "#customTextPopupWrapper"; let popup = "#customTextPopup"; @@ -151,6 +152,7 @@ $("#customTextPopup .apply").click(() => { ); } + ChallengeController.clearActive(); ManualRestart.set(); TestLogic.restart(); hide(); diff --git a/src/js/test/test-ui.js b/src/js/test/test-ui.js index 345ed49ad..e5c56731c 100644 --- a/src/js/test/test-ui.js +++ b/src/js/test/test-ui.js @@ -17,6 +17,7 @@ import * as Replay from "./replay"; import * as TestStats from "./test-stats"; import * as Misc from "./misc"; import * as TestUI from "./test-ui"; +import * as ChallengeController from "./challenge-controller"; export let currentWordElementIndex = 0; export let resultVisible = false; @@ -475,6 +476,12 @@ export function updateModesNotice() { ); } + if (ChallengeController.active) { + $(".pageTest #testModesNotice").append( + `
${ChallengeController.active.display}
` + ); + } + if (Config.mode === "zen") { $(".pageTest #testModesNotice").append( `
shift + enter to finish zen
`