/** * Haupt-Initialisierung: Event-Listener, Hash-Filter, App-Start. */ let allTemplates = []; // Search-Event document.getElementById('search').addEventListener('input', (e) => { currentQuery = e.target.value.toLowerCase(); applyFilters(); }); // Close modal on overlay click document.getElementById('modal').addEventListener('click', (e) => { if (e.target === e.currentTarget) closeModal(); }); document.getElementById('edit-modal').addEventListener('click', (e) => { if (e.target === e.currentTarget) closeEditModal(); }); document.getElementById('tune-modal').addEventListener('click', (e) => { if (e.target === e.currentTarget) closeTuneModal(); }); // Focus trap for edit-modal document.getElementById('edit-modal').addEventListener('keydown', function(e) { if (e.key === 'Tab') { _trapFocus(e, document.getElementById('edit-modal')); } }); // Focus trap for tune-modal document.getElementById('tune-modal').addEventListener('keydown', function(e) { if (e.key === 'Tab') { _trapFocus(e, document.getElementById('tune-modal')); } }); // Escape key closes modal document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { closeEditModal(); closeModal(); closeTuneModal(); } }); // Hash -> type filter window.addEventListener('hashchange', () => { currentType = parseTypeFromHash(); applyFilters(); }); // Nav clicks set the hash; hashchange drives filtering document.querySelectorAll('.nav a').forEach(link => { link.addEventListener('click', (e) => { e.preventDefault(); const target = link.getAttribute('href') || '#'; if (window.location.hash === target || (target === '#' && window.location.hash === '')) { return; // same target, no hashchange would fire } window.location.hash = target; }); }); // Set initial aria-hidden on all modals _setAriaHidden('modal', true); _setAriaHidden('edit-modal', true); _setAriaHidden('tune-modal', true); // Initial load loadTemplates().then(t => { allTemplates = t; window.allTemplates = t; currentType = parseTypeFromHash(); applyFilters(); }).catch(e => { console.error('Failed to load templates:', e); allTemplates = []; window.allTemplates = []; applyFilters(); });