/** * Dark Mode Toggle Fix - Premium Edition * Diese Datei stellt sicher, dass der neue Premium Dark Mode Toggle Button korrekt funktioniert */ document.addEventListener('DOMContentLoaded', function() { // Dark Mode Toggle Button (Premium Design) const darkModeToggle = document.getElementById('darkModeToggle'); const html = document.documentElement; // Local Storage Key const STORAGE_KEY = 'myp-dark-mode'; /** * Aktuellen Dark Mode Status aus Local Storage oder Systemeinstellung abrufen */ function isDarkMode() { const savedMode = localStorage.getItem(STORAGE_KEY); if (savedMode !== null) { return savedMode === 'true'; } return window.matchMedia('(prefers-color-scheme: dark)').matches; } /** * Icons im Premium Toggle-Button aktualisieren */ function updateIcons(isDark) { if (!darkModeToggle) return; // Finde die Premium-Icons const sunIcon = darkModeToggle.querySelector('.sun-icon'); const moonIcon = darkModeToggle.querySelector('.moon-icon'); if (!sunIcon || !moonIcon) { console.warn('Premium Dark Mode Icons nicht gefunden'); return; } // Animation für Übergänge if (isDark) { // Dark Mode aktiviert - zeige Mond sunIcon.style.opacity = '0'; sunIcon.style.transform = 'scale(0.75) rotate(90deg)'; moonIcon.style.opacity = '1'; moonIcon.style.transform = 'scale(1) rotate(0deg)'; // CSS-Klassen für Dark Mode sunIcon.classList.add('opacity-0', 'dark:opacity-0', 'scale-75', 'dark:scale-75', 'rotate-90', 'dark:rotate-90'); sunIcon.classList.remove('opacity-100', 'scale-100', 'rotate-0'); moonIcon.classList.add('opacity-100', 'dark:opacity-100', 'scale-100', 'dark:scale-100', 'rotate-0', 'dark:rotate-0'); moonIcon.classList.remove('opacity-0', 'scale-75', 'rotate-90'); } else { // Light Mode aktiviert - zeige Sonne sunIcon.style.opacity = '1'; sunIcon.style.transform = 'scale(1) rotate(0deg)'; moonIcon.style.opacity = '0'; moonIcon.style.transform = 'scale(0.75) rotate(-90deg)'; // CSS-Klassen für Light Mode sunIcon.classList.add('opacity-100', 'scale-100', 'rotate-0'); sunIcon.classList.remove('opacity-0', 'dark:opacity-0', 'scale-75', 'dark:scale-75', 'rotate-90', 'dark:rotate-90'); moonIcon.classList.add('opacity-0', 'dark:opacity-100', 'scale-75', 'dark:scale-100', 'rotate-90', 'dark:rotate-0'); moonIcon.classList.remove('opacity-100', 'scale-100', 'rotate-0'); } // Icon-Animationen hinzufügen sunIcon.classList.toggle('icon-enter', !isDark); moonIcon.classList.toggle('icon-enter', isDark); } /** * Premium Dark Mode aktivieren/deaktivieren */ function setDarkMode(enable) { console.log(`🎨 Setze Premium Dark Mode auf: ${enable ? 'Aktiviert' : 'Deaktiviert'}`); if (enable) { html.classList.add('dark'); html.setAttribute('data-theme', 'dark'); html.style.colorScheme = 'dark'; if (darkModeToggle) { darkModeToggle.setAttribute('aria-pressed', 'true'); darkModeToggle.setAttribute('title', 'Light Mode aktivieren'); // Premium Button-Icons aktualisieren updateIcons(true); } } else { html.classList.remove('dark'); html.setAttribute('data-theme', 'light'); html.style.colorScheme = 'light'; if (darkModeToggle) { darkModeToggle.setAttribute('aria-pressed', 'false'); darkModeToggle.setAttribute('title', 'Dark Mode aktivieren'); // Premium Button-Icons aktualisieren updateIcons(false); } } // Einstellung im Local Storage speichern localStorage.setItem(STORAGE_KEY, enable.toString()); // ThemeColor Meta-Tag aktualisieren const metaThemeColor = document.getElementById('metaThemeColor'); if (metaThemeColor) { metaThemeColor.setAttribute('content', enable ? '#000000' : '#ffffff'); } // Event für andere Komponenten auslösen window.dispatchEvent(new CustomEvent('darkModeChanged', { detail: { isDark: enable } })); // Premium-Feedback console.log(`${enable ? '🌙' : '☀️'} Premium Design umgeschaltet auf: ${enable ? 'Dark Mode' : 'Light Mode'}`); } // Toggle Dark Mode Funktion function toggleDarkMode() { const currentMode = isDarkMode(); setDarkMode(!currentMode); // Premium-Animation beim Klick if (darkModeToggle) { const container = darkModeToggle.querySelector('div'); if (container) { container.style.transform = 'scale(0.95)'; setTimeout(() => { container.style.transform = ''; }, 150); } } } // Event Listener für Premium Toggle Button if (darkModeToggle) { console.log('🎨 Premium Dark Mode Toggle Button gefunden - initialisiere...'); // Entferne vorherige Event-Listener, um Duplikate zu vermeiden const newDarkModeToggle = darkModeToggle.cloneNode(true); darkModeToggle.parentNode.replaceChild(newDarkModeToggle, darkModeToggle); // Neuen Event-Listener hinzufügen newDarkModeToggle.addEventListener('click', function(e) { e.preventDefault(); e.stopPropagation(); // Verhindere Bubbling toggleDarkMode(); }); // Aktualisiere die Variable auf das neue Element const updatedToggle = document.getElementById('darkModeToggle'); // Initialen Status setzen const isDark = isDarkMode(); setDarkMode(isDark); console.log('✨ Premium Dark Mode Toggle Button erfolgreich initialisiert'); } else { console.error('❌ Premium Dark Mode Toggle Button konnte nicht gefunden werden!'); } // Tastaturkürzel: Strg+Shift+D für Dark Mode Toggle document.addEventListener('keydown', function(e) { if (e.ctrlKey && e.shiftKey && e.key === 'D') { toggleDarkMode(); e.preventDefault(); } }); // Alternative Tastaturkürzel: Alt+T für Theme Toggle document.addEventListener('keydown', function(e) { if (e.altKey && e.key === 't') { toggleDarkMode(); e.preventDefault(); } }); // Direkte Verfügbarkeit der Funktionen im globalen Bereich window.toggleDarkMode = toggleDarkMode; window.isDarkMode = isDarkMode; window.setDarkMode = setDarkMode; // Premium Features window.premiumDarkMode = { toggle: toggleDarkMode, isDark: isDarkMode, setMode: setDarkMode, version: '3.0.0-premium' }; console.log('🎨 Premium Dark Mode System geladen - Version 3.0.0'); });