From cdb0d15a43d26b5fafbe4f733e1651ecb5cfe9bc Mon Sep 17 00:00:00 2001 From: ouidade Date: Mon, 24 Nov 2025 15:26:00 +0100 Subject: [PATCH] point rouge carte node ressource --- .../assets/js/carte-interactive-qdd.js | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/web/modules/custom/q2d_mod/assets/js/carte-interactive-qdd.js b/web/modules/custom/q2d_mod/assets/js/carte-interactive-qdd.js index 5c3d13b..171795a 100644 --- a/web/modules/custom/q2d_mod/assets/js/carte-interactive-qdd.js +++ b/web/modules/custom/q2d_mod/assets/js/carte-interactive-qdd.js @@ -10,6 +10,7 @@ const isLessitesPage = document.querySelector('div#lessites') !== null; const isNodeTypeSitePage = document.body.classList.contains('node-type-site'); const isCandidaturePage = document.querySelector('main#pour_candidater') !== null; const isNodeTypeProjetPage = document.body.classList.contains('node-type-projet'); +const isNodeTypeRessourcePage = document.body.classList.contains('node-type-ressource'); // Identifier le cercle de la page courante pour node-type-site let currentPageCircle = null; @@ -52,6 +53,45 @@ if (isNodeTypeProjetPage && svgElement) { } } +// Identifier le cercle du SITE lié quand on est sur une page node-type-ressource +if (isNodeTypeRessourcePage && svgElement) { + // On récupère le(s) nom(s) de site dans le champ .field_field_site + // Ici on part sur le premier (simple à gérer, extensible ensuite si besoin) + const siteNameNode = document.querySelector('.field_field_site > div:not(.field) div'); + + if (siteNameNode) { + const rawSiteName = siteNameNode.textContent || ''; + + // Normalisation basique pour éviter les soucis d'espaces / accents insécables + const normalize = (str) => + str.replace(/\u00a0/g, ' ') // remplace les espaces insécables + .replace(/\s+/g, ' ') // compresse les espaces multiples + .trim() + .toLowerCase(); + + const targetName = normalize(rawSiteName); + + const circles = svgElement.querySelectorAll('circle.site-link'); + + circles.forEach(circle => { + const contentHtml = circle.getAttribute('data-content') || ''; + + // On crée un élément temporaire pour parser le HTML de data-content + const tmp = document.createElement('div'); + tmp.innerHTML = contentHtml; + + // En général, le nom est dans le + const strong = tmp.querySelector('strong'); + const circleNameRaw = strong ? strong.textContent : tmp.textContent; + const circleName = normalize(circleNameRaw || ''); + + if (circleName === targetName) { + currentPageCircle = circle; + currentPageCircle.setAttribute('fill', 'red'); // surligne le site lié + } + }); + } +} // Fonction pour afficher le popup function showPopup(content) {