Skip to content

Commit 6b8e2b9

Browse files
authored
Use system preferred theme if button has never been pressed (#81)
1 parent 416186c commit 6b8e2b9

File tree

1 file changed

+39
-6
lines changed

1 file changed

+39
-6
lines changed

_includes/header_custom.html

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,29 +27,62 @@
2727
<a class="site-button" id="theme-toggle" style="cursor: pointer;"></a>
2828

2929
<script>
30+
const light = 'light';
31+
const dark = 'dark';
32+
const system = 'system';
3033
const storageKey = 'dpfa-docs-theme';
3134

35+
const isThemePreferred = function(theme) {
36+
const state = window.matchMedia(`(prefers-color-scheme: ${theme})`);
37+
38+
if (!state) {
39+
return false;
40+
}
41+
42+
return !!state.matches;
43+
}
44+
45+
const getDefaultTheme = function() {
46+
if (isThemePreferred(dark)) {
47+
return dark;
48+
}
49+
50+
return light;
51+
}
52+
53+
const resolveTheme = function(theme) {
54+
if (theme === system) {
55+
return getDefaultTheme();
56+
}
57+
58+
return theme;
59+
}
60+
3261
const button = document.getElementById('theme-toggle');
33-
const loadedTheme = localStorage.getItem(storageKey) || 'light';
62+
const loadedTheme = localStorage.getItem(storageKey) || system;
3463

3564
const setTheme = function(theme) {
3665
localStorage.setItem(storageKey, theme);
3766

38-
if (theme === 'light') {
67+
const realTheme = resolveTheme(theme);
68+
69+
if (realTheme === light) {
3970
button.innerHTML = `<svg width='18px' height='18px'><use href="#svg-moon"></use></svg>`;
4071
} else {
4172
button.innerHTML = `<svg width='18px' height='18px'><use href="#svg-sun"></use></svg>`;
4273
}
4374

44-
jtd.setTheme(theme);
75+
jtd.setTheme(realTheme);
4576
}
4677

4778
const toggleTheme = function() {
4879
const theme = localStorage.getItem(storageKey);
49-
if (theme === 'light') {
50-
setTheme('dark');
80+
const realTheme = resolveTheme(theme);
81+
82+
if (realTheme === light) {
83+
setTheme(dark);
5184
} else {
52-
setTheme('light');
85+
setTheme(light);
5386
}
5487
}
5588

0 commit comments

Comments
 (0)