let page = 1; let loading = false; let entryCounter = 0; // Schlüssel im localStorage const LOCATION_KEY = "userLocation"; const LOCATION_INTERVAL = 5 * 60 * 1000; // 5 Minuten function updateLocation() { if (!navigator.geolocation) { console.warn("Geolocation wird nicht unterstützt."); return; } navigator.geolocation.getCurrentPosition( pos => { const coords = { lat: pos.coords.latitude, lon: pos.coords.longitude, ts: Date.now() }; localStorage.setItem(LOCATION_KEY, JSON.stringify(coords)); console.log("Location aktualisiert:", coords); }, err => { console.warn("Geolocation verweigert oder fehlgeschlagen:", err); } ); } function getStoredLocation() { try { const loc = localStorage.getItem(LOCATION_KEY); return loc ? JSON.parse(loc) : null; } catch (e) { console.warn("Fehler beim Parsen von Location:", e); return null; } } (function initLocation() { const loc = getStoredLocation(); if (!loc || Date.now() - loc.ts > LOCATION_INTERVAL) { updateLocation(); } // danach regelmäßig erneuern setInterval(updateLocation, LOCATION_INTERVAL); })(); // Hilfsfunktion: simples HTML-escape function escapeHtml(str) { if (str === null || str === undefined) return ""; return String(str).replace(/[&<>"']/g, function(m) { return { '&':'&','<':'<','>':'>','"':'"',"'":''' }[m]; }); } let adIndex = 0; // Zähler für Werbeblöcke let ads = []; // Werbeblöcke von zweiter AJAX-Quelle function insertAd(container) { const coords = getStoredLocation(); url = "js-ajax-ads.php?"; if (coords) { url += `&lat=${coords.lat}&lon=${coords.lon}`; } return fetch(url) .then(res => { if (!res.ok) throw new Error("HTTP " + res.status); return res.json(); }) .then(ad => { const html = `
${ad}
`; container.insertAdjacentHTML("beforeend", html); }) .catch(err => { console.error("Fehler beim Laden eines Werbeblocks:", err); }); } function renderEntries(entries) { const container = document.getElementById("content"); if (!Array.isArray(entries)) entries = [entries]; entries.forEach(entry => { const dateStr = entry.start || ""; const statRecent = (entry.statistics && entry.statistics[1] !== undefined) ? entry.statistics[1] + "%" : "0%"; const statAll = (entry.statistics && entry.statistics[0] !== undefined) ? entry.statistics[0] + "%" : "0%"; const title = escapeHtml(entry.title); const excerpt = escapeHtml(entry.excerpt); const city = escapeHtml(entry.city); const id = encodeURIComponent(entry.id); const uid = encodeURIComponent(entry.uid); const poster = escapeHtml(entry.poster); const html = `

${title}

${excerpt}…

${city}, ${dateStr}

`; container.insertAdjacentHTML("beforeend", html); entryCounter++; if (entryCounter % 3 === 0) { insertAd(container); entryCounter = 0; } }); } function loadMoreContent() { if (loading) return; loading = true; const loadingElement = document.getElementById("loading"); loadingElement.style.display = "block"; const params = new URLSearchParams(window.location.search); const zeig = params.get("zeig"); // z.B. "unterhaltung" var url = `js-ajax-content.php?seite=${page}`; if(zeig !== null){ url += `&zeig=${zeig}`; } fetch(url) .then(response => { if (!response.ok) throw new Error("HTTP " + response.status); return response.json(); }) .then(data => { console.log("AJAX data:", data); if (!data || (Array.isArray(data) && data.length === 0)) { window.removeEventListener("scroll", onScroll); return; } renderEntries(data); page++; }) .catch(error => { console.error('Fehler beim Laden der Inhalte:', error); }) .finally(() => { loadingElement.style.display = "none"; loading = false; }); } window.onload = function() { loadMoreContent(); };