|
7 | 7 | MIT License |
8 | 8 | --> |
9 | 9 |
|
10 | | -<i id="mode-toggle"></i> |
| 10 | +<i class="mode-toggle fas fa-sun" light-mode-invisible></i> |
| 11 | +<i class="mode-toggle fas fa-moon" dark-mode-invisible></i> |
11 | 12 |
|
12 | 13 | <script type="text/javascript"> |
13 | 14 |
|
|
17 | 18 | static get LIGHT_MODE() { return "light"; } |
18 | 19 |
|
19 | 20 | constructor() { |
20 | | - if (this.isSysDarkMode) { |
21 | | - ModeToggle.setLightIcon(); |
22 | | - } else { |
23 | | - ModeToggle.setDarkIcon(); |
24 | | - } |
25 | | - |
26 | 21 | if (this.mode != null) { |
27 | 22 | if (this.mode == ModeToggle.DARK_MODE) { |
28 | | - ModeToggle.setDark(); |
29 | | - } else if (this.mode == ModeToggle.LIGHT_MODE) { |
30 | | - ModeToggle.setLight(); |
| 23 | + if (!this.isDarkPrefer) { |
| 24 | + this.setDark(); |
| 25 | + } |
| 26 | + } else { |
| 27 | + if (this.isDarkPrefer) { |
| 28 | + this.setLight(); |
| 29 | + } |
31 | 30 | } |
32 | 31 | } |
33 | 32 |
|
34 | 33 | var self = this; |
35 | 34 |
|
36 | | - /* always follow system prefers */ |
| 35 | + /* always follow the system prefers */ |
37 | 36 | this.sysDarkPrefers.addListener(function() { |
38 | | - if (self.isSysDarkMode) { |
39 | | - ModeToggle.setDark(); |
40 | | - } else { |
41 | | - ModeToggle.setLight(); |
| 37 | + |
| 38 | + if (self.mode != null) { |
| 39 | + if (self.mode == ModeToggle.DARK_MODE) { |
| 40 | + if (!self.isDarkPrefer) { |
| 41 | + self.setDark(); |
| 42 | + } |
| 43 | + |
| 44 | + } else { |
| 45 | + if (self.isDarkPrefer) { |
| 46 | + self.setLight(); |
| 47 | + } |
| 48 | + } |
| 49 | + |
| 50 | + self.clearMode(); |
42 | 51 | } |
43 | | - ModeToggle.clearMode(); |
44 | 52 | }); |
45 | 53 |
|
46 | 54 | } /* constructor() */ |
47 | 55 |
|
48 | | - static setDarkIcon() { |
49 | | - $("#mode-toggle").removeClass("fas fa-sun").addClass("fas fa-moon"); |
50 | | - } |
51 | 56 |
|
52 | | - static setLightIcon() { |
53 | | - $("#mode-toggle").removeClass("fas fa-moon").addClass("fas fa-sun"); |
54 | | - } |
55 | | - |
56 | | - static setDark() { |
57 | | - ModeToggle.setLightIcon(); |
| 57 | + setDark() { |
| 58 | + $('html').attr(ModeToggle.MODE_KEY, ModeToggle.DARK_MODE); |
58 | 59 | sessionStorage.setItem(ModeToggle.MODE_KEY, ModeToggle.DARK_MODE); |
59 | | - $('html').removeClass('light-mode').addClass('dark-mode'); |
60 | 60 | } |
61 | 61 |
|
62 | | - static setLight() { |
63 | | - ModeToggle.setDarkIcon(); |
| 62 | + setLight() { |
| 63 | + $('html').attr(ModeToggle.MODE_KEY, ModeToggle.LIGHT_MODE); |
64 | 64 | sessionStorage.setItem(ModeToggle.MODE_KEY, ModeToggle.LIGHT_MODE); |
65 | | - $('html').removeClass('dark-mode').addClass('light-mode'); |
66 | 65 | } |
67 | 66 |
|
68 | | - static clearMode() { |
| 67 | + clearMode() { |
| 68 | + $('html').removeAttr(ModeToggle.MODE_KEY); |
69 | 69 | sessionStorage.removeItem(ModeToggle.MODE_KEY); |
70 | 70 | } |
71 | 71 |
|
72 | 72 | get sysDarkPrefers() { |
73 | 73 | return window.matchMedia("(prefers-color-scheme: dark)"); |
74 | 74 | } |
75 | 75 |
|
76 | | - get isSysDarkMode() { |
| 76 | + get isDarkPrefer() { |
77 | 77 | return this.sysDarkPrefers.matches; |
78 | 78 | } |
79 | 79 |
|
|
82 | 82 | } |
83 | 83 |
|
84 | 84 | flipMode() { |
85 | | - if ((this.mode == null && this.isSysDarkMode) || |
| 85 | + if ((this.mode == null && this.isDarkPrefer) || |
86 | 86 | this.mode == ModeToggle.DARK_MODE) { |
87 | | - ModeToggle.setLight(); |
| 87 | + this.setLight(); |
| 88 | + |
88 | 89 | } else { /* light mode or default-light */ |
89 | | - ModeToggle.setDark(); |
| 90 | + this.setDark(); |
90 | 91 | } |
91 | 92 | } |
92 | 93 |
|
93 | 94 | } /* ModeToggle */ |
94 | 95 |
|
95 | 96 | let toggle = new ModeToggle(); |
96 | 97 |
|
97 | | - $("#mode-toggle").click(function() { |
| 98 | + $(".mode-toggle").click(function() { |
98 | 99 | toggle.flipMode(); |
99 | 100 | }); |
100 | 101 |
|
|
0 commit comments