Skip to content

Commit 9ee738c

Browse files
committed
Fixed theme switch bug with sammy.js
Adapts code to works with sammy.js
1 parent da7fbc5 commit 9ee738c

File tree

1 file changed

+73
-61
lines changed

1 file changed

+73
-61
lines changed
Lines changed: 73 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,84 +1,96 @@
1-
$(document).ready(function() {
2-
const lightStyles = document.querySelectorAll('link[rel=stylesheet][media*=prefers-color-scheme][media*=light]');
3-
const darkStyles = document.querySelectorAll('link[rel=stylesheet][media*=prefers-color-scheme][media*=dark]');
4-
const darkSdhemeMedia = matchMedia('(prefers-color-scheme: dark)');
5-
const switcherRadios = document.getElementsByClassName('switcher__radio');
6-
7-
function initializeSwitcher() {
8-
const savedScheme = getSavedScheme();
9-
10-
if (savedScheme !== null) {
11-
const currentRadio = document.querySelector(`.switcher__radio[value=${savedScheme}]`);
1+
var lightStyles;
2+
var darkStyles;
3+
var darkSdhemeMedia;
4+
var switcherRadios;
5+
6+
var initializeSwitcher = function initializeSwitcher() {
7+
lightStyles = document.querySelectorAll('link[rel=stylesheet][media*=prefers-color-scheme][media*=light]');
8+
darkStyles = document.querySelectorAll('link[rel=stylesheet][media*=prefers-color-scheme][media*=dark]');
9+
darkSdhemeMedia = matchMedia('(prefers-color-scheme: dark)');
10+
switcherRadios = document.getElementsByClassName('switcher__radio');
11+
12+
let savedScheme = getSavedScheme();
13+
14+
if (savedScheme !== null) {
15+
let currentRadio = document.querySelector(`.switcher__radio[value=${savedScheme}]`);
16+
if (currentRadio !== null) {
1217
currentRadio.checked = true;
1318
}
19+
}
1420

15-
[...switcherRadios].forEach((radio) => {
16-
radio.addEventListener('change', (event) => {
17-
setScheme(event.target.value);
18-
});
21+
[...switcherRadios].forEach((radio) => {
22+
radio.addEventListener('change', (event) => {
23+
setScheme(event.target.value);
1924
});
20-
}
25+
});
26+
}
2127

22-
function initializeScheme() {
23-
const savedScheme = getSavedScheme();
24-
const systemScheme = getSystemScheme();
28+
var initializeScheme = function initializeScheme() {
29+
let savedScheme = getSavedScheme();
30+
let systemScheme = getSystemScheme();
2531

26-
if (savedScheme == null) return;
32+
if (savedScheme == null) return;
2733

28-
if(savedScheme !== systemScheme) {
29-
setScheme(savedScheme);
30-
}
34+
if(savedScheme !== systemScheme) {
35+
setScheme(savedScheme);
3136
}
37+
}
3238

33-
function setScheme(scheme) {
34-
switchMediaScheme(scheme);
39+
function setScheme(scheme) {
40+
switchMediaScheme(scheme);
3541

36-
if (scheme === 'auto') {
37-
clearScheme();
38-
} else {
39-
saveScheme(scheme);
40-
}
42+
if (scheme === 'auto') {
43+
clearScheme();
44+
} else {
45+
saveScheme(scheme);
46+
}
47+
}
48+
49+
function switchMediaScheme(scheme) {
50+
let lightMedia;
51+
let darkMedia;
52+
53+
if (scheme === 'auto') {
54+
lightMedia = '(prefers-color-scheme: light)';
55+
darkMedia = '(prefers-color-scheme: dark)';
56+
} else {
57+
lightMedia = (scheme === 'light') ? 'all' : 'bot all';
58+
darkMedia = (scheme === 'dark') ? 'all' : 'bot all';
4159
}
4260

43-
function switchMediaScheme(scheme) {
44-
let lightMedia;
45-
let darkMedia;
46-
47-
if (scheme === 'auto') {
48-
lightMedia = '(prefers-color-scheme: light)';
49-
darkMedia = '(prefers-color-scheme: dark)';
50-
} else {
51-
lightMedia = (scheme === 'light') ? 'all' : 'bot all';
52-
darkMedia = (scheme === 'dark') ? 'all' : 'bot all';
53-
}
61+
[...lightStyles].forEach((link) => {
62+
link.media = lightMedia;
63+
});
5464

55-
[...lightStyles].forEach((link) => {
56-
link.media = lightMedia;
57-
});
65+
[...darkStyles].forEach((link) => {
66+
link.media = darkMedia;
67+
});
68+
}
5869

59-
[...darkStyles].forEach((link) => {
60-
link.media = darkMedia;
61-
});
62-
}
70+
function getSystemScheme() {
71+
let darkScheme = darkSdhemeMedia.matches;
6372

64-
function getSystemScheme() {
65-
const darkScheme = darkSdhemeMedia.matches;
73+
return darkScheme ? 'dark' : 'light';
74+
}
6675

67-
return darkScheme ? 'dark' : 'light';
68-
}
76+
function getSavedScheme() {
77+
return localStorage.getItem('color-scheme');
78+
}
6979

70-
function getSavedScheme() {
71-
return localStorage.getItem('color-scheme');
72-
}
80+
function saveScheme(scheme) {
81+
localStorage.setItem('color-scheme', scheme);
82+
}
7383

74-
function saveScheme(scheme) {
75-
localStorage.setItem('color-scheme', scheme);
76-
}
84+
function clearScheme() {
85+
localStorage.removeItem('color-scheme');
86+
}
7787

78-
function clearScheme() {
79-
localStorage.removeItem('color-scheme');
80-
}
88+
$(window).on('popstate', function() {
89+
initializeSwitcher();
90+
initializeScheme();
91+
});
8192

93+
$(document).ready(function() {
8294
initializeSwitcher();
8395
initializeScheme();
8496
});

0 commit comments

Comments
 (0)