From 642c03abdcdd1c6f88c66238e788b7d1920086ab Mon Sep 17 00:00:00 2001 From: Christian Fehmer Date: Thu, 27 Feb 2025 10:48:59 +0100 Subject: [PATCH 1/4] fix(docker): fix configuration endpoint, add configuration export (@fehmer) (#6317) - fixes /configure endpoint not working in docker image because of the missing `private` directory - adds `export configuration` button to api server configuration --- .eslintignore | 1 + backend/private/index.html | 1 + backend/private/script.js | 23 +++++++++++++++++++++++ backend/private/style.css | 10 ++++++++-- docker/backend/Dockerfile | 1 + docs/SELF_HOSTING.md | 4 ++-- 6 files changed, 36 insertions(+), 4 deletions(-) diff --git a/.eslintignore b/.eslintignore index 26f7c9ee66a5..a9595933d7de 100644 --- a/.eslintignore +++ b/.eslintignore @@ -2,4 +2,5 @@ backend/dist backend/__migration__ docker backend/scripts +backend/private **/vitest.config.js diff --git a/backend/private/index.html b/backend/private/index.html index fd4f83131bd7..c4b9ef1cac16 100644 --- a/backend/private/index.html +++ b/backend/private/index.html @@ -55,6 +55,7 @@

API Server Configuration

Save Changes
+
Export Configuration
diff --git a/backend/private/script.js b/backend/private/script.js index 593daae957d0..f794bbeef8ee 100644 --- a/backend/private/script.js +++ b/backend/private/script.js @@ -281,4 +281,27 @@ window.onload = async () => { saveButton.disabled = false; }, 3000); }); + + const exportButton = document.querySelector("#export"); + + exportButton.addEventListener("click", async () => { + download( + "backend-configuration.json", + JSON.stringify({ configuration: state }) + ); + }); }; + +function download(filename, text) { + let element = document.createElement("a"); + element.setAttribute( + "href", + "data:text/plain;charset=utf-8," + encodeURIComponent(text) + ); + element.setAttribute("download", filename); + + element.style.display = "none"; + document.body.appendChild(element); + element.click(); + document.body.removeChild(element); +} diff --git a/backend/private/style.css b/backend/private/style.css index 851b7fbe5dc1..1b274ef00684 100644 --- a/backend/private/style.css +++ b/backend/private/style.css @@ -74,7 +74,8 @@ body { background-color: #d84b4b; } -#save { +#save, +#export { position: fixed; right: 6rem; bottom: 3rem; @@ -90,7 +91,12 @@ body { transition: 0.125s; } -#save:hover { +#export { + bottom: 9rem; +} + +#save:hover, +#export:hover { background-color: var(--text-color); color: var(--bg-color); } diff --git a/docker/backend/Dockerfile b/docker/backend/Dockerfile index c45cd5a270ca..b73238ae9aef 100644 --- a/docker/backend/Dockerfile +++ b/docker/backend/Dockerfile @@ -29,6 +29,7 @@ COPY --from=builder /prod/backend/node_modules /app/backend/node_modules COPY --from=builder /prod/backend/dist /app/backend/dist COPY --from=builder /prod/backend/email-templates /app/backend/email-templates COPY --from=builder /prod/backend/redis-scripts /app/backend/redis-scripts +COPY --from=builder /prod/backend/private /app/backend/private ## to build directory WORKDIR /app/backend/dist diff --git a/docs/SELF_HOSTING.md b/docs/SELF_HOSTING.md index 18aa341422e5..80d4e25ce15d 100644 --- a/docs/SELF_HOSTING.md +++ b/docs/SELF_HOSTING.md @@ -168,8 +168,8 @@ If you don't want to update this file manually you can - open the backend url in your browser, e.g. `http://localhost:5005/configure/` - adjust the settings and click `Save Changes` -- open the configuration in your browser, e.g. `http://localhost:5005/configuration` -- copy everything from `data` into the `backend-configuration.json` file. +- click `Export Configuration` +- save the file as `backend-configuration.json`, overwriting the existing one. Example output from `http://localhost:5005/configuration`: ```json From ff2b354bb3390095f08bb41867e2ee75cf5a9632 Mon Sep 17 00:00:00 2001 From: Mihail Mojsoski Date: Thu, 27 Feb 2025 10:50:29 +0100 Subject: [PATCH 2/4] chore: typo in backend Dockerfile comment (@mihail-8480) (#6315) --- docker/backend/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/backend/Dockerfile b/docker/backend/Dockerfile index b73238ae9aef..e9b3774c417e 100644 --- a/docker/backend/Dockerfile +++ b/docker/backend/Dockerfile @@ -39,7 +39,7 @@ RUN mkdir -p /app/backend/dist/logs COPY ["docker/backend/entry-point.sh", "docker/backend/applyConfig.sh", "./"] -#run in env mode (no anticheat) +#run in dev mode (no anticheat) ENV MODE=dev EXPOSE 5005 From 04797b281f3c96ca9ef13fbabccd8f13072adab6 Mon Sep 17 00:00:00 2001 From: Miodec Date: Thu, 27 Feb 2025 10:57:14 +0100 Subject: [PATCH 3/4] fix(result page): clicking on daily leaderboard rank not navigating to the leaderboards page closes #6311 --- frontend/src/ts/event-handlers/test.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/frontend/src/ts/event-handlers/test.ts b/frontend/src/ts/event-handlers/test.ts index b99166ef6651..a8b324209b7c 100644 --- a/frontend/src/ts/event-handlers/test.ts +++ b/frontend/src/ts/event-handlers/test.ts @@ -12,6 +12,8 @@ import * as QuoteReportModal from "../modals/quote-report"; import * as QuoteSearchModal from "../modals/quote-search"; import * as CustomTextModal from "../modals/custom-text"; import * as PractiseWordsModal from "../modals/practise-words"; +import { navigate } from "../controllers/route-controller"; +import { getMode2 } from "../utils/misc"; $(".pageTest").on("click", "#testModesNotice .textButton", async (event) => { const attr = $(event.currentTarget).attr("commands"); @@ -84,3 +86,12 @@ $(".pageTest").on("click", "#practiseWordsButton", () => { } PractiseWordsModal.show(); }); + +$(".pageTest #dailyLeaderboardRank").on("click", async () => { + navigate( + `/leaderboards?type=daily&language=${Config.language}&mode2=${getMode2( + Config, + null + )}` + ); +}); From 94a320eb26ad3e3288a2a3b72088cca5c7650c14 Mon Sep 17 00:00:00 2001 From: Hemram Kumarapu <95411164+H4-MM-3R@users.noreply.github.com> Date: Thu, 27 Feb 2025 15:59:16 +0530 Subject: [PATCH 4/4] feat(theme): add solarized osaka (@H4-MM-3R) (#6287) --- frontend/static/themes/_list.json | 7 +++ frontend/static/themes/solarized_osaka.css | 56 ++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 frontend/static/themes/solarized_osaka.css diff --git a/frontend/static/themes/_list.json b/frontend/static/themes/_list.json index 0de5dc1c144d..ee561beeab96 100644 --- a/frontend/static/themes/_list.json +++ b/frontend/static/themes/_list.json @@ -398,6 +398,13 @@ "subColor": "#2aa198", "textColor": "#181819" }, + { + "name": "solarized_osaka", + "bgColor": "#00141a", + "mainColor": "#859900", + "subColor": "#2aa198", + "textColor": "#b58900" + }, { "name": "terra", "bgColor": "#0c100e", diff --git a/frontend/static/themes/solarized_osaka.css b/frontend/static/themes/solarized_osaka.css new file mode 100644 index 000000000000..da0fe6cb077d --- /dev/null +++ b/frontend/static/themes/solarized_osaka.css @@ -0,0 +1,56 @@ +:root { + --bg-color: #00141a; + --main-color: #859900; + --caret-color: #b58900; + --sub-color: #2aa198; + --sub-alt-color: #00222b; + --text-color: #eee8d5; + --error-color: #dc322f; + --error-extra-color: #9b225c; + --colorful-error-color: #d33682; + --colorful-error-extra-color: #9b225c; +} + +#words { + --correct-letter-color: var(--text-color); + --untyped-letter-color: #586e75; +} + +header #logo { + color: var(--text-color); +} + +header #logo .icon { + color: var(--text-color) !important; +} + +key { + color: var(--text-color); + background-color: var(--sub-alt-color); +} + +button.text:hover, +.button.text:hover, +.textButton:hover { + color: var(--caret-color); +} + +button.text.active, +.button.text.active, +.textButton.active { + color: var(--main-color); +} + +button:hover, +.button:hover, +input[type="button"]:hover, +input[type="reset"]:hover, +input[type="submit"]:hover { + color: var(--bg-color); + background: var(--caret-color); +} + +.scrollToTopButton:hover { + background: var(--caret-color); + color: var(--bg-color); +}