billing frontend for mariadb. setup as otb_billing for outsidethebox.top accounting. also involved with outsidethedb
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

54 lines
1.5 KiB

(function () {
const root = document.documentElement;
const KEY = "otb-theme";
function applyTheme(theme) {
const resolved = theme === "light" ? "light" : "dark";
root.setAttribute("data-theme", resolved);
document.body.classList.toggle("otb-dark", resolved === "dark");
document.body.classList.toggle("otb-light", resolved === "light");
const toggle = document.getElementById("otbThemeToggle") || document.getElementById("themeToggle");
if (toggle) toggle.checked = resolved === "light";
}
function savedTheme() {
try {
return localStorage.getItem(KEY) || "dark";
} catch (e) {
return "dark";
}
}
function saveTheme(theme) {
try {
localStorage.setItem(KEY, theme);
} catch (e) {}
}
function setupMenu() {
const btn = document.getElementById("otbMenuToggle");
const nav = document.getElementById("otbNavWrap");
if (!btn || !nav) return;
btn.addEventListener("click", function () {
const open = nav.classList.toggle("otb-nav-open");
btn.setAttribute("aria-expanded", open ? "true" : "false");
});
}
document.addEventListener("DOMContentLoaded", function () {
applyTheme(savedTheme());
const toggle = document.getElementById("otbThemeToggle") || document.getElementById("themeToggle");
if (toggle) {
toggle.addEventListener("change", function () {
const next = toggle.checked ? "light" : "dark";
saveTheme(next);
applyTheme(next);
});
}
setupMenu();
});
})();