branded header, nav, footer for OTB
https://outsidethebox.top
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
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(); |
|
}); |
|
})();
|
|
|