diff --git a/web/themes/custom/quartiers_de_demain/dist/assets/bundle.js b/web/themes/custom/quartiers_de_demain/dist/assets/bundle.js
index e1dba3f..317d253 100644
--- a/web/themes/custom/quartiers_de_demain/dist/assets/bundle.js
+++ b/web/themes/custom/quartiers_de_demain/dist/assets/bundle.js
@@ -785,194 +785,74 @@ document.addEventListener('keydown', (e) => {
/*!*********************************!*\
!*** ./src/assets/js/header.js ***!
\*********************************/
-// // //////// start header ////////////
+
+
+
// // document.addEventListener('DOMContentLoaded', function() {
-// // const header = document.querySelector('header[role="banner"]');
-// // const logo = document.querySelector('#block-quartiers-de-demain-logoquartiersdedemain > div:nth-child(1) > div:nth-child(1) > a:nth-child(1) > svg:nth-child(1)');
-// // const headerNavContainer = document.querySelector('.header_nav_container');
-// // const isFirstLoad = !performance.getEntriesByType("navigation")[0].type.includes('back_forward');
-// // const isTargetPath = window.location.pathname === '/';
-
-// // // Fonction pour démarrer l'animation du logo SVG
-// // function startLogoAnimation() {
-// // logo.classList.add('animated');
-// // }
-
-// // // Fonction pour arrêter l'animation du logo SVG
-// // function stopLogoAnimation() {
-// // logo.classList.remove('animated');
-// // }
-
-// // // Vérifier si le header a la classe header--collapse
-// // function checkHeaderCollapse() {
-// // if (header.classList.contains('header--collapsed')) {
-// // stopLogoAnimation();
-// // } else if (header.classList.contains('header--collapsed-already')) {
-// // stopLogoAnimation();
-// // } else {
-// // startLogoAnimation();
-// // }
-
-// // }
+// // const header = document.querySelector('header[role="banner"]');
+// // const headerNavContainer = document.querySelector('.header_nav_container');
+// // const threshold = 100;
+// // let lastScrollTop = 0;
+// // let isHidden = false;
+// // let introDone = true; // ✅ plus d'intro, donc on considère qu'elle est "déjà finie"
+// // /* -------------------
+// // Animations nav
+// // ------------------- */
-// // // Appeler la fonction au chargement initial
-// // checkHeaderCollapse();
-
-// // // Observer les changements de classe sur le header
-// // const observer = new MutationObserver(function(mutations) {
-// // mutations.forEach(function(mutation) {
-// // if (mutation.attributeName === 'class') {
-// // checkHeaderCollapse();
-// // }
-// // });
+// // function slideOut() {
+// // headerNavContainer.animate([
+// // { transform: 'translateX(0)' },
+// // { transform: 'translateX(-100%)' }
+// // ], {
+// // duration: 300,
+// // fill: 'forwards'
// // });
-// // observer.observe(header, { attributes: true });
-
-
-// // // Si ce n'est pas la première charge ou si le chemin n'est pas le chemin cible, ajouter la classe immédiatement
-// // if (!isFirstLoad || !isTargetPath) {
-// // header.classList.add('header--collapsed-already');
-// // stopLogoAnimation();
-// // } else {
-// // // Sinon, appliquer la transition après un délai, sauf si scroll
-// // let collapseTimeout = setTimeout(() => {
-// // header.classList.add('header--collapsed');
-// // }, 1000);
-
-// // function interruptCollapseOnScroll() {
-// // if (!header.classList.contains('header--collapsed')) {
-// // clearTimeout(collapseTimeout); // annule l'animation
-// // header.classList.add('header--collapsed');
-// // }
-// // window.removeEventListener('scroll', interruptCollapseOnScroll); // une seule fois
-// // }
-
-// // window.addEventListener('scroll', interruptCollapseOnScroll);
-// // }
-// // //////////////////////////////////////
-
-// // let lastScrollTop = 0;
-// // let threshold = 100; // Change this value as needed
-// // let isHidden = false;
-
-// // function slideOut() {
-// // headerNavContainer.animate([
-// // { transform: 'translateX(0)' },
-// // { transform: 'translateX(-100%)' }
-// // ], {
-// // duration: 300,
-// // fill: 'forwards'
-// // });
-// // isHidden = true;
-// // }
-
-// // function slideIn() {
-// // headerNavContainer.animate([
-// // { transform: 'translateX(-100%)' },
-// // { transform: 'translateX(0)' }
-// // ], {
-// // duration: 300,
-// // fill: 'forwards'
-// // });
-// // isHidden = false;
-// // }
-
-// // function slideDown() {
-// // // headerNavContainer.style.display = 'block';
-// // headerNavContainer.animate([
-// // { transform: 'translateY(0%)' },
-// // { transform: 'translateY(+100%)' }
-// // ], {
-// // duration: 300,
-// // fill: 'forwards'
-// // });
-// // isHidden = false;
-// // }
-
-// // function slideUp() {
-// // headerNavContainer.animate([
-// // { transform: 'translateY(100%)' },
-// // { transform: 'translateY(0%)' }
-// // ], {
-// // duration: 300,
-// // fill: 'forwards'
-// // }).onfinish = function() {
-// // // headerNavContainer.style.display = 'none';
-// // };
-// // isHidden = true;
-// // }
-// // // Fonction pour ajuster la hauteur du header lors du défilement
-// // function adjustHeaderHeight() {
-// // if (window.scrollY > 0) {
-// // header.classList.add('shrink');
-// // } else {
-// // header.classList.remove('shrink');
-// // }
-// // }
-
-// // function handleScroll() {
-// // let scrollTop = window.pageYOffset || document.documentElement.scrollTop;
-// // const isMobile = window.innerWidth < 811;
-
-// // if (scrollTop > threshold && !isHidden) {
-// // if (isMobile) {
-// // slideUp();
-// // } else {
-// // slideOut();
-// // }
-// // } else if (scrollTop <= threshold && isHidden) {
-// // if (isMobile) {
-// // slideDown();
-// // } else {
-// // slideIn();
-// // }
-// // }
-
-
-// // lastScrollTop = scrollTop <= 0 ? 0 : scrollTop; // For Mobile or negative scrolling
-// // }
-
-// // function handleTouchAndMouseEnter() {
-// // if (isHidden) {
-// // if (window.innerWidth < 811) {
-// // slideDown();
-// // } else {
-// // slideIn();
-// // }
-// // }
-// // }
-
-// // function handleTouchAndMouseLeave() {
-// // if (lastScrollTop > threshold && !isHidden) {
-// // if (window.innerWidth < 811) {
-// // slideUp();
-// // } else {
-// // slideOut();
-// // }
-// // }
-// // }
-
-// // window.addEventListener('scroll', handleScroll);
-// // window.addEventListener('scroll', adjustHeaderHeight);
-
-// // // Mouse events for desktop
-// // header.addEventListener('mouseenter', handleTouchAndMouseEnter);
-// // header.addEventListener('mouseleave', handleTouchAndMouseLeave);
-
-// // // Touch events for tablets and mobile devices
-// // header.addEventListener('touchstart', handleTouchAndMouseEnter);
-// // header.addEventListener('touchend', handleTouchAndMouseLeave);
-
-// // // Initial check to see if we're at the top of the page
+// // isHidden = true;
+// // }
+
+// // function slideIn() {
+// // headerNavContainer.animate([
+// // { transform: 'translateX(-100%)' },
+// // { transform: 'translateX(0)' }
+// // ], {
+// // duration: 300,
+// // fill: 'forwards'
+// // });
+// // isHidden = false;
+// // }
+
+// // function slideDown() {
+// // headerNavContainer.animate([
+// // { transform: 'translateY(-100%)' },
+// // { transform: 'translateY(0%)' }
+// // ], {
+// // duration: 300,
+// // fill: 'forwards'
+// // });
+// // isHidden = false;
+// // }
+
+// // function slideUp() {
+// // headerNavContainer.animate([
+// // { transform: 'translateY(0%)' },
+// // { transform: 'translateY(-100%)' }
+// // ], {
+// // duration: 300,
+// // fill: 'forwards'
+// // });
+// // isHidden = true;
+// // }
+
+// // function initNavPosition() {
// // if (window.pageYOffset <= threshold) {
// // if (window.innerWidth < 811) {
// // slideDown();
-// // } else {
+// // } else {
// // slideIn();
-// // }
+// // }
// // } else {
// // if (window.innerWidth < 811) {
// // slideUp();
@@ -980,105 +860,227 @@ document.addEventListener('keydown', (e) => {
// // slideIn();
// // }
// // }
-
-// // });
-
-// // //////// end header ////////////
-
+// // }
+
+// // /* -------------------
+// // Scroll / resize header
+// // ------------------- */
+
+// // function adjustHeaderHeight() {
+// // if (window.scrollY > 0) {
+// // header.classList.add('shrink');
+// // } else {
+// // header.classList.remove('shrink');
+// // }
+// // }
+
+// // function handleScroll() {
+// // if (!introDone) return; // ici ça passe, introDone = true
+
+// // let scrollTop = window.pageYOffset || document.documentElement.scrollTop;
+// // const isMobile = window.innerWidth < 811;
+
+// // if (scrollTop > threshold && !isHidden) {
+// // if (isMobile) {
+// // slideUp();
+// // } else {
+// // slideOut();
+// // }
+// // } else if (scrollTop <= threshold && isHidden) {
+// // if (isMobile) {
+// // slideDown();
+// // } else {
+// // slideIn();
+// // }
+// // }
+
+// // lastScrollTop = scrollTop <= 0 ? 0 : scrollTop;
+// // }
+
+// // function handleTouchAndMouseEnter() {
+// // if (!introDone) return;
+
+// // if (isHidden) {
+// // if (window.innerWidth < 811) {
+// // slideDown();
+// // } else {
+// // slideIn();
+// // }
+// // }
+// // }
+
+// // function handleTouchAndMouseLeave() {
+// // if (!introDone) return;
+
+// // if (lastScrollTop > threshold && !isHidden) {
+// // if (window.innerWidth < 811) {
+// // slideUp();
+// // } else {
+// // slideOut();
+// // }
+// // }
+// // }
+
+// // // ✅ on n'a plus besoin de masquer la nav au début
+// // if (headerNavContainer) {
+// // headerNavContainer.style.visibility = 'visible';
+// // }
+
+// // window.addEventListener('scroll', handleScroll);
+// // window.addEventListener('scroll', adjustHeaderHeight);
+
+// // header.addEventListener('mouseenter', handleTouchAndMouseEnter);
+// // header.addEventListener('mouseleave', handleTouchAndMouseLeave);
+
+// // header.addEventListener('touchstart', handleTouchAndMouseEnter);
+// // header.addEventListener('touchend', handleTouchAndMouseLeave);
+
+// // // ✅ position initiale de la nav
+// // initNavPosition();
+
+// // });
-///////////////start header sans animation logo////////////////
+// document.addEventListener('DOMContentLoaded', function() {
-document.addEventListener('DOMContentLoaded', function() {
+// const header = document.querySelector('header[role="banner"]');
+// const headerNavContainer = document.querySelector('.header_nav_container');
+// if (!header || !headerNavContainer) return;
+
+// const threshold = 100;
+// let lastScrollTop = 0;
+// let isHidden = false;
+// let introDone = true; // ✅ pas d'intro, donc direct prêt
+
+// /* -------------------
+// Helpers show / hide
+// ------------------- */
+
+// function hideNav() {
+// headerNavContainer.classList.add('nav-hidden');
+// isHidden = true;
+// }
+
+// function showNav() {
+// headerNavContainer.classList.remove('nav-hidden');
+// isHidden = false;
+// }
+
+// function isMobile() {
+// return window.innerWidth < 811;
+// }
+
+// /* -------------------
+// Position initiale
+// ------------------- */
+
+// function initNavPosition() {
+// if (window.pageYOffset <= threshold) {
+// showNav(); // en haut de page → nav visible
+// } else {
+// if (isMobile()) {
+// hideNav(); // mobile scrollé → nav cachée
+// } else {
+// showNav(); // desktop : nav visible même en bas
+// }
+// }
+// }
+
+// /* -------------------
+// Scroll / resize header
+// ------------------- */
+
+// function adjustHeaderHeight() {
+// if (window.scrollY > 0) {
+// header.classList.add('shrink');
+// } else {
+// header.classList.remove('shrink');
+// }
+// }
+
+// function handleScroll() {
+// if (!introDone) return;
+
+// let scrollTop = window.pageYOffset || document.documentElement.scrollTop;
+
+// if (scrollTop > threshold && !isHidden) {
+// // on cache la nav
+// hideNav();
+// } else if (scrollTop <= threshold && isHidden) {
+// // on ré-affiche la nav
+// showNav();
+// }
+
+// lastScrollTop = scrollTop <= 0 ? 0 : scrollTop;
+// }
+
+// function handleTouchAndMouseEnter() {
+// if (!introDone) return;
+// if (isHidden) {
+// showNav();
+// }
+// }
+
+// function handleTouchAndMouseLeave() {
+// if (!introDone) return;
+
+// if (lastScrollTop > threshold && !isHidden) {
+// hideNav();
+// }
+// }
+
+// // Rendre la nav visible (plus de visibility:hidden)
+// headerNavContainer.style.visibility = 'visible';
+
+// window.addEventListener('scroll', handleScroll);
+// window.addEventListener('scroll', adjustHeaderHeight);
+
+// header.addEventListener('mouseenter', handleTouchAndMouseEnter);
+// header.addEventListener('mouseleave', handleTouchAndMouseLeave);
+
+// header.addEventListener('touchstart', handleTouchAndMouseEnter);
+// header.addEventListener('touchend', handleTouchAndMouseLeave);
+
+// // Position de départ
+// initNavPosition();
+// adjustHeaderHeight();
+// });
+
+
+
+document.addEventListener('DOMContentLoaded', function () {
const header = document.querySelector('header[role="banner"]');
- const logo = document.querySelector('#block-quartiers-de-demain-logoquartiersdedemain svg');
const headerNavContainer = document.querySelector('.header_nav_container');
- const navEntry = performance.getEntriesByType("navigation")[0];
- const isFirstLoad = !navEntry.type.includes('back_forward');
- const isTargetPath = window.location.pathname === '/';
- const isMobile = window.innerWidth < 811; // 🔹 breakpoint mobile
+ if (!header || !headerNavContainer) return;
const threshold = 100;
let lastScrollTop = 0;
- let isHidden = false;
- let introDone = false; // ✅ on saura quand l'intro est finie
+ let isHidden = false; // au chargement : nav visible
- // 🔹 On cache la nav au tout début (pour éviter toute secousse)
- if (headerNavContainer) {
- headerNavContainer.style.visibility = 'hidden';
+ function isMobile() {
+ return window.innerWidth < 811;
}
- /* -------------------
- Animations nav
- ------------------- */
+ /* --- helpers --- */
- function slideOut() {
- headerNavContainer.animate([
- { transform: 'translateX(0)' },
- { transform: 'translateX(-100%)' }
- ], {
- duration: 300,
- fill: 'forwards'
- });
+ function hideNav() {
+ headerNavContainer.classList.add('nav-hidden');
isHidden = true;
}
- function slideIn() {
- headerNavContainer.animate([
- { transform: 'translateX(-100%)' },
- { transform: 'translateX(0)' }
- ], {
- duration: 300,
- fill: 'forwards'
- });
+ function showNav() {
+ headerNavContainer.classList.remove('nav-hidden');
isHidden = false;
}
- function slideDown() {
- headerNavContainer.animate([
- { transform: 'translateY(0%)' },
- { transform: 'translateY(+100%)' }
- ], {
- duration: 300,
- fill: 'forwards'
- });
- isHidden = false;
- }
+ /* --- init : nav visible au chargement --- */
- function slideUp() {
- headerNavContainer.animate([
- { transform: 'translateY(100%)' },
- { transform: 'translateY(0%)' }
- ], {
- duration: 300,
- fill: 'forwards'
- }).onfinish = function() {};
- isHidden = true;
- }
+ headerNavContainer.style.visibility = 'visible';
+ showNav();
- // ✅ Position initiale de la nav,
- // appelée UNIQUEMENT après la fin de l'intro
- function initNavPosition() {
- if (window.pageYOffset <= threshold) {
- if (window.innerWidth < 811) {
- slideDown();
- } else {
- slideIn();
- }
- } else {
- if (window.innerWidth < 811) {
- slideUp();
- } else {
- slideIn();
- }
- }
- }
-
- /* -------------------
- Scroll / resize header
- ------------------- */
+ /* --- shrink header --- */
function adjustHeaderHeight() {
if (window.scrollY > 0) {
@@ -1088,118 +1090,49 @@ document.addEventListener('DOMContentLoaded', function() {
}
}
- function handleScroll() {
- if (!introDone) return; // ⛔ rien tant que l'intro n'est pas finie
+ /* --- scroll : cache / montre la nav --- */
- let scrollTop = window.pageYOffset || document.documentElement.scrollTop;
- const isMobile = window.innerWidth < 811;
+ function handleScroll() {
+ const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
if (scrollTop > threshold && !isHidden) {
- if (isMobile) {
- slideUp();
- } else {
- slideOut();
- }
+ // on cache la nav (desktop & mobile)
+ hideNav();
} else if (scrollTop <= threshold && isHidden) {
- if (isMobile) {
- slideDown();
- } else {
- slideIn();
- }
+ // on la remonte en haut de page
+ showNav();
}
lastScrollTop = scrollTop <= 0 ? 0 : scrollTop;
}
- function handleTouchAndMouseEnter() {
- if (!introDone) return; // ⛔ pas de hover avant la fin de l'intro
+ /* --- hover / touch sur le header : on montre la nav --- */
+ function handleEnter() {
if (isHidden) {
- if (window.innerWidth < 811) {
- slideDown();
- } else {
- slideIn();
- }
+ showNav();
}
}
- function handleTouchAndMouseLeave() {
- if (!introDone) return;
-
+ function handleLeave() {
if (lastScrollTop > threshold && !isHidden) {
- if (window.innerWidth < 811) {
- slideUp();
- } else {
- slideOut();
- }
+ hideNav();
}
}
- window.addEventListener('scroll', handleScroll);
- window.addEventListener('scroll', adjustHeaderHeight);
+ window.addEventListener('scroll', handleScroll, { passive: true });
+ window.addEventListener('scroll', adjustHeaderHeight, { passive: true });
- header.addEventListener('mouseenter', handleTouchAndMouseEnter);
- header.addEventListener('mouseleave', handleTouchAndMouseLeave);
+ header.addEventListener('mouseenter', handleEnter);
+ header.addEventListener('mouseleave', handleLeave);
- header.addEventListener('touchstart', handleTouchAndMouseEnter);
- header.addEventListener('touchend', handleTouchAndMouseLeave);
-
- /* -------------------
- Intro du logo
- ------------------- */
-
- if (isFirstLoad && isTargetPath && logo && !isMobile) {
- // On bloque le scroll
- document.body.classList.add('logo-intro-animating');
-
- // 1) Logo plein écran SANS ANIMATION + header figé
- logo.style.transition = 'none';
- header.style.transition = 'none';
- document.body.classList.add('logo-intro-active'); // logo centré, scale(2)
-
- void logo.offsetWidth; // reflow
-
- const INTRO_DELAY = 1000; // temps où le logo reste plein écran
- const TRANSITION_DURATION = 1000; // durée de l'anim de collapse
-
- // 2) Après ce délai : on réactive les transitions et on lance l'anim
- setTimeout(() => {
- logo.style.transition = '';
- header.style.transition = '';
-
- header.classList.add('header--collapsed'); // header se rétracte
- document.body.classList.remove('logo-intro-active'); // logo retourne dans le header
-
- // 3) Quand le header + logo ont fini de bouger :
- setTimeout(() => {
- document.body.classList.remove('logo-intro-animating');
- introDone = true;
-
- // 👉 maintenant seulement on affiche la nav et on la fait glisser
- if (headerNavContainer) {
- headerNavContainer.style.visibility = 'visible';
- }
- initNavPosition();
-
- }, TRANSITION_DURATION + 100);
-
- }, INTRO_DELAY);
-
- } else {
- // 🔹 CAS MOBILE OU PAS HOME / PAS 1re LOAD :
- // pas d'intro : header direct réduit, nav directement dispo
-
- header.classList.add('header--collapsed-already');
- introDone = true;
- if (headerNavContainer) {
- headerNavContainer.style.visibility = 'visible';
- }
- initNavPosition();
- }
+ header.addEventListener('touchstart', handleEnter);
+ header.addEventListener('touchend', handleLeave);
+ // init
+ adjustHeaderHeight();
});
-///////////////end header sans animation logo////////////////
}();
// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
!function() {
diff --git a/web/themes/custom/quartiers_de_demain/dist/assets/bundle.js.map b/web/themes/custom/quartiers_de_demain/dist/assets/bundle.js.map
index 3e545a3..a376a26 100644
--- a/web/themes/custom/quartiers_de_demain/dist/assets/bundle.js.map
+++ b/web/themes/custom/quartiers_de_demain/dist/assets/bundle.js.map
@@ -1 +1 @@
-{"version":3,"file":"./bundle.js","mappings":";UAAA;UACA;;;;;WCDA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;WCPD;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;WCNA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE;;;;;;AAMF;;;AAGA;;AAEA;AACA;AACA;AACA;AACA,4CAA4C,sDAAsD;AAClG;AACA;;AAEA;AACA;AACA,KAAK;;;AAGL;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;AAGA;AACA;AACA,GAAG;;AAEH;;;;;AAKA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,OAAO;;AAEP;;AAEA;;;AAGA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;;;;;;AAMA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mDAAmD;;AAEnD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;AACD;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;AAID;AACA;AACA;AACA;AACA;AACA;;AAEA,kCAAkC;AAClC;AACA,kDAAkD;AAClD;AACA,IAAI,OAAO;AACX;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;AACD;;;AAGA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;;;;AAIA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH,CAAC;;AAED;;;;AAIA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,2CAA2C;AAC3C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;;AAEH,CAAC;;AAED;;;;;;;AAOA,CAAC;;;;;;;;;;AC1gBD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;AAKD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,MAAM;AACN,IAAI;;AAEJ;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;;;;;;;;;ACxDA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B;AAC7B;;AAEA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,4DAA4D;;AAE5D;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA,4BAA4B;AAC5B,4BAA4B;AAC5B;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;AAGD,6E;;;;;;;AC7HA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX,qCAAqC,kBAAkB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA,+EAA+E;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,gBAAgB,4BAA4B;AAC5C,gBAAgB;AAChB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,gBAAgB,gCAAgC;AAChD,gBAAgB;AAChB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAA6B;AAC7C,gBAAgB;AAChB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,gBAAgB,+BAA+B;AAC/C,gBAAgB;AAChB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA,cAAc;AACd;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,YAAY;AACZ;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;AAGA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,4CAA4C;;AAE5C;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,4BAA4B;AACpC,QAAQ;AACR;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,QAAQ,gCAAgC;AACxC,QAAQ;AACR;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,QAAQ,6BAA6B;AACrC,QAAQ;AACR;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,QAAQ,+BAA+B;AACvC,QAAQ;AACR;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,4BAA4B;;AAE5B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA,4BAA4B;;AAE5B;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,sDAAsD;;AAEtD,2BAA2B;;AAE3B,uCAAuC;AACvC,uCAAuC;;AAEvC;AACA;AACA;AACA;;AAEA,2DAA2D;AAC3D,2DAA2D;;AAE3D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,OAAO;;AAEP,KAAK;;AAEL,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,6D;;;;;;;;AC7ZA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;;AAGH;AACA;;AAEA;AACA;AACA,4BAA4B;AAC5B,MAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;;;;AAIA;AACA,CAAC,kB;;;;;;;AC5FD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA,8CAA8C;AAC9C;AACA,SAAS;AACT;;;;;AAKA;;;AAGA;AACA;AACA;AACA,qCAAqC;AACrC,sDAAsD;AACtD,kCAAkC;;AAElC;AACA;AACA,sGAAsG;;AAEtG;AACA;AACA,8BAA8B;AAC9B,8BAA8B;AAC9B;;AAEA;AACA;AACA,kCAAkC;AAClC,cAAc;AACd,kCAAkC;AAClC;;AAEA;AACA;AACA,wBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,mFAAmF;;AAEnF;AACA,6CAA6C;;AAE7C;AACA,mEAAmE;AACnE;AACA,kBAAkB;AAClB,gFAAgF;AAChF,8DAA8D;AAC9D;AACA,aAAa;AACb,SAAS;;;AAGT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,SAAS;AACT;;AAEA,KAAK;;;;AAIL;;AAEA,CAAC,oB;;;;;;;;;ACtJD,+DAAe,qBAAuB,qBAAqB,E","sources":["webpack://quartiers_de_demain/webpack/bootstrap","webpack://quartiers_de_demain/webpack/runtime/global","webpack://quartiers_de_demain/webpack/runtime/make namespace object","webpack://quartiers_de_demain/webpack/runtime/publicPath","webpack://quartiers_de_demain/./src/assets/js/quartiers_de_demain.js","webpack://quartiers_de_demain/./src/assets/js/animated_formes.js","webpack://quartiers_de_demain/./src/assets/js/lightbox.js","webpack://quartiers_de_demain/./src/assets/js/header.js","webpack://quartiers_de_demain/./src/assets/js/timeline.js","webpack://quartiers_de_demain/./src/assets/js/ressources.js","webpack://quartiers_de_demain/./src/assets/scss/quartiers_de_demain.scss"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","/**\n * @file\n * quartiers_de_demain behaviors.\n */\n (function (Drupal) {\n\n 'use strict';\n\n Drupal.behaviors.quartiers_de_demain = {\n attach: function (context, settings) {\n console.log('It works!');\n }\n };\n} (Drupal));\n\n\n\n\n\n(function($, window) {\n\n\n//// ancre dans texte au click paragraphe correspondant arrive en dessous du header \n\n var adjustAnchor = function() {\n var $anchor = $('.sidebar_first_container'),\n fixedElementHeight = 500;\n if ($anchor.length > 0) {\n $('html, body').stop().animate({scrollTop: $anchor.offset().top - fixedElementHeight }, 0);\n }\n };\n\n $(window).on('hashchange', function() {\n adjustAnchor();\n });\n\n\n//////////////////////// start script smooth apparition des textes /////////////////\n\n// div.view-rows-wrapper:nth-child(3) > div:nth-child(2) > article:nth-child(1) > div:nth-child(3)\n// html.js.sr body div.dialog-off-canvas-main-canvas div.layout-container.partenaires main div.layout-content div.content_container div.views-element-container div.js-view-dom-id-92e061b83776a5ae5f470b8d32637dba5a87d248e6f275adc7abe863e5c527c3.view div.view-rows-wrapper div.views-row article.node-type-partenaire div.field_body\n\n function scrollReaveal(){\n\n const nodes = {\n logo : document.querySelectorAll('#logo-animated-container'),\n chapeau : document.querySelectorAll('.field_body:not(article.node-type-partenaire div.field_body)'),\n paragraph: document.querySelectorAll('.field_field_textes .paragraph--type--static-parts'),\n enjeux : document.querySelectorAll('.field_field_textes .paragraph--type--static-parts .enjeux'),\n // mapHome : document.querySelectorAll('.field_field_map_block #block-sitesmapblock'),\n // mapSite : document.querySelectorAll('#sites-map-container'),\n lienDoc : document.querySelectorAll('.field_field_documents'),\n lienURL : document.querySelectorAll('.field_field_liens_site, .field_field_liens'),\n // nodeProjet : document.querySelectorAll('.node-type-projet .field_field_infos, .btn-equipe-toggle, .field_field_nom_de_l_equipe, .node-type-projet .field_field_texte_partie_texte_projet, .node-type-projet .field_field_titre_partie_texte_projet, .node-type-projet .field_field_images_projet'),\n }\n\n const showUp = {\n origin: 'bottom',\n delay: 100,\n duration: 1000,\n distance: '50px',\n easing: 'cubic-bezier(0.5, 0, 0, 1)'\n }\n\n const Show = {\n delay: 100,\n duration: 600,\n easing: 'cubic-bezier(0.5, 0, 0, 1)'\n }\n\n console.log(nodes);\n\n ScrollReveal().reveal(nodes.logo, Show);\n ScrollReveal().reveal(nodes.chapeau, showUp);\n ScrollReveal().reveal(nodes.paragraph, showUp);\n ScrollReveal().reveal(nodes.enjeux, showUp);\n // ScrollReveal().reveal(nodes.mapHome, showUp);\n // ScrollReveal().reveal(nodes.mapSite, showUp);\n ScrollReveal().reveal(nodes.lienDoc, showUp);\n ScrollReveal().reveal(nodes.lienURL, showUp);\n // ScrollReveal().reveal(nodes.nodeProjet, showUp);\n\n }\n\n\n $( document ).ready(function() {\n scrollReaveal();\n });\n\n//////////////////////// end script smooth apparition des textes /////////////////\n\n\n\n\n//////////// start slideshow images home ////////////////////////// \n$(document).ready(function(){\n let diapohome = $('.config_pages--type--diaporama-home .diaporama');\n\n if (diapohome.length) {\n // Initialisation de Slick\n diapohome.slick({\n slidesToShow: 1,\n dots: false,\n arrows: false,\n // centerMode: true,\n adaptiveHeight: false,\n autoplay: true, // Activer l'autoplay\n autoplaySpeed: 4000, // Changement de slide toutes les 4 secondes\n // infinite: true,\n pauseOnHover: false, // Ne pas arrêter l'autoplay lors du survol\n pauseOnFocus: false,\n responsive: [\n {\n breakpoint: 810,\n settings: {\n slidesToShow: 1,\n adaptiveHeight: false,\n arrows: false,\n draggable: true,\n centerMode: false,\n }\n }]\n });\n\n}\n\n//////////// end slideshow images home ////////////////////////// \n\n\n//////////// start slideshow /actualites ////////////////////////// \n\n // Vérifier si on N'EST PAS sur la page #home\n if (!$(\"#page-node\").length) {\n let actuview2 = $('.content-wrapper-actu .field_field_images .actu-diaporama');\n\n if (actuview2.length > 0) {\n actuview2.slick({\n slidesToShow: 1,\n dots: false,\n arrows: true,\n adaptiveHeight: false,\n autoplay: false,\n responsive: [\n {\n breakpoint: 810,\n settings: {\n slidesToShow: 1,\n adaptiveHeight: false,\n arrows: true,\n draggable: true,\n autoplay: false,\n }\n }\n ]\n });\n console.log('Slick activé sur les actualités');\n console.log('Slick activé sur 1 actu');\n }\n // } else {\n // console.log('Slick désactivé sur la page Home');\n }\n});\n//////////// end slideshow /actualites ////////////////////////// \n\n\n\n\n\n//////////////////// start wrapper views-row lessites /////////////////////////\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n// Sélectionne le conteneur principal avec l'ID 'lessites'\nconst container = document.getElementById(\"lessites\");\n\n// Vérifie si le conteneur existe pour éviter toute erreur sur d'autres pages\nif (container) {\n // Sélectionne l'élément 'view' à l'intérieur de '.views-element-container'\n const viewContainer = container.querySelector(\".views-element-container .view\");\n\n // Vérifie si 'viewContainer' existe pour éviter les erreurs\n if (viewContainer) {\n // Crée une div englobante pour tous les éléments 'views-row'\n const wrapperDiv = document.createElement(\"div\");\n wrapperDiv.classList.add(\"views-row-wrapper\"); // ajoute une classe pour faciliter le style CSS\n\n // Déplace tous les éléments 'views-row' dans la nouvelle div\n const viewsRows = viewContainer.querySelectorAll(\".views-row\");\n viewsRows.forEach(row => wrapperDiv.appendChild(row));\n\n // Ajoute la div englobante dans le 'viewContainer'\n viewContainer.appendChild(wrapperDiv);\n }\n}\n});\n//////////////////// end wrapper views-row lessites /////////////////////////\n\n\n//////////////////// start div infos site ////////////////////////\n\nif (document.body.classList.contains('node-type-site')) {\nconst blockRegion = document.querySelector('.block-region-second');\nconst fieldClasses = [\n '.field_field_region',\n '.field_field_nom_du_qpv_nb_d_hab',\n '.field_field_departement_s',\n '.field_field_programme_de_l_etat',\n '.field_field_porteur_s_de_site',\n '.field_field_nom_de_la_commune_nb_d_hab'\n];\n\n// Sélectionne les div parents de chacun des champs listés\nconst elementsToWrap = [];\nfieldClasses.forEach(className => {\n const fieldElement = blockRegion.querySelector(className);\n if (fieldElement) {\n // Ajoute le parent du champ au tableau si trouvé\n elementsToWrap.push(fieldElement.parentElement);\n }\n});\n\nif (elementsToWrap.length > 0) {\n const infosContainer = document.createElement('div');\n infosContainer.className = 'infos';\n\n // Insère le conteneur `.infos` avant le premier élément ciblé\n const firstElement = elementsToWrap[0];\n blockRegion.insertBefore(infosContainer, firstElement);\n\n // Déplace chaque élément dans le conteneur `.infos`\n elementsToWrap.forEach(element => infosContainer.appendChild(element));\n}\n}\n//////////////////// end div infos site ////////////////////////\n\n\n//////////////////// start div infos actualité ////////////////////////\n$(document).ready(function () {\n // Vérifier si .layout-container A l'ID #page-node (et non un élément enfant)\n if ($(\".layout-container\").attr(\"id\") === \"page-node\") {\n $(\"article.node-type-actualite\").each(function () {\n let article = $(this);\n let dateField = article.find(\".field_field_date\");\n let typeField = article.find(\".field_field_type_d_actualite\");\n let siteField = article.find(\".field_field_site\");\n\n \n\n // Vérifier si les deux éléments existent\n if (dateField.length > 0 || typeField.length > 0) {\n // Vérifier si l'encapsulation n'existe pas déjà\n if (article.find(\".infos-actu\").length === 0) {\n // Créer un conteneur et y insérer les éléments\n let infosActu = $(\"
\").addClass(\"infos-actu\").append(dateField, typeField, siteField);\n \n // Ajouter ce conteneur après les champs existants\n article.append(infosActu);\n }\n }\n });\n }\n});\n//////////////////// end div infos actualité ////////////////////////\n\n//////////////////////////////////////////////////////////////////\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n// Sélectionner les éléments à déplacer\nconst documentsField = document.querySelector(\".field_field_documents\");\nconst liensSiteField = document.querySelector(\".field_field_liens_site\");\n\n// Sélectionner la destination\nconst thirdRegion = document.querySelector(\".block-region-third > div\");\n\n// Créer une nouvelle div pour englober les éléments déplacés\nconst wrapperDiv = document.createElement(\"div\");\nwrapperDiv.classList.add(\"documents-liens-wrapper\");\n\n// Déplacer les éléments dans la nouvelle div\nif (documentsField && liensSiteField && thirdRegion) {\n wrapperDiv.appendChild(documentsField);\n wrapperDiv.appendChild(liensSiteField);\n\n // Ajouter la nouvelle div dans la destination\n thirdRegion.appendChild(wrapperDiv);\n}\n});\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n// Sélectionner les éléments pertinents\nconst documentsLiensWrapper = document.querySelector(\".documents-liens-wrapper\");\nconst blockRegionThird = document.querySelector(\".block-region-third\");\n\n// Vérifier que les éléments existent avant de les manipuler\nif (documentsLiensWrapper && blockRegionThird) {\n // Déplacer .documents-liens-wrapper en dehors du div contenant les boutons prev/next\n blockRegionThird.appendChild(documentsLiensWrapper);\n}\n});\n\n\n\n/////////////////// start langswitcher position responsive//////////////////////\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n// Fonction pour déplacer le bloc en fonction de la taille de l'écran\nfunction moveLanguageSwitcher() {\n const languageSwitcher = document.getElementById(\"block-quartiers-de-demain-selecteurdelangue\");\n const navContainer = document.querySelector(\".header_nav_container\");\n\n if (window.innerWidth <= 810) { // Si écran téléphone\n if (languageSwitcher && navContainer && !navContainer.contains(languageSwitcher)) {\n navContainer.appendChild(languageSwitcher); // Déplace le bloc dans header_nav_container\n }\n } else { // Si écran non téléphone\n const headerRightContainer = document.querySelector(\".header_right_container\");\n if (languageSwitcher && headerRightContainer && !headerRightContainer.contains(languageSwitcher)) {\n headerRightContainer.appendChild(languageSwitcher); // Remet le bloc dans sa position initiale\n }\n }\n}\n\n// Déclencher au chargement et au redimensionnement\nmoveLanguageSwitcher();\nwindow.addEventListener(\"resize\", moveLanguageSwitcher);\n});\n/////////////////// end langswitcher position responsive///////////////////////////////////////////////////////////\n\n\n$(document).ready(function () {\n\n\n/////////////////// start voir plus... actualite dans /actualites & /home ////////////////////\n\n if ($(\"#actualites\" ).length > 0 || $(\"#home\").length > 0) {\n $(\".node-type-actualite\").each(function () {\n let article = $(this);\n \n let body = article.find(\".field_body\");\n let links = article.find(\".field_field_liens\");\n \n body.hide();\n links.hide();\n \n let toggleButton = $(\"