|
3 | 3 | let btn: HTMLInputElement; |
4 | 4 | let media: MediaQueryList | void; |
5 | 5 |
|
6 | | - if (document.readyState !== 'loading') init(); |
7 | | - else addEventListener('DOMContentLoaded', init); |
| 6 | + if (document.readyState !== "loading") init(); |
| 7 | + else addEventListener("DOMContentLoaded", init); |
8 | 8 |
|
9 | | - btn = document.querySelector('#ThemeToggle')!; |
| 9 | + btn = document.querySelector("#ThemeToggle")!; |
10 | 10 | tooEarly = !btn; |
11 | 11 |
|
12 | 12 | function setter(isDark: boolean) { |
13 | 13 | try { |
14 | | - let theme = isDark ? 'dark' : 'light'; |
15 | | - document.documentElement.setAttribute('theme', theme); |
| 14 | + let theme = isDark ? "dark" : "light"; |
| 15 | + document.documentElement.setAttribute("theme", theme); |
16 | 16 | localStorage.theme = JSON.stringify({ theme }); |
17 | 17 |
|
18 | 18 | if (btn) { |
|
24 | 24 | } catch (err) { |
25 | 25 | // security error |
26 | 26 | } |
| 27 | + // set tooltip text |
| 28 | + if (isDark) { |
| 29 | + document.getElementById("ThemeToggle--tooltip").innerHTML = |
| 30 | + "Set theme to light (⇧+D)"; |
| 31 | + } else { |
| 32 | + document.getElementById("ThemeToggle--tooltip").innerHTML = |
| 33 | + "Set theme to dark (⇧+D)"; |
| 34 | + } |
27 | 35 | } |
28 | 36 |
|
29 | 37 | function init() { |
30 | | - btn = btn || document.querySelector('#ThemeToggle')!; |
31 | | - btn.addEventListener('change', () => setter(!!btn.checked)); |
| 38 | + btn = btn || document.querySelector("#ThemeToggle")!; |
| 39 | + btn.addEventListener("change", () => setter(!!btn.checked)); |
32 | 40 |
|
33 | 41 | // Shift+D for toggle |
34 | | - addEventListener('keydown', ev => { |
| 42 | + addEventListener("keydown", (ev) => { |
35 | 43 | if (ev.target !== document.body) return; |
36 | 44 | if (ev.which === 68 && ev.shiftKey) { |
37 | 45 | ev.preventDefault(); |
|
41 | 49 | } |
42 | 50 |
|
43 | 51 | try { |
44 | | - media = window.matchMedia('(prefers-color-scheme:dark)'); |
45 | | - media.onchange = ev => setter(ev.matches); |
| 52 | + media = window.matchMedia("(prefers-color-scheme:dark)"); |
| 53 | + media.onchange = (ev) => setter(ev.matches); |
46 | 54 | } catch (err) { |
47 | 55 | // no support |
48 | 56 | } |
|
0 commit comments