From 5f4c64e576ce77001900ff1648bd5f31a5bb2b3b Mon Sep 17 00:00:00 2001 From: larssand Date: Sun, 22 Mar 2026 18:27:02 +0100 Subject: [PATCH] =?UTF-8?q?Overlay=20visar=20bara=20launch-/copy-knappar?= =?UTF-8?q?=20OBS-inst=C3=A4llningarna=20ligger=20i=20Inst=C3=A4llningar?= =?UTF-8?q?=20dropdown-problemet=20f=C3=B6r=20OBS-config=20=C3=A4r=20kvar?= =?UTF-8?q?=20l=C3=B6st=20d=C3=A4r=20ocks=C3=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 4 +- src/app.js | 153 +++++++++++++++++++++++++++++------------------------ 2 files changed, 87 insertions(+), 70 deletions(-) diff --git a/index.html b/index.html index 9af3770..f1f473d 100644 --- a/index.html +++ b/index.html @@ -10,7 +10,7 @@ href="https://fonts.googleapis.com/css2?family=Barlow:wght@400;500;600;700&family=Orbitron:wght@500;700;800&display=swap" rel="stylesheet" /> - +
@@ -66,6 +66,6 @@ - + diff --git a/src/app.js b/src/app.js index 1248780..1f6f228 100644 --- a/src/app.js +++ b/src/app.js @@ -3006,7 +3006,7 @@ function tickClock() { if (currentView === "dashboard" && timerState.changed) { renderView(); } - if (currentView === "overlay" && active) { + if (overlayMode && currentView === "overlay" && active) { renderView(); } if (timerState.changed) { @@ -6464,42 +6464,6 @@ function renderOverlay() {
-
-
- ${t("overlay.obs_config")} - ${t("overlay.obs_public_hint")} -
-
- - - - - - - - - - - -
-
` @@ -6674,37 +6638,6 @@ function renderOverlay() { } window.prompt("Copy OBS URL", url); }); - - [ - ["obsRows", "rows", (value) => Math.max(3, Math.min(12, Number(value) || DEFAULT_OBS_OVERLAY_SETTINGS.rows))], - ["obsLayout", "layout", (value) => OBS_LAYOUTS.includes(String(value || "").toLowerCase()) ? String(value).toLowerCase() : DEFAULT_OBS_OVERLAY_SETTINGS.layout], - ["obsTheme", "theme", (value) => OBS_THEMES.includes(String(value || "").toLowerCase()) ? String(value).toLowerCase() : DEFAULT_OBS_OVERLAY_SETTINGS.theme], - ["obsPublicToken", "publicToken", (value) => String(value || "").trim()], - ["obsShowClock", "showClock", (value, el) => Boolean(el?.checked)], - ["obsShowFastest", "showFastest", (value, el) => Boolean(el?.checked)], - ["obsShowGrid", "showGrid", (value, el) => Boolean(el?.checked)], - ["obsShowLaps", "showLaps", (value, el) => Boolean(el?.checked)], - ["obsShowResult", "showResult", (value, el) => Boolean(el?.checked)], - ["obsShowBest", "showBest", (value, el) => Boolean(el?.checked)], - ["obsShowGap", "showGap", (value, el) => Boolean(el?.checked)], - ].forEach(([id, key, mapper]) => { - const el = document.getElementById(id); - if (!el) { - return; - } - const handler = () => { - const next = normalizeObsOverlaySettings({ - ...state.settings.obsOverlay, - [key]: mapper(el.value, el), - }); - state.settings.obsOverlay = next; - saveState(); - }; - el.addEventListener("change", handler); - if (el instanceof HTMLInputElement && (el.type === "number" || el.type === "text")) { - el.addEventListener("input", handler); - } - }); } function renderObsOverlay(active, leaderboard, result, sessionTiming, branding) { @@ -7350,6 +7283,49 @@ function renderSettings() { +
+

${t("overlay.obs_config")}

+
+

${t("overlay.obs_public_hint")}

+
+ + +
+
+
+
+ + + + + + + + + + + +
+
+
+

${t("settings.managed_ammc")}

@@ -7480,6 +7456,47 @@ function renderSettings() { } }, 180); }); + document.getElementById("settingsLaunchObs")?.addEventListener("click", () => openOverlayWindow("obs", { public: true })); + document.getElementById("settingsCopyObsUrl")?.addEventListener("click", async () => { + const url = buildOverlayUrl("obs", { public: true }); + if (navigator.clipboard?.writeText) { + await navigator.clipboard.writeText(url).catch(() => {}); + return; + } + window.prompt("Copy OBS URL", url); + }); + + [ + ["obsRows", "rows", (value) => Math.max(3, Math.min(12, Number(value) || DEFAULT_OBS_OVERLAY_SETTINGS.rows))], + ["obsLayout", "layout", (value) => OBS_LAYOUTS.includes(String(value || "").toLowerCase()) ? String(value).toLowerCase() : DEFAULT_OBS_OVERLAY_SETTINGS.layout], + ["obsTheme", "theme", (value) => OBS_THEMES.includes(String(value || "").toLowerCase()) ? String(value).toLowerCase() : DEFAULT_OBS_OVERLAY_SETTINGS.theme], + ["obsPublicToken", "publicToken", (value) => String(value || "").trim()], + ["obsShowClock", "showClock", (value, el) => Boolean(el?.checked)], + ["obsShowFastest", "showFastest", (value, el) => Boolean(el?.checked)], + ["obsShowGrid", "showGrid", (value, el) => Boolean(el?.checked)], + ["obsShowLaps", "showLaps", (value, el) => Boolean(el?.checked)], + ["obsShowResult", "showResult", (value, el) => Boolean(el?.checked)], + ["obsShowBest", "showBest", (value, el) => Boolean(el?.checked)], + ["obsShowGap", "showGap", (value, el) => Boolean(el?.checked)], + ].forEach(([id, key, mapper]) => { + const el = document.getElementById(id); + if (!el) { + return; + } + const handler = () => { + const next = normalizeObsOverlaySettings({ + ...state.settings.obsOverlay, + [key]: mapper(el.value, el), + }); + state.settings.obsOverlay = next; + saveState(); + }; + el.addEventListener("change", handler); + if (el instanceof HTMLInputElement && (el.type === "number" || el.type === "text")) { + el.addEventListener("input", handler); + } + }); + document.getElementById("settingsTestBackend")?.addEventListener("click", async () => { await pingBackend(); renderView();