diff --git a/_includes/head.html b/_includes/head.html
index 0fc40f5..45944de 100644
--- a/_includes/head.html
+++ b/_includes/head.html
@@ -10,13 +10,10 @@
(function () {
try {
var stored = localStorage.getItem('theme');
- var theme = (stored === 'light' || stored === 'dark' || stored === 'system') ? stored : 'system';
- if (theme === 'system') {
- if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
- document.documentElement.setAttribute('data-theme', 'dark');
- }
- } else {
- document.documentElement.setAttribute('data-theme', theme);
+ if (stored === 'light' || stored === 'dark') {
+ document.documentElement.setAttribute('data-theme', stored);
+ } else if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
+ document.documentElement.setAttribute('data-theme', 'dark');
}
} catch (e) {}
})();
diff --git a/_includes/nav.html b/_includes/nav.html
index b834bd9..e3ee839 100644
--- a/_includes/nav.html
+++ b/_includes/nav.html
@@ -41,7 +41,7 @@
-
+
diff --git a/_layouts/aggregate_default.html b/_layouts/aggregate_default.html
index 05ff48f..7146dd0 100644
--- a/_layouts/aggregate_default.html
+++ b/_layouts/aggregate_default.html
@@ -58,7 +58,7 @@
-
+
diff --git a/_layouts/author_default.html b/_layouts/author_default.html
index 8b9f1e2..0f2ccb0 100644
--- a/_layouts/author_default.html
+++ b/_layouts/author_default.html
@@ -68,7 +68,7 @@
-
+
diff --git a/assets/js/theme.js b/assets/js/theme.js
index 9351193..4f8ccad 100644
--- a/assets/js/theme.js
+++ b/assets/js/theme.js
@@ -3,50 +3,48 @@ layout: null
---
(function () {
var STORAGE_KEY = "theme";
- var THEMES = ["light", "dark", "system"];
var ICONS = {
light: "fa-sun-o",
- dark: "fa-moon-o",
- system: "fa-desktop"
+ dark: "fa-moon-o"
};
function getStoredTheme() {
try {
var stored = localStorage.getItem(STORAGE_KEY);
- return THEMES.indexOf(stored) >= 0 ? stored : "system";
+ return (stored === "light" || stored === "dark") ? stored : null;
} catch (e) {
- return "system";
+ return null;
}
}
- function applyTheme(theme) {
- if (theme === "system") {
- var prefersDark = window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches;
- if (prefersDark) {
- document.documentElement.setAttribute("data-theme", "dark");
- } else {
- document.documentElement.removeAttribute("data-theme");
- }
- } else {
- document.documentElement.setAttribute("data-theme", theme);
+ function getCurrentTheme() {
+ var stored = getStoredTheme();
+ if (stored) {
+ return stored;
}
+ var prefersDark = window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches;
+ return prefersDark ? "dark" : "light";
+ }
+
+ function applyTheme(theme) {
+ document.documentElement.setAttribute("data-theme", theme);
}
function updateButtons(theme) {
+ var nextLabel = theme === "dark" ? "Switch to light theme" : "Switch to dark theme";
var buttons = document.querySelectorAll(".theme-toggle");
for (var i = 0; i < buttons.length; i++) {
var icon = buttons[i].querySelector(".fa");
if (icon) {
icon.className = "fa " + ICONS[theme];
}
- buttons[i].setAttribute("aria-label", "Theme: " + theme + " (click to change)");
- buttons[i].setAttribute("title", "Theme: " + theme + " (click to change)");
+ buttons[i].setAttribute("aria-label", nextLabel);
+ buttons[i].setAttribute("title", nextLabel);
}
}
- function cycleTheme() {
- var current = getStoredTheme();
- var next = THEMES[(THEMES.indexOf(current) + 1) % THEMES.length];
+ function toggleTheme() {
+ var next = getCurrentTheme() === "dark" ? "light" : "dark";
try {
localStorage.setItem(STORAGE_KEY, next);
} catch (e) {}
@@ -55,22 +53,23 @@ layout: null
}
function init() {
- var current = getStoredTheme();
- updateButtons(current);
+ updateButtons(getCurrentTheme());
var buttons = document.querySelectorAll(".theme-toggle");
for (var i = 0; i < buttons.length; i++) {
buttons[i].addEventListener("click", function (e) {
e.preventDefault();
- cycleTheme();
+ toggleTheme();
});
}
if (window.matchMedia) {
var mql = window.matchMedia("(prefers-color-scheme: dark)");
var onChange = function () {
- if (getStoredTheme() === "system") {
- applyTheme("system");
+ if (getStoredTheme() === null) {
+ var sys = mql.matches ? "dark" : "light";
+ applyTheme(sys);
+ updateButtons(sys);
}
};
if (mql.addEventListener) {