/******/ (function() { // webpackBootstrap
/******/ 	// The require scope
/******/ 	var __webpack_require__ = {};
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/global */
/******/ 	!function() {
/******/ 		__webpack_require__.g = (function() {
/******/ 			if (typeof globalThis === 'object') return globalThis;
/******/ 			try {
/******/ 				return this || new Function('return this')();
/******/ 			} catch (e) {
/******/ 				if (typeof window === 'object') return window;
/******/ 			}
/******/ 		})();
/******/ 	}();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	!function() {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = function(exports) {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	}();
/******/ 	
/******/ 	/* webpack/runtime/publicPath */
/******/ 	!function() {
/******/ 		var scriptUrl;
/******/ 		if (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + "";
/******/ 		var document = __webpack_require__.g.document;
/******/ 		if (!scriptUrl && document) {
/******/ 			if (document.currentScript)
/******/ 				scriptUrl = document.currentScript.src;
/******/ 			if (!scriptUrl) {
/******/ 				var scripts = document.getElementsByTagName("script");
/******/ 				if(scripts.length) {
/******/ 					var i = scripts.length - 1;
/******/ 					while (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;
/******/ 				}
/******/ 			}
/******/ 		}
/******/ 		// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration
/******/ 		// or pass an empty string ("") and set the __webpack_public_path__ variable from your code to use your own logic.
/******/ 		if (!scriptUrl) throw new Error("Automatic publicPath is not supported in this browser");
/******/ 		scriptUrl = scriptUrl.replace(/#.*$/, "").replace(/\?.*$/, "").replace(/\/[^\/]+$/, "/");
/******/ 		__webpack_require__.p = scriptUrl;
/******/ 	}();
/******/ 	
/************************************************************************/
var __webpack_exports__ = {};
// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
!function() {
/*!**********************************************!*\
  !*** ./src/assets/js/quartiers_de_demain.js ***!
  \**********************************************/
/**
 * @file
 * quartiers_de_demain behaviors.
 */
 (function (Drupal) {

  'use strict';

  Drupal.behaviors.quartiers_de_demain = {
    attach: function (context, settings) {
      console.log('It works!');
    }
  };
} (Drupal));





(function($, window) {


//// ancre dans texte au click paragraphe correspondant arrive en dessous du header 

    var adjustAnchor = function() {
        var $anchor = $('.sidebar_first_container'),
                fixedElementHeight = 500;
        if ($anchor.length > 0) {
            $('html, body').stop().animate({scrollTop: $anchor.offset().top - fixedElementHeight }, 0);
        }
    };

    $(window).on('hashchange', function() {
        adjustAnchor();
    });


////////////////////////  start script smooth apparition des textes /////////////////

// div.view-rows-wrapper:nth-child(3) > div:nth-child(2) > article:nth-child(1) > div:nth-child(3)
// 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

  function scrollReaveal(){

    const nodes = {
      logo : document.querySelectorAll('#logo-animated-container'),
      chapeau :  document.querySelectorAll('.field_body:not(article.node-type-partenaire div.field_body)'),
      paragraph: document.querySelectorAll('.field_field_textes .paragraph--type--static-parts'),
      enjeux : document.querySelectorAll('.field_field_textes .paragraph--type--static-parts .enjeux'),
      // mapHome : document.querySelectorAll('.field_field_map_block #block-sitesmapblock'),
      // mapSite : document.querySelectorAll('#sites-map-container'),
      lienDoc : document.querySelectorAll('.field_field_documents'),
      lienURL : document.querySelectorAll('.field_field_liens_site, .field_field_liens'),
      // 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'),
    }

    const showUp = {
        origin: 'bottom',
        delay: 100,
        duration: 1000,
        distance: '50px',
        easing: 'cubic-bezier(0.5, 0, 0, 1)'
    }

    const Show = {
      delay: 100,
      duration: 600,
      easing: 'cubic-bezier(0.5, 0, 0, 1)'
    }

    console.log(nodes);

    ScrollReveal().reveal(nodes.logo, Show);
    ScrollReveal().reveal(nodes.chapeau, showUp);
    ScrollReveal().reveal(nodes.paragraph, showUp);
    ScrollReveal().reveal(nodes.enjeux, showUp);
    // ScrollReveal().reveal(nodes.mapHome, showUp);
    // ScrollReveal().reveal(nodes.mapSite, showUp);
    ScrollReveal().reveal(nodes.lienDoc, showUp);
    ScrollReveal().reveal(nodes.lienURL, showUp);
    // ScrollReveal().reveal(nodes.nodeProjet, showUp);

  }


  $( document ).ready(function() {
    scrollReaveal();
  });

////////////////////////  end script smooth apparition des textes /////////////////




//////////// start slideshow images home  ////////////////////////// 
$(document).ready(function(){
  let diapohome = $('.config_pages--type--diaporama-home .diaporama');

  if (diapohome.length) {
      // Initialisation de Slick
      diapohome.slick({
          slidesToShow: 1,
          dots: false,
          arrows: false,
          // centerMode: true,
          adaptiveHeight: false,
          autoplay: true,  // Activer l'autoplay
          autoplaySpeed: 4000,  // Changement de slide toutes les 4 secondes
          // infinite: true,
          pauseOnHover: false,  // Ne pas arrêter l'autoplay lors du survol
          pauseOnFocus: false,
          responsive: [
              {
                  breakpoint: 810,
                  settings: {
                      slidesToShow: 1,
                      adaptiveHeight: false,
                      arrows: false,
                      draggable: true,
                      centerMode: false,
                  }
              }]
      });

}

////////////  end slideshow images home  ////////////////////////// 


//////////// start slideshow /actualites  ////////////////////////// 

    // Vérifier si on N'EST PAS sur la page #home
    if (!$("#page-node").length) {
        let actuview2 = $('.content-wrapper-actu .field_field_images .actu-diaporama');

        if (actuview2.length > 0) {
            actuview2.slick({
                slidesToShow: 1,
                dots: false,
                arrows: true,
                adaptiveHeight: false,
                autoplay: false,
                responsive: [
                    {
                        breakpoint: 810,
                        settings: {
                            slidesToShow: 1,
                            adaptiveHeight: false,
                            arrows: true,
                            draggable: true,
                            autoplay: false,
                        }
                    }
                ]
            });
            console.log('Slick activé sur les actualités');
            console.log('Slick activé sur 1 actu');
        }
    // } else {
        // console.log('Slick désactivé sur la page Home');
    }
});
////////////  end slideshow /actualites  ////////////////////////// 





//////////////////// start wrapper views-row  lessites /////////////////////////
document.addEventListener("DOMContentLoaded", function() {
// Sélectionne le conteneur principal avec l'ID 'lessites'
const container = document.getElementById("lessites");

// Vérifie si le conteneur existe pour éviter toute erreur sur d'autres pages
if (container) {
  // Sélectionne l'élément 'view' à l'intérieur de '.views-element-container'
  const viewContainer = container.querySelector(".views-element-container .view");

  // Vérifie si 'viewContainer' existe pour éviter les erreurs
  if (viewContainer) {
    // Crée une div englobante pour tous les éléments 'views-row'
    const wrapperDiv = document.createElement("div");
    wrapperDiv.classList.add("views-row-wrapper"); // ajoute une classe pour faciliter le style CSS

    // Déplace tous les éléments 'views-row' dans la nouvelle div
    const viewsRows = viewContainer.querySelectorAll(".views-row");
    viewsRows.forEach(row => wrapperDiv.appendChild(row));

    // Ajoute la div englobante dans le 'viewContainer'
    viewContainer.appendChild(wrapperDiv);
  }
}
});
//////////////////// end wrapper views-row  lessites /////////////////////////


////////////////////  start div infos site  ////////////////////////

if (document.body.classList.contains('node-type-site')) {
const blockRegion = document.querySelector('.block-region-second');
const fieldClasses = [
    '.field_field_region',
    '.field_field_nom_du_qpv_nb_d_hab',
    '.field_field_departement_s',
    '.field_field_programme_de_l_etat',
    '.field_field_porteur_s_de_site',
    '.field_field_nom_de_la_commune_nb_d_hab'
];

// Sélectionne les div parents de chacun des champs listés
const elementsToWrap = [];
fieldClasses.forEach(className => {
    const fieldElement = blockRegion.querySelector(className);
    if (fieldElement) {
        // Ajoute le parent du champ au tableau si trouvé
        elementsToWrap.push(fieldElement.parentElement);
    }
});

if (elementsToWrap.length > 0) {
    const infosContainer = document.createElement('div');
    infosContainer.className = 'infos';

    // Insère le conteneur `.infos` avant le premier élément ciblé
    const firstElement = elementsToWrap[0];
    blockRegion.insertBefore(infosContainer, firstElement);

    // Déplace chaque élément dans le conteneur `.infos`
    elementsToWrap.forEach(element => infosContainer.appendChild(element));
}
}
////////////////////  end div infos site  ////////////////////////


////////////////////  start div infos actualité  ////////////////////////
$(document).ready(function () {
  // Vérifier si .layout-container A l'ID #page-node (et non un élément enfant)
  if ($(".layout-container").attr("id") === "page-node") {
      $("article.node-type-actualite").each(function () {
          let article = $(this);
          let dateField = article.find(".field_field_date");
          let typeField = article.find(".field_field_type_d_actualite");
          let siteField = article.find(".field_field_site");

          

          // Vérifier si les deux éléments existent
          if (dateField.length > 0 || typeField.length > 0) {
              // Vérifier si l'encapsulation n'existe pas déjà
              if (article.find(".infos-actu").length === 0) {
                  // Créer un conteneur et y insérer les éléments
                  let infosActu = $("<div>").addClass("infos-actu").append(dateField, typeField, siteField);
                  
                  // Ajouter ce conteneur après les champs existants
                  article.append(infosActu);
              }
          }
      });
  }
});
////////////////////  end div infos actualité  ////////////////////////

//////////////////////////////////////////////////////////////////
document.addEventListener("DOMContentLoaded", function() {
// Sélectionner les éléments à déplacer
const documentsField = document.querySelector(".field_field_documents");
const liensSiteField = document.querySelector(".field_field_liens_site");

// Sélectionner la destination
const thirdRegion = document.querySelector(".block-region-third > div");

// Créer une nouvelle div pour englober les éléments déplacés
const wrapperDiv = document.createElement("div");
wrapperDiv.classList.add("documents-liens-wrapper");

// Déplacer les éléments dans la nouvelle div
if (documentsField && liensSiteField && thirdRegion) {
    wrapperDiv.appendChild(documentsField);
    wrapperDiv.appendChild(liensSiteField);

    // Ajouter la nouvelle div dans la destination
    thirdRegion.appendChild(wrapperDiv);
}
});
document.addEventListener("DOMContentLoaded", function() {
// Sélectionner les éléments pertinents
const documentsLiensWrapper = document.querySelector(".documents-liens-wrapper");
const blockRegionThird = document.querySelector(".block-region-third");

// Vérifier que les éléments existent avant de les manipuler
if (documentsLiensWrapper && blockRegionThird) {
    // Déplacer .documents-liens-wrapper en dehors du div contenant les boutons prev/next
    blockRegionThird.appendChild(documentsLiensWrapper);
}
});



/////////////////// start langswitcher position responsive//////////////////////
document.addEventListener("DOMContentLoaded", function () {
// Fonction pour déplacer le bloc en fonction de la taille de l'écran
function moveLanguageSwitcher() {
  const languageSwitcher = document.getElementById("block-quartiers-de-demain-selecteurdelangue");
  const navContainer = document.querySelector(".header_nav_container");

  if (window.innerWidth <= 810) { // Si écran téléphone
    if (languageSwitcher && navContainer && !navContainer.contains(languageSwitcher)) {
      navContainer.appendChild(languageSwitcher); // Déplace le bloc dans header_nav_container
    }
  } else { // Si écran non téléphone
    const headerRightContainer = document.querySelector(".header_right_container");
    if (languageSwitcher && headerRightContainer && !headerRightContainer.contains(languageSwitcher)) {
      headerRightContainer.appendChild(languageSwitcher); // Remet le bloc dans sa position initiale
    }
  }
}

// Déclencher au chargement et au redimensionnement
moveLanguageSwitcher();
window.addEventListener("resize", moveLanguageSwitcher);
});
/////////////////// end langswitcher position responsive///////////////////////////////////////////////////////////


$(document).ready(function () {


/////////////////// start voir plus...  actualite dans /actualites & /home ////////////////////

  if ($("#actualites" ).length > 0 || $("#home").length > 0)  {
    $(".node-type-actualite").each(function () {
      let article = $(this);
  
      let body = article.find(".field_body");
      let links = article.find(".field_field_liens");
  
      body.hide();
      links.hide();
  
      let toggleButton = $("<button>")
          .addClass("toggle-actualite")
          .insertAfter(article);
  
      // Fonction de toggle (à utiliser partout)
      function toggleActu() {
          body.slideToggle();
          links.slideToggle();
          toggleButton.toggleClass("open");
      }
  
      // Clic sur le bouton
      toggleButton.on("click", function (e) {
          e.stopPropagation();
          toggleActu();
      });
  
      // Clic sur le node entier sauf liens
      article.on("click", function (e) {
          if ($(e.target).closest("a").length) {
              return;
          }
          toggleActu();
      });
  
      // 👉 Clic aussi sur le H2
      article.find("h2").on("click", function (e) {
          e.stopPropagation();
          toggleActu();
      });
  });
  
    // slimselect
    // duplicated due to embeded view (archives)
    let actu_type_select = new SlimSelect({
      select: '#edit-field-type-d-actualite-target-id--2',
      settings:{
        placeholderText: 'choisir',
        searchPlaceholder: 'choisir'
      }
    })
    let actu_type_select2 = new SlimSelect({
      select: '#edit-field-type-d-actualite-target-id--3',
      settings:{
        placeholderText: 'choisir',
        searchPlaceholder: 'choisir'
      }
    })
    let actu_site_select = new SlimSelect({
      select: '#edit-field-site-target-id-verf--2',
      settings:{
        placeholderText: 'choisir',
        searchPlaceholder: 'choisir'
      }
    })
    let actu_site_select2 = new SlimSelect({
      select: '#edit-field-site-target-id-verf--3',
      settings:{
        placeholderText: 'choisir',
        searchPlaceholder: 'choisir'
      }
    })
  }

///////////////////  end voir plus...  actualite dans /actualites & /home ////////////////////



//////////////start toggle partenaire //////////////////

  $(".node-type-partenaire").each(function () {
    let article = $(this);

    let body = article.find(".field_body");
    let links = article.find(".field_field_lien");

    body.hide();
    links.hide();

    let toggleButton = $("<button>")
      .addClass("toggle-partenaire")
      .appendTo(article);

    toggleButton.on("click", function () {
      body.slideToggle();
      links.slideToggle();
      $(this).toggleClass("open");
    });
  });
});

//////////////start toggle partenaire //////////////////



////////////// start toggle page node projet //////////////////

document.addEventListener('DOMContentLoaded', function () {

  const photo = document.querySelector('.field_field_equipe_photo');
  const pres  = document.querySelector('.field_field_equipe_presentation');
  const isEnglish = window.location.pathname.startsWith('/en/');

  const openText = isEnglish
    ? "LEARN MORE ABOUT THE TEAM"
    : "EN SAVOIR PLUS SUR L'ÉQUIPE";

  const closeText = isEnglish
    ? "CLOSE THE TEAM PRESENTATION"
    : "FERMER LA PRÉSENTATION DE L'ÉQUIPE";

  if (!photo || !pres) return;

  // Forcer l'état FERMÉ au chargement
  photo.classList.remove('is-open');
  pres.classList.remove('is-open');

  // 1. Créer un wrapper autour de photo + présentation
  const panel = document.createElement('div');
  panel.className = 'equipe-panel';

  // Insérer le panel avant la photo, puis y déplacer photo + pres
  photo.parentNode.insertBefore(panel, photo);
  panel.appendChild(photo);
  panel.appendChild(pres);

  // 2. Préparer le panel pour l'animation
  panel.style.overflow = 'hidden';
  panel.style.maxHeight = '0px';

  // 3. Création du bouton
  const btn = document.createElement('button');
  btn.className = 'btn-equipe-toggle';
  btn.textContent = openText;
  // btn.textContent = "EN SAVOIR PLUS SUR L'ÉQUIPE";
  btn.setAttribute('aria-expanded', 'false');

  // Insertion du bouton juste après le panel (et plus après "pres")
  panel.insertAdjacentElement('afterend', btn);

  // Ligne de séparation après le bouton
  const separator = document.createElement('div');
  separator.className = 'equipe-separator';
  btn.insertAdjacentElement('afterend', separator);

  // --- Fonctions ouverture / fermeture ---

  function openPanel() {
    panel.classList.add('is-open');
    photo.classList.add('is-open');
    pres.classList.add('is-open');

    const fullHeight = panel.scrollHeight; // inclut photo + texte
    panel.style.maxHeight = fullHeight + 'px';

    btn.textContent = closeText;
    // btn.textContent = "FERMER LA PRÉSENTATION DE L'ÉQUIPE";
    btn.setAttribute('aria-expanded', 'true');
  }

  function closePanel() {
    const fullHeight = panel.scrollHeight;
    panel.style.maxHeight = fullHeight + 'px';

    requestAnimationFrame(() => {
      panel.style.maxHeight = '0px';
      panel.classList.remove('is-open');
      photo.classList.remove('is-open');
      pres.classList.remove('is-open');
    });

    btn.textContent = openText;
    // btn.textContent = "EN SAVOIR PLUS SUR L'ÉQUIPE";
    btn.setAttribute('aria-expanded', 'false');
  }

  // --- Toggle bouton ---
  btn.addEventListener('click', function () {
    const isOpen = btn.getAttribute('aria-expanded') === 'true';
    if (isOpen) {
      closePanel();
    } else {
      openPanel();
    }
  });

});

//////////////end toggle page node projet //////////////////






})(jQuery, window);



}();
// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
!function() {
/*!******************************************!*\
  !*** ./src/assets/js/animated_formes.js ***!
  \******************************************/
document.addEventListener('scroll', function() {
    const scrolled = window.pageYOffset;
    const background = document.getElementById('background-animated');
    if (background) {
      // Adjust this value to control the speed of the parallax effect
      const parallaxSpeed = 0.5;
      background.style.transform = 'translateY(' + (scrolled * parallaxSpeed) + 'px)';
    }
});




  //ANimation Pilliers 
// const svg = document.querySelector('#paragraph-id--7 .colone-picto');

// // Configuration de l'observateur d'intersection
// const observer = new IntersectionObserver(entries => {
//   entries.forEach(entry => {
//     if (entry.isIntersecting) {
//       // Ajoute une classe lorsque l'élément est visible
//       svg.classList.add('visible');
//     } else {
//       // Optionnel : Retirez la classe si nécessaire
//       svg.classList.remove('visible');
//     }
//   });
// });

// // Observer l'élément SVG
// observer.observe(svg);

//////////////////////////////////////////////////

//ANimation Pilliers 
const svg = document.querySelector('#paragraph-id--7 .colone-picto');

if (svg) {
  // Configuration de l'observateur d'intersection
  const observer = new IntersectionObserver(entries => {
    entries.forEach(entry => {
      if (entry.isIntersecting) {
        // Ajoute une classe lorsque l'élément est visible
        // svg.classList.remove('invisible');
        svg.classList.add('visible');
      } 
      // else {
      //   // Optionnel : Retirez la classe si nécessaire
      //   svg.classList.remove('visible');
  
      // }
    });
  });
  
  // Observer l'élément SVG
  observer.observe(svg);
  
}

}();
// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
!function() {
/*!***********************************!*\
  !*** ./src/assets/js/lightbox.js ***!
  \***********************************/

//////////////// start lightbox galerie image page site////////////////////////
// Sélection des images à ouvrir dans la lightbox
let images = document.querySelectorAll('.paragraph--type--site-diapo .lightbox-trigger, .paragraph--type--projet-diapo .lightbox-trigger, .field_field_images .lightbox-trigger');
let currentIndex;

// Création de la lightbox
const lightbox = document.createElement('div');
lightbox.id = 'lightbox';
lightbox.classList.add('lightbox');
document.body.appendChild(lightbox);

// Image affichée dans la lightbox
const img = document.createElement('img');
img.classList.add('lightbox-content');
lightbox.appendChild(img);

// Légende
const caption = document.createElement('p');
caption.classList.add('caption');
lightbox.appendChild(caption);

// Bouton de fermeture
const closeBtn = document.createElement('span');
closeBtn.classList.add('close');
closeBtn.innerHTML = '&times;';
lightbox.appendChild(closeBtn);

// Bouton précédent avec image
const prevBtn = document.createElement('a');
prevBtn.classList.add('prev');
const prevImg = document.createElement('img');
prevImg.src = "/themes/custom/quartiers_de_demain/dist/assets/img/prev-blanc.svg"; // 🔁 adapte ce chemin
prevImg.alt = 'Précédent';
prevBtn.appendChild(prevImg);
lightbox.appendChild(prevBtn);

// Bouton suivant avec image
const nextBtn = document.createElement('a');
nextBtn.classList.add('next');
const nextImg = document.createElement('img');
nextImg.src = '/themes/custom/quartiers_de_demain/dist/assets/img/next-blanc.svg'; // 🔁 adapte ce chemin
nextImg.alt = 'Suivant';
nextBtn.appendChild(nextImg);
lightbox.appendChild(nextBtn);

// Fonction d'affichage
function showImage(index) {
  if (index < 0) index = images.length - 1;
  if (index >= images.length) index = 0;
  currentIndex = index;

  const currentImg = images[currentIndex];

  // 👉 1. Utiliser l'IMAGE ORIGINALE (href du <a>) si possible
  const parentLink = currentImg.closest('a');
  if (parentLink && parentLink.getAttribute('href')) {
    img.src = parentLink.getAttribute('href');
  } else {
    img.src = currentImg.getAttribute('src');
  }

  // 👉 2. Trouver le conteneur qui porte la légende
  // - Cas 1 : <div><div class="cadre-img-zoom"><img></div><blockquote class="image-field-caption">...</blockquote></div>
  // - Cas 2 : <div class="images"><a><img></a><blockquote class="image-field-caption">...</blockquote></div>
  const wrapper =
    currentImg.closest('.cadre-img-zoom')?.parentElement || // cas 1
    currentImg.closest('.images');                          // cas 2

  let captionText =
    wrapper?.querySelector('.image-field-caption p')?.textContent ||
    currentImg.alt || // fallback si pas de blockquote
    '';

  caption.textContent = captionText;

  lightbox.style.display = 'flex';
}


// Clic sur une image
images.forEach((image, index) => {
  image.addEventListener('click', (e) => {
    e.preventDefault();     // empêche le <a> de s'ouvrir
    e.stopPropagation();    // empêche des comportements externes
    showImage(index);
  });

  // 🔒 Empêche le clic sur le <a> parent d'agir aussi
  const parentLink = image.closest('a');
  if (parentLink) {
    parentLink.addEventListener('click', (e) => {
      e.preventDefault();
      e.stopPropagation();
    });
  }
});


// Navigation & fermeture
closeBtn.addEventListener('click', () => lightbox.style.display = 'none');
prevBtn.addEventListener('click', (e) => {
  e.stopPropagation();
  showImage(currentIndex - 1);
});
nextBtn.addEventListener('click', (e) => {
  e.stopPropagation();
  showImage(currentIndex + 1);
});

// Clic en dehors de l'image pour fermer
lightbox.addEventListener('click', (e) => {
  if (e.target === lightbox) lightbox.style.display = 'none';
});

// Clavier
document.addEventListener('keydown', (e) => {
  if (lightbox.style.display === 'flex') {
    if (e.key === 'Escape') lightbox.style.display = 'none';
    else if (e.key === 'ArrowLeft') showImage(currentIndex - 1);
    else if (e.key === 'ArrowRight') showImage(currentIndex + 1);
  }
});


//////////////// end lightbox galerie image page site////////////////////////
}();
// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
!function() {
/*!*********************************!*\
  !*** ./src/assets/js/header.js ***!
  \*********************************/



// // document.addEventListener('DOMContentLoaded', function() {

// //   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
// //   ------------------- */

// //   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.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 {
// //         slideIn();
// //       }
// //     } else {
// //       if (window.innerWidth < 811) {
// //         slideUp();
// //       } else {
// //         slideIn();
// //       }
// //     }
// //   }

// //   /* -------------------
// //      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();

// // });


// 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 headerNavContainer = document.querySelector('.header_nav_container');

  if (!header || !headerNavContainer) return;

  const threshold = 100;
  let lastScrollTop = 0;
  let isHidden = false; // au chargement : nav visible

  function isMobile() {
    return window.innerWidth < 811;
  }

  /* --- helpers --- */

  function hideNav() {
    headerNavContainer.classList.add('nav-hidden');
    isHidden = true;
  }

  function showNav() {
    headerNavContainer.classList.remove('nav-hidden');
    isHidden = false;
  }

  /* --- init : nav visible au chargement --- */

  headerNavContainer.style.visibility = 'visible';
  showNav();

  /* --- shrink header --- */

  function adjustHeaderHeight() {
    if (window.scrollY > 0) {
      header.classList.add('shrink');
    } else {
      header.classList.remove('shrink');
    }
  }

  /* --- scroll : cache / montre la nav --- */

  function handleScroll() {
    const scrollTop = window.pageYOffset || document.documentElement.scrollTop;

    if (scrollTop > threshold && !isHidden) {
      // on cache la nav (desktop & mobile)
      hideNav();
    } else if (scrollTop <= threshold && isHidden) {
      // on la remonte en haut de page
      showNav();
    }

    lastScrollTop = scrollTop <= 0 ? 0 : scrollTop;
  }

  /* --- hover / touch sur le header : on montre la nav --- */

  function handleEnter() {
    if (isHidden) {
      showNav();
    }
  }

  function handleLeave() {
    if (lastScrollTop > threshold && !isHidden) {
      hideNav();
    }
  }

  window.addEventListener('scroll', handleScroll, { passive: true });
  window.addEventListener('scroll', adjustHeaderHeight, { passive: true });

  header.addEventListener('mouseenter', handleEnter);
  header.addEventListener('mouseleave', handleLeave);

  header.addEventListener('touchstart', handleEnter);
  header.addEventListener('touchend', handleLeave);

  // init
  adjustHeaderHeight();
});

}();
// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
!function() {
/*!***********************************!*\
  !*** ./src/assets/js/timeline.js ***!
  \***********************************/

(function($, window) {
// //////////////////// start Timeline script ///////////////////////

  // Update month field to only show the first 3 letters
  document.querySelectorAll('.paragraph--type--phase-deroulement').forEach(function(paragraph) {
    const monthField = paragraph.querySelector('.field_field_date_de_moi div:nth-of-type(2)');
    if (monthField) {
      const monthText = monthField.textContent.trim();
      if (monthText === "juillet") {
        monthField.textContent = monthText.slice(0, 4);
        monthField.classList.add('after');
      } else if (monthText === "juin") {
        monthField.textContent = monthText.slice(0, 4);
      } else if (monthText.length > 3) {
        monthField.textContent = monthText.slice(0, 3);
        monthField.classList.add('after');
      }
    }
  });

  // Fonction pour ajouter ou retirer la classe .only
  function updateDateClasses() {
    document.querySelectorAll('.paragraph--type--phase-deroulement .date').forEach(function(dateElement) {
      const date2Element = dateElement.querySelector('.date2');
      const yearElement = dateElement.querySelector('.field_field_date_de_annee');

      if (date2Element && !date2Element.textContent.trim()) {
        if (yearElement) {
          yearElement.classList.add('only');
        }
      } else {
        if (yearElement) {
          yearElement.classList.remove('only');
        }
      }
    });
  }

  // Exécuter la fonction une première fois pour le contenu déjà présent
  updateDateClasses();

  // MutationObserver pour surveiller les changements dans le DOM
  const observer = new MutationObserver(function(mutationsList, observer) {
    for(let mutation of mutationsList) {
      if (mutation.type === 'childList') {
        updateDateClasses();
      }
    }
  });


  $(document).ready(function(){
//   ////////////////////// start  calendrier home   /////////////////////////////////

  // // Aller au 9e élément à l'initialisation
  // $('.__timeline-content').on('init', function(event, slick){
  //   slick.slickGoTo(11); // Index 8 = 9e item
  // });

    $('.__timeline-content').slick({
      slidesToShow: 3,
      slidesToScroll: 1,
      dots: false,
      arrows: true,
      centerMode: false,
      draggable: true,
      infinite: false,
      initialSlide: 13,
      responsive: [
        {
          breakpoint: 810,
          settings: {
            slidesToShow: 1,
            adaptiveHeight: false,
            arrows: true,
            draggable: true,
            centerMode: false,
            infinite: false,
            initialSlide: 13,
          }
        }]
    });
    console.log('salut slick calendrier');
  
  });
  
//////////////////////// end   calendrier home   /////////////////////////////////



//////////////////////// end Timeline script /////////////////////////////////////////////
})(jQuery, window);
}();
// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
!function() {
/*!*************************************!*\
  !*** ./src/assets/js/ressources.js ***!
  \*************************************/
/**
 * @file
 * quartiers_de_demain behaviors.
 */
 (function (Drupal) {

    'use strict';
  
    Drupal.behaviors.quartiers_de_demain = {
      attach: function (context, settings) {
        console.log('It works!');
      }
    };
  } (Drupal));
  

  
(function($, window) { 
    $(document).ready(function () {
        /////////////// start class à view-rows-ressources ////////
        $(".view-rows-wrapper").each(function () {
            let h3Container = $(this).prev("h3").find("div[class^='type-']");
            let classToAdd = h3Container.attr("class"); // Récupère la classe complète (ex: "type-Documentation")
      
            if (classToAdd) {
                $(this).addClass(classToAdd); // Ajoute cette classe à .view-rows-wrapper
            }
        });
        ////////////////// end class à view-rows-wrapper ////////////////




        /////////////////// start voir plus...  ressources ////////////////////


        // Vérifier si on est sur la page avec l'ID #ressources
        if ($("#ressources").length > 0) {
        $(".view-rows-wrapper").each(function () {
            let container = $(this); // Cible uniquement cette section
            let items = container.find(".views-row"); // Les éléments à afficher progressivement
            let visibleCount = 4; // Nombre d'éléments visibles au départ (par défaut)

            // Récupérer la classe `type-XXX`
            let typeClass = container.attr("class").split(" ").find(cls => cls.startsWith("type-"));
            let typeName = typeClass ? typeClass.replace("type-", "").replace(/-/g, " ") : "contenu"; // Nettoyer le nom

            // >>> Exception : tout afficher pour type-Galerie-photos (pas de bouton)
            if (typeClass && typeClass.toLowerCase() === "type-mission-photo") {
                items.show(); // aucun masquage
                return;       // on sort : pas de "voir plus"
            }

            // Ajuster le nombre d'éléments visibles en fonction du type
            if (typeClass && (typeClass === "type-podcast" || typeClass.toLowerCase() === "type-vidéo" || typeClass.toLowerCase() === "type-les-webinaires-quartiers-de-demain")) {
                visibleCount = 2; // Pour Podcast et Vidéo
            } else if (typeClass === "type-kit-de-communication") {
                visibleCount = 1; // Pour Kit de Communication
            }

            // Si le nombre total d'éléments est inférieur ou égal à la limite, ne pas ajouter le bouton
            if (items.length <= visibleCount) {
                return; // Sortir de la boucle
            }

            // Ajouter le bouton dynamiquement après chaque `.view-rows-wrapper`
            let button = $("<button>")
                .addClass("voir-plus")
                .text("Voir plus de " + typeName)
                .insertAfter(container);

            // Cacher tous les éléments sauf ceux définis par `visibleCount`
            items.hide().slice(0, visibleCount).show();

            // Action sur le bouton
            button.on("click", function () {
                let hiddenItems = container.find(".views-row:hidden").slice(0, 4); // Prochains éléments à afficher

                if ($(this).text().includes("Voir plus")) {
                    hiddenItems.slideDown(); // Afficher avec un effet de glissement

                    if (container.find(".views-row:hidden").length === 0) {
                        $(this).text("Voir moins de " + typeName); // Changer le texte du bouton si tout est affiché
                    }
                } else {
                    container.find(".views-row").slice(visibleCount).slideUp(); // Replier les éléments
                    $(this).text("Voir plus de " + typeName); // Revenir à l'état initial
                }
            });
        });


        // slimselect
        let ressource_type_select = new SlimSelect({
        select: '#edit-field-type-de-ressource-target-id--2',
        settings:{
            placeholderText: 'choisir',
            searchPlaceholder: 'choisir'
        }
        })
        let ressource_motscles_select = new SlimSelect({
        select: '#edit-field-mots-clefs-target-id--2',
        settings:{
            placeholderText: 'choisir',
            searchPlaceholder: 'choisir'
        }
        })
        let ressource_sites_select = new SlimSelect({
        select: '#edit-field-site-target-id-verf--2',
        settings:{
            placeholderText: 'choisir',
            searchPlaceholder: 'choisir'
        }
        })
        // console.log(('sites_select'), sites_select);

        }

        ///////////////////  end voir plus...  ressources ////////////////////

        ///////////////////////// start ressource img clicable mission photo //////////////////////
        $('.view-rows-wrapper.type-Mission-photo .views-row').each(function () {
            var $row = $(this);

            // Lien cible : d'abord le titre, sinon "Voir la gallerie photo"
            var $link = $row.find('.views-field-views-conditional-field-1 a, .views-field-views-conditional-field a').first();

            // L'image
            var $img = $row.find('.views-field-field-images img').first();

            if ($link.length && $img.length && !$img.data('missionPhotoBound')) {
            console.log('→ Bind click sur image pour', $link.attr('href'));

            $img.css('cursor', 'pointer');
            $img.on('click', function () {
                window.location.href = $link.attr('href');
            });

            // éviter de binder plusieurs fois (si AJAX / re-init)
            $img.data('missionPhotoBound', true);
            }
        });
        ///////////////////////// end ressource img clicable mission photo //////////////////////

    });



  

})(jQuery, window);  
}();
// This entry need to be wrapped in an IIFE because it need to be in strict mode.
!function() {
"use strict";
/*!**************************************************!*\
  !*** ./src/assets/scss/quartiers_de_demain.scss ***!
  \**************************************************/
__webpack_require__.r(__webpack_exports__);
/* harmony default export */ __webpack_exports__["default"] = (__webpack_require__.p + "./css/bundle.css");
}();
/******/ })()
;
//# sourceMappingURL=bundle.js.map