repos/kloeckner.com.ar

Backup of part of my webpage
Commits Files Refs README LICENSE
scripts/js/color-scheme-toggle.js (61 lines)
   1 function toggleColorScheme() {
   2     const dataTheme = document.documentElement.getAttribute("data-theme");
   3     const systemDarkMode = window.matchMedia("(prefers-color-scheme: dark)").matches;
   4 
   5     if(typeof dataTheme == "undefined" || dataTheme === null) {
   6         newTheme = systemDarkMode ? "light" : "dark";
   7     } else {
   8         newTheme = (dataTheme === "dark") ? "light" : "dark";
   9     }
  10 
  11     document.documentElement.setAttribute("data-theme", newTheme);
  12     localStorage.setItem("data-theme", newTheme);
  13     updateColorSchemeButton()
  14 
  15     if(((newTheme === "dark") && systemDarkMode) || ((newTheme === "light") && !systemDarkMode)) {
  16         console.log("Removing item");
  17         localStorage.removeItem("data-theme");
  18     }
  19 }
  20 
  21 function updateColorSchemeButton() {
  22     const dataTheme = localStorage.getItem("data-theme");
  23     const systemDarkMode = window.matchMedia("(prefers-color-scheme: dark)").matches;
  24     const colorSchemeButtonLight = document.getElementById("color-scheme-button-light");
  25     const colorSchemeButtonDark = document.getElementById("color-scheme-button-dark");
  26 
  27     function buttonDarkMode() {
  28         colorSchemeButtonLight.style.display = "none";
  29         colorSchemeButtonDark.style.display = "inline-block";
  30         document.documentElement.setAttribute("data-theme", "dark");
  31     }
  32 
  33     function buttonLightMode() {
  34             colorSchemeButtonLight.style.display = "inline-block";
  35             colorSchemeButtonDark.style.display = "none";
  36             document.documentElement.setAttribute("data-theme", "light");
  37     }
  38 
  39     if(typeof dataTheme == "undefined" || dataTheme === null) {
  40         if(systemDarkMode) {
  41             buttonDarkMode();
  42         } else {
  43             buttonLightMode();
  44         }
  45     } else {
  46         if(dataTheme === "dark") {
  47             buttonDarkMode();
  48         } else {
  49             buttonLightMode();
  50         }
  51     }
  52 }
  53 
  54 function removeLocalStorage() {
  55     console.log("Removing item");
  56     localStorage.removeItem("data-theme");
  57     updateColorSchemeButton();
  58 }
  59 
  60 window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", removeLocalStorage);
  61 window.matchMedia("(prefers-color-scheme: light)").addEventListener("change", removeLocalStorage);