Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 6 additions & 18 deletions assets/js/theme.js
Original file line number Diff line number Diff line change
@@ -1,34 +1,22 @@
// Light / Dark theme toggle
(function () {
const defaultTheme = '{{ site.Params.theme.default | default `system`}}'
const themes = ["light", "dark"];

const themeToggleButtons = document.querySelectorAll(".hextra-theme-toggle");
const themeToggleOptions = document.querySelectorAll(".hextra-theme-toggle-options p");

function applyTheme(theme) {
theme = themes.includes(theme) ? theme : "system";

themeToggleButtons.forEach((btn) => btn.parentElement.dataset.theme = theme );

localStorage.setItem("color-theme", theme);
}

function switchTheme(theme) {
switch (theme) {
case "light":
setLightTheme()
applyTheme(theme);

break;
case "dark":
setDarkTheme()
applyTheme(theme);

break;
default:
setSystemTheme();
applyTheme("system");

break;
}
setTheme(theme);
applyTheme(theme);
}

const colorTheme = "color-theme" in localStorage ? localStorage.getItem("color-theme") : defaultTheme;
Expand Down Expand Up @@ -97,7 +85,7 @@
// Listen for system theme changes
window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", () => {
if (localStorage.getItem("color-theme") === "system") {
setSystemTheme();
setTheme("system");
}
});
})();
57 changes: 24 additions & 33 deletions layouts/_partials/head.html
Original file line number Diff line number Diff line change
Expand Up @@ -62,41 +62,32 @@
<script>
// The section must not be in the theme.js file because it can create a quick flash (switch between light and dark).

function setLightTheme() {
document.documentElement.classList.remove("dark");
document.documentElement.classList.add("light");
document.documentElement.style.colorScheme = "light";
function setTheme(theme) {
switch (theme) {
case "light":
document.documentElement.classList.remove("dark");
document.documentElement.classList.add(theme);
document.documentElement.style.colorScheme = theme;

break;
case "dark":
document.documentElement.classList.remove("light");
document.documentElement.classList.add(theme);
document.documentElement.style.colorScheme = theme;

break;
default:
const prefersColorScheme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";

document.documentElement.classList.remove("light", "dark");
document.documentElement.classList.add(prefersColorScheme);
document.documentElement.style.colorScheme = prefersColorScheme;

break;
}
}

function setDarkTheme() {
document.documentElement.classList.remove("light");
document.documentElement.classList.add("dark");
document.documentElement.style.colorScheme = "dark";
}

function setSystemTheme() {
const prefersColorScheme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";

document.documentElement.classList.remove("dark", "light");
document.documentElement.classList.add(prefersColorScheme);

document.documentElement.style.colorScheme = prefersColorScheme;
}

switch ("color-theme" in localStorage ? localStorage.getItem("color-theme") : '{{ site.Params.theme.default | default `system`}}') {
case "light":
setLightTheme();

break;
case "dark":
setDarkTheme()

break;
default:
setSystemTheme();

break;
}
setTheme("color-theme" in localStorage ? localStorage.getItem("color-theme") : '{{ site.Params.theme.default | default `system`}}')

</script>

Expand Down