diff --git a/themes/patek/assets/css/main.scss b/themes/patek/assets/css/main.scss index dc5e0b4..f90f2f2 100644 --- a/themes/patek/assets/css/main.scss +++ b/themes/patek/assets/css/main.scss @@ -233,6 +233,15 @@ h2 a { } } +.dark-mode-toggler { + padding: 1rem !important; +} +.dark-mode-toggler::before { + content: "🌔" !important; +} +.dark-mode-toggler::after { + content: none !important; +} #content { min-height: 90vh; } diff --git a/themes/patek/assets/js/dark-mode.js b/themes/patek/assets/js/dark-mode.js index 0869cc5..d5c45b0 100644 --- a/themes/patek/assets/js/dark-mode.js +++ b/themes/patek/assets/js/dark-mode.js @@ -1,13 +1,27 @@ -document.addEventListener("DOMContentLoaded", () => { - if (window.location.search.indexOf("darkmode=false") > -1) { - document.cookie = "darkmode=false; path=/"; - if (document.getElementById("content") !== null) { - document.getElementById("content").classList.remove("dark-mode"); - } - } else if (window.location.search.indexOf("darkmode=true") > -1 || document.cookie.indexOf("darkmode=true") > -1) { - document.cookie = "darkmode=true; path=/"; - if (document.getElementById("content") !== null) { - document.getElementById("content").classList.add("dark-mode"); +function restoreDarkmode() { + const elem = document.getElementById("content"); + if (elem && document.cookie.includes("dark-mode=true")) { + elem.classList.add("dark-mode"); + } +} + +function toggleDarkmode() { + const elem = document.getElementById("content"); + if (elem) { + const state = elem.classList.toggle("dark-mode"); + if (state) { + // 31536000 = 1 year; not setting max-age would make it session bound + document.cookie = "dark-mode=true; path=/; max-age=31536000; secure; samesite=strict"; + } else { + // Delete the cookie by immediately expiring it + document.cookie = "dark-mode=; path=/; max-age=0; secure; samesite=strict"; } } +} + +document.addEventListener("DOMContentLoaded", restoreDarkmode); +document.addEventListener("DOMContentLoaded", () => { + for (const toggler of document.getElementsByClassName("dark-mode-toggler")) { + toggler.addEventListener("click", toggleDarkmode); + } }); diff --git a/themes/patek/layouts/partials/menu.html b/themes/patek/layouts/partials/menu.html index 0e9cb6e..df6019e 100644 --- a/themes/patek/layouts/partials/menu.html +++ b/themes/patek/layouts/partials/menu.html @@ -37,6 +37,8 @@ {{ end }}