`; marker.bindPopup(popupContent); markers.push(marker); bounds.extend([lat, lng]); validMarkersCount++; } }); // 5. Bezpieczny dolot if (validMarkersCount > 0) { // Używamy requestAnimationFrame - to nowocześniejszy sposób niż setTimeout requestAnimationFrame(() => { setTimeout(() => { map.invalidateSize(); map.fitBounds(bounds, { padding: [50, 50], maxZoom: 10, animate: true, duration: 1.5 }); }, 200); // 200ms wystarczy, żeby przeglądarka "odetchnęła" }); } } // 3. FUNKCJA POBIERAJĄCA DANE Z TWOJEGO WORDPRESSA (JETENGINE) async function loadIGFAMembers() { const apiURL = 'https://www.igfa-dealers.net/wp-json/wp/v2/members?_embed&per_page=100'; try { const response = await fetch(apiURL); const members = await response.json(); // Przerabiamy dane z WordPressa na format mapy window.allDealers = members.map(member => { return { name: member.title.rendered, // Zaglądamy do Meta Boxa (tak jak na Twoim screenie) lat: member.meta && member.meta.lat ? parseFloat(member.meta.lat) : null, lng: member.meta && member.meta.lng ? parseFloat(member.meta.lng) : null, // Używamy pola 'address' z meta lub domyślnego tekstu address: member.meta && member.meta.member_address ? member.meta.member_address : 'Address available on profile', // Link do profilu dealera w IGFA url: member.meta && member.meta.member_website ? member.meta.member_website : member.link, logo: (member.meta && member.meta.member_logo) ? member.meta.member_logo : '', id: member.id, // Klasy do filtrowania kontynentów classes: member.class_list || [] }; }); // Pierwsze narysowanie wszystkich punktów renderMarkers(window.allDealers); } catch (error) { console.error('Błąd podczas pobierania danych z API:', error); } } // 4. OBSŁUGA WYSZUKIWARKI TEKSTOWEJ searchInput.addEventListener('input', (e) => { const term = e.target.value.toLowerCase(); if (window.allDealers) { const filtered = window.allDealers.filter(d => d.name.toLowerCase().includes(term) || d.address.toLowerCase().includes(term) ); renderMarkers(filtered); } }); // 5. ODBIORNIK DLA SIDEBARA (JetSmartFilters) window.remoteMapFilter = function(regionName) { if (!window.allDealers) return; // Zamieniamy spacje na myślniki (np. "North America" -> "north-america") const term = regionName.toLowerCase().replace(/\s+/g, '-'); const filtered = window.allDealers.filter(d => { return d.classes.some(className => className.includes(term)) || d.address.toLowerCase().includes(regionName.toLowerCase()); }); renderMarkers(filtered); if (filtered.length > 0) { // Mapa leci do pierwszego znalezionego dealera map.flyTo([filtered[0].lat, filtered[0].lng], 5); } else { // Jeśli nic nie zaznaczono, wróć do widoku świata map.setView([51.505, -0.09], 4); } }; // URUCHOMIENIE POBIERANIA DANYCH loadIGFAMembers(); // 6. INTERAKCJA LISTING -> MAPA (Wersja Super-Pancerna) document.addEventListener('mouseover', (e) => { // Szukamy elementu listingu, który ma data-post-id const card = e.target.closest('.jet-listing-grid__item'); if (card && window.markers) { const postId = card.getAttribute('data-post-id'); const dealerId = `dealer-${postId}`; // Sklejamy z naszym formatem const targetMarker = window.markers.find(m => m.options.dealerId === dealerId); if (targetMarker) { targetMarker.getElement().classList.add('is-active'); targetMarker.openPopup(); } } }, true); document.addEventListener('mouseout', (e) => { const card = e.target.closest('.jet-listing-grid__item'); if (card && window.markers) { const postId = card.getAttribute('data-post-id'); const dealerId = `dealer-${postId}`; const targetMarker = window.markers.find(m => m.options.dealerId === dealerId); if (targetMarker) { targetMarker.getElement().classList.remove('is-active'); targetMarker.closePopup(); } } }, true); });