repos

blog.bythewood.me-wagtail

mirror archived upstream

Self-hostable blog for developers built on Wagtail and Django, with webpack, Bootstrap, and CodeMirror.

blogbootstrapdjangodockerhandcodedpythonself-hostedwagtailwebpack

1.3 KB · 55 lines · JavaScript Raw History
 1/**
 2 * dark.js
 3 *
 4 * Detects the systems current preference for dark or light mode but allows for
 5 * overriding the system preference.
 6 */
 7
 8const main = document.querySelector("main");
 9
10const getSystemPreference = () => {
11  if (window.matchMedia("(prefers-color-scheme: dark)").matches) {
12    return "dark";
13  } else {
14    return "light";
15  }
16};
17
18const setIcon = (preference) => {
19  const icons = document.querySelectorAll(".prefers-color-scheme-icon");
20  icons.forEach((icon) => {
21    icon.classList.add("d-none");
22  });
23  icons.forEach((icon) => {
24    if (icon.classList.contains(preference)) {
25      icon.classList.remove("d-none");
26    }
27  });
28};
29
30const setPreference = (preference) => {
31  setIcon(preference);
32  if (preference === "system") {
33    preference = getSystemPreference();
34  }
35  if (preference === "dark") {
36    main.classList.add("dark");
37  } else {
38    main.classList.remove("dark");
39  }
40};
41
42const select = document.querySelector("#prefers-color-scheme");
43select.addEventListener("change", () => {
44  localStorage.setItem("darkMode", select.value);
45  setPreference(select.value);
46});
47
48const storedPreference = localStorage.getItem("darkMode");
49if (storedPreference) {
50  select.value = storedPreference;
51  setPreference(storedPreference);
52} else {
53  setPreference("system");
54}