Skip to content

Commit 1214f1f

Browse files
committed
More darkmode js refactoring
1 parent f660161 commit 1214f1f

File tree

1 file changed

+18
-26
lines changed

1 file changed

+18
-26
lines changed

themes/CodeMeta-Pyramids/static/js/codemeta.js

Lines changed: 18 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -46,54 +46,46 @@ document.addEventListener('DOMContentLoaded', (event) => {
4646
function toggleIcon(mode) {
4747
if (mode == 'dark') {
4848
setIcon('light');
49-
} else if (mode == 'light') {
49+
} else {
5050
setIcon('dark');
5151
}
5252
}
5353

5454
function switchMode(mode, bsTheme) {
55-
if (mode == true) {
55+
if ((mode == true || mode == "dark") && htmlEl.getAttribute('data-bs-theme') != 'dark') {
5656
htmlEl.setAttribute('data-bs-theme', 'dark');
57+
toggleIcon('dark');
5758
if (bsTheme == true) {
5859
localStorage.setItem('bsTheme', 'dark');
5960
}
60-
toggleIcon('dark');
6161
} else {
6262
htmlEl.setAttribute('data-bs-theme', 'light');
63+
toggleIcon('light');
6364
if (bsTheme == true) {
6465
localStorage.setItem('bsTheme', 'light');
6566
}
66-
toggleIcon('light');
6767
}
6868
}
69-
const currentTheme = localStorage.getItem('bsTheme') || null;
69+
const currentTheme = localStorage.getItem('bsTheme');
7070

7171
// Set the theme by OS preferences
72-
if (window.matchMedia) {
73-
var osMode = window.matchMedia('(prefers-color-scheme: dark)')
74-
if (currentTheme == null) {
75-
switchEl.setAttribute('checked', osMode.matches);
76-
switchMode(osMode.matches, false);
77-
}
78-
osMode.addEventListener('change', e => {
79-
if (currentTheme == null) {
72+
if (currentTheme == null) {
73+
if (window.matchMedia) {
74+
osMode = window.matchMedia('(prefers-color-scheme: dark)')
8075
switchEl.setAttribute('checked', osMode.matches);
8176
switchMode(osMode.matches, false);
82-
}
83-
})
84-
77+
osMode.addEventListener('change', e => {
78+
switchEl.setAttribute('checked', osMode.matches);
79+
switchMode(osMode.matches, false);
80+
})
81+
}
82+
// Graceful override
83+
} else {
84+
switchMode(currentTheme, false)
8585
}
86+
8687
// Set the default theme to light if no setting is found in local storage
87-
88-
toggleIcon(currentTheme);
89-
9088
switchEl.addEventListener('change', function () {
91-
if (this.checked) {
92-
switchMode(false, true);
93-
setIcon('dark');
94-
} else {
95-
switchMode(true, true);
96-
setIcon('light');
97-
}
89+
switchMode(this.checked, true);
9890
});
9991
});

0 commit comments

Comments
 (0)