| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- function darkMode(remember) {
- // Set the theme to dark and optionally remember the preference.
- document.body.classList.remove("light");
- document.body.classList.add("dark");
- if (remember) {
- console.log("Saving theme preference as dark.");
- window.localStorage.setItem("theme-preference", "dark");
- }
- }
- function lightMode(remember) {
- // Set the theme to light and optionally remember the preference.
- document.body.classList.remove("dark");
- document.body.classList.add("light");
- if (remember) {
- console.log("Saving theme preference as light.");
- window.localStorage.setItem("theme-preference", "light");
- }
- }
- function setThemeFromHour() {
- // If the user has set no preference, do some rudimentary switching based on
- // hour of the day.
- var hour = new Date().getHours();
- var noPreference = window.matchMedia("(prefers-color-scheme:no-preference)")
- .matches;
- if (noPreference) {
- console.log("Setting theme based on hour.");
- if (hour > 18 && hour < 7) {
- darkMode();
- } else {
- lightMode();
- }
- } else {
- console.log("Setting theme based system preference.");
- }
- }
- // If the user has previously set either way, restore that.
- var preference = window.localStorage.getItem("theme-preference");
- switch (preference) {
- case "dark":
- console.log("Setting theme to dark based on user preference.");
- darkMode();
- break;
- case "light":
- console.log("Setting theme to light based on user preference.");
- lightMode();
- break;
- default:
- setThemeFromHour();
- }
|