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