/* ========================================================= Vaccin- & Hälsobussen – kort + adress (robust) Förutsätter att schedule-data.js redan laddats och skapat: window.VaccinationBusSchedule = { schedule: [...], metadata: {...} } ========================================================= */ /* ----------------------------- 1) ADRESS-MAPPINGS (lägg din mapping här) ------------------------------ */ const addressMappings = { "Bjärred Coop": "Norra Västkustvägen 2, 237 37 Bjärred", "Laholm Coop": "Lp Hanssons väg 4, 312 31 Laholm", "Åhus Willys": "Sandvaktaregatan 22 A, 296 35 Åhus", "Staffanstorp City Gross": "Klågerupsvägen 1, 245 44 Staffanstorp", "Höllviken ICA Toppen": "Höllviken", "Älmhult Ica Maxi": "Silverdalsgatan 3, 343 31 Älmhult", "Båstad Willys": "Stenhusvägen 7E, 269 36 Båstad", "ST Bernstorp City Gross": "Vassvägen 20, 232 61 Arlöv", "Hörby Coop": "Slagtoftavägen 24, 242 35 Hörby", "Simrishamn Willys": "Skanshillsgatan 2, 272 36 Simrishamn", "Ullared Gekås": "Danska vägen 13, 311 60 Ullared", "Karlshamn City Gross": "Erik Dahlbergsvägen 101, 374 38 Karlshamn", "Lund Ica Maxi": "Traktorvägen 1-3, 226 60 Lund", "Hjärup Uppåkraskolan": "Parkallén 4A, 245 64 Hjärup", "Lomma Hamntorg": "Hamntorget, Lomma", "Höör City Gross": "Marknadsvägen 2, 243 21 Höör", "Sölvesborg ICA": "Järnvägsgatan 1, 294 34 Sölvesborg", "Höganäs City Gross": "Midgårdsgatan 8, 263 37 Höganäs", "Kristianstad Ica Maxi": "Sjöcronas gata 7, 291 53 Kristianstad", "Hjärnarpsvallen": "Hjärnarpsvallen", "Dalby Centrum": "Allégatan, 247 50 Dalby", "Hässleholm Coop": "Hövdingegatan 31, 281 33 Hässleholm", "Borstahusen Coop": "Kung Hans väg 1, 261 47 Landskrona", "Berga City Gross": "Regementsvägen 3, 254 57 Helsingborg", "Skanör Bäckatorget": "Bäckatorget, 239 33 Skanör", "Svedala Stora Coop": "Norra Ellenborgsgatan 1, 233 51 Svedala", "Ystad Stortorget": "Stortorget, 271 43 Ystad" }; /* ----------------------------- 2) ROBUST NORMALISERING ------------------------------ */ function normalizeKey(str) { return (str || "") .replace(/\u00A0/g, " ") // NBSP -> vanligt mellanslag .replace(/\s+/g, " ") // flera mellanslag -> ett .trim() .toLowerCase() .normalize("NFC"); } // Bygg en normaliserad mapping (en gång) const normalizedAddressMappings = Object.fromEntries( Object.entries(addressMappings).map(([k, v]) => [normalizeKey(k), v]) ); /* ----------------------------- 3) HJÄLPFUNKTIONER ------------------------------ */ // Ex: "Lördagskarta - Lund Ica Maxi" -> "Lund Ica Maxi" function extractPlaceFromHeading(heading) { const parts = (heading || "").split(" - "); return parts.length > 1 ? parts[1].trim() : (heading || "").trim(); } function getAddressForPlace(place) { const key = normalizeKey(place); // Först: direkt lookup const direct = normalizedAddressMappings[key]; if (direct) return direct; // Extra fallback: ibland kan "ICA" vs "Ica" osv spöka. // Men eftersom vi toLowerCase:ar ska detta normalt aldrig behövas. return ""; // tomt => vi kan välja att visa platsen eller "Adress saknas" } /* Datumformat (sv-SE) */ function formatDateSv(isoDate) { // isoDate: "2026-02-28" const d = new Date(isoDate + "T00:00:00"); return new Intl.DateTimeFormat("sv-SE", { day: "numeric", month: "long", year: "numeric" }).format(d); } /* ----------------------------- 4) RENDERING AV KORT Anpassa container-id om du har annat. ------------------------------ */ // Sätt dessa så de matchar din HTML: const CARDS_CONTAINER_ID = "scheduleCards"; //
function renderCardsForDates(dateList) { const container = document.getElementById(CARDS_CONTAINER_ID); if (!container) return; const schedule = window?.VaccinationBusSchedule?.schedule || []; const items = schedule.filter(x => dateList.includes(x.date)); // Rensa container.innerHTML = ""; items.forEach(item => { const heading = item.heading || ""; const place = extractPlaceFromHeading(heading); // "Ingen vaccination" kort const isNoVaccination = /ingen vaccination/i.test(heading); // Robust adress const addr = isNoVaccination ? "" : (getAddressForPlace(place) || place); // Skapa kort (enkel HTML – anpassa klasser efter din CSS) const card = document.createElement("div"); card.className = "schedule-card"; // byt till dina klasser om du vill // Försök att få veckodag från heading (ex "Lördag...") const weekday = (heading.split(" - ")[0] || "").replace("karta", "").trim(); card.innerHTML = `