|
1 | 1 | // Simple Theme Toggle Implementation |
2 | | -(function() { |
3 | | - const THEME_KEY = 'site-theme'; |
4 | | - console.log('Theme toggle script loaded'); |
| 2 | +(function () { |
| 3 | + const THEME_KEY = "site-theme"; |
| 4 | + console.log("Theme toggle script loaded"); |
5 | 5 |
|
6 | 6 | // Apply theme to document |
7 | 7 | function applyTheme(theme) { |
8 | | - console.log('applyTheme called with:', theme); |
9 | | - if (theme === 'dark') { |
10 | | - document.documentElement.setAttribute('data-theme', 'dark'); |
| 8 | + console.log("applyTheme called with:", theme); |
| 9 | + if (theme === "dark") { |
| 10 | + document.documentElement.setAttribute("data-theme", "dark"); |
11 | 11 | } else { |
12 | | - document.documentElement.removeAttribute('data-theme'); |
| 12 | + document.documentElement.removeAttribute("data-theme"); |
13 | 13 | } |
14 | 14 | updateToggleButton(theme); |
| 15 | + updateDiscordLogo(theme); |
| 16 | + } |
| 17 | + |
| 18 | + function updateDiscordLogo(theme) { |
| 19 | + const discordLogo = document.getElementById("discord-logo-img"); |
| 20 | + if (discordLogo) { |
| 21 | + discordLogo.src = |
| 22 | + theme === "dark" |
| 23 | + ? "assets/png/discord-btn-dark.png" |
| 24 | + : "assets/png/discord-btn-light.png"; |
| 25 | + } |
15 | 26 | } |
16 | 27 |
|
17 | 28 | // Update toggle button appearance |
18 | 29 | function updateToggleButton(theme) { |
19 | | - console.log('updateToggleButton called with:', theme); |
20 | | - const toggle = document.getElementById('theme-toggle'); |
21 | | - console.log('toggle element:', toggle); |
| 30 | + console.log("updateToggleButton called with:", theme); |
| 31 | + const toggle = document.getElementById("theme-toggle"); |
| 32 | + console.log("toggle element:", toggle); |
22 | 33 | if (toggle) { |
23 | | - const newHTML = theme === 'dark' ? '<span class="toggle-icon">☀️</span>' : '<span class="toggle-icon">🌙</span>'; |
24 | | - console.log('Setting toggle HTML to:', newHTML); |
| 34 | + const newHTML = |
| 35 | + theme === "dark" |
| 36 | + ? '<span class="toggle-icon">☀️</span>' |
| 37 | + : '<span class="toggle-icon">🌙</span>'; |
| 38 | + console.log("Setting toggle HTML to:", newHTML); |
25 | 39 | toggle.innerHTML = newHTML; |
26 | 40 | } |
27 | 41 | } |
28 | 42 |
|
29 | 43 | // Toggle between dark and light theme |
30 | 44 | function toggleTheme(e) { |
31 | | - console.log('toggleTheme called, event:', e); |
| 45 | + console.log("toggleTheme called, event:", e); |
32 | 46 | e.preventDefault(); |
33 | | - const currentTheme = document.documentElement.getAttribute('data-theme') || 'light'; |
34 | | - console.log('currentTheme:', currentTheme); |
35 | | - const newTheme = currentTheme === 'dark' ? 'light' : 'dark'; |
36 | | - console.log('newTheme:', newTheme); |
| 47 | + const currentTheme = |
| 48 | + document.documentElement.getAttribute("data-theme") || "light"; |
| 49 | + console.log("currentTheme:", currentTheme); |
| 50 | + const newTheme = currentTheme === "dark" ? "light" : "dark"; |
| 51 | + console.log("newTheme:", newTheme); |
37 | 52 | localStorage.setItem(THEME_KEY, newTheme); |
38 | 53 | applyTheme(newTheme); |
39 | 54 | } |
40 | 55 |
|
41 | 56 | // Initialize theme |
42 | 57 | function initTheme() { |
43 | | - console.log('initTheme called'); |
| 58 | + console.log("initTheme called"); |
44 | 59 | const savedTheme = localStorage.getItem(THEME_KEY); |
45 | | - console.log('savedTheme from localStorage:', savedTheme); |
| 60 | + console.log("savedTheme from localStorage:", savedTheme); |
46 | 61 | let theme; |
47 | 62 |
|
48 | 63 | if (savedTheme) { |
49 | 64 | // Use saved preference if available |
50 | 65 | theme = savedTheme; |
51 | | - console.log('Using saved theme:', theme); |
| 66 | + console.log("Using saved theme:", theme); |
52 | 67 | } else { |
53 | 68 | // Check system preference (browser settings) |
54 | | - const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches; |
55 | | - console.log('System prefers dark mode:', prefersDark); |
56 | | - theme = prefersDark ? 'dark' : 'light'; |
57 | | - console.log('Using system theme:', theme); |
| 69 | + const prefersDark = window.matchMedia( |
| 70 | + "(prefers-color-scheme: dark)", |
| 71 | + ).matches; |
| 72 | + console.log("System prefers dark mode:", prefersDark); |
| 73 | + theme = prefersDark ? "dark" : "light"; |
| 74 | + console.log("Using system theme:", theme); |
58 | 75 | } |
59 | 76 |
|
60 | | - console.log('theme to apply:', theme); |
| 77 | + console.log("theme to apply:", theme); |
61 | 78 | applyTheme(theme); |
62 | 79 | } |
63 | 80 |
|
64 | 81 | // Listen for system theme changes |
65 | 82 | function setupSystemThemeListener() { |
66 | | - const darkModeQuery = window.matchMedia('(prefers-color-scheme: dark)'); |
67 | | - darkModeQuery.addEventListener('change', (e) => { |
| 83 | + const darkModeQuery = window.matchMedia("(prefers-color-scheme: dark)"); |
| 84 | + darkModeQuery.addEventListener("change", (e) => { |
68 | 85 | // Only apply system theme if user hasn't saved a preference |
69 | 86 | if (!localStorage.getItem(THEME_KEY)) { |
70 | | - const newTheme = e.matches ? 'dark' : 'light'; |
71 | | - console.log('System theme changed to:', newTheme); |
| 87 | + const newTheme = e.matches ? "dark" : "light"; |
| 88 | + console.log("System theme changed to:", newTheme); |
72 | 89 | applyTheme(newTheme); |
73 | 90 | } |
74 | 91 | }); |
75 | 92 | } |
76 | 93 |
|
77 | 94 | // Setup click handler |
78 | 95 | function setupClickHandler() { |
79 | | - console.log('setupClickHandler called'); |
80 | | - const toggle = document.getElementById('theme-toggle'); |
81 | | - console.log('toggle element found:', !!toggle); |
| 96 | + console.log("setupClickHandler called"); |
| 97 | + const toggle = document.getElementById("theme-toggle"); |
| 98 | + console.log("toggle element found:", !!toggle); |
82 | 99 | if (toggle) { |
83 | | - console.log('Adding click listener to toggle button'); |
84 | | - toggle.addEventListener('click', toggleTheme); |
85 | | - console.log('Click listener added'); |
| 100 | + console.log("Adding click listener to toggle button"); |
| 101 | + toggle.addEventListener("click", toggleTheme); |
| 102 | + console.log("Click listener added"); |
86 | 103 | } else { |
87 | | - console.log('ERROR: toggle element not found!'); |
| 104 | + console.log("ERROR: toggle element not found!"); |
88 | 105 | } |
89 | 106 | } |
90 | 107 |
|
91 | 108 | // Initialize on page load |
92 | 109 | function init() { |
93 | | - console.log('init called'); |
| 110 | + console.log("init called"); |
94 | 111 | initTheme(); |
95 | 112 | setupClickHandler(); |
96 | 113 | setupSystemThemeListener(); |
97 | 114 | } |
98 | 115 |
|
99 | 116 | // Run initialization |
100 | | - console.log('document.readyState:', document.readyState); |
| 117 | + console.log("document.readyState:", document.readyState); |
101 | 118 |
|
102 | 119 | // Wait for navbar to be loaded first |
103 | | - document.addEventListener('navbarLoaded', function() { |
104 | | - console.log('navbarLoaded event received, initializing theme toggle'); |
| 120 | + document.addEventListener("navbarLoaded", function () { |
| 121 | + console.log("navbarLoaded event received, initializing theme toggle"); |
105 | 122 | setTimeout(init, 50); |
106 | 123 | }); |
107 | 124 |
|
108 | 125 | // Also try on DOMContentLoaded as fallback |
109 | | - if (document.readyState === 'loading') { |
110 | | - console.log('DOM still loading, waiting for DOMContentLoaded'); |
111 | | - document.addEventListener('DOMContentLoaded', function() { |
112 | | - console.log('DOMContentLoaded fired'); |
| 126 | + if (document.readyState === "loading") { |
| 127 | + console.log("DOM still loading, waiting for DOMContentLoaded"); |
| 128 | + document.addEventListener("DOMContentLoaded", function () { |
| 129 | + console.log("DOMContentLoaded fired"); |
113 | 130 | setTimeout(init, 100); |
114 | 131 | }); |
115 | 132 | } else { |
116 | | - console.log('DOM already loaded, trying init'); |
| 133 | + console.log("DOM already loaded, trying init"); |
117 | 134 | setTimeout(init, 100); |
118 | 135 | } |
119 | | -})(); |
120 | 136 |
|
| 137 | + // Listen for footer |
| 138 | + document.addEventListener("footerLoaded", function () { |
| 139 | + console.log("footerLoaded event received, updating discord logo"); |
| 140 | + const currentTheme = |
| 141 | + document.documentElement.getAttribute("data-theme") || "light"; |
| 142 | + updateDiscordLogo(currentTheme); |
| 143 | + }); |
| 144 | +})(); |
0 commit comments