(() => { const rootElement = document.documentElement; const darkModeStorageKey = "user-color-scheme"; const darkModeMediaQueryKey = "--color-mode"; const rootElementDarkModeAttributeName = "data-user-color-scheme"; const setLS = (k, v) => { try { localStorage.setItem(k, v); } catch (e) {} }; const removeLS = k => { try { localStorage.removeItem(k); } catch (e) {} }; const getLS = k => { try { return localStorage.getItem(k); } catch (e) { return null; } }; const getModeFromCSSMediaQuery = () => { const res = getComputedStyle(rootElement).getPropertyValue( darkModeMediaQueryKey ); if (res.length) return res.replace(/["'\s]/g, ''); return res === "dark" ? "dark" : "light"; }; const resetRootDarkModeAttributeAndLS = () => { rootElement.removeAttribute(rootElementDarkModeAttributeName); removeLS(darkModeStorageKey); }; const validColorModeKeys = { dark: true, light: true }; const applyCustomDarkModeSettings = mode => { const currentSetting = mode || getLS(darkModeStorageKey); if (currentSetting === getModeFromCSSMediaQuery()) { resetRootDarkModeAttributeAndLS(); } else if (validColorModeKeys[currentSetting]) { rootElement.setAttribute(rootElementDarkModeAttributeName, currentSetting); } else { resetRootDarkModeAttributeAndLS(); } }; const invertDarkModeObj = { dark: "light", light: "dark" }; const toggleCustomDarkMode = () => { var currentSetting = getLS(darkModeStorageKey); if (validColorModeKeys[currentSetting]) { currentSetting = invertDarkModeObj[currentSetting]; } else if (currentSetting === null) { currentSetting = invertDarkModeObj[getModeFromCSSMediaQuery()]; } else { return; } setLS(darkModeStorageKey, currentSetting); return currentSetting; }; applyCustomDarkModeSettings(); window.onload = () => { const darkModeToggleBottonElement = document.getElementById("btn-toggle-dark"); darkModeToggleBottonElement.addEventListener("click", () => { applyCustomDarkModeSettings(toggleCustomDarkMode()); }); if (document.getElementById("hl-dark-theme")) { darkModeToggleBottonElement.addEventListener("click", () => { if (getModeFromCSSMediaQuery() === 'dark') { document.getElementById("hl-default-theme").media = 'none'; document.getElementById("hl-dark-theme").media = 'all'; } else { document.getElementById("hl-dark-theme").media = 'none'; document.getElementById("hl-default-theme").media = 'all'; } }); } } })();