(function () { const config = window.HaritaConfig || {}; const mapElement = document.getElementById('sehirHafizaMap'); const emptyElement = document.getElementById('haritaEmpty'); const countElement = document.getElementById('haritaVisibleCount'); const searchElement = document.getElementById('haritaSearch'); const filterElements = Array.from(document.querySelectorAll('.harita-filters input[type="checkbox"]')); if (!mapElement || typeof L === 'undefined') { return; } const typeLabels = { mekan: 'Mekân', fotograf: 'Fotoğraf', hatira: 'Hatıra', etkinlik: 'Etkinlik' }; const iconClasses = { mekan: 'fas fa-landmark', fotograf: 'fas fa-camera', 'fotograf-360': 'fas fa-vr-cardboard', hatira: 'fas fa-comment-dots', etkinlik: 'fas fa-calendar-alt' }; const map = L.map(mapElement, { scrollWheelZoom: true, preferCanvas: true }).setView(config.center || [39.75, 37.0167], config.zoom || 12); L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 19, attribution: '© OpenStreetMap contributors' }).addTo(map); const cluster = L.markerClusterGroup({ showCoverageOnHover: false, maxClusterRadius: 48 }); map.addLayer(cluster); let items = []; let markers = []; fetch(config.endpoint, { headers: { Accept: 'application/json' } }) .then((response) => response.ok ? response.json() : Promise.reject(response)) .then((data) => { items = Array.isArray(data) ? data : []; markers = items.map(createMarker).filter(Boolean); applyFilters(); }) .catch(() => { items = []; markers = []; applyFilters(); }); filterElements.forEach((input) => input.addEventListener('change', applyFilters)); if (searchElement) { searchElement.addEventListener('input', applyFilters); } function createMarker(item) { if (!Number.isFinite(Number(item.lat)) || !Number.isFinite(Number(item.lng))) { return null; } const marker = L.marker([Number(item.lat), Number(item.lng)], { icon: createIcon(item) }); marker.hafizaItem = item; marker.bindPopup(createPopup(item), { maxWidth: 280, className: 'harita-popup-container' }); return marker; } function createIcon(item) { const iconType = item.is_360 ? 'fotograf-360' : item.icon; const className = iconClasses[iconType] || 'fas fa-map-marker-alt'; return L.divIcon({ className: '', html: '
' + description + '
' : '', 'Detaya Git', '