// Sélection des éléments principaux const svgElement = document.querySelector('#sites-map-container svg'); const popup = document.querySelector('#sites-map-container #popup'); const popupContent = document.querySelector('#sites-map-container #popup-content'); const modalBackground = document.querySelector('#sites-map-container #modal-background'); // Vérifiez si la page contient la classe '.node-type-site' const isSitePage = document.body.classList.contains('node-type-site'); const isLessitesPage = document.querySelector('#lessites') !== null; // Vérification de la page avec ID #lessites // Fonction pour afficher le popup function showPopup(content, x, y, isLeftHalf) { // Si on est sur la page #lessites ou une page avec la classe 'node-type-site', ne pas afficher le popup if (isSitePage || isLessitesPage) return; popupContent.innerHTML = content; // Afficher le popup et le fond de modal popup.style.display = 'block'; modalBackground.style.display = 'block'; } // Fonction pour fermer le popup function closePopup() { popup.style.display = 'none'; modalBackground.style.display = 'none'; // Désactiver le fond modal } // Gérer le survol des cercles svgElement.addEventListener('mouseover', function(event) { if (event.target.classList.contains('site-link')) { const content = event.target.getAttribute('data-content'); const dataId = event.target.getAttribute('data-id'); // Récupérer l'attribut data-id const correspondingRow = document.querySelector(`.views-row[data-id="${dataId}"]`); // Afficher le popup avec la position et l'alignement adaptés showPopup(content); // Ajouter une bordure rouge au .views-row correspondant if (correspondingRow) { correspondingRow.style.border = '2px solid red'; } } // Gestion du changement de couleur sur le cercle if (event.target.tagName === 'circle') { event.target.setAttribute('fill', 'red'); } }); // Fermer le popup et retirer la bordure rouge lorsque la souris quitte le cercle svgElement.addEventListener('mouseout', function(event) { if (event.target.classList.contains('site-link')) { closePopup(); const dataId = event.target.getAttribute('data-id'); const correspondingRow = document.querySelector(`.views-row[data-id="${dataId}"]`); // Retirer la bordure rouge if (correspondingRow) { correspondingRow.style.border = 'none'; } } // Réinitialiser la couleur du cercle au survol de la souris if (event.target.tagName === 'circle') { event.target.setAttribute('fill', 'black'); // Remettre en noir } }); // Mettre à jour la logique de calcul des positions function recalculateSitePositions() { const allSites = document.querySelectorAll('.site-link'); allSites.forEach((site, index) => { const geofield = site.getAttribute('data-geofield'); // Assurez-vous que ces attributs sont bien définis const lon = parseFloat(geofield.split(',')[0]); const lat = parseFloat(geofield.split(',')[1]); const x = round((lon - lonLeft) / (lonRight - lonLeft) * vp_w); const y = round((latTop - lat) / (latTop - latBottom) * vp_h); site.setAttribute('transform', `translate(${x}, ${y})`); }); } window.addEventListener('resize', function() { recalculateSitePositions(); if (popup.style.display === 'block') { const currentPopupRect = popup.getBoundingClientRect(); const rect = svgElement.getBoundingClientRect(); showPopup(popupContent.innerHTML, currentPopupRect.left - rect.left, currentPopupRect.top - rect.top); } }); // Gérer le clic ou le toucher des cercles function handleCircleClick(content) { showPopup(content, event.clientX, event.clientY, event.target.getAttribute('data-left-half') === 'true'); } // Écouter les événements de clic et de toucher sur le SVG svgElement.addEventListener('click', function(event) { if (event.target.classList.contains('site-link') || event.target.tagName === 'rect') { const content = event.target.getAttribute('data-content'); handleCircleClick(content); } }); // Récupérer l'ID de la page depuis la classe du body const body = document.querySelector('body'); const pageId = body.className.match(/node-id-(\d+)/)[1]; // Extraire l'ID de la page // Sélectionner le groupe SVG qui a l'ID correspondant const matchingGroup = document.querySelector(`#site-${pageId}`); // Si un groupe correspondant est trouvé, changer la couleur du cercle à l'intérieur if (matchingGroup) { const circle = matchingGroup.querySelector('circle'); // Sélectionner le cercle à l'intérieur du groupe if (circle) { circle.setAttribute('fill', 'red'); // Changer la couleur du cercle } }