/**
* 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();