@@ -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 ) ;
0 commit comments