Commit c03f8c8

HPCesia <me@hpcesia.com>
2025-02-02 15:10:40
fix: darkmode button swup bug
1 parent 3578041
Changed files (1)
src
components
src/components/widgets/DarkModeButton.astro
@@ -26,53 +26,58 @@ const { class: className, showText, ...rest } = Astro.props;
 </Button>
 
 <script>
-  const darkmodeBtns = document.querySelectorAll('button.darkmode-btn');
+  function initDarkmodeButtons() {
+    const darkmodeBtns = document.querySelectorAll('button.darkmode-btn');
 
-  function refreshButtons() {
-    darkmodeBtns.forEach((btn) => {
-      const iconLight = btn.querySelector('.darkmode-icon-light');
-      const iconDark = btn.querySelector('.darkmode-icon-dark');
-      const iconAuto = btn.querySelector('.darkmode-icon-auto');
-      const text = btn.querySelector('.darkmode-text');
+    function refreshButtons() {
+      darkmodeBtns.forEach((btn) => {
+        const iconLight = btn.querySelector('.darkmode-icon-light');
+        const iconDark = btn.querySelector('.darkmode-icon-dark');
+        const iconAuto = btn.querySelector('.darkmode-icon-auto');
+        const text = btn.querySelector('.darkmode-text');
 
-      if ('darkMode' in localStorage && localStorage.darkMode === 'true') {
-        iconLight?.classList.add('hidden');
-        iconDark?.classList.remove('hidden');
-        iconAuto?.classList.add('hidden');
-        if (text) text.textContent = btn.getAttribute('data-text-dark');
-        btn.setAttribute('title', btn.getAttribute('data-text-dark') || '');
-      } else if ('darkMode' in localStorage && localStorage.darkMode === 'false') {
-        iconLight?.classList.remove('hidden');
-        iconDark?.classList.add('hidden');
-        iconAuto?.classList.add('hidden');
-        if (text) text.textContent = btn.getAttribute('data-text-light');
-        btn.setAttribute('title', btn.getAttribute('data-text-light') || '');
-      } else {
-        iconLight?.classList.add('hidden');
-        iconDark?.classList.add('hidden');
-        iconAuto?.classList.remove('hidden');
-        if (text) text.textContent = btn.getAttribute('data-text-auto');
-        btn.setAttribute('title', btn.getAttribute('data-text-auto') || '');
-      }
-    });
-  }
+        if ('darkMode' in localStorage && localStorage.darkMode === 'true') {
+          iconLight?.classList.add('hidden');
+          iconDark?.classList.remove('hidden');
+          iconAuto?.classList.add('hidden');
+          if (text) text.textContent = btn.getAttribute('data-text-dark');
+          btn.setAttribute('title', btn.getAttribute('data-text-dark') || '');
+        } else if ('darkMode' in localStorage && localStorage.darkMode === 'false') {
+          iconLight?.classList.remove('hidden');
+          iconDark?.classList.add('hidden');
+          iconAuto?.classList.add('hidden');
+          if (text) text.textContent = btn.getAttribute('data-text-light');
+          btn.setAttribute('title', btn.getAttribute('data-text-light') || '');
+        } else {
+          iconLight?.classList.add('hidden');
+          iconDark?.classList.add('hidden');
+          iconAuto?.classList.remove('hidden');
+          if (text) text.textContent = btn.getAttribute('data-text-auto');
+          btn.setAttribute('title', btn.getAttribute('data-text-auto') || '');
+        }
+      });
+    }
 
-  darkmodeBtns.forEach((btn) => {
-    btn.addEventListener('click', () => {
-      if (!('darkMode' in localStorage)) {
-        localStorage.darkMode = false;
-        document.documentElement.classList.remove('dark');
-      } else if (localStorage.darkMode === 'false') {
-        localStorage.darkMode = true;
-        document.documentElement.classList.add('dark');
-      } else {
-        localStorage.removeItem('darkMode');
-        if (window.matchMedia('(prefers-color-scheme: dark)').matches)
+    darkmodeBtns.forEach((btn) => {
+      btn.addEventListener('click', () => {
+        if (!('darkMode' in localStorage)) {
+          localStorage.darkMode = false;
+          document.documentElement.classList.remove('dark');
+        } else if (localStorage.darkMode === 'false') {
+          localStorage.darkMode = true;
           document.documentElement.classList.add('dark');
-        else document.documentElement.classList.remove('dark');
-      }
-      refreshButtons();
+        } else {
+          localStorage.removeItem('darkMode');
+          if (window.matchMedia('(prefers-color-scheme: dark)').matches)
+            document.documentElement.classList.add('dark');
+          else document.documentElement.classList.remove('dark');
+        }
+        refreshButtons();
+      });
     });
-  });
-  refreshButtons();
+
+    refreshButtons();
+  }
+
+  document.addEventListener('astro:page-load', initDarkmodeButtons);
 </script>