diff --git a/js/main.js b/js/main.js index 0c62109..566d7ed 100644 --- a/js/main.js +++ b/js/main.js @@ -855,3 +855,105 @@ function getTopicColor(topic) { }; } + +// ======================================== +// COOKIES +// ======================================== +function getCookie(name) { + const localVal = localStorage.getItem('paraguay_' + name); + if (localVal) return localVal; + + const value = '; ' + document.cookie; + const parts = value.split('; ' + name + '='); + if (parts.length === 2) { + return parts.pop().split(';').shift().replace(/^"|"$/g, ''); + } + return ''; +} + + +// ======================================== +// ESCAPE HTML — utility function +// ======================================== +function escapeHtml(text) { + if (!text) return ''; + const div = document.createElement('div'); + div.textContent = text; + return div.innerHTML; +} + +// ======================================== +// DATES / EVENTS +// ======================================== +async function loadDates() { + try { + const response = await fetch(SCHEDULE_URL); + if (!response.ok) throw new Error('Failed to fetch'); + const result = await response.json(); + + if (result.data && Array.isArray(result.data) && result.data.length > 0) { + renderDates(result.data); + } else { + document.getElementById('dates-list').innerHTML = + '

' + (isDE() ? 'Keine Termine geplant' : 'No events scheduled') + '

'; + } + } catch (error) { + document.getElementById('dates-list').innerHTML = + '

' + (isDE() ? 'Fehler beim Laden' : 'Error loading events') + '

'; + } +} + +function renderDates(events) { + const container = document.getElementById('dates-list'); + container.innerHTML = ''; + + // Sort events by date + const sorted = events.sort((a, b) => new Date(a.start) - new Date(b.start)); + + sorted.forEach((event, idx) => { + const card = document.createElement('div'); + card.className = 'date-card stagger-' + (idx % 4 + 1); + + // Parse date/time from ISO string + const startDate = new Date(event.start); + const endDate = new Date(event.end); + + // Format date: yyyy.mm.dd + const day = String(startDate.getDate()).padStart(2, '0'); + const month = String(startDate.getMonth() + 1).padStart(2, '0'); + const year = startDate.getFullYear(); + const dateStr = year + '.' + month + '.' + day; + + // Format time: HH:MM (local time) + const startHour = String(startDate.getHours()).padStart(2, '0'); + const startMinute = String(startDate.getMinutes()).padStart(2, '0'); + const endHour = String(endDate.getHours()).padStart(2, '0'); + const endMinute = String(endDate.getMinutes()).padStart(2, '0'); + const startStr = startHour + ':' + startMinute; + const endStr = endHour + ':' + endMinute; + + card.innerHTML = '
' + + '
📅
' + + '

' + escapeHtml(event.headline || 'Event') + '

' + + '
' + + '
' + + '' + + '' + dateStr + '' + + '
' + + '' + + '' + (isDE() ? 'Start' : 'Start') + ' ' + startStr + '' + + '
' + + '' + + '' + (isDE() ? 'Ende' : 'End') + ' ' + endStr + '' + + '
'; + + container.appendChild(card); + }); +} + +function setCookie(name, value, days) { + const expires = new Date(); + expires.setTime(expires.getTime() + days * 24 * 60 * 60 * 1000); + document.cookie = name + '=' + encodeURIComponent(value) + ';expires=' + expires.toUTCString() + ';path=/'; + localStorage.setItem('paraguay_' + name, value); +}