Phase 2: Detailansicht

Modal, das sich bei Marker- oder Listen-Auswahl (state.selectedPlaceId)
oeffnet: Titelbild/Platzhalter, vollstaendige Beschreibung, Adresse,
Mini-Karte mit Positionsmarker, Oeffnungszeiten, Kosten, Altersempfehlung,
Ausstattung (inkl. klar markierter negativer Werte), Hinweise fuer
Familien, Website-Link. Navigation-Button zu OSM Directions. Loeschen ist
bereits voll funktional (mit Bestaetigung), Bearbeiten ist als Platzhalter
fuer Phase 3 markiert.

Neuer Helper isSafeHttpUrl() in dom.js: nur http/https als Link- oder
Bildquelle zulaessig, schuetzt vor javascript:-URLs in Fremddaten
(Vorbereitung fuer KI-JSON-Import). Rendering weiterhin ausschliesslich
ueber textContent/el(), kein innerHTML mit Place-Daten.
This commit is contained in:
2026-07-24 11:32:32 +02:00
parent ee55fb1cf9
commit 2812e03530
6 changed files with 707 additions and 1 deletions
+18
View File
@@ -89,7 +89,25 @@ window.EventMap.ui = window.EventMap.ui || {};
}
}
/**
* Prüft, ob eine URL sicher als Link/Bildquelle verwendet werden darf
* (Scheme-Whitelist: nur http/https). Schützt vor javascript:-URLs & Co.
* in Nutzer-/KI-generierten Feldern wie place.website oder place.image.
*/
function isSafeHttpUrl(value) {
if (typeof value !== 'string' || value.trim() === '') {
return false;
}
try {
const parsed = new URL(value);
return parsed.protocol === 'http:' || parsed.protocol === 'https:';
} catch (err) {
return false;
}
}
EventMap.utils.el = el;
EventMap.utils.escapeHtml = escapeHtml;
EventMap.utils.clearChildren = clearChildren;
EventMap.utils.isSafeHttpUrl = isSafeHttpUrl;
})();