Fix workbench dark theme and enlarge dialogs
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
(() => {
|
||||
"use strict";
|
||||
|
||||
const STORAGE_KEY = "cognitive-agent.glass-theme";
|
||||
|
||||
function normalizeTheme(value) {
|
||||
return value === "light" ? "light" : value === "dark" ? "dark" : "";
|
||||
}
|
||||
|
||||
function themeFromCookie() {
|
||||
try {
|
||||
return normalizeTheme(document.cookie
|
||||
.split(";")
|
||||
.map((part) => part.trim())
|
||||
.find((part) => part.startsWith(`${STORAGE_KEY}=`))
|
||||
?.slice(STORAGE_KEY.length + 1));
|
||||
} catch (_error) {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
function resolveInitialTheme() {
|
||||
const requested = normalizeTheme(new URLSearchParams(window.location.search).get("theme"));
|
||||
if (requested) return requested;
|
||||
try {
|
||||
const parentTheme = normalizeTheme(window.parent?.document?.documentElement?.dataset?.glassTheme);
|
||||
if (parentTheme) return parentTheme;
|
||||
} catch (_error) {
|
||||
// Standalone and cross-origin rendering continue with local preferences.
|
||||
}
|
||||
try {
|
||||
const stored = normalizeTheme(localStorage.getItem(STORAGE_KEY));
|
||||
if (stored) return stored;
|
||||
} catch (_error) {
|
||||
// Storage may be unavailable in hardened browser contexts.
|
||||
}
|
||||
return themeFromCookie() || "dark";
|
||||
}
|
||||
|
||||
function applyTheme(theme) {
|
||||
const normalized = normalizeTheme(theme) || "dark";
|
||||
document.documentElement.dataset.glassTheme = normalized;
|
||||
document.documentElement.style.colorScheme = normalized;
|
||||
document.querySelector("#firmwareWorkbenchThemeColor")
|
||||
?.setAttribute("content", normalized === "dark" ? "#0f1526" : "#f3f6fb");
|
||||
return normalized;
|
||||
}
|
||||
|
||||
applyTheme(resolveInitialTheme());
|
||||
|
||||
window.addEventListener("storage", (event) => {
|
||||
if (event.key === STORAGE_KEY) applyTheme(event.newValue);
|
||||
});
|
||||
window.addEventListener("message", (event) => {
|
||||
if (event.origin !== window.location.origin) return;
|
||||
if (window.parent !== window && event.source !== window.parent) return;
|
||||
if (event.data?.type !== "cognitive-agent:theme-change") return;
|
||||
applyTheme(event.data.theme);
|
||||
});
|
||||
|
||||
window.CognitiveAgentFirmwareWorkbenchTheme = Object.freeze({
|
||||
apply: applyTheme,
|
||||
current: () => document.documentElement.dataset.glassTheme,
|
||||
});
|
||||
})();
|
||||
Reference in New Issue
Block a user