application de la nouvelle identité sur toutes les pages

This commit is contained in:
2026-06-01 22:10:03 +02:00
parent a4cc0ef538
commit b52190eff6
44 changed files with 1369 additions and 907 deletions

View File

@@ -9,6 +9,58 @@
Drupal.behaviors.erabletheme = {
attach: function (context, settings) {
//
// Bloc en-tête hors colonne (.page-header-outside) : positionné en
// absolute dans <main>, donc on mesure sa hauteur et on l'expose via
// une CSS variable pour que <main> réserve la bonne place en padding-top.
//
const header_outside = document.querySelector('.page-header-outside');
const main_el = header_outside ? header_outside.closest('main') : null;
if (header_outside && main_el && !main_el.dataset.headerOutsideMeasured) {
const updateHeaderOutsideHeight = () => {
const h = header_outside.getBoundingClientRect().height;
main_el.style.setProperty('--page-header-outside-h', h + 'px');
};
updateHeaderOutsideHeight();
window.addEventListener('resize', updateHeaderOutsideHeight);
main_el.dataset.headerOutsideMeasured = 'true';
}
//
// Sidebar projets : marquer .is-active sur le lien de la page courante
// (la vue ne pose pas cette classe automatiquement, contrairement aux
// blocs menus Drupal).
//
const projetsSidebar = document.querySelector('#block-erabletheme-views-block-projets-block-1');
if (projetsSidebar && !projetsSidebar.dataset.activeMarked) {
const currentPath = window.location.pathname.replace(/\/$/, '');
projetsSidebar.querySelectorAll('a[href]').forEach(a => {
if (a.getAttribute('href').replace(/\/$/, '') === currentPath) {
a.classList.add('is-active');
}
});
projetsSidebar.dataset.activeMarked = 'true';
}
//
// Pages taxonomy (filtres par tag de projet) : on rend les sous-titres
// des cards cliquables (le titre est déjà lié via le Twig).
//
document.querySelectorAll('.taxonomy_page').forEach(card => {
if (card.dataset.subtitleLinked) return;
const titleLink = card.querySelector('.projet_label a');
const subtitle = card.querySelector('.sous_titre');
if (titleLink && subtitle && !subtitle.querySelector('a')) {
const href = titleLink.getAttribute('href');
// On enveloppe les enfants du sous-titre dans un <a>.
const a = document.createElement('a');
a.setAttribute('href', href);
while (subtitle.firstChild) a.appendChild(subtitle.firstChild);
subtitle.appendChild(a);
}
card.dataset.subtitleLinked = 'true';
});
//
// Home intro : sortir le .more-link (rendu profond par smart_trim)
// de .intro_body pour le placer directement sous .intro_main.
@@ -310,46 +362,6 @@
}
}
//
// Sous Menu display on hover
//
const programLink = document.querySelector("#block-erabletheme-navigationprincipale ul li:first-of-type");
const programSubmenu = document.querySelector("#block-erabletheme-leprogramme");
let isSubmenuOpen = false;
function showSubmenu() {
programLink.classList.add("submenu-open");
let rect = programLink.getBoundingClientRect();
programSubmenu.style.top = `${rect.bottom}px`;
programSubmenu.style.left = `${rect.left}px`;
programSubmenu.style.display = "block";
programSubmenu.style.display = "block";
setTimeout(() => {
programSubmenu.style.maxHeight = "50vh";
}, 10)
isSubmenuOpen = true;
}
function hideSubmenu() {
programLink.classList.remove("submenu-open");
programSubmenu.style.maxHeight = "0px";
isSubmenuOpen = false;
setTimeout(() => {
if (!isSubmenuOpen) {
programSubmenu.style.display = "none";
}
}, 600);
}
programLink.addEventListener("mouseenter", showSubmenu);
programLink.addEventListener("mouseleave", hideSubmenu);
programSubmenu.addEventListener("mouseenter", showSubmenu);
programSubmenu.addEventListener("mouseleave", hideSubmenu);
//
// Aside menu toggle
//
@@ -524,10 +536,10 @@
// map on the projects page
let customIcon = L.icon({
iconUrl: '/themes/erabletheme/assets/leaf.svg',
iconSize: [20, 20],
iconAnchor: [10, 20],
popupAnchor: [0, -20]
iconUrl: '/themes/erabletheme/assets/leaflet-point.svg',
iconSize: [18, 18],
iconAnchor: [9, 9],
popupAnchor: [0, -9]
});
let initiatedMap = document.querySelector(`#${mapid}`);
@@ -581,7 +593,7 @@
const currentMap = document.querySelector('.leaflet-container');
const leafletIcons = document.querySelectorAll('.leaflet-marker-pane img');
for (let icon of leafletIcons) {
icon.setAttribute('src', '/themes/erabletheme/assets/leaf.svg');
icon.setAttribute('src', '/themes/erabletheme/assets/leaflet-point.svg');
}
//