| 'use strict'; |
| { |
| function setTheme(mode) { |
| if (mode !== "light" && mode !== "dark" && mode !== "auto") { |
| console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`); |
| mode = "auto"; |
| } |
| document.documentElement.dataset.theme = mode; |
| localStorage.setItem("theme", mode); |
| } |
|
|
| function cycleTheme() { |
| const currentTheme = localStorage.getItem("theme") || "auto"; |
| const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches; |
|
|
| if (prefersDark) { |
| |
| if (currentTheme === "auto") { |
| setTheme("light"); |
| } else if (currentTheme === "light") { |
| setTheme("dark"); |
| } else { |
| setTheme("auto"); |
| } |
| } else { |
| |
| if (currentTheme === "auto") { |
| setTheme("dark"); |
| } else if (currentTheme === "dark") { |
| setTheme("light"); |
| } else { |
| setTheme("auto"); |
| } |
| } |
| } |
|
|
| function initTheme() { |
| |
| const currentTheme = localStorage.getItem("theme"); |
| currentTheme ? setTheme(currentTheme) : setTheme("auto"); |
| } |
|
|
| window.addEventListener('load', function(_) { |
| const buttons = document.getElementsByClassName("theme-toggle"); |
| Array.from(buttons).forEach((btn) => { |
| btn.addEventListener("click", cycleTheme); |
| }); |
| }); |
|
|
| initTheme(); |
| } |
|
|