/** * Language Selector Component * Simple icon-based selector for all devices */ (function() { const supportedLanguages = [ { code: 'en', name: 'English', flag: '🇬🇧' }, { code: 'de', name: 'Deutsch', flag: '🇩🇪' }, { code: 'fr', name: 'Français', flag: '🇫🇷' }, { code: 'mi', name: 'Te Reo Māori', flag: '🇳🇿', disabled: true, tooltip: 'Planned' } ]; function createLanguageSelector() { const container = document.getElementById('language-selector-container'); if (!container) return; const currentLang = (window.I18n && window.I18n.currentLang) || 'en'; const selectorHTML = `
${supportedLanguages.map(lang => ` `).join('')}
`; container.innerHTML = selectorHTML; // Add event listeners attachEventListeners(currentLang); } function attachEventListeners(currentLang) { // Icon buttons const iconButtons = document.querySelectorAll('.language-icon-btn:not([disabled])'); iconButtons.forEach(button => { button.addEventListener('click', function() { const selectedLang = this.getAttribute('data-lang'); if (window.I18n) { window.I18n.setLanguage(selectedLang); } // Update active state document.querySelectorAll('.language-icon-btn').forEach(btn => { if (!btn.disabled) { btn.classList.remove('border-blue-600', 'bg-blue-50'); btn.classList.add('border-gray-300', 'bg-white'); } }); this.classList.remove('border-gray-300', 'bg-white'); this.classList.add('border-blue-600', 'bg-blue-50'); }); }); } // Initialize when navbar is ready (not just DOM ready) function initWhenReady() { // Check if navbar container exists if (document.getElementById('language-selector-container')) { createLanguageSelector(); } else { // Wait for navbar to signal it's ready window.addEventListener('navbarReady', createLanguageSelector, { once: true }); } } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initWhenReady); } else { initWhenReady(); } // Re-initialize when language changes (to update active state) if (window.I18n) { const originalSetLanguage = window.I18n.setLanguage; window.I18n.setLanguage = function(lang) { originalSetLanguage.call(window.I18n, lang); createLanguageSelector(); // Refresh selector with new active language }; } })();