Skip to content

Commit 630089c

Browse files
authored
fix: Prevent flash of light mode if dark mode is selected (#446)
1 parent d216517 commit 630089c

File tree

2 files changed

+32
-21
lines changed

2 files changed

+32
-21
lines changed

11ty/_includes/layouts/base.njk

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,29 @@
3535
{% endblock pageStyles %}
3636
</head>
3737
<body>
38+
<script>
39+
/**
40+
* @type String
41+
*/
42+
let userThemeSetting = localStorage.getItem('sdUserTheme');
43+
44+
if (userThemeSetting) {
45+
document.documentElement.setAttribute(
46+
'data-user-theme',
47+
userThemeSetting
48+
);
49+
}
50+
51+
window.setUserPreference = function setUserPreference(value) {
52+
localStorage.setItem('sdUserTheme', value);
53+
document.documentElement.setAttribute('data-user-theme', value);
54+
}
55+
56+
window.unsetUserPreference = function unsetUserPreference() {
57+
localStorage.removeItem('sdUserTheme');
58+
document.documentElement.removeAttribute('data-user-theme');
59+
}
60+
</script>
3861
{% block content %}{% endblock content %}
3962
{% include 'components/base/site-footer.njk' %}
4063
{% block pageScript %}

11ty/assets/js/theme-switcher.js

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,15 @@ function initThemeSwitch() {
99

1010
let $buttons = $switchContainer.querySelectorAll('[type="radio"]');
1111

12-
/**
13-
* @type String
14-
*/
15-
let userThemeSetting = localStorage.getItem('sdUserTheme');
16-
1712
function setInitialState() {
13+
/**
14+
* @type String
15+
*/
16+
let userThemeSetting = document.documentElement.getAttribute(
17+
'data-user-theme'
18+
);
19+
1820
if (userThemeSetting) {
19-
document.documentElement.setAttribute(
20-
'data-user-theme',
21-
userThemeSetting
22-
);
2321
$switchContainer.querySelector(
2422
`[value="${userThemeSetting}"]`
2523
).checked = true;
@@ -28,25 +26,15 @@ function initThemeSwitch() {
2826
}
2927
}
3028

31-
function setUserPreference(value) {
32-
localStorage.setItem('sdUserTheme', value);
33-
document.documentElement.setAttribute('data-user-theme', value);
34-
}
35-
36-
function unsetUserPreference() {
37-
localStorage.removeItem('sdUserTheme');
38-
document.documentElement.removeAttribute('data-user-theme');
39-
}
40-
4129
Array.from($buttons).forEach(function($button) {
4230
$button.addEventListener('change', function() {
4331
// only run the switch functionality for the currently active radio button
4432
if (!$button.checked) return;
4533

4634
if (userOverwrite.includes($button.value)) {
47-
setUserPreference($button.value);
35+
window.setUserPreference($button.value);
4836
} else {
49-
unsetUserPreference();
37+
window.unsetUserPreference();
5038
}
5139
});
5240
});

0 commit comments

Comments
 (0)