Skip to content

Commit ad992db

Browse files
committed
Improved theme mode switching logic.
1 parent a924549 commit ad992db

File tree

1 file changed

+36
-20
lines changed

1 file changed

+36
-20
lines changed

_includes/mode-toggle.html

Lines changed: 36 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@
2020
constructor() {
2121
if (this.mode != null) {
2222
if (this.mode == ModeToggle.DARK_MODE) {
23-
if (!this.isDarkPrefer) {
23+
if (!this.isSysDarkPrefer) {
2424
this.setDark();
2525
}
2626
} else {
27-
if (this.isDarkPrefer) {
27+
if (this.isSysDarkPrefer) {
2828
this.setLight();
2929
}
3030
}
@@ -34,15 +34,14 @@
3434

3535
/* always follow the system prefers */
3636
this.sysDarkPrefers.addListener(function() {
37-
3837
if (self.mode != null) {
3938
if (self.mode == ModeToggle.DARK_MODE) {
40-
if (!self.isDarkPrefer) {
39+
if (!self.isSysDarkPrefer) {
4140
self.setDark();
4241
}
4342

4443
} else {
45-
if (self.isDarkPrefer) {
44+
if (self.isSysDarkPrefer) {
4645
self.setLight();
4746
}
4847
}
@@ -69,27 +68,44 @@
6968
sessionStorage.removeItem(ModeToggle.MODE_KEY);
7069
}
7170

72-
get sysDarkPrefers() {
73-
return window.matchMedia("(prefers-color-scheme: dark)");
74-
}
71+
get sysDarkPrefers() { return window.matchMedia("(prefers-color-scheme: dark)"); }
7572

76-
get isDarkPrefer() {
77-
return this.sysDarkPrefers.matches;
78-
}
73+
get isSysDarkPrefer() { return this.sysDarkPrefers.matches; }
7974

80-
get mode() {
81-
return sessionStorage.getItem(ModeToggle.MODE_KEY);
82-
}
75+
get isDarkMode() { return this.mode == ModeToggle.DARK_MODE; }
76+
77+
get isLightkMode() { return this.mode == ModeToggle.LIGHT_MODE; }
78+
79+
get hasMode() { return this.mode != null; }
80+
81+
get mode() { return sessionStorage.getItem(ModeToggle.MODE_KEY); }
8382

8483
flipMode() {
85-
if ((this.mode == null && this.isDarkPrefer) ||
86-
this.mode == ModeToggle.DARK_MODE) {
87-
this.setLight();
84+
if (this.hasMode) {
85+
if (this.isSysDarkPrefer) {
86+
if (this.isLightkMode) {
87+
this.clearMode();
88+
} else {
89+
this.setLight();
90+
}
8891

89-
} else { /* light mode or default-light */
90-
this.setDark();
92+
} else {
93+
if (this.isDarkMode) {
94+
this.clearMode();
95+
} else {
96+
this.setDark();
97+
}
98+
}
99+
100+
} else {
101+
if (this.isSysDarkPrefer) {
102+
this.setLight();
103+
} else {
104+
this.setDark();
105+
}
91106
}
92-
}
107+
108+
} /* flipMode() */
93109

94110
} /* ModeToggle */
95111

0 commit comments

Comments
 (0)