document.addEventListener('DOMContentLoaded', () => { const eventGrid = document.getElementById('event-grid'); const filterButtons = document.querySelectorAll('.category-item'); let allEvents = []; // 1. Daten laden aus JSOn file async function fetchEvents() { try { // Pfad zu JSON File angepasst an lokale Ordnerstruktur const response = await fetch('data/events.json'); allEvents = await response.json(); renderEvents(allEvents); // Beim Laden prüfen, ob ein Filter gespeichert war const savedFilter = sessionStorage.getItem('activeFilter') || 'ALLE'; applyFilter(savedFilter); //checked ob Fehler beim Laden oder Parsen der Daten auftreten } catch (error) { console.error("Fehler:", error); eventGrid.innerHTML = "
Events konnten nicht geladen werden.
"; } } // Funktion um Filter anzuwenden und gleichzeitig UI zu aktualisieren function applyFilter(category) { // UI: Aktiven Button stylen filterButtons.forEach(btn => { if (btn.getAttribute('data-cat') === category) { btn.classList.add('active'); } else { btn.classList.remove('active'); } }); // Daten filtern const filtered = category === 'ALLE' ? allEvents : allEvents.filter(e => e.category === category); renderEvents(filtered); //Filter im Browser merken sessionStorage.setItem('activeFilter', category); } // 2. Events rendern + "Empty State" Logik function renderEvents(events) { eventGrid.innerHTML = ''; // PRÜFUNG: Wenn keine Events vorhanden sind zeigt folgende Nachricht if (events.length === 0) { eventGrid.innerHTML = ` `; return; } // Wenn Events da sind, Karten bauen events.forEach(event => { const card = document.createElement('article'); card.className = 'event-card'; //Klick auf die gesamte Karte leitet zur Detailseite weiter card.style.cursor = "pointer"; card.onclick = () => { window.location.href = `event_detail.html?id=${event.id}`; }; //internes HTML im Js zur Styling der Event-Karte (HIER CHECKEN OB SO OK NACH CLEAN CODE) card.innerHTML = `${event.spots} PLÄTZE FREI