/* ====================================================== dienste.js – ZENTRALE Logik für Dienstplan & Termine ------------------------------------------------------ Liest dienstplan/dienstplan.csv (einzige Datenquelle) und befüllt – je nachdem, was auf der Seite vorhanden ist: #nextDienst nächster Dienst (Kurzform, Startseite) #nextEvent nächste Veranstaltung (Kurzform) #dienstplan-liste komplette Terminliste (Dienstplan-Seite) Das Markup nutzt design-neutrale Klassen (termin-*), die von der jeweiligen Varianten-CSS gestylt werden. ====================================================== */ (function () { const csvPfad = (window.FFW_BASE || "") + "dienstplan/dienstplan.csv"; fetch(csvPfad) .then(res => res.text()) .then(text => { const today = new Date().setHours(0, 0, 0, 0); const termine = text.trim().split(/\r?\n/).slice(1).map(line => { const [d, tag, zeit, ort, art, beschr] = line.split(line.includes(";") ? ";" : ","); const [y, m, day] = d.trim().split("-"); return { datum: new Date(y, m - 1, day), tag: tag.trim(), zeit: zeit.trim(), ort: ort.trim(), art: art.trim(), beschr: beschr.trim() }; }) .filter(t => t.datum >= today) .sort((a, b) => a.datum - b.datum); const istFest = t => /fest|feier/i.test(t.art); const datumFormatiert = t => t.datum.toLocaleDateString("de-DE"); /* ---------- Kurzform: nächster Dienst / Veranstaltung ---------- */ const renderKurz = (id, filterFn) => { const el = document.getElementById(id); if (!el) return; const t = termine.find(filterFn); el.innerHTML = t ? `
${t.tag}., ${datumFormatiert(t)} | ${t.zeit} Uhr
${t.art}
${t.beschr} (${t.ort})
` : `Keine weiteren Termine geplant
`; }; renderKurz("nextDienst", t => !istFest(t)); renderKurz("nextEvent", istFest); /* ---------- Komplette Terminliste (Dienstplan-Seite) ---------- */ const liste = document.getElementById("dienstplan-liste"); if (liste) { if (!termine.length) { liste.innerHTML = `Aktuell sind keine Termine geplant.
`; return; } const naechster = termine[0]; const zeilen = termine.map(t => `| Datum | Uhrzeit | Art | Beschreibung | Ort |
|---|