/** * Dark Mode * @version 1.0.3 * @description This script adds dark mode to your Fourthwall website. */ const useCustomScheme = false; const scheme = { mode: "dark", selectors: [":root", "#fw-section-header"], vars: { "color-primary": "#000", "color-on-primary": "#fff", "color-background": "#000", "color-on-background": "#fff", "color-product-image-background": "rgba(51, 51, 51, 0.1)", "color-primary-rgb": "0, 0, 0", "color-on-primary-rgb": "255, 255, 255", "color-background-rgb": "0, 0, 0", "color-on-background-rgb": "51, 51, 51", "color-background-brightness": "248", } }; const icons = { lightbulbOn: ``, lightbulbOff: ``, }; const toggleElement = (() => { const toggleElement = document.createElement("a"); toggleElement.id = "scheme-toggle"; toggleElement.style = "cursor: pointer;"; toggleElement.innerHTML = icons.lightbulbOff; const listItem = document.createElement("li"); listItem.className = "header__list-item"; listItem.append(toggleElement); const section = document.querySelector(".header__icons > .header__list"); section?.append(listItem); return toggleElement; })(); const styleElement = (() => { const styleElement = document.createElement("style"); let css; if(useCustomScheme) { css = scheme.selectors.join(","); css += "{"; Object.entries(scheme.vars).map((variable) => { const [key, value] = variable; css += `--${key}: ${value};`; }); css += "}"; } else { css = "html,img,video,iframe{filter: invert(1) hue-rotate(180deg);}"; } styleElement.innerText = css; return styleElement; })(); const getUserMode = () => localStorage.getItem("fw_color_scheme"); const setUserMode = (scheme) => localStorage.setItem("fw_color_scheme", scheme); const toggleIcon = () => { const mode = detectScheme(); toggleElement.innerHTML = mode === "dark" ? icons.lightbulbOn : icons.lightbulbOff; } const detectScheme = () => { const defaultMode = window.matchMedia('(prefers-color-scheme: dark)').matches ? "dark" : "light"; const userMode = getUserMode(); if (userMode) { return userMode; } else { setUserMode(defaultMode); return defaultMode; } }; const toggleScheme = () => { const mode = detectScheme(); setUserMode(mode === "dark" ? "light" : "dark"); toggleIcon(); if (scheme.mode !== mode) { document.body.append(styleElement); } else { styleElement.remove(); } }; const recallScheme = () => { const mode = detectScheme(); if (scheme.mode === mode) { toggleIcon(); document.body.append(styleElement); } }; const initSchemeState = () => { recallScheme(); toggleElement.addEventListener("click", toggleScheme); }; initSchemeState();