// === CONFIG === const WIKI_API = 'https://wiki.arenos.danielnagel.at/api.php'; // dein Wiki-Host (mit index.php) const CATEGORY_TITLE = 'Kategorie:Orte'; // Hauptkategorie const MAX_PAGES = 500; // genug Luft // Hilfsfunktion: MediaWiki API-URL bauen function apiURL(params) { const u = new URL(WIKI_API); u.search = new URLSearchParams({ ...params, format: 'json', origin: '*' }).toString(); return u.toString(); } // 1) Alle Mitglieder einer Kategorie holen async function fetchCategoryMembers(categoryTitle) { const url = apiURL({ action: 'query', list: 'categorymembers', cmtitle: categoryTitle, cmlimit: String(MAX_PAGES) }); const res = await fetch(url); if (!res.ok) throw new Error(`categorymembers failed: ${res.status}`); const data = await res.json(); return data?.query?.categorymembers || []; } // 2) Gerendertes HTML einer Seite holen (damit
drin ist) async function fetchPageHTML(title) { const url = apiURL({ action: 'parse', page: title, prop: 'text' }); const res = await fetch(url); if (!res.ok) throw new Error(`parse failed for ${title}: ${res.status}`); const data = await res.json(); const html = data?.parse?.text?.['*'] || ''; const div = document.createElement('div'); div.innerHTML = html; return div; } // 3) Daten aus dem versteckten Div extrahieren function extractPlaceData(container) { const node = container.querySelector('.place-data'); if (!node) return null; const name = node.getAttribute('data-name') || ''; const xStr = node.getAttribute('data-x') || ''; const yStr = node.getAttribute('data-y') || ''; const desc = node.getAttribute('data-description') || ''; const link = node.getAttribute('data-link') || ''; const x = parseFloat(xStr); const y = parseFloat(yStr); if (Number.isNaN(x) || Number.isNaN(y)) return null; return { name, x, y, desc, link }; } // 4) Marker laden + hinzufügen async function loadWikiMarkers(map) { try { const pages = await fetchCategoryMembers(CATEGORY_TITLE); // Optionales Bounding, falls du später auto-fit willst const layers = []; for (const p of pages) { try { const html = await fetchPageHTML(p.title); const d = extractPlaceData(html); if (!d) continue; // Leaflet: Bei CRS.Simple = [y, x] const m = L.marker([d.y, d.x]).addTo(map); const wikiLink = d.link || `https://wiki.arenos.danielnagel.at/index.php/${encodeURIComponent(p.title)}`; const popup = ` ${d.name || p.title}
${d.desc ? `${d.desc}
` : ''} Open in Wiki `; m.bindPopup(popup); layers.push(m); } catch (e) { console.warn('skip page due to parse error:', p.title, e); } } } catch (e) { console.error('Failed to load wiki markers:', e); } }