stato intermedio
This commit is contained in:
23
web/static/vendor/theme.js
vendored
23
web/static/vendor/theme.js
vendored
@@ -2,6 +2,13 @@
|
||||
var STORAGE_KEY = "theme";
|
||||
var root = document.documentElement;
|
||||
var mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
|
||||
var isAuthenticated = window.__TC_IS_AUTHENTICATED === true || window.__TC_IS_AUTHENTICATED === "true";
|
||||
var serverTheme = normalizeTheme(window.__TC_SERVER_THEME);
|
||||
|
||||
function normalizeTheme(theme) {
|
||||
if (!theme) return "";
|
||||
return String(theme).trim().toLowerCase();
|
||||
}
|
||||
|
||||
function getStoredTheme() {
|
||||
var value = null;
|
||||
@@ -33,6 +40,16 @@
|
||||
}
|
||||
}
|
||||
|
||||
function persistThemePreference(theme) {
|
||||
if (!isAuthenticated) return;
|
||||
fetch("/preferences/theme", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
credentials: "same-origin",
|
||||
body: JSON.stringify({ theme: theme }),
|
||||
}).catch(function () {});
|
||||
}
|
||||
|
||||
function updateToggleState(theme) {
|
||||
var button = document.getElementById("themeToggle");
|
||||
if (!button) return;
|
||||
@@ -43,6 +60,11 @@
|
||||
}
|
||||
|
||||
function applyInitialTheme() {
|
||||
if (isAuthenticated && (serverTheme === "dark" || serverTheme === "light")) {
|
||||
setStoredTheme(serverTheme);
|
||||
applyTheme(serverTheme);
|
||||
return;
|
||||
}
|
||||
var stored = getStoredTheme();
|
||||
applyTheme(stored || getPreferredTheme());
|
||||
}
|
||||
@@ -51,6 +73,7 @@
|
||||
var next = currentTheme() === "dark" ? "light" : "dark";
|
||||
applyTheme(next);
|
||||
setStoredTheme(next);
|
||||
persistThemePreference(next);
|
||||
updateToggleState(next);
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user