Skip to content

Commit 0ff45cd

Browse files
committed
fix(dark-mode): avoid flickering when navigating between pages
closes #1397
1 parent 89d7ab6 commit 0ff45cd

File tree

2 files changed

+58
-55
lines changed

2 files changed

+58
-55
lines changed

src/resources/js/menu.js

Lines changed: 0 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -266,60 +266,5 @@ document.addEventListener('DOMContentLoaded', function () {
266266
}, 300);
267267
}
268268
}
269-
// Dark mode toggle button
270-
var useDark = window.matchMedia('(prefers-color-scheme: dark)');
271-
var darkModeState = useDark.matches;
272-
var $darkModeToggleSwitchers = document.querySelectorAll('.dark-mode-switch input');
273-
var $darkModeToggles = document.querySelectorAll('.dark-mode-switch');
274-
var darkModeStateLocal = localStorage.getItem('compodoc_darkmode-state');
275-
276-
function checkToggle(check) {
277-
for (var i = 0; i < $darkModeToggleSwitchers.length; i++) {
278-
$darkModeToggleSwitchers[i].checked = check;
279-
}
280-
}
281-
282-
function toggleDarkMode(state) {
283-
if (window.localStorage) {
284-
localStorage.setItem('compodoc_darkmode-state', state);
285-
}
286-
287-
checkToggle(state);
288-
289-
const hasClass = document.body.classList.contains('dark');
290-
291-
if (state) {
292-
for (var i = 0; i < $darkModeToggles.length; i++) {
293-
$darkModeToggles[i].classList.add('dark');
294-
}
295-
if (!hasClass) {
296-
document.body.classList.add('dark');
297-
}
298-
} else {
299-
for (var i = 0; i < $darkModeToggles.length; i++) {
300-
$darkModeToggles[i].classList.remove('dark');
301-
}
302-
if (hasClass) {
303-
document.body.classList.remove('dark');
304-
}
305-
}
306-
}
307-
308-
useDark.addEventListener('change', function (evt) {
309-
toggleDarkMode(evt.matches);
310-
});
311-
if (darkModeStateLocal) {
312-
darkModeState = darkModeStateLocal === 'true';
313-
}
314-
toggleDarkMode(darkModeState);
315-
316-
if ($darkModeToggles.length > 0) {
317-
for (var i = 0; i < $darkModeToggleSwitchers.length; i++) {
318-
$darkModeToggleSwitchers[i].addEventListener('change', function (event) {
319-
darkModeState = !darkModeState;
320-
toggleDarkMode(darkModeState);
321-
});
322-
}
323-
}
324269
}, 0);
325270
});

src/templates/page.hbs

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,64 @@
1717
{{/if}}
1818
</head>
1919
<body>
20+
<script>
21+
// Blocking script to avaoid flickering dark mode
22+
// Dark mode toggle button
23+
var useDark = window.matchMedia('(prefers-color-scheme: dark)');
24+
var darkModeState = useDark.matches;
25+
var $darkModeToggleSwitchers = document.querySelectorAll('.dark-mode-switch input');
26+
var $darkModeToggles = document.querySelectorAll('.dark-mode-switch');
27+
var darkModeStateLocal = localStorage.getItem('compodoc_darkmode-state');
28+
29+
function checkToggle(check) {
30+
for (var i = 0; i < $darkModeToggleSwitchers.length; i++) {
31+
$darkModeToggleSwitchers[i].checked = check;
32+
}
33+
}
34+
35+
function toggleDarkMode(state) {
36+
if (window.localStorage) {
37+
localStorage.setItem('compodoc_darkmode-state', state);
38+
}
39+
40+
checkToggle(state);
41+
42+
const hasClass = document.body.classList.contains('dark');
43+
44+
if (state) {
45+
for (var i = 0; i < $darkModeToggles.length; i++) {
46+
$darkModeToggles[i].classList.add('dark');
47+
}
48+
if (!hasClass) {
49+
document.body.classList.add('dark');
50+
}
51+
} else {
52+
for (var i = 0; i < $darkModeToggles.length; i++) {
53+
$darkModeToggles[i].classList.remove('dark');
54+
}
55+
if (hasClass) {
56+
document.body.classList.remove('dark');
57+
}
58+
}
59+
}
60+
61+
useDark.addEventListener('change', function (evt) {
62+
toggleDarkMode(evt.matches);
63+
});
64+
if (darkModeStateLocal) {
65+
darkModeState = darkModeStateLocal === 'true';
66+
}
67+
toggleDarkMode(darkModeState);
68+
69+
if ($darkModeToggles.length > 0) {
70+
for (var i = 0; i < $darkModeToggleSwitchers.length; i++) {
71+
$darkModeToggleSwitchers[i].addEventListener('change', function (event) {
72+
darkModeState = !darkModeState;
73+
toggleDarkMode(darkModeState);
74+
});
75+
}
76+
}
77+
</script>
2078

2179
<div class="navbar navbar-default navbar-fixed-top d-block d-sm-none">
2280
<a href="{{relativeURL data.depth }}" class="navbar-brand">{{data.documentationMainName}}</a>

0 commit comments

Comments
 (0)