1/** 2 * @file 3 * Attaches behaviors for lfk. 4 */ 5(function ($, Drupal, drupalSettings) { 6 "use strict"; 7 8 Drupal.behaviors.lfk_bootstrap = { 9 attach: function (context, settings) { 10 const breakSM = 576, 11 breakMD = 768, 12 breakLG = 992; 13 14 $('.windows-print', context).once('print-action').on('click', function () { 15 window.print(); 16 }); 17 18 $("main", context) 19 .once("lfk") 20 .each(function () { 21 // offcanvas bar 22 var offcanvas = document.getElementById("offcanvas"); 23 offcanvas.addEventListener("hide.bs.offcanvas", function () { 24 document.querySelector("body").classList.toggle("offcanvas-open"); 25 }); 26 offcanvas.addEventListener("show.bs.offcanvas", function () { 27 document.querySelector("body").classList.toggle("offcanvas-open"); 28 }); 29 // offcanvas menu 30 var regionOffcanvas = document.querySelector("#region-offcanvas"); 31 document.addEventListener("click", function (event) { 32 // if (event.target.matches('.nav-link-parent')) { 33 if ( 34 event.target.matches(".nav-link-open-sub") || 35 event.target.parentNode.matches(".nav-link-open-sub") 36 ) { 37 var button = event.target.matches(".nav-link-open-sub") 38 ? event.target 39 : event.target.parentNode; 40 event.preventDefault(); 41 document 42 .querySelectorAll(".nav-sub") 43 .forEach((element) => element.classList.add("d-none")); 44 // event.target.nextElementSibling.classList.remove('d-none'); 45 button.parentNode.nextElementSibling.classList.remove("d-none"); 46 regionOffcanvas.classList.remove("nav-sub-open"); 47 regionOffcanvas.classList.add("nav-sub-open"); 48 } 49 if ( 50 event.target.matches(".menu-back") || 51 event.target.parentNode.matches(".menu-back") 52 ) { 53 event.preventDefault(); 54 regionOffcanvas.classList.remove("nav-sub-open"); 55 } 56 return; 57 }); 58 offcanvas.addEventListener("hidden.bs.offcanvas", function () { 59 if (regionOffcanvas.classList.contains("nav-sub-open")) { 60 regionOffcanvas.classList.remove("nav-sub-open"); 61 } 62 }); 63 64 // scrollTo 65 var scrollToBtns = document.querySelectorAll(".scroll-to"); 66 scrollToBtns.forEach(function (btn, index) { 67 btn.addEventListener("click", function () { 68 let target = btn.getAttribute("data-target-id"); 69 window.scroll({ 70 top: document.getElementById(target).offsetTop, 71 left: 0, 72 behavior: "smooth", 73 }); 74 }); 75 }); 76 // scrollToTop 77 const scrollTopBtn = document.querySelector(".scroll-top"); 78 scrollTopBtn.addEventListener("click", () => { 79 window.scroll({ top: 0, left: 0, behavior: "smooth" }); 80 }); 81 82 // accordion open all 83 $(".accordion-show-all").on("click", function () { 84 var accordionTarget = $(this).attr("data-accordion-target"); 85 $(accordionTarget).find(".accordion-collapse").collapse("show"); 86 }); 87 $(".accordion-hide-all").on("click", function () { 88 var accordionTarget = $(this).attr("data-accordion-target"); 89 $(accordionTarget).find(".accordion-collapse").collapse("hide"); 90 }); 91 92 // TwentyTwenty before/after img 93 if ($(".before-after").length > 0) { 94 if (typeof $(".before-after").twentytwenty === "function") { 95 $(".before-after").twentytwenty({ 96 before_label: "Avant", 97 after_label: "Après", 98 }); 99 } else { 100 console.log( 101 "Ajouter le nid dans preprocess pour lier la librairie TwentyTwenty au noeud" 102 ); 103 } 104 } 105 106 // gallery inside accordion 107 var slicksInAccordions = document.querySelectorAll( 108 ".accordion-item .slick-gallery" 109 ); 110 if (slicksInAccordions.length > 0) { 111 $(".accordion-button").click(function () { 112 $(this) 113 .parent() 114 .siblings(".accordion-collapse") 115 .find(".slick-gallery") 116 .slick("refresh"); 117 }); 118 } 119 }); 120 121 // admin offcanvas 122 function adminOffcanvas() { 123 var body = document.querySelector("body"); 124 if (body.classList.contains("toolbar-horizontal")) { 125 var bodyStyle = body.currentStyle || window.getComputedStyle(body); 126 $(".navbar-toggler").click(function () { 127 var paddingTop = parseInt(bodyStyle.paddingTop); 128 document.getElementById("offcanvas").style.paddingTop = 129 paddingTop + "px"; 130 }); 131 } 132 } 133 134 // gallery 135 function gallery() { 136 if ($(".slick-gallery").length > 0) { 137 $(".slick-gallery").not(".slick-initialized").slick({ 138 arrows: true, 139 slidesToShow: 1, 140 slidesToScroll: 1, 141 infinite: true, 142 autoplay: true, 143 autoplaySpeed: 3000, 144 dots: true, 145 fade: false, 146 }); 147 } 148 } 149 150 // communes 151 function communesSlider() { 152 if ($(".view-communes > div > .views-rows").length > 0) { 153 var mapSlider = $(".view-communes > div > .views-rows"); 154 155 mapSlider.on("init", function (event, slick) { 156 $('.city-name[data-index="1"]').addClass("active"); 157 $('.city-marker[data-index="1"]').addClass("active"); 158 }); 159 160 mapSlider.not(".slick-initialized").slick({ 161 arrows: true, 162 slidesToShow: 1, 163 slidesToScroll: 1, 164 infinite: true, 165 // autoplay: true, 166 autoplaySpeed: 3000, 167 dots: true, 168 fade: false, 169 responsive: [ 170 { 171 breakpoint: 768, 172 settings: { 173 dots: false, 174 }, 175 }, 176 ], 177 }); 178 179 // hover markers + city-name 180 $(".city-name, .city-marker").hover( 181 function () { 182 var tid = $(this).attr("data-tid"); 183 $(".tid-" + tid).addClass("hover"); 184 }, 185 function () { 186 var tid = $(this).attr("data-tid"); 187 $(".tid-" + tid).removeClass("hover"); 188 } 189 ); 190 // click map + slick 191 $(".city-name, .city-marker").click(function (e) { 192 var tid = $(this).attr("data-tid"); 193 $(".city-name, .city-marker").removeClass("active"); 194 $(".tid-" + tid).addClass("active"); 195 196 e.preventDefault(); 197 var slideIndex = $(this).attr("data-index"); 198 mapSlider.slick("slickGoTo", parseInt(slideIndex - 1)); 199 }); 200 201 mapSlider.on( 202 "beforeChange", 203 function (event, slick, currentSlide, nextSlide) { 204 $(".city-name, .city-marker").removeClass("active"); 205 } 206 ); 207 208 mapSlider.on("afterChange", function (event, slick, currentSlide) { 209 $(".city-name[data-index=" + (currentSlide + 1) + "]").addClass( 210 "active" 211 ); 212 $(".city-marker[data-index=" + (currentSlide + 1) + "]").addClass( 213 "active" 214 ); 215 }); 216 } 217 } 218 219 function fileUploadHelpCollapse() { 220 var helpElements = document.querySelectorAll("#help-file");
221 helpElements.forEach(function (helpElement, index) { 222 let newID = helpElement.id + "-" + index; 223 helpElement.previousElementSibling.setAttribute("href", "#" + newID); 224 helpElement.id = newID; 225 }); 226 } 227 228 function initSlickSliders() { 229 if ($(".slick-init").not(".slick-initialized").length) { 230 $(".slick-init") 231 .not(".slick-initialized") 232 .each(function () { 233 var slideNum = 1; 234 235 for (let index = 1; index <= 6; index++) { 236 if ($(this).hasClass("slick-init-" + index)) { 237 slideNum = index; 238 } 239 } 240 $(this).slick({ 241 arrows: $(this).hasClass("slick-init-arrows"), 242 slidesToShow: slideNum, 243 slidesToScroll: 1, 244 infinite: $(this).hasClass("slick-init-infinite"), 245 autoplay: $(this).hasClass("slick-autoplay"), 246 autoplaySpeed: 3000, 247 dots: $(this).hasClass("slick-init-dots"), 248 fade: $(this).hasClass("slick-init-fade"), 249 responsive: [ 250 { 251 breakpoint: breakLG, 252 settings: { 253 slidesToShow: slideNum > 1 ? slideNum - 1 : 1, 254 }, 255 }, 256 { 257 breakpoint: breakMD, 258 settings: { 259 slidesToShow: slideNum > 1 ? 2 : 1, 260 }, 261 }, 262 { 263 breakpoint: breakSM, 264 settings: { 265 slidesToShow: 1, 266 }, 267 }, 268 ], 269 }); 270 window.dispatchEvent(new Event("resize")); 271 }); 272 } 273 } 274 window.onload = gallery(); 275 window.onload = communesSlider(); 276 window.onload = adminOffcanvas(); 277 window.onload = fileUploadHelpCollapse(); 278 window.onload = initSlickSliders(); 279 280 // Behavior to toggle visibility based on file input 281 $('#edit-depots-fichiers-upload', context).once('file-input-check').on('change', function () { 282 // Check if the file input has any files selected 283 var hasFile = this.files && this.files.length > 0; // More robust check for file presence 284 // Log the file presence state 285 console.log('File present:', hasFile); 286 287 // Toggle display based on file presence 288 $('.consultation-submit, .consultation-checkbox', context).css('display', hasFile ? 'block' : 'none'); 289 // Log the visibility change for elements 290 console.log('Elements consultation-submit and consultation-checkbox are now', hasFile ? 'visible' : 'hidden'); 291 }); 292 293 }, // This comma closes the attach function 294 }; 295})(jQuery, Drupal, drupalSettings);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.