document.addEventListener("DOMContentLoaded", function() {
const container = document.getElementById('post-map');
if (!container) return;
let markers = [];
let nearby = [];
// π parse seguro
try {
markers = JSON.parse(container.dataset.markers || '[]');
nearby = JSON.parse(container.dataset.nearby || '[]');
} catch (e) {
console.error('Error parsing JSON:', e);
return;
}
if (!markers.length) return;
const validMarkers = markers.filter(m =>
m.lat && m.lng && !isNaN(m.lat) && !isNaN(m.lng)
);
if (!validMarkers.length) return;
// πΊοΈ MAPA
const map = L.map('post-map');
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: 'Β© OpenStreetMap contributors'
}).addTo(map);
const bounds = [];
// π’ ICONO PRINCIPAL
const mainIcon = L.icon({
iconUrl: 'https://www.escapadarural.com/blog/wp-content/uploads/2026/03/pinmaps.svg',
iconSize: [36, 46],
iconAnchor: [18, 46]
});
// βͺ ICONO CERCANOS
const nearbyIcon = L.icon({
iconUrl: 'https://unpkg.com/leaflet@1.9.4/dist/images/marker-icon.png',
iconSize: [20, 30],
iconAnchor: [10, 30],
className: 'nearby-marker'
});
// π’ PINS PRINCIPALES
validMarkers.forEach(marker => {
const lat = parseFloat(marker.lat);
const lng = parseFloat(marker.lng);
L.marker([lat, lng], { icon: mainIcon }).addTo(map);
bounds.push([lat, lng]);
});
// βͺ CERCANOS POR CADA PIN
validMarkers.forEach((marker, index) => {
const group = nearby[index] || [];
group.forEach(m => {
if (!m.lat || !m.lng) return;
const lat = parseFloat(m.lat);
const lng = parseFloat(m.lng);
const pin = L.marker([lat, lng], { icon: nearbyIcon }).addTo(map);
// π§ popup tipo Airbnb
const content = `
`;
pin.bindPopup(content);
});
});
// π AUTOZOOM
if (bounds.length === 1) {
map.setView(bounds[0], 14);
} else if (bounds.length > 1) {
map.fitBounds(bounds, { padding: [40, 40] });
}
// π§ fix Avada / render lazy
setTimeout(() => {
map.invalidateSize();
}, 300);
});