diff --git a/backend/static/js/pages/routes.js b/backend/static/js/pages/routes.js
index 82c0423..f08a87a 100644
--- a/backend/static/js/pages/routes.js
+++ b/backend/static/js/pages/routes.js
@@ -17,6 +17,10 @@ window.Page_routes = (() => {
let _sortBy = 'newest';
let _onlyMine = false;
+ // Mini-Karten auf den Route-Cards
+ let _miniMaps = new Map(); // routeId → L.map
+ let _leafletReady = false;
+
const DIFFICULTY_LABEL = { leicht: '🟢 Leicht', mittel: '🟡 Mittel', anspruchsvoll: '🔴 Anspruchsvoll' };
const TERRAIN_LABEL = { wald: '🌲 Wald', asphalt: '🛣️ Asphalt', wiese: '🌿 Wiese', mix: '🔀 Mix' };
const HUNDE_LABEL = { eingeschränkt: '🐾', gut: '🐾🐾', sehr_gut: '🐾🐾🐾', premium: '🐾🐾🐾🐾' };
@@ -37,10 +41,26 @@ window.Page_routes = (() => {
_container = container;
_appState = appState;
_render();
+ _loadLeaflet(); // fire & forget — bereit wenn Cards gerendert werden
try { _userPos = await API.getLocation(); } catch {}
_loadData();
}
+ async function _loadLeaflet() {
+ if (_leafletReady || window.L) { _leafletReady = true; return; }
+ if (!document.querySelector('link[href="/css/leaflet.css"]')) {
+ const l = document.createElement('link');
+ l.rel = 'stylesheet'; l.href = '/css/leaflet.css';
+ document.head.appendChild(l);
+ }
+ await new Promise((res, rej) => {
+ const s = document.createElement('script');
+ s.src = '/js/leaflet.js'; s.onload = res; s.onerror = rej;
+ document.head.appendChild(s);
+ });
+ _leafletReady = true;
+ }
+
function refresh() { _loadData(); }
function onDogChange() {}
@@ -205,7 +225,12 @@ window.Page_routes = (() => {
}
return;
}
+ // Alte Mini-Maps zerstören bevor DOM neu geschrieben wird
+ _miniMaps.forEach(m => m.remove());
+ _miniMaps.clear();
+
grid.innerHTML = _filtered.map(r => _cardHTML(r)).join('');
+ _initMiniMaps();
grid.querySelectorAll('.rk-card').forEach(card => {
card.addEventListener('click', e => {
if (e.target.closest('.rk-stars,.rk-dl-btn')) return;
@@ -236,16 +261,16 @@ window.Page_routes = (() => {
const paws = HUNDE_LABEL[r.hunde_tauglichkeit] || '';
const dist = r.distanz_km ? `${r.distanz_km.toFixed(1)} km` : '';
const dur = r.dauer_min ? _fmtDur(r.dauer_min) : '';
- const preview = _svgPreview(r.preview_track || []);
const firstPhoto = (r.foto_urls || [])[0];
+ const previewContent = firstPhoto
+ ? ``
+ : `