1(function ($, root, undefined) { 2 $(function () { 3 "use strict"; 4 5 var $ = jQuery; 6 7 /* 8 |------------------------------------------------------ 9 | Framework: Listener for Drawer 10 |------------------------------------------------------ 11 */ 12 13 if ($(".js-td-drawer").length > 0) { 14 var drawer = document.getElementsByClassName("js-td-drawer")[0]; 15 drawer.addEventListener("drawerIsOpen", function (event) { 16 // drawer is open 17 $("body").addClass("overflow-hidden"); 18 }); 19 drawer.addEventListener("drawerIsClose", function (event) { 20 // drawer is closed 21 $("body").removeClass("overflow-hidden"); 22 $(".anim-menu-btn").removeClass("anim-menu-btn--state-b"); 23 }); 24 } 25 26 /* 27 |------------------------------------------------------ 28 | Framework: Listener for Modals 29 |------------------------------------------------------ 30 */ 31 32 if ($(".js-modal").length > 0) { 33 var modal = document.getElementsByClassName("js-modal")[0]; 34 modal.addEventListener("modalIsOpen", function (event) { 35 // modal is open 36 $("body").addClass("overflow-hidden"); 37 }); 38 modal.addEventListener("modalIsClose", function (event) { 39 // modal is closed 40 $("body").removeClass("overflow-hidden"); 41 }); 42 } 43 44 /* 45 |------------------------------------------------------ 46 | Custom: Sticky Header on Scroll 47 |------------------------------------------------------ 48 */ 49 50 if ($(".header-sticky")[0]) { 51 // Helper function: 52 var supportsES6 = (function () { 53 try { 54 new Function("(a = 0) => a"); 55 return true; 56 } catch (err) { 57 return false; 58 } 59 })(); 60 61 var StickyHeader = (function (window, document) { 62 // version 3.0 - MJF @ websemantics.uk 2017 63 64 "use strict"; 65 if (!supportsES6) { 66 return false; 67 } 68 69 const stickyClass = "header-sticky"; 70 const header = document.querySelector("." + stickyClass); 71 const hiddenClass = stickyClass + "-hidden"; 72 73 // The amount of downward movement before header is hidden 74 const downTolerance = 30; 75 let hasScrolled = false; 76 let lastScrollTop = 200; 77 78 var _redraw = function () { 79 // This is costly to performance but unavoidable 80 const pageY = window.scrollY; 81 82 // Put it away 83 if (pageY > lastScrollTop + downTolerance) { 84 header.classList.add(hiddenClass); 85 } 86 87 // Pull em down 88 if (pageY < lastScrollTop || pageY <= 0) { 89 header.classList.remove(hiddenClass); 90 } 91 92 lastScrollTop = pageY; 93 hasScrolled = false; 94 }; 95 96 // Important: keep this function as performant as possible! 97 var _onScroll = function () { 98 if (!hasScrolled) { 99 window.requestAnimationFrame(_redraw); 100 } 101 hasScrolled = true; 102 window.requestAnimationFrame(_onScroll); 103 }; 104 105 _onScroll(); 106 })(window, document); 107 108 /* 109 jQuery(window).on('scroll',function () { 110 // 50 = height of topbar, without topbar use 1 111 if ($(this).scrollTop() > 50){ 112 $('.header-sticky').addClass("sticky"); 113 } 114 else{ 115 $('.header-sticky').removeClass("sticky"); 116 } 117 }); 118 */ 119 120 var div_top = $(".header-sticky").offset().top; 121 jQuery(window).on("scroll", function () { 122 var window_top = $(window).scrollTop() - 0; 123 if (window_top > div_top) { 124 $(".header-sticky").addClass("sticky"); 125 } else { 126 $(".header-sticky").removeClass("sticky"); 127 } 128 }); 129 } else { 130 } 131 132 /* 133 |------------------------------------------------------ 134 | Swiper: Hero Slider 135 |------------------------------------------------------ 136 */ 137 138 jQuery(document).ready(function () { 139 //initialize swiper when document ready 140 var mySwiper = new Swiper("#hero-slider .swiper-container", { 141 fadeEffect: { 142 crossFade: true, 143 }, 144 effect: "fade", 145 // Optional parameters 146 speed: 1000, 147 allowTouchMove: false, 148 spaceBetween: 0, 149 loop: true, 150 autoplay: { 151 delay: 4000, 152 }, 153 pagination: { 154 el: "#hero-slider .swiper-pagination", 155 clickable: true, 156 }, 157 navigation: { 158 nextEl: "#hero-slider .swiper-button-next", 159 prevEl: "#hero-slider .swiper-button-prev", 160 }, 161 }); 162 }); 163 164 /* 165 |------------------------------------------------------ 166 | JS: Medewerker Slider 167 |------------------------------------------------------ 168 */ 169
170 $("#medewerker_slider .swiper-container").each(function (index, element) { 171 var $this = $(this); 172 $this.addClass("instance-" + index); 173 $this.find(".swiper-button-prev").addClass("btn-prev-" + index); 174 $this.find(".swiper-button-next").addClass("btn-next-" + index); 175 var swiper = new Swiper(".instance-" + index, { 176 slidesPerView: 4, 177 spaceBetween: 30, 178 breakpoints: { 179 1024: { 180 slidesPerView: 4, 181 spaceBetween: 30, 182 }, 183 768: { 184 slidesPerView: 3, 185 spaceBetween: 20, 186 }, 187 640: { 188 slidesPerView: 2, 189 spaceBetween: 20, 190 }, 191 320: { 192 slidesPerView: 1.3, 193 spaceBetween: 20, 194 }, 195 }, 196 //centeredSlides: true, 197 //loop: true, 198 grabCursor: true, 199 pagination: { 200 el: "#medewerker_slider .swiper-pagination", 201 type: "custom", 202 renderCustom: function (swiper, current, total) { 203 //return current + ' & ' + (current + 1) + ' of ' + swiper.slides.length; 204 //return current + ' - ' + (current + swiper.params.slidesPerView) + ' of ' + swiper.slides.length; 205 //return (current + 1) + ' / ' + swiper.slides.length; 206 return current + " / " + swiper.slides.length; 207 }, 208 }, 209 navigation: { 210 nextEl: "#medewerker_slider .btn-next-" + index, 211 prevEl: "#medewerker_slider .btn-prev-" + index, 212 }, 213 //slideToClickedSlide: true, 214 }); 215 }); 216 217 // Add disable classes if < 4 slide 218 if ($("#medewerker_slider .swiper-slide").length == 3) { 219 $("#medewerker_slider .swiper-wrapper").addClass("disabled"); 220 $("#medewerker_slider .swiper-button-prev").addClass("is-hidden"); 221 $("#medewerker_slider .swiper-button-next").addClass("is-hidden"); 222 $("#medewerker_slider .swiper-pagination").addClass("is-hidden"); 223 } 224 225 /* 226 |------------------------------------------------------ 227 | Custom: logo_slider 228 |------------------------------------------------------ 229 */ 230 231 jQuery(document).ready(function () { 232 //initialize swiper when document ready 233 var mySwiper = new Swiper(".logo_slider .swiper-container", { 234 observer: true, 235 observeParents: true, 236 observeSlideChildren: true, 237 slidesPerView: 5, 238 watchSlidesVisibility: true, 239 slideToClickedSlide: true, 240 spaceBetween: 32, 241 breakpoints: { 242 1024: { 243 slidesPerView: 5, 244 }, 245 768: { 246 slidesPerView: 3, 247 }, 248 640: { 249 slidesPerView: 3, 250 }, 251 320: { 252 slidesPerView: 3, 253 }, 254 }, 255 loop: true, 256 autoplay: { 257 delay: 4000, 258 disableOnInteraction: false, 259 }, 260 grabCursor: true, 261 pagination: { 262 el: ".logo_slider .swiper-pagination", 263 clickable: true, 264 }, 265 navigation: { 266 prevEl: ".logo_slider .swiper-button-prev", 267 nextEl: ".logo_slider .swiper-button-next", 268 }, 269 }); 270 }); 271 272 /* 273 |------------------------------------------------------ 274 | Custom: hero_slider 275 |------------------------------------------------------ 276 */ 277 278 jQuery(document).ready(function () { 279 //initialize swiper when document ready 280 var mySwiper = new Swiper(".hero-slider .swiper-container", { 281 observer: true, 282 observeParents: true, 283 observeSlideChildren: true, 284 slidesPerView: 1, 285 spaceBetween: 0, 286 createElements: true, 287 watchSlidesVisibility: true, 288 autoplay: { 289 delay: 4000, 290 }, 291 breakpoints: { 292 1024: { 293 slidesPerView: 1, 294 }, 295 768: { 296 slidesPerView: 1, 297 }, 298 640: { 299 slidesPerView: 1, 300 }, 301 320: { 302 slidesPerView: 1, 303 }, 304 }, 305 navigation: { 306 prevEl: ".hero-slider .swiper-button-prev", 307 nextEl: ".hero-slider .swiper-button-next" 308 }, 309 }); 310 }); 311 312 /* 313 |------------------------------------------------------ 314 | Video: Hero Video with Plyr 315 |------------------------------------------------------ 316 */ 317 318 // https://github.com/sampotts/plyr/#options 319 const herovideo = new Plyr(".hero__video", { 320 autoplay: 1, 321 controls: 0, 322 muted: true, 323 volume: 1, 324 loop: { active: true }, 325 clickToPlay: false, 326 }); 327 328 // Expose player so it can be used from the console 329 window.player = herovideo; 330 331 /* 332 |------------------------------------------------------ 333 | Meganav: Sliding submenus 334 |------------------------------------------------------ 335 */ 336 337 $("document").ready(function () { 338 $(".widget_sliding_menu_widget > div").slider(); 339 }); 340 341 /* 342 |------------------------------------------------------ 343 | Custom: Remove class 'preload' after Page Load 344 |------------------------------------------------------ 345 */ 346 347 jQuery(document).ready(function () { 348 $("body").removeClass("preload"); 349 }); 350 351 /* 352 |------------------------------------------------------ 353 | Custom: Events filters 354 |------------------------------------------------------ 355 */ 356 357 const filterItems = document.querySelectorAll(".filters__item");
358 const filterCheckboxes = document.querySelectorAll( 359 ".filters__item-checkbox" 360 ); 361 362 if (filterItems) { 363 filterItems.forEach((item) => { 364 const trigger = item.querySelector(".filters__item-title"); 365 const dropdown = item.querySelector(".filters__item-content"); 366 const dropdownInner = item.querySelector( 367 ".filters__item-content-inner" 368 ); 369 const activeFilter = "filters__item--active"; 370 371 const handleClick = () => { 372 item.classList.remove(activeFilter); 373 }; 374 375 // If clicked outside the label, close menu 376 document.addEventListener("click", (event) => { 377 const isClickInside = item.contains(event.target); 378 if (!isClickInside) { 379 handleClick(); 380 } 381 }); 382 trigger.addEventListener("click", () => { 383 const dropdownHeight = dropdownInner.clientHeight; 384 item.classList.toggle(activeFilter); 385 386 if (window.innerWidth <= 767) { 387 if (item.classList.contains(activeFilter)) { 388 dropdown.style.setProperty("max-height", `${dropdownHeight}px`); 389 390 setTimeout(() => { 391 dropdown.style.setProperty("max-height", "none"); 392 dropdown.style.setProperty("height", "100%"); 393 }, 200); 394 } else { 395 dropdown.style.setProperty("max-height", `${dropdownHeight}px`); 396 dropdown.style.removeProperty("height"); 397 398 setTimeout(() => { 399 dropdown.style.setProperty("max-height", "0px"); 400 }, 1); 401 } 402 } 403 }); 404 }); 405 406 filterCheckboxes.forEach((item) => { 407 item.addEventListener("change", (e) => { 408 const element = e.srcElement; 409 const elementData = element.dataset.id; 410 const parent = document.querySelector(`[data-id="${elementData}"]`); 411 412 const sameInputs = parent.parentElement.getElementsByClassName( 413 "filters__item-checkbox" 414 );
415 let checked = false; 416 [...sameInputs].forEach((sameInput) => { 417 if (sameInput.checked) { 418 checked = true; 419 } 420 }); 421 parent.classList.toggle("filters__item-title--active", checked); 422 }); 423 }); 424 } 425 426 /* 427 |------------------------------------------------------ 428 | Custom: Team filters 429 |------------------------------------------------------ 430 */ 431 432 const teamFilterItems = document.querySelectorAll(".team-filters__item"); 433 const teamFlterCheckboxes = document.querySelectorAll( 434 ".team-filters__item-checkbox" 435 ); 436 437 if (teamFilterItems) { 438 teamFilterItems.forEach((item) => { 439 const trigger = item.querySelector(".team-filters__item-title"); 440 const dropdown = item.querySelector(".team-filters__item-content"); 441 const dropdownInner = item.querySelector( 442 ".team-filters__item-content-inner" 443 ); 444 const activeTeamFilter = "team-filters__item--active"; 445 446 const handleClick = () => { 447 item.classList.remove(activeTeamFilter); 448 }; 449 450 // If clicked outside the label, close menu 451 document.addEventListener("click", (event) => { 452 const isClickInside = item.contains(event.target); 453 if (!isClickInside) { 454 handleClick(); 455 } 456 }); 457 trigger.addEventListener("click", () => { 458 const dropdownHeight = dropdownInner.clientHeight; 459 item.classList.toggle(activeTeamFilter); 460 461 if (window.innerWidth <= 767) { 462 if (item.classList.contains(activeTeamFilter)) { 463 dropdown.style.setProperty("max-height", `${dropdownHeight}px`); 464 465 setTimeout(() => { 466 dropdown.style.setProperty("max-height", "none"); 467 dropdown.style.setProperty("height", "100%"); 468 }, 200); 469 } else { 470 dropdown.style.setProperty("max-height", `${dropdownHeight}px`); 471 dropdown.style.removeProperty("height"); 472 473 setTimeout(() => { 474 dropdown.style.setProperty("max-height", "0px"); 475 }, 1); 476 } 477 } 478 }); 479 }); 480 481 teamFlterCheckboxes.forEach((item) => { 482 item.addEventListener("change", (e) => { 483 const element = e.srcElement; 484 const elementData = element.dataset.id; 485 const parent = document.querySelector(`[data-id="${elementData}"]`); 486 487 const sameInputs = parent.parentElement.getElementsByClassName( 488 "team-filters__item-checkbox" 489 );
490 let checked = false; 491 [...sameInputs].forEach((sameInput) => { 492 if (sameInput.checked) { 493 checked = true; 494 } 495 }); 496 parent.classList.toggle("team-filters__item-title--active", checked); 497 }); 498 }); 499 } 500 501 502 const buttons = document.getElementsByClassName('upload'); 503 504 if (buttons.length) { 505 [...buttons].forEach((button) => { 506 const input = button.querySelector('input.upload__select'); 507 const label = button.querySelector('.upload__result'); 508 const originalText = label.innerText; 509 510 input.addEventListener('change', () => { 511 const filename = input?.files[0].name; 512 label.innerText = filename || originalText; 513 }); 514 }); 515 } 516 517 518 519 /* 520 |------------------------------------------------------ 521 | Custom: Add aria label to custom footer widget iframe (not accessable) 522 |------------------------------------------------------ 523 */ 524 525 const iframes = document.querySelectorAll(".main-footer #iframe_widget-2"); 526 527 [...iframes].forEach((iframe) => { 528 iframe.setAttribute("title", "Newsletter form"); 529 }); 530 }); 531})(jQuery, this);
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.