Skip to content

Commit 8879a1b

Browse files
committed
enhancement: theme toggle
1 parent 73cc1f1 commit 8879a1b

File tree

3 files changed

+64
-19
lines changed

3 files changed

+64
-19
lines changed

src/js/toggle.js

Lines changed: 32 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -40,29 +40,42 @@ function handleSystemThemeChange(e) {
4040
}
4141
}
4242

43-
/* On page load: */
44-
const button = document.querySelector("[data-theme-toggle]");
45-
const localStorageTheme = localStorage.getItem("theme");
46-
const systemSettingDark = window.matchMedia("(prefers-color-scheme: dark)");
47-
48-
let currentThemeSetting = calculateSettingAsThemeString({
49-
localStorageTheme,
50-
systemSettingDark,
51-
});
52-
53-
// Initialize the button and theme
54-
updateButton({ buttonEl: button, isDark: currentThemeSetting === "dark" });
55-
updateThemeOnHtmlEl({ theme: currentThemeSetting });
56-
57-
// Add event listeners
58-
systemSettingDark.addListener(handleSystemThemeChange);
59-
60-
button.addEventListener("click", (event) => {
43+
// Handle theme toggle button click
44+
function handleThemeToggleClick() {
6145
const newTheme = currentThemeSetting === "dark" ? "light" : "dark";
6246

6347
localStorage.setItem("theme", newTheme);
6448
updateButton({ buttonEl: button, isDark: newTheme === "dark" });
6549
updateThemeOnHtmlEl({ theme: newTheme });
6650

6751
currentThemeSetting = newTheme;
68-
});
52+
}
53+
54+
// Initialize theme functionality
55+
function initTheme() {
56+
// Get DOM elements and system preferences
57+
const button = document.querySelector("[data-theme-toggle]");
58+
const localStorageTheme = localStorage.getItem("theme");
59+
const systemSettingDark = window.matchMedia("(prefers-color-scheme: dark)");
60+
61+
// Determine initial theme
62+
let currentThemeSetting = calculateSettingAsThemeString({
63+
localStorageTheme,
64+
systemSettingDark,
65+
});
66+
67+
// Initialize the button and theme
68+
updateButton({ buttonEl: button, isDark: currentThemeSetting === "dark" });
69+
updateThemeOnHtmlEl({ theme: currentThemeSetting });
70+
71+
// Add event listeners
72+
systemSettingDark.addListener(handleSystemThemeChange);
73+
button.addEventListener("click", handleThemeToggleClick);
74+
75+
// Make these available to event handlers
76+
window.button = button;
77+
window.currentThemeSetting = currentThemeSetting;
78+
}
79+
80+
// Execute initialization when DOM is ready
81+
document.addEventListener('DOMContentLoaded', initTheme);

src/newtab.html

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,22 @@
88
<meta name="description"
99
content="NoteKeeper is a Firefox extension that transforms the New Tab into a minimalist, auto-saving text editor.">
1010
<link rel="icon" type="image/png" sizes="48x48" href="icons/icon48.png" />
11+
<!-- Prevent flash of incorrect theme -->
12+
<script>
13+
(function () {
14+
const localStorageTheme = localStorage.getItem("theme");
15+
const systemSettingDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
16+
17+
let theme = "light";
18+
if (localStorageTheme) {
19+
theme = localStorageTheme;
20+
} else if (systemSettingDark) {
21+
theme = "dark";
22+
}
23+
24+
document.documentElement.setAttribute("data-theme", theme);
25+
})();
26+
</script>
1127
<link rel="stylesheet" href="styles.css" />
1228
</head>
1329

src/sidebar/panel.html

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,22 @@
88
<meta name="description"
99
content="NoteKeeper is a Firefox extension that transforms the New Tab into a minimalist, auto-saving text editor.">
1010
<link rel="icon" type="image/png" sizes="48x48" href="../icons/icon48.png" />
11+
<!-- Prevent flash of incorrect theme -->
12+
<script>
13+
(function () {
14+
const localStorageTheme = localStorage.getItem("theme");
15+
const systemSettingDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
16+
17+
let theme = "light";
18+
if (localStorageTheme) {
19+
theme = localStorageTheme;
20+
} else if (systemSettingDark) {
21+
theme = "dark";
22+
}
23+
24+
document.documentElement.setAttribute("data-theme", theme);
25+
})();
26+
</script>
1127
<link rel="stylesheet" href="../styles.css" />
1228
</head>
1329

0 commit comments

Comments
 (0)