From: Danilo M. Date: Wed, 15 Apr 2026 19:48:54 +0000 (+0200) Subject: Fix theme toggle icon to always sync with actual page theme X-Git-Tag: release_22042026-1342~240 X-Git-Url: https://git.danix.xyz/?a=commitdiff_plain;h=134d00e5bd0f15113e256c8446931d830985fbf4;p=danix.xyz-2.git Fix theme toggle icon to always sync with actual page theme Replace Alpine.js conditional rendering with plain JavaScript that: - Reads the actual theme class from the html element on page load - Updates icon visibility based on the real DOM state, not internal state - Handles navigation correctly since it checks the current class every time This fixes the issue where navigating between pages caused the icon to become out of sync with the actual theme being displayed. Co-Authored-By: Claude Haiku 4.5 --- diff --git a/themes/danix-xyz-hacker/assets/js/theme-toggle.js b/themes/danix-xyz-hacker/assets/js/theme-toggle.js index 3a4fda2..bb95b2a 100644 --- a/themes/danix-xyz-hacker/assets/js/theme-toggle.js +++ b/themes/danix-xyz-hacker/assets/js/theme-toggle.js @@ -1,5 +1,25 @@ document.addEventListener('DOMContentLoaded', function() { const themeToggle = document.getElementById('theme-toggle'); + const sunIcon = document.getElementById('theme-icon-sun'); + const moonIcon = document.getElementById('theme-icon-moon'); + + function updateThemeIcon() { + const isDark = document.documentElement.classList.contains('theme-dark'); + if (sunIcon && moonIcon) { + if (isDark) { + sunIcon.style.display = 'block'; + moonIcon.style.display = 'none'; + } else { + sunIcon.style.display = 'none'; + moonIcon.style.display = 'block'; + } + } + } + + // Update icon on initial load + if (sunIcon && moonIcon) { + updateThemeIcon(); + } if (!themeToggle) { return; @@ -19,23 +39,12 @@ document.addEventListener('DOMContentLoaded', function() { // Add the new theme class htmlElement.classList.add(`theme-${newTheme}`); - // Update article type badge colors - const badges = document.querySelectorAll('[data-theme-dark-color]'); - badges.forEach(badge => { - if (newTheme === 'dark') { - const darkColor = badge.getAttribute('data-theme-dark-color'); - badge.style.color = darkColor; - badge.style.backgroundColor = darkColor + '20'; - } else { - const lightColor = badge.style.color; // Already set to light in HTML - badge.style.color = lightColor; - // backgroundColor stays as is (light color with opacity) - } - }); - // Persist to localStorage localStorage.setItem('theme', newTheme); + // Update icon display + updateThemeIcon(); + // Update Feather Icons if available if (window.feather) { window.feather.replace(); diff --git a/themes/danix-xyz-hacker/layouts/partials/header.html b/themes/danix-xyz-hacker/layouts/partials/header.html index ec12b52..49493c6 100644 --- a/themes/danix-xyz-hacker/layouts/partials/header.html +++ b/themes/danix-xyz-hacker/layouts/partials/header.html @@ -48,20 +48,11 @@