1/******/ (() => { // webpackBootstrap 2/******/ var __webpack_modules__ = ({ 3 4/***/ 8611: 5/***/ ((module) => { 6 7module.exports = (function imxQuery() { 8 9 /** 10 * get the total top offset of an object to the window object, not only to the next positioned object 11 * @param {object} targetNode 12 * @returns {Number} 13 */ 14 var offsetTop = function(targetNode) { 15 var stopElement = document.querySelector('body'); 16 var offsetTopValue = targetNode.getBoundingClientRect().top - stopElement.getBoundingClientRect().top; 17 18 return offsetTopValue; 19 }; 20 21 /** 22 * get the total left offset of an object to the window object, not only to the next positioned object 23 * @param {object} targetNode 24 * @returns {Number} 25 */ 26 var offsetLeft = function(targetNode) { 27 var stopElement = document.querySelector('body'); 28 var offsetLeftValue = targetNode.getBoundingClientRect().left - stopElement.getBoundingClientRect().left; 29 30 return offsetLeftValue; 31 }; 32 33 34 /** 35 * animated scrolling to a specific position 36 * @param {int} positionX 37 * @param {int} positionY 38 * @param {int} duration 39 * @returns null 40 */ 41 var scrollTo = function(positionX, positionY, duration) { 42 var _getCurrentScrollPositions = function() { 43 return { 44 x: window.pageXOffset, 45 y: window.pageYOffset 46 }; 47 }; 48 49 var _isTargetPositionReached = function() { 50 var currentScrollPosition = _getCurrentScrollPositions(); 51 var flags = { 52 x: false, 53 y: false 54 }; 55 56 if(scrollSteps.x < 0) { 57 if(currentScrollPosition.x + scrollSteps.x <= positionX) { 58 flags.x = true; 59 } 60 }else { 61 if(currentScrollPosition.x + scrollSteps.x >= positionX) { 62 flags.x = true; 63 } 64 } 65 66 if(scrollSteps.y < 0) { 67 if(currentScrollPosition.y + scrollSteps.y <= positionY) { 68 flags.y = true; 69 } 70 }else { 71 if(currentScrollPosition.y + scrollSteps.y >= positionY) { 72 flags.y = true; 73 } 74 } 75 76 if(flags.x && flags.y) { 77 return true; 78 }else { 79 return false; 80 } 81 }; 82 83 var intervalGap = 15; 84 var currentScrollPosition = _getCurrentScrollPositions(); 85 86 var scrollSteps = { 87 x: (positionX - currentScrollPosition.x) / (duration / intervalGap), 88 y: (positionY - currentScrollPosition.y) / (duration / intervalGap) 89 }; 90 91 var scrollInterval = setInterval(function() { 92 93 if(_isTargetPositionReached()) { 94 clearInterval(scrollInterval); 95 window.scrollTo(positionX, positionY); 96 }else { 97 window.scrollBy(scrollSteps.x, scrollSteps.y); 98 } 99 }, intervalGap); 100 }; 101 102 /** 103 * animated scrolling inside an element 104 * @param {int} positionX 105 * @param {int} positionY 106 * @param {int} duration 107 * @param {HTMLElement} target 108 * @returns null 109 */ 110 var scrollElementTo = function(positionX, positionY, duration, target) { 111 var _getCurrentScrollPositions = function() { 112 return { 113 x: target.scrollLeft, 114 y: target.scrollTop 115 }; 116 }; 117 118 var _isTargetPositionReached = function() { 119 var currentScrollPosition = _getCurrentScrollPositions(); 120 var flags = { 121 x: false, 122 y: false 123 }; 124 125 if(scrollSteps.x < 0) { 126 if(currentScrollPosition.x + scrollSteps.x <= positionX) { 127 flags.x = true; 128 } 129 }else { 130 if(currentScrollPosition.x + scrollSteps.x >= positionX) { 131 flags.x = true; 132 } 133 } 134 135 if(scrollSteps.y < 0) { 136 if(currentScrollPosition.y + scrollSteps.y <= positionY) { 137 flags.y = true; 138 } 139 }else { 140 if(currentScrollPosition.y + scrollSteps.y >= positionY) { 141 flags.y = true; 142 } 143 } 144 145 if(flags.x && flags.y) { 146 return true; 147 }else { 148 return false; 149 } 150 }; 151 152 var intervalGap = 15; 153 var currentScrollPosition = _getCurrentScrollPositions(); 154 155 var scrollSteps = { 156 x: (positionX - currentScrollPosition.x) / (duration / intervalGap), 157 y: (positionY - currentScrollPosition.y) / (duration / intervalGap) 158 }; 159 160 var scrollInterval = setInterval(function() { 161 162 if(_isTargetPositionReached()) { 163 clearInterval(scrollInterval); 164 165 target.scrollLeft = positionX; 166 target.scrollTop += positionY; 167 }else { 168 target.scrollLeft += scrollSteps.x; 169 target.scrollTop += scrollSteps.y; 170 } 171 }, intervalGap); 172 }; 173 174 /**
175 * wrapper to access html5 data set (use this for ie10 compatibility) 176 * @param {htlmnode} object 177 * @param {string} value 178 * @returns {mixed} 179 */ 180 var accessDataset = function(object, value) { 181 if(object.dataset) { 182 return object.dataset[value]; 183 }else { 184 return object.getAttribute('data-' + value); 185 } 186 }; 187 188 /** 189 * extend an object with another object, adding missing fields, overwriting existing fields 190 * @param {object} objectForExtension 191 * @param {object} extensionObject 192 * @returns {object} 193 */ 194 var extendObject = function(objectForExtension, extensionObject) { 195 for(var property in extensionObject) { 196 if(!objectForExtension.hasOwnProperty(property)) { 197 objectForExtension[property] = extensionObject[property]; 198 } 199 } 200 return objectForExtension; 201 }; 202 203 var documentReady = function(callback) { 204 205 let checkLess = false; 206 if(typeof (less) !== 'undefined') { 207 if(typeof (less.pageLoadFinished) === 'object') { 208 checkLess = true; 209 } 210 } 211 212 var lessComplete = function() { 213 if(checkLess) { 214 less.pageLoadFinished.then(() => { 215 setTimeout(callback); 216 }); 217 }else { 218 setTimeout(callback); 219 } 220 }; 221 222 var loadComplete = function() { 223 document.removeEventListener('DOMContentLoaded', loadComplete); 224 window.removeEventListener('load', loadComplete); 225 226 lessComplete(); 227 }; 228 229 if(document.readyState === 'complete') { 230 lessComplete(); 231 }else { 232 document.addEventListener('DOMContentLoaded', loadComplete); 233 window.addEventListener('load', loadComplete); 234 } 235 }; 236 237 return { 238 offsetTop: offsetTop, 239 offsetLeft: offsetLeft, 240 scrollTo: scrollTo, 241 scrollElementTo: scrollElementTo, 242 accessDataset: accessDataset, 243 extendObject: extendObject, 244 documentReady: documentReady 245 }; 246})(); 247 248 249/***/ }), 250 251/***/ 8507: 252/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 253 254"use strict"; 255/* harmony export */ __webpack_require__.d(__webpack_exports__, { 256/* harmony export */ h: () => (/* binding */ MainNavHelper) 257/* harmony export */ }); 258class MainNavHelper { 259 constructor(rootNode) { 260 this.rootNode = rootNode; 261 this._init(); 262 } 263 _init() { 264 this.lvl1ClassName = 'mainNav__lvl1'; 265 this.lvl2ClassName = 'mainNav__lvl2'; 266 this.lvl3ClassName = 'mainNav__lvl3'; 267 this.lvl1ItemClassName = 'mainNav__lvl1__item'; 268 this.lvl2ItemClassName = 'mainNav__lvl2__item'; 269 this.lvl1TitleClassName = 'mainNav__lvl1__item__title'; 270 this.lvl2TitleClassName = 'mainNav__lvl2__item__title'; 271 this.lvl3TitleClassName = 'mainNav__lvl3__item__title__text'; 272 this.lvl1ActiveClassName = '-js-mainNav--lvl1'; 273 this.lvl2ActiveClassName = '-js-mainNav--lvl2'; 274 this.lvl1ItemActiveClassName = '-js-mainNav__lvl1__item--active'; 275 this.lvl2ItemActiveClassName = '-js-mainNav__lvl2__item--active'; 276 this.breadcrumbLinkClassName = 'mainNav__breadcrumb__link'; 277 this.breadcrumbListItemLinkClassName = 'mainNav__breadcrumb__list__item__link'; 278 } 279 getActiveFirstFocusable() { 280 const activeLevel = this.getActiveLevel(); 281 return activeLevel.querySelector(`.${this.lvl1TitleClassName}, .${this.lvl2TitleClassName}, .${this.lvl3TitleClassName}`); 282 } 283 setActiveLvlClass() { 284 const activeLevel = this.getActiveLevel(); 285 if (activeLevel.classList.contains(this.lvl2ClassName)) { 286 this.rootNode.classList.add(this.lvl1ActiveClassName); 287 } else if (activeLevel.classList.contains(this.lvl3ClassName)) { 288 this.rootNode.classList.add(this.lvl1ActiveClassName); 289 this.rootNode.classList.add(this.lvl2ActiveClassName); 290 } 291 } 292 getActiveLevel() { 293 let activeLevel = this.rootNode.querySelector(`.${this.lvl1ItemActiveClassName} .${this.lvl2ItemActiveClassName} .${this.lvl3ClassName}`); 294 if (!activeLevel) { 295 activeLevel = this.rootNode.querySelector(`.${this.lvl1ItemActiveClassName} .${this.lvl2ClassName}`); 296 } 297 if (!activeLevel) { 298 activeLevel = this.rootNode.querySelector(`.${this.lvl1ClassName}`); 299 } 300 return activeLevel; 301 } 302 getFocusableItems() { 303 return this.rootNode.querySelectorAll(`.${this.lvl1TitleClassName}, .${this.lvl2TitleClassName}, .${this.lvl3TitleClassName}, .${this.breadcrumbLinkClassName}, .${this.breadcrumbListItemLinkClassName}`); 304 } 305 closeLvl2() { 306 const lvl2Collection = this.rootNode.querySelectorAll(`.${this.lvl2ItemClassName}`); 307 for (let lvl2 of lvl2Collection) { 308 lvl2.classList.remove(this.lvl2ItemActiveClassName); 309 } 310 this.rootNode.classList.remove(this.lvl2ActiveClassName); 311 } 312 closeLvl1() { 313 const lvl1Collection = this.rootNode.querySelectorAll(`.${this.lvl1ItemClassName}`); 314 for (let lvl1 of lvl1Collection) { 315 lvl1.classList.remove(this.lvl1ItemActiveClassName); 316 } 317 this.rootNode.classList.remove(this.lvl1ActiveClassName); 318 } 319} 320 321/***/ }) 322 323/******/ }); 324/************************************************************************/ 325/******/ // The module cache 326/******/ var __webpack_module_cache__ = {}; 327/******/ 328/******/ // The require function 329/******/ function __webpack_require__(moduleId) { 330/******/ // Check if module is in cache 331/******/ var cachedModule = __webpack_module_cache__[moduleId]; 332/******/ if (cachedModule !== undefined) { 333/******/ return cachedModule.exports; 334/******/ } 335/******/ // Create a new module (and put it into the cache) 336/******/ var module = __webpack_module_cache__[moduleId] = { 337/******/ // no module.id needed 338/******/ // no module.loaded needed 339/******/ exports: {} 340/******/ }; 341/******/ 342/******/ // Execute the module function 343/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); 344/******/ 345/******/ // Return the exports of the module 346/******/ return module.exports; 347/******/ } 348/******/ 349/************************************************************************/ 350/******/ /* webpack/runtime/compat get default export */ 351/******/ (() => { 352/******/ // getDefaultExport function for compatibility with non-harmony modules 353/******/ __webpack_require__.n = (module) => {
vendor: 1,163 bytes, lines 354-383
354/******/ var getter = module && module.__esModule ? 355/******/ () => (module['default']) : 356/******/ () => (module); 357/******/ __webpack_require__.d(getter, { a: getter }); 358/******/ return getter; 359/******/ }; 360/******/ })(); 361/******/ 362/******/ /* webpack/runtime/define property getters */ 363/******/ (() => { 364/******/ // define getter functions for harmony exports 365/******/ __webpack_require__.d = (exports, definition) => { 366/******/ for(var key in definition) { 367/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { 368/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 369/******/ } 370/******/ } 371/******/ }; 372/******/ })(); 373/******/ 374/******/ /* webpack/runtime/hasOwnProperty shorthand */ 375/******/ (() => { 376/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) 377/******/ })(); 378/******/ 379/************************************************************************/ 380var __webpack_exports__ = {}; 381// This entry need to be wrapped in an IIFE because it need to be in strict mode. 382(() => { 383"use strict";
384// extracted by mini-css-extract-plugin 385 386})(); 387 388// This entry need to be wrapped in an IIFE because it need to be in strict mode. 389(() => { 390"use strict"; 391/* harmony import */ var imxquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8611); 392/* harmony import */ var imxquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(imxquery__WEBPACK_IMPORTED_MODULE_0__); 393/* harmony import */ var _helper_MainNavHelper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8507); 394 395 396(() => { 397 /** 398 * registers a main nav level 399 * 400 * @param {Element} node 401 * @param {HTMLCollection} lvl2Collection 402 * @param {Element} mainNav 403 */ 404 const _registerMainNav = (node, lvl2Collection, mainNav) => { 405 const button = node.querySelector(`.${titleClassName}`); 406 const mainNavHelper = new _helper_MainNavHelper__WEBPACK_IMPORTED_MODULE_1__/* .MainNavHelper */ .h(mainNav); 407 button.addEventListener('click', event => { 408 const target = event.target; 409 if (target.closest('a')) { 410 return; 411 } 412 const isActive = node.classList.contains(activeClassName); 413 if (!isActive) { 414 mainNavHelper.closeLvl2(); 415 mainNav.classList.add(lvl2ActiveClassName); 416 node.classList.add(activeClassName); 417 const nextLvlFocusable = node.querySelector(`.${breadcrumbItemLinkClassName}`); 418 nextLvlFocusable?.focus(); 419 } else { 420 node.classList.remove(activeClassName); 421 mainNav.classList.remove(lvl2ActiveClassName); 422 } 423 }); 424 }; 425 const lvl2ItemClassName = 'mainNav__lvl2__item'; 426 const titleClassName = 'mainNav__lvl2__item__title'; 427 const mainNavIdName = 'mainNav'; 428 const lvl2ActiveClassName = '-js-mainNav--lvl2'; 429 const activeClassName = '-js-mainNav__lvl2__item--active'; 430 const breadcrumbItemLinkClassName = 'mainNav__breadcrumb__list__item__link'; 431 imxquery__WEBPACK_IMPORTED_MODULE_0___default().documentReady(() => { 432 const mainNav = document.getElementById(mainNavIdName); 433 const lvl2Collection = mainNav.querySelectorAll(`.${lvl2ItemClassName}`); 434 for (let lvl2 of lvl2Collection) { 435 _registerMainNav(lvl2, lvl2Collection, mainNav); 436 } 437 }); 438})(); 439})(); 440 441// This entry need to be wrapped in an IIFE because it need to be in strict mode. 442(() => { 443"use strict"; 444/* harmony import */ var imxquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8611); 445/* harmony import */ var imxquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(imxquery__WEBPACK_IMPORTED_MODULE_0__); 446/* harmony import */ var _helper_MainNavHelper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8507); 447 448 449(() => { 450 /** 451 * registers a main nav level 452 * 453 * @param {Element} node 454 * @param {HTMLCollection} lvl1Collection 455 * @param {Element} mainNav 456 */ 457 const _registerMainNav = (node, lvl1Collection, mainNav) => { 458 const button = node.querySelector(`.${titleClassName}`); 459 const mainNavHelper = new _helper_MainNavHelper__WEBPACK_IMPORTED_MODULE_1__/* .MainNavHelper */ .h(mainNav); 460 button.addEventListener('click', event => { 461 const target = event.target; 462 if (target.closest('a')) { 463 return; 464 } 465 const isActive = node.classList.contains(activeClassName); 466 if (!isActive) { 467 mainNavHelper.closeLvl1(); 468 mainNav.classList.add(lvl1ActiveClassName); 469 node.classList.add(activeClassName); 470 const nextLvlFocusable = node.querySelector(`.${breadcrumbItemLinkClassName}`); 471 nextLvlFocusable?.focus(); 472 } else { 473 node.classList.remove(activeClassName); 474 mainNav.classList.remove(lvl1ActiveClassName); 475 } 476 }); 477 }; 478 const lvl1ItemClassName = 'mainNav__lvl1__item'; 479 const titleClassName = 'mainNav__lvl1__item__title'; 480 const mainNavIdName = 'mainNav'; 481 const lvl1ActiveClassName = '-js-mainNav--lvl1'; 482 const activeClassName = '-js-mainNav__lvl1__item--active'; 483 const breadcrumbItemLinkClassName = 'mainNav__breadcrumb__list__item__link'; 484 imxquery__WEBPACK_IMPORTED_MODULE_0___default().documentReady(() => { 485 const mainNav = document.getElementById(mainNavIdName); 486 const lvl1Collection = mainNav.querySelectorAll(`.${lvl1ItemClassName}`); 487 for (let lvl1 of lvl1Collection) { 488 _registerMainNav(lvl1, lvl1Collection, mainNav); 489 } 490 }); 491})(); 492})(); 493 494// This entry need to be wrapped in an IIFE because it need to be in strict mode. 495(() => { 496"use strict"; 497/* harmony import */ var imxquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8611); 498/* harmony import */ var imxquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(imxquery__WEBPACK_IMPORTED_MODULE_0__); 499/* harmony import */ var _helper_MainNavHelper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8507); 500 501 502(() => { 503 /** 504 * registers a main nav level 505 * 506 * @param {HTMLElement} node 507 * @param {HTMLCollection} linkCollection 508 * @param {HTMLElement} mainNav 509 */ 510 const _registerLevel = (node, linkCollection, mainNav) => { 511 const breadcrumb = node.querySelector(`:scope > .${breadcrumbClassName}`); 512 const breadcrumbLinks = breadcrumb?.querySelectorAll(`.${breadcrumbLinkClassName}, .${breadcrumbItemLinkClassName}`) ?? [];
513 const keyboardAbleItems = [...breadcrumbLinks, ...linkCollection]; 514 const pageHeaderHeaderLinkNode = mainNav.parentElement.querySelector(`.${pageHeaderHeaderClassName}`).querySelector('a, button'); 515 const pageHeaderFooterLinkNode = mainNav.parentElement.querySelector(`.${pageHeaderFooterClassName}`).querySelector('a, button'); 516 const teaserNode = mainNav.querySelector(`.${mainNavTeaserClassName}`); 517 const mainNavHelper = new _helper_MainNavHelper__WEBPACK_IMPORTED_MODULE_1__/* .MainNavHelper */ .h(mainNav); 518 keyboardAbleItems.forEach((link, index) => { 519 link.addEventListener('keydown', event => { 520 if (event.key === 'Tab') { 521 event.preventDefault(); 522 event.shiftKey ? pageHeaderHeaderLinkNode?.focus() : pageHeaderFooterLinkNode?.focus(); 523 } 524 /* if arrow up or down */ 525 if (event.key === 'ArrowUp' || event.key === 'ArrowDown') { 526 event.preventDefault(); 527 const target = index + (event.key === 'ArrowUp' ? -1 : 1); 528 if (target >= 0 && target < keyboardAbleItems.length) { 529 keyboardAbleItems[target].focus(); 530 } 531 } 532 }); 533 }); 534 const handleFooterTeaserTab = event => { 535 if (event.key === 'Tab' && event.shiftKey) { 536 event.preventDefault(); 537 mainNavHelper.getActiveFirstFocusable()?.focus(); 538 } 539 }; 540 if (teaserNode) teaserNode.addEventListener('keydown', handleFooterTeaserTab); 541 if (pageHeaderFooterLinkNode) pageHeaderFooterLinkNode.addEventListener('keydown', handleFooterTeaserTab); 542 }; 543 /** 544 * registers a main nav level 545 * 546 * @param {Element} mainNav 547 */ 548 const _registerMainNav = mainNav => { 549 const lvl1Collection = mainNav.querySelectorAll(`.${lvl1ClassName}`); 550 const lvl2Collection = mainNav.querySelectorAll(`.${lvl2ClassName}`); 551 const lvl3Collection = mainNav.querySelectorAll(`.${lvl3ClassName}`); 552 for (let lvl1 of lvl1Collection) { 553 const linkCollection = lvl1.querySelectorAll(`.${lvl1TitleClassName}`); 554 _registerLevel(lvl1, linkCollection, mainNav); 555 } 556 for (let lvl2 of lvl2Collection) { 557 const linkCollection = lvl2.querySelectorAll(`.${lvl2TitleClassName}`); 558 _registerLevel(lvl2, linkCollection, mainNav); 559 } 560 for (let lvl3 of lvl3Collection) { 561 const linkCollection = lvl3.querySelectorAll(`.${lvl3TitleClassName}`); 562 _registerLevel(lvl3, linkCollection, mainNav); 563 } 564 }; 565 const mainNavIdName = 'mainNav'; 566 const lvl1ClassName = 'mainNav__lvl1'; 567 const lvl2ClassName = 'mainNav__lvl2'; 568 const lvl3ClassName = 'mainNav__lvl3'; 569 const lvl3TitleClassName = 'mainNav__lvl3__item__title__text'; 570 const lvl1TitleClassName = 'mainNav__lvl1__item__title'; 571 const lvl2TitleClassName = 'mainNav__lvl2__item__title'; 572 const breadcrumbClassName = 'mainNav__breadcrumb'; 573 const breadcrumbLinkClassName = 'mainNav__breadcrumb__link'; 574 const breadcrumbItemLinkClassName = 'mainNav__breadcrumb__list__item__link'; 575 const pageHeaderHeaderClassName = 'pageHeader__overlay__header'; 576 const pageHeaderFooterClassName = 'pageHeader__footer'; 577 const mainNavTeaserClassName = 'mainNav__teaser'; 578 imxquery__WEBPACK_IMPORTED_MODULE_0___default().documentReady(() => { 579 const mainNav = document.getElementById(mainNavIdName); 580 if (mainNav) { 581 _registerMainNav(mainNav); 582 } 583 }); 584})(); 585})(); 586 587// This entry need to be wrapped in an IIFE because it need to be in strict mode. 588(() => { 589"use strict"; 590/* harmony import */ var imxquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8611); 591/* harmony import */ var imxquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(imxquery__WEBPACK_IMPORTED_MODULE_0__); 592 593(() => { 594 /** 595 * registers a main nav 596 * 597 * @param {Element} mainNav 598 */ 599 const _registerMainNav = mainNav => { 600 const slot = mainNav.querySelector(`.${slotClassName}`); 601 const config = { 602 attributes: true, 603 childList: true, 604 subtree: true 605 }; 606 const getVisibleLevel = () => { 607 if (mainNav.classList.contains(lvl2ActiveClassName)) { 608 return mainNav.querySelector('.mainNav__lvl2__item.-js-mainNav__lvl2__item--active .mainNav__lvl3'); 609 } else if (mainNav.classList.contains(lvl1ActiveClassName)) { 610 return mainNav.querySelector('.mainNav__lvl1__item.-js-mainNav__lvl1__item--active .mainNav__lvl2'); 611 } else { 612 return mainNav.querySelector('.mainNav__lvl1'); 613 } 614 }; 615 const callback = mutationList => { 616 for (const mutation of mutationList) { 617 const visibleLevel = getVisibleLevel(); 618 slot.style.height = `${visibleLevel.offsetHeight}px`; 619 } 620 }; 621 const observer = new MutationObserver(callback); 622 observer.observe(mainNav, config); 623 let prevWidth = 0; 624 const resizeObserver = new ResizeObserver(entries => {
625 for (const entry of entries) { 626 const width = entry.borderBoxSize?.[0].inlineSize; 627 if (typeof width === 'number' && width !== prevWidth) { 628 prevWidth = width; 629 callback(entries); 630 } 631 } 632 }); 633 resizeObserver.observe(document.body); 634 }; 635 const lvl1ActiveClassName = '-js-mainNav--lvl1'; 636 const lvl2ActiveClassName = '-js-mainNav--lvl2'; 637 const mainNavIdName = 'mainNav'; 638 const slotClassName = 'slot'; 639 imxquery__WEBPACK_IMPORTED_MODULE_0___default().documentReady(() => { 640 const mainNav = document.getElementById(mainNavIdName); 641 _registerMainNav(mainNav); 642 }); 643})(); 644})(); 645 646// This entry need to be wrapped in an IIFE because it need to be in strict mode. 647(() => { 648"use strict"; 649/* harmony import */ var imxquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8611); 650/* harmony import */ var imxquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(imxquery__WEBPACK_IMPORTED_MODULE_0__); 651/* harmony import */ var _helper_MainNavHelper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8507); 652 653 654(() => { 655 /** 656 * registers a main nav level 657 * 658 * @param {Element} breadcrumb 659 * @param {HTMLCollection} lvl1Collection 660 * @param {HTMLCollection} lvl2Collection 661 * @param {Element} mainNav 662 */ 663 const _registerBreadcrumb = (breadcrumb, lvl1Collection, lvl2Collection, mainNav) => { 664 const breadcrumbList = breadcrumb.querySelectorAll(`.${breadcrumbItemClassName}`); 665 const firstBreadcrumb = breadcrumbList[0]; 666 const secondBreadcrumb = breadcrumbList[1]; 667 const mainNavHelper = new _helper_MainNavHelper__WEBPACK_IMPORTED_MODULE_1__/* .MainNavHelper */ .h(mainNav); 668 if (firstBreadcrumb) { 669 const firstLink = firstBreadcrumb.querySelector(`.${breadcrumbLinkClassName}`); 670 const closeFirst = () => { 671 mainNavHelper.closeLvl2(); 672 mainNavHelper.closeLvl1(); 673 }; 674 firstLink.addEventListener('click', () => closeFirst()); 675 firstLink.addEventListener('keypress', event => { 676 if (event.key === 'Enter') { 677 closeFirst(); 678 mainNavHelper.getActiveFirstFocusable()?.focus(); 679 } 680 }); 681 } 682 if (secondBreadcrumb) { 683 const secondLink = secondBreadcrumb.querySelector(`.${breadcrumbLinkClassName}`); 684 const closeSecond = () => { 685 mainNavHelper.closeLvl2(); 686 }; 687 secondLink.addEventListener('click', () => closeSecond()); 688 secondLink.addEventListener('keypress', event => { 689 if (event.key === 'Enter') { 690 closeSecond(); 691 mainNavHelper.getActiveFirstFocusable()?.focus(); 692 } 693 }); 694 } 695 }; 696 /** 697 * registers a main nav level 698 * 699 * @param {Element} mainNav 700 */ 701 const _registerMainNav = mainNav => { 702 const lvl1Collection = mainNav.querySelectorAll(`.${lvl1ItemClassName}`); 703 const lvl2Collection = mainNav.querySelectorAll(`.${lvl2ItemClassName}`); 704 const breadcrumbCollection = mainNav.querySelectorAll(`.${breadcrumbClassName}`); 705 for (let breadcrumb of breadcrumbCollection) { 706 _registerBreadcrumb(breadcrumb, lvl1Collection, lvl2Collection, mainNav); 707 } 708 }; 709 const mainNavIdName = 'mainNav'; 710 const lvl1ItemClassName = 'mainNav__lvl1__item'; 711 const lvl2ItemClassName = 'mainNav__lvl2__item'; 712 const breadcrumbClassName = 'mainNav__breadcrumb'; 713 const breadcrumbItemClassName = 'mainNav__breadcrumb__list__item'; 714 const breadcrumbLinkClassName = 'mainNav__breadcrumb__list__item__link'; 715 imxquery__WEBPACK_IMPORTED_MODULE_0___default().documentReady(() => { 716 const mainNav = document.getElementById(mainNavIdName); 717 if (mainNav) { 718 _registerMainNav(mainNav); 719 } 720 }); 721})(); 722})(); 723 724// This entry need to be wrapped in an IIFE because it need to be in strict mode. 725(() => { 726"use strict"; 727/* harmony import */ var imxquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8611); 728/* harmony import */ var imxquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(imxquery__WEBPACK_IMPORTED_MODULE_0__); 729/* harmony import */ var _helper_MainNavHelper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8507); 730 731 732(() => { 733 /** 734 * registers a main nav level 735 * 736 * @param {Element} mainNav 737 */ 738 const _registerMainNav = mainNav => { 739 const mainNavHelper = new _helper_MainNavHelper__WEBPACK_IMPORTED_MODULE_1__/* .MainNavHelper */ .h(mainNav); 740 mainNavHelper.setActiveLvlClass(); 741 }; 742 const mainNavIdName = 'mainNav'; 743 imxquery__WEBPACK_IMPORTED_MODULE_0___default().documentReady(() => { 744 const mainNav = document.getElementById(mainNavIdName); 745 if (mainNav) { 746 _registerMainNav(mainNav); 747 } 748 }); 749})(); 750})(); 751 752/******/ })() 753;
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.