3 changed files with 145 additions and 18 deletions
@ -1,31 +1,54 @@
|
||||
(function () { |
||||
const root = document.documentElement; |
||||
const KEY = "otb-theme"; |
||||
|
||||
function applyTheme(theme) { |
||||
document.documentElement.setAttribute("data-theme", 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"; |
||||
} |
||||
|
||||
if (theme === "dark") { |
||||
document.body.classList.add("otb-dark"); |
||||
} else { |
||||
document.body.classList.remove("otb-dark"); |
||||
function savedTheme() { |
||||
try { |
||||
return localStorage.getItem(KEY) || "dark"; |
||||
} catch (e) { |
||||
return "dark"; |
||||
} |
||||
} |
||||
|
||||
const toggle = document.getElementById("otbThemeToggle"); |
||||
if (toggle) toggle.checked = theme === "light"; |
||||
function saveTheme(theme) { |
||||
try { |
||||
localStorage.setItem(KEY, theme); |
||||
} catch (e) {} |
||||
} |
||||
|
||||
function savedTheme() { |
||||
return localStorage.getItem("otb_theme") || "dark"; |
||||
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"); |
||||
}); |
||||
} |
||||
|
||||
window.addEventListener("DOMContentLoaded", function () { |
||||
document.addEventListener("DOMContentLoaded", function () { |
||||
applyTheme(savedTheme()); |
||||
|
||||
const toggle = document.getElementById("otbThemeToggle"); |
||||
if (!toggle) return; |
||||
const toggle = document.getElementById("otbThemeToggle") || document.getElementById("themeToggle"); |
||||
if (toggle) { |
||||
toggle.addEventListener("change", function () { |
||||
const next = toggle.checked ? "light" : "dark"; |
||||
saveTheme(next); |
||||
applyTheme(next); |
||||
}); |
||||
} |
||||
|
||||
toggle.addEventListener("change", function () { |
||||
const theme = toggle.checked ? "light" : "dark"; |
||||
localStorage.setItem("otb_theme", theme); |
||||
applyTheme(theme); |
||||
}); |
||||
setupMenu(); |
||||
}); |
||||
})(); |
||||
|
||||
Loading…
Reference in new issue