application de la nouvelle identité sur toutes les pages
This commit is contained in:
@@ -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');
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user