import { isPast } from '../utils.js'; const DOW = ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag']; const MON = ['Jan','Feb','Mär','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez']; export function renderAgenda(container, currentDate, events, onEventClick) { if (!events.length) { container.innerHTML = `
Keine Termine im angezeigten Zeitraum
`; return; } // Group events by date const groups = {}; events.forEach(ev => { const d = new Date(ev.start); const key = `${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,'0')}-${String(d.getDate()).padStart(2,'0')}`; if (!groups[key]) groups[key] = []; groups[key].push(ev); }); // Sort groups const sortedKeys = Object.keys(groups).sort(); const html = sortedKeys.map(key => { const date = new Date(key + 'T00:00:00'); const isToday = isTodayDate(date); const todayCls = isToday ? 'today' : ''; const evHtml = groups[key] .sort((a, b) => { if (a.allDay && !b.allDay) return -1; if (!a.allDay && b.allDay) return 1; return new Date(a.start) - new Date(b.start); }) .map(ev => { const color = ev.color || ev.calendarColor || '#4285f4'; const pastCls = isPast(ev) ? 'past' : ''; let timeStr = 'Ganztägig'; if (!ev.allDay) { const s = new Date(ev.start); const e = new Date(ev.end); timeStr = `${fmtTime(s)} – ${fmtTime(e)}`; } const locHtml = ev.location ? ` · ${escHtml(ev.location)}` : ''; return `
${escHtml(ev.title)}
${timeStr}${locHtml}
`; }).join(''); return `
${date.getDate()}
${DOW[date.getDay()]} ${MON[date.getMonth()]} ${date.getFullYear()}
${evHtml}
`; }).join(''); container.innerHTML = `
${html}
`; container.querySelectorAll('.agenda-event').forEach(el => { el.addEventListener('click', () => { const ev = events.find(ev => ev.id === el.dataset.id && ev.url === el.dataset.url); if (ev) onEventClick(ev, el); }); }); } function isTodayDate(d) { const now = new Date(); return d.getFullYear() === now.getFullYear() && d.getMonth() === now.getMonth() && d.getDate() === now.getDate(); } function fmtTime(d) { return d.toLocaleTimeString('de', { hour: '2-digit', minute: '2-digit' }); } function escHtml(s) { return String(s).replace(/&/g,'&').replace(//g,'>'); } function escAttr(s) { return String(s).replace(/"/g,'"').replace(/'/g,'''); }