| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- '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) {
- // Auto (dark) -> Light -> Dark
- if (currentTheme === "auto") {
- setTheme("light");
- } else if (currentTheme === "light") {
- setTheme("dark");
- } else {
- setTheme("auto");
- }
- } else {
- // Auto (light) -> Dark -> Light
- if (currentTheme === "auto") {
- setTheme("dark");
- } else if (currentTheme === "dark") {
- setTheme("light");
- } else {
- setTheme("auto");
- }
- }
- }
- function initTheme() {
- // set theme defined in localStorage if there is one, or fallback to auto mode
- 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();
- }
|