{"version":3,"sources":["node_modules/@babel/runtime/helpers/typeof.js","node_modules/@babel/runtime/helpers/toPrimitive.js","node_modules/@babel/runtime/helpers/toPropertyKey.js","node_modules/@babel/runtime/helpers/createClass.js","node_modules/@babel/runtime/helpers/classCallCheck.js","src/scripts/modules/jQuery/jQuery.js","src/scripts/modules/module-registry/module-registry.js","node_modules/@babel/runtime/helpers/defineProperty.js","src/scripts/modules/scrolling/scrolling.js","node_modules/@babel/runtime/helpers/asyncToGenerator.js","node_modules/@babel/runtime/helpers/regeneratorRuntime.js","node_modules/@babel/runtime/regenerator/index.js","node_modules/@babel/runtime/helpers/arrayWithHoles.js","node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","node_modules/@babel/runtime/helpers/arrayLikeToArray.js","node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","node_modules/@babel/runtime/helpers/nonIterableRest.js","node_modules/@babel/runtime/helpers/slicedToArray.js","src/scripts/modules/breakpoints/breakpoints.js","src/scripts/modules/abbreviation/abbreviation.js","src/scripts/modules/accordion-modul/accordion-modul.js","src/scripts/modules/anchor-section-bar/anchor-section-bar.js","src/scripts/modules/article-header/article-header.js","src/scripts/modules/drag-bar/drag-bar.js","src/scripts/modules/gallery/gallery.js","node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","node_modules/@babel/runtime/helpers/iterableToArray.js","node_modules/@babel/runtime/helpers/nonIterableSpread.js","node_modules/@babel/runtime/helpers/toConsumableArray.js","src/scripts/modules/utils/utils.js","src/scripts/modules/overlay/overlay.js","src/scripts/modules/global/global.js","src/scripts/modules/bar-carousel/bar-carousel.js","src/scripts/modules/card-tiles/card-tiles.js","src/scripts/modules/category-overview/category-overview.js","src/scripts/modules/contact-accordion/contact-accordion.js","src/scripts/modules/cta-button/cta-button.js","src/scripts/modules/detail-form/detail-form.js","src/scripts/modules/directory/directory.js","src/scripts/modules/editorial/editorial.js","src/scripts/modules/footer/footer.js","src/scripts/modules/image-slider/image-slider.js","src/scripts/modules/image-video-tile/image-video-tile.js","src/scripts/modules/interactive-launcher/interactive-launcher.js","node_modules/dompurify/dist/purify.es.mjs","src/scripts/modules/intro/intro.js","src/scripts/modules/language-form/language-form.js","src/scripts/modules/lightbox-slider/lightbox-slider.js","src/scripts/modules/location-map/location-map.js","src/scripts/modules/media/media.js","src/scripts/modules/navigation/navigation-link-section.js","src/scripts/modules/navigation/navigation.js","src/scripts/modules/navigation/navigation-link-groups.js","src/scripts/modules/number-overview/number-overview.js","src/scripts/modules/one-trust-overlay/one-trust-overlay.js","src/scripts/modules/overlay-footer/overlay-footer.js","src/scripts/modules/paralax-section/paralax-section.js","src/scripts/modules/search-bar/search-bar.js","src/scripts/modules/share/share.js","src/scripts/modules/slim-hero/slim-hero.js","src/scripts/modules/speciality-hero/speciality-hero.js","src/scripts/modules/sticky-section/sticky-section.js","src/scripts/modules/textblock/textblock.js","src/scripts/modules/timeline/timeline.js","src/scripts/modules/video-round/video-round.js","src/scripts/modules/video/video.js","src/scripts/modules/legal-overlay/legal-overlay.js","src/scripts/modules/carousel-hero/carousel-hero.js","src/scripts/modules/main.js"],"names":["unwrapExports","module","x","__esModule","Object","prototype","hasOwnProperty","call","toPrimitive","_typeof","Symbol","iterator","o","e","constructor","exports","TypeError","_typeof_1","require$$0","toPropertyKey","i","toPropertyKey_1","createCommonjsModule","descriptor","enumerable","configurable","writable","createClass","_createClass","Constructor","staticProps","defineProperty","props","length","protoProps","_classCallCheck","_defineProperties","name","window","$$1","_autoApplySelectors","ModuleRegistry","moduleName","moduleClass","instances","Map","_initAutoApplyModules","key","value","_addEventListeners","registerModule","isValidModuleClass","_this","addEventListener","moduleClassName","existingModule","_validateModuleClass","autoApplyModule","selector","hasModule","_registeredModules","concat","trimmedSelector","set","this","has","trim","element","get","_processAutoApplyModule","$elements","_initModule","hasSelector","modulesForSelector","Set","modules","add","$element","forEach","elementData","el","moduleInstance","_document","readyState","obj","Scrolling","lastScrollTop","body","scrollTop","document","querySelector","scrollY","html","top","style","scrollBehavior","_defineProperty","info","gen","arg","_throw","_asyncToGenerator","fn","self","error","arguments","done","asyncGeneratorStep","resolve","then","_next","Promise","_regeneratorRuntime","reject","err","u","toStringTag","define","t","r","c","asyncIterator","a","tryCatch","wrap","n","Generator","create","Context","type","maybeInvokeDelegate","f","Error","method","delegate","p","resetTryEntry","y","completion","resultName","next","nextLoc","s","abrupt","l","h","GeneratorFunction","GeneratorFunctionPrototype","d","v","invoke","defineIteratorMethods","_invoke","AsyncIterator","callInvokeWithMethodAndArg","__await","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","isNaN","pushTryEntry","reset","setPrototypeOf","g","displayName","isGeneratorFunction","mark","__proto__","async","reverse","values","stop","pop","dispatchException","sent","_sent","charAt","slice","handle","prev","complete","_catch","rval","delegateYield","runtime","regeneratorRuntime","accidentalStrictMode","regeneratorRuntime$1","arr","isArray","arrayWithHoles","len","arrayLikeToArray","toString","arr2","minLen","_nonIterableRest","iterableToArrayLimit","_slicedToArray","Breakpoints","slicedToArray","onBreakpointChange","unsupportedIterableToArray","nonIterableRest","callback","breakpointNames","includes","_breakpointChangeCallbacks","from","to","breakpointChangeCallback","onBreakpointChangeFrom","breakpoint","width","$","innerWidth","_Object$entries","_Object$entries$_i","isBreakpoint","breakpointName","toLowerCase","getBreakpoint","isBreakpointOrLarger","breakpointIndex","currentBreakpointIndex","isBreakpointOrSmaller","indexOf","_initBreakpointChangeListener","_callbackShouldFire","lastBreakpoint","currentBreakpoint","callbackSetting","MDLG","XS","MD","config","selectors","root","closeBtn","overlay","Abbreviation","trigger","_$rootElement","_count","wrapper","overlaySquare","$rootElement","_id","_content","_$parent","id","_$trigger","attr","substring","data","idCounterMap","abbr","count","parentNode","$parent","parent","_title","$overlays","title","content","_generateHTML","_isInserted","_reposition","_$overlay","css","_isBodyNoScroll","$trigger","overlayHtml","_generateOverlayHtml","setTimeout","preventDefault","find","on","stopPropagation","_x","offsetLeft","offsetParent","_y","offsetTop","$root","$overlay","overlayWidth","closest","focus","WebKitCSSMatrix","matrix","$track","_getOffset","left","m41","toRemove","undefined","Boolean","removeClass","_fetch2","finishedSplittedUrl","ids","_callee$","regenerator","_callee","_context","each","$el","_extractIsoAndLanguageFromUrl","location","join","moduleRegistry","_fetch","apply","currentUrl","splittedUrl","splittedIsoCode","isoCode","pathname","split","accordionItem","accordionContent","accordionContentShow","accordionIcon","accordionHeadlineActive","AccordionModul","accordionHeadline","_isHidden","accordionIconOpen","smartedit","_elements","$accordionContent","_options","_getDomElements","$accordionHeadline","$accordionItem","$accordionContentShow","scrollHeight","$accordionIcon","config$1","classNames","closestContent","_hideAll","currentTarget","closestIcon","hasClass","sections","addClass","section","sectionLink","sectionName","scrollToSectionName","anchorButtonLabel","arrowLeftVisible","arrowRightVisible","wrapperRight","arrowRight","AnchorSectionBar","_lastWindowTop","_currentTranslateX","_renderComponent","$sections","$container","$wrapper","_enabledArrows","$arrowLeft","config$2","container","$section","arrowLeft","$arrowRight","wwidth","_this2","_enableArrows","_onLeftArrowClick","_disableArrows","buttonLabel","_createItemHtml","_createHtml","index","dataAttributes","removeAttr","result","max","_updateArrows","print","ArticleHeader","config$3","$print","_addEventListener","keyCode","barItems","barItem","controlBtn","prevDisabled","nextDisabled","itemLine","easeTime","DragBar","dotted","slidesToShow","_generateBar","onChangeCallback","items","$button","$next","$prev","event","$barItem","config$4","_syncOnIndex","buttonOffset","offset","mouseDown","clientX","canUpdate","_getClickOffset","_registerMousemoveListener","_calculateNewButtonLeft","currentIndex","buttonLeft","offsetX","chunkIndex","_determineChunkIndex","prevIndex","prevX","newX","clickOffset","_moveButton","_isAtMinBounds","_isAtBounds","$barItems","children","_isAtMaxBounds","currentLeft","off","itemActive","labeled","ceil","_generateItemLabel","mainSlides","mainSlide","mainSlideVisual","label","previewSlides","previewSlide","caption","videoPlayButton","video","videoControls","currentMainSlide","fullscreenVideo","fullscreenPlayButton","volume","seekslider","noScroll","lightboxVisible","videoOverlay","volumeMute","volume25","volume50","volume75","volume100","currentTime","playIcon","pauseIcon","slickIndex","mainSliderConfig","dots","arrows","infinite","speed","mobileFirst","previewSliderConfig","BREAKPOINTS","slidesToScroll","autoplay","Gallery","_captionsHtml","$previewSlides","$mainSlide","_imagesHtml","$body","$mainSlides","$previewSlide","$videoControls","$caption","$playButton","$video","config$5","$currentMainSlide","$fullscreenVideo","_setCurrentPreviewSlide","openBtn","$closeBtn","currentindex","_this3","videoSettings","player","slick","$openBtn","pause","hasStarted","captionsHtml","$fullscreenPlayButton","$volume","$seekslider","cursecs","durmins","curmins","duration","newTime","Math","floor","KSGallery","_arrayWithoutHoles","Array","dursecs","childrenisvideo","bc","documentElement","requestFullscreen","orientation","lock","_exitFullscreen","_goFullscreen","_changeFullscreenState","isFullscreen","screen","unlock","webkitEnterFullscreen","fullscreenElement","exitFullscreen","webkitFullscreenElement","hide","show","volumeValue","_seeksliderTimeUpdate","play","imagesHtml","_iterableToArray","iter","_nonIterableSpread","arrayWithoutHoles","_toConsumableArray","toConsumableArray","nonIterableSpread","isClickOrEnter","iterableToArray","originalEvent","backBtn","UIEvent","searchInput","fullScreenGalleryBtn","fullScreenGalleryBtnClose","backdrop","bodyNoScroll","overlayVisible","sticky","stickyHeader","fullScreen","header","Overlay","$content","$backdrop","$backBtn","$fullScreenGalleryBtnClose","$openTrigger","openTrigger","thanks","$thanksBtn","$html","config$6","$header","textAreaBtn","dataId","initLater","setContent","KSUtility","url","gallery","showProductOverlay","dispatchEvent","CustomEvent","detail","initialTabIndex","prefilledSpeciality","speciality","tabIndex","slides","slide","sliderConfig","variableWidth","settings","sliderConfigDuo","LG","BarCarousel","_setSliderState","_currentIndex","$slide","$slides","_getSliderConfig","config$7","$bar","console","bar","currentSlide","nextSlide","log","getClassname","setIndex","querySelectorAll","_initBar","barHtml","createHtml","init","_currentYear","_setControlBtnWidth","controlBar","cardTilesTwo","cardTilesThree","CardTiles","_initSlider","$tiles","config$8","tiles","$tile","target","tile","_destroySlider","_isSlider","tallestSlide","_multiSlideAdaptiveHeight","slider","activeSlides","item","sliderChildren","tabItem","height","tabsContent","tabsContentWrapper","grid","tabsContentActive","tabsContentNotActive","loadMoreButton","gridItem","gridItemLabel","gridItemContentButton","gridItemContent","tabContent","tabsActive","tabsVisible","ctaButtonActive","tabItemActive","tabContentGridModifierPrefix","gridItemHover","gridItemHoverOut","gridItemLabelNoAnimation","gridItemLabelContentButtonNoAnimation","breakPoints","xs","sm","md","lg","xl","xxl","gridItemLabelContentNoAnimation","tabSliderSettings","_loadMoreClickHandler","CategoryOverview","_slickSliderManipulation","_loadmore","$tab","direction","$tabItem","$tabsContent","config$9","$tabButton","tabButton","$grid","$ctaButton","ctaButton","$tabsContentNotActive","$loadMoreButton","$gridItem","$gridItemLabel","$gridItemContentButton","$gridItemContent","$tabsContentWrapper","slickActiveButton","$tabsContentActive","allNoLinkElements","childContent","childlabel","childOnlytext","childbutton","_isTouchDevice","maxTouchPoints","navigator","_setTabActive","_getTabContentByID","gridContent","activeChildrenOfGrid","m","description","charactersLeft","allowArrayLike","normalCompletion","didErr","it","step","_e2","_arrayLikeToArray","test","F","_e","privacyPolicy","inputSummary","errorMessage","altErrorMessage","detailForm","titles","titleInput","cta","accordionItemExpanded","accordionItemCollapsed","accordionItemFinished","accordionFinished","accordionCtaDisabled","accordionError","accordionAltError","textareaAlmostFull","detailFormError","detailFormErrorMessage","customselect","selectSelected","selectSelectedActive","selectItems","selectItemsHide","selectItem","sameAsSelected","customTitle","ContentAccordion","_expandItem","$textInput","$radioButtons","_index","_maxlength","_createForOfIteratorHelper","_step","_iterator","prop","$item","$cta","$edit","$inputSummary","$errorMessage","$altErrorMessage","$detailForm","$titles","$titleInput","config$a","$charactersLeft","radioButtons","$privacyPolicy","_validateInput","$accordion","_altError","newIndex","_finishItem","innerText","val","currentLength","charsLeft","$description","_collapseItem","emptyInputField","detailError","inputLength","_iterator2","_step2","valid","detailFormShowErrorMessage","validity","controls","videoComponent","videoMobile","videoWrapper","playPauseBtn","videoWrapperSmall","iconButtonWrapper","videoFullscreen","videoControlsHidden","videoId","closeButton","CtaButton","$videoWrapper","$videoMobile","_fullSizedVideo","_videoId","_closeVideo","$videoLighthouse","config$b","videoHide","$controls","$closeButton","$playPauseBtn","createElement","canPlayType","opacity","visibility","DetailForm","$selectItems","_generateSelect","config$c","customSelect","customSelectLength","selectLength","selElmnt","innerHTML","options","appendChild","_loop","setAttribute","selectedIndex","sameAsSelectedItem","defaultSelect","selectedItem","getElementsByTagName","j","$customSelect","hiddenSelect","k","yl","removeAttribute","getElementsByClassName","click","selecteditems","nextsibling","nextSibling","_closeAllSelects","accordionItemHeadline","accordionItemLink","icon","accordionItemContentTransition","linkIconPlain","linkIconHover","Directory","$accordionItemContent","_isAccordion","$accordionItemHeadline","$accordionItemLink","$icon","config$d","accordionItemContent","_this4","mouseover","mouseleave","_this5","_expandAll","Editorial","_scroll","viewportTop","viewportBottom","position","elementBottom","elementTop","accordionEntry","linkListHeadline","linkList","accordionEntryOpen","linkListItemLink","accordionEntryOpenClass","Footer","iconClose","OneTrust","ToggleInfoDisplay","_accordion","$accordionEntry","$accordionEntryOpen","$linkList","$linkListItemLink","firstEntry","config$f","iconOpen","closestWrapper","currentAccordionIcon","dot","touchMove","draggable","ImageSlider","swipe","swipeToSlide","$dots","$dot","_createDotHtml","config$g","dotActive","playPauseBtnIcon","imageWrapper","config$h","pauseIconCircle","pauseIconCircleWhite","playIconPaths","ImageVideoTile","_screenClick","$playPauseBtnIcon","_playPauseHandler","_muteVideo","$imageWrapper","iframeContainer","iframe","func","iframeSrc","fullscreen","iframeWrapper","InteractiveLauncher","text","_isInitialized","_src","$iframe","$iframeWrapper","_loadIframe","config$i","$close","close","translateTreshold","Intro","_reveal","outerHeight","getPrototypeOf","getOwnPropertyDescriptor","construct","isFrozen","freeze","seal","Reflect","thisValue","stringToLowerCase","fun","unapply","stringToString","String","stringTrim","Func","objectHasOwnProperty","numberIsNaN","Number","arrayPush","stringMatch","match","stringReplace","replace","stringIndexOf","regExpTest","args","_key","_len2","_key2","addToSet","array","thisArg","_len","unconstruct","lcElement","transformCaseFunc","isPropertyExist","newObject","entries","object","property","let","clone","fallbackValue","desc","checkbox","languageCheckboxIcon","config$k","selectNotSelected","countrySearchbar","countrySearchbarInput","languageCheckboxActive","languageCheckboxShow","languageCheckboxIconActive","languageText","customSelectActive","countryActive","languagesHidden","overlayButton","dataSets","languages","forwardTarget","checkboxLanguageCode","countriesJson","flagsPath","countryFlagsElements","LanguageForm","fetchedCountryData","setLanguages","allAvailableLanguages","countrySelection","languageSelected","sortCountriesBySortTitle","lang","fetchMock","_getAllLanguagesAvailableFromJson","_addCurrentCountry","_sortSelectOptionCountries","_fillSelectOptionsCountries","_doAsync","_doAsync2","$selectItem","_fetchCountriesJSON2","$selectSelected","getUrlFromDataAttribute","fetchedCountriesData","response","$languageCheckbox","_callee2$","_context2","languageCheckbox","country","_callee2","_fetchCountriesJSON","_fetchMockData2","_callee3","_context3","fetch","_fetchMockData","_changeUrl","searchResults","_getTitleBySearchTerm","urlLanguage","currentURL","purify","sanitize","hostLength","protocolLength","host","_renderLanguageCheckboxes","splitSlicedUrl","checkboxesToBeReplaced","languageList","languageCode","resultsOfFilter","filteredLanguage","_setCheckboxActiveAccordingToBrowserLanguage","language","map","languageCodesArray","results","decodeElement","languageVariationOfCountryAvailable","toUpperCase","_generateSelect2","_callee4","_context5","searchbar","searchcontainer","searchicon","_loop$","_context4","$this","defaultSelectLength","sameAsSelectedItemLength","formCountry","classList","toggle","htmlAutoGeneratedElements","htmlItemsWrapper","countrySelect","pageIsoCode","getAttribute","selectedCountry","_this6","countryDetails","_proofProdStage","splitted","isProdStage","languageCodeFromUrl","titleIT","titleJA","titlePT","titleRU","titleZH","titleEN","_countryClickHandler","_this7","targetDetails","currentSelect","hasAttribute","_forwardPageToTarget","_getDetailsByIsoCode","sortTitle","decodeURI","countryTitle","countries","countryArray","sort","_this9","pageLanguage","extractedIsoCode","getCountryDetails","titleES","titleFR","navigationActionButton","activeCheckboxes","checkboxesDisplayed","DOMPurify","setLang","getCheckboxAttribute","getLanguage","_setCheckboxActiveAndSetLanguage","checkboxElement","checkboxElements","$country","countrySelectBox","dataset","lightbox","lightboxSlide","lightboxNext","videoFullscreenBtn","durationTime","captions","thumbnail","thumbnailTimer","centerMode","centerPadding","LightboxSlider","append","config$m","_initVideos","$lightbox","$lightboxSlides","$lightboxSlide","$lightboxPrev","lightboxPrev","$volumeBtn","$ccBtn","$videoFullscreenBtn","$currentTime","$durationTime","$fullscreen","$captions","$volumeMute","$volume25","$volume50","$volume75","$volume100","$thumbnail","$thumbnailTimer","config$l","elements","$lightboxNext","videoSlide","_playPauseVideo","remove","seekTo","paused","videos","box","mapMode","locationMode","zoomIn","zoomOut","mapModeActive","locationModeActive","backdropVisible","worldZoom","activeIconSvg","iconSvg","_json","_mapOptions","LocationMap","_headquarter","_visibleMarkers","_activeMarker","_activeMarkerPrevIcon","_overlayModifier","_url","_navigatorLocationLat","_navigatorLocationLong","_markers","newAttempt","processedLocations","_args","attempt","_afterInit","google","_locations","latitude","LatLng","_initMenuScroll","latlng","maps","longitude","_afterInit2","_getWorldJson","$map","$box","$locationMode","$zoomIn","_addEventListeners2","$yearControlBtn","yearControlBtn","$zoomOut","_callee3$","overlayCloseBtn","_hideBackdrop","_hideOverlay","_currentMode","newVisibleMarkers","_center","draggableCursor","_setUserPosition","_map","setOptions","locations","_getLocationsByType","marker","coords","_headquarterMarker","setIcon","_createActiveIconSvg","addListenerOnce","getIcon","btoa","_getColorByType","_focusPoint","_createOverlayHtml","_showOverlay","_zoom","panTo","link","iconColor","_showBackdrop","center","_calcCenterOfVisibleMarkers","setZoom","_initMap","startX","isDown","closeColor","pageX","scrollLeft","walk","styleElem","head","scrollWidth","overlayHeight","address","iconUrl","replaceAll","markers","_createIconSvg","lat","lon","_this8","latLng","domEvent","path","lng","$markerWrapper","unreplacedTitle","color","$marker","_initOverlayListeners","_setMarkers","LatLngBounds","_bounds","extend","styledMapType","StyledMapType","centerOfLocations","minZoom","maxZoom","mapTypeControl","scaleControl","streetViewControl","rotateControl","disableDefaultUI","_calcCenterOfLocations","_initOptions","zoom","zoomControl","fullscreenControl","mapTypeControlOptions","mapTypeIds","mapTypes","setMapTypeId","fitBounds","onresize","getCurrentPosition","res","_this10","_degr2rad","sumZ","avgX","sumX","avgY","sumY","avgZ","sqrt","_rad2degr","cos","sin","hyp","_this11","degr","PI","rad","elementType","featureType","stylers","weight","saturation","lightness","config$n","Media","$activateButtonWrapper","$videoComponent","activateButtonWrapper","_removeStandardControls","NavigationLinkSection","_arrayLikeToArray$1","_createForOfIteratorHelper$1","config$o","list","removeChild","mainNav","mainItems","childItem","childNavWrapper","childNavClose","mainNavMobileIndicator","mainNavMobileHeader","mainNavMobileIndicatorTitle","childContentMobileClose","childNavContainer","megaMenu","mainNavItemNoChilds","mobileSearch","mobileSearchContent","mobileOverlay","mainNavLink","mobileHeader","mobileCountryContent","countryActionChangeTrigger","countWrapper","countInner","mobileCountWrapper","mobileCountInner","childId","subchildId","subchildName","mainItemActive","mainItemNonTransparent","childContentActive","childNavWrapperVisible","mainNavOpen","linkGroupHeadlineActive","childItemActive","indicatorVisible","scrollUp","mobileSearchContentActive","mobileOverlayActive","searchMobileText","searchMobileIcon","mainNavMobileHeaderWhite","scrollDown","Navigation","_isOpening","_isClosing","_activeItem","_activeIndex","_mobileSearchText","_lastScrollY","_isOpened","_timer","__setDefaultActive","__addsearchChilds","$mainNavMobileClose","$mainNavMobileIndicator","$mainNavMobileIndicatorTitle","$childContentMobileClose","$navigationRoot","$childNavContainer","config$p","$megaMenu","$mainNavItemNoChilds","$mobileSearch","$mobileSearchContent","$mainNavMobileHeader","$mainNavMobileHeaderVisible","mainNavMobileHeaderVisible","$mobileOverlay","$mainNavLink","$mobileHeader","$countryActionChangeTrigger","$mobileCountryContent","$count","$mobileCount","mobileCount","_addDesktopEventListeners","_addMobileEventListeners","$childItem","$childContent","isNoParent","$currentItem","_closeDesktopNav","_openDesktopNav","$mainItem","clearTimeout","timeout","_isDesktopNav","$childNavClose","timer","setInterval","clearInterval","$childNavWrapper","_shouldClose","elem","_activeSubchildIndex","$teaser","which","$links","$cards","$mainNav","mainNavItemDifferendGroup","linkText","$burger","_closeMobileNav","_onDesktopSubnavSwitch","_scrollNav","prevScrollpos","pageYOffset","canChangeScrollBehavior","currentScrollPos","navi","searchOverlayText","searchIcon","inputVal","childNodes","basketCount","$countElt","linkGroupHeadline","NavigationLinkGroups","$linkGroupHeadline","_setActive","$headline","config$q","_addGridClasses","$child","childCount","child","itemEmployees","allcounters","counterEmployees","counterSales","endNumber","thousandSeperator","decimalSeperator","NumberOverview","startNumber","initialized","_started","_scrollFunction","$counterSales","$itemEmployees","$itemSales","$counterEmployees","config$r","_reset","itemSales","elementVisible","viewportMiddle","$animatedItems","_animateValueWholeNumbers","counter","parseInt","elementBotton","start","offsetHeight","parseFloat","end","toFixed","elementVisibleTop","_animateValueDecimal","range","current","countDuration","increment","decimalPortion","integerPortion","pastThousand","stepTime","updateConsent","OneTrustOverlay","OnetrustActiveGroups","hostname","config$s","clickable","$updateConsent","visible","UpdateConsent","openCenter","$openCenter","shareCta","tooltip","overlayTooltipVisible","OverlayFooter","$shareCta","$tooltip","config$t","_createForOfIteratorHelper$2","_arrayLikeToArray$2","maxPadding","maxTransitionDuration","scrollDistanceTrigger","_prevPadding","padding","ParalaxSection","_isTransformed","paralaxElement","subChildren","config$u","elementMiddle","elementHeight","factor","difference","prevViewportTop","prevTimeStamp","_adjustPadding","scrollingDown","newFactor","_calcTransitionDuration","input","bool","fakeInput","_canTransform","clearInput","suggestionList","closeOverlay","overlayInfoWrapper","fakeInputError","fakeInputFocus","suggestionListItem","suggestionListItemLink","overlayContainer","htmlElements","highlightingOpeneningTag","highlightingClosingTag","SearchBar","isMobileOrTabletScreen","$fakeInput","_inputValue","suggestions","$clearInput","$searchButton","$suggestionList","$overlayInfoWrapper","config$v","_getScreenSize","searchButton","_showClearIconOnDesktopScreens","$closeOverlay","_searchButtonHandler","$overlayContainer","_openOverlayOnTabletAndMobileScreens","_clearInput","_getSearchSuggestions","_resetSuggestions","$input","focusout","_closeOverlay","_getSearchSuggestions2","suggestionsAPIUrl","filteredList","parse","formattedFilteredList","_highlightingSuggestions","searchVal","JSON","endIndex","manipulatedStrings","lowercasedResultString","searchValLength","loweredCaseSearchVal","startIndex","_createSuggestionItem","_manipulateString","string","openCloseDelayMs","share","shareHead","shareWrapper","shareWrapperActive","shareHeadActive","Share","shareLinks","_isVisible","_initShariff2","services","t0","isos","$shareLinks","Shariff","_initShariff","$shareWrapper","config$w","shareLinksActive","splittedLanguage","_hide","$shareHeads","_show","config$x","SlimHero","_autoPlayVideo","muted","hiddenControls","SpecialityHero","_videoVisible","config$y","_hidePlayPauseBtn","videoElements","videoElement","videoTextblock","stickyBar","stickyBarItem","stickySectionContent","stickySectionContentWrapper","stickyBarItemActive","stickySectionContentVisible","stickySectionBarSticky","stickyBarUp","stickyBarDown","stickyBarTransition","stickyBarItemsWrapperRight","stickySectionId","StickySection","_delta","_initialStickyBarTop","_canChangeState","$stickyBarItems","_isSticky","_canBecomeSticky","checkSticky","number","$stickyBarItem","config$z","$stickyBar","_findFirstColoredChild","$stickySectionContentWrapper","activeElementWidth","previousElementWidth","containerWidth","$stickyBarItemsWrapper","_containerWidth","_max","scrollTo","behavior","_becomeSticky","$stickySectionContent","stickyBarItems","stickyBarItemsWrapper","_onRightArrowClick","_updateUrl","_containerWidth2","_max2","contentTop","contentBottom","windowTop","_becomeUnsticky","_touchStart","changedTouches","defaultActive","attributes","isColored","coloredChild","getPropertyValue","pushState","headlineContent","headlineText","headlineIcon","Textblock","config$A","hasBr","_calculateSpaceFromStringEndToRight","$headlineContent","$headlineText","$headlineIcon","_this$_elements$$head","differenceOfWidth","lastWord","lastWordWithIcon","headlineTextLength","offsetWidth","headlineWithoutLastWord","headlineTextSplit","yearline","itemYearIndicator","fixedYearDecadeText","timelineInner","fixedYearCentury","year","translated","prevItem","fixedYearDecadeHidden","fixedYearDecadeShowTransition","fixedYearCenturyHidden","fixedYearCenturyShowTransition","Timeline","introHidden","_currentDecade","_currentCentury","_translate","_itemWidth","_itemMarginRight","_yearLineItemLineLeft","_centuryWidth","_previousGoTo","_isLeft","_decadeWidth","_lastClickCentury","_animationLength","_lineOffset","_yearEndMarker","_isBeingTouched","_extractYearsAndDecades","itemHTML","$items","_calcItemMarginRight","_generateYearline","$fixedYearDecade","_centurys","_setYearlineItemLeft","config$B","_setItemsHeight","$fixedYearCentury","$yearline","_decades","$yearControl","$timelineInner","$intro","yearControl","fixedYearDecade","startTranslate","lastPageX","_updateActiveIndexByPosition","_calcItemWidth","_updateIntroOpacity","_onTouchEnd","one","itemWidth","itemMarginString","combinedWidth","oldIndex","_getActiveIndexByPosition","lineWidth","introOpacityFactor","activeIndex","currentItem","decadeOpacityFactor","_decadeOpacityFactor","_updateDragbar","_getScrollDistanceFromContent","_updateTranslations","additionalTranslate","nextItem","_yearLineItemLineWidth","_goToNew","marginFactor","_updateFixedYearState","total","_i","_goToFromClick","yearlineRoot","isLeft","_lastDecade","_lastCentury","_width2","_width3","_updateFixedYearHtml","_goTo","lastCentury","totalItems","totalMargin","centuryWidth","decadeWidth","_additionalTranslate2","_updateYearControl","yearControlItemPreActive","yearControlItemActive","decade","_getDecadeFromYear","_generateYearIndicators","$yearIndicator","_generateYearIndicatorForItem","century","firstPart","secondPart","centuryChange","decadeChange","isLast","isLastElement","_this12","lastDecade","_getCenturyFromYear","_this13","createLabeledHtml","_years","_this14","sliderHeight","msMaxTouchPoints","activateButton","videoFullsizeWrapper","VideoRound","$videoRoundWrapper","config$C","videoRoundWrapper","videoCustomControls","Video","_seeksliderThumbnailOnHover","_seeksliderChangeHandler","bind","_seeksliderTimerOnHover","$videoCustomControls","config$D","progressBar","mouseHoverTime","mousemove","progressBarPosition","mousePositionX","getBoundingClientRect","mouseTime","border","border-radius","_setVolume","_setFullscreen","videoPaused","captionsMenuButtons","button","listItem","textTracks","mode","display","openBox","submit","LegalOverlay","$submit","getElementById","$cancle","$checkbox","$openBox","config$E","cancle","checked","activeDot","playPauseBtnImageVideoTile","slideDotActive","slideDotsPaused","btnPlaying","slideActive","slidePrev","slideNext","imageVideoTilePlayIcon","dotnumber","imageLength","autoplaySpeed","responsive","sliderConfigHero","SM","sliderConfigProducts","CarouselHero","_currentTime","_isPlaying","_slides","_currentSlide","_nextSlides","_prevSlides","_doneFix","_updateDots","config$F","_updateClasses","_onSlideChange","_x2","_x3","_pauseAllVideos","_x4","_goToSlide","$greyDot","$currentTarget","_init","_isPaused","$btn","lastElementChild","pauseImageVideoTile","playImageVideoTile","videoDuration","_onImageTimerTick","_imageDuration","_onSlideChange2","$currentSlide","_callee6$","_callee6","_context6","isVideo","_onVideoTimerTick","promise","imageVideoTilePauseIcon","_callee5","client","navigatorUserAgentToLowerCase","userAgent","isChrome"],"mappings":"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","file":"main.min.js","sourcesContent":["function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nmodule.exports = toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nmodule.exports = toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// In this project there are unfortunately two jQuerys\r\n// `window.$` references v1.11.0\r\n// `window.jQuery` references v3.4.1\r\n\r\nexport default window.jQuery;\r\n","// eslint-disable-next-line max-classes-per-file\r\n\r\nimport $ from '../jQuery/jQuery';\r\n\r\nclass Module {\r\n constructor(moduleName, moduleClass) {\r\n this.name = moduleName;\r\n this.class = moduleClass;\r\n this.instances = new Map();\r\n }\r\n}\r\n\r\nclass ModuleRegistry {\r\n constructor() {\r\n this._registeredModules = new Map();\r\n this._autoApplySelectors = new Map();\r\n this._addEventListeners();\r\n }\r\n\r\n _addEventListeners() {\r\n document.addEventListener('DOMContentLoaded', () => {\r\n this._initAutoApplyModules();\r\n });\r\n }\r\n\r\n registerModule(moduleClassName, moduleClass) {\r\n if (!moduleClassName) {\r\n throw new TypeError('moduleClassName must be a non-empty string');\r\n }\r\n\r\n const isValidModuleClass = ModuleRegistry._validateModuleClass(moduleClass);\r\n\r\n if (!isValidModuleClass) {\r\n return null;\r\n }\r\n\r\n const hasModule = this._registeredModules.has(moduleClassName);\r\n\r\n if (hasModule) {\r\n const existingModule = this._registeredModules.get(moduleClassName);\r\n\r\n if (moduleClass !== existingModule.class) {\r\n throw new TypeError(`A module with name '${moduleClassName}' is already registered`);\r\n }\r\n\r\n return existingModule;\r\n }\r\n\r\n const module = new Module(moduleClassName, moduleClass);\r\n\r\n this._registeredModules.set(moduleClassName, module);\r\n\r\n return module;\r\n }\r\n\r\n autoApplyModule(moduleClassName, selector) {\r\n const hasModule = this._registeredModules.has(moduleClassName);\r\n\r\n if (!hasModule) {\r\n throw new TypeError(`No module with name '${moduleClassName}' was registered`);\r\n }\r\n\r\n const trimmedSelector = selector ? selector.trim() : selector;\r\n\r\n if (!trimmedSelector) {\r\n throw new TypeError('selector must be a non-empty string');\r\n }\r\n\r\n const module = this._registeredModules.get(moduleClassName);\r\n\r\n this._processAutoApplyModule(module, trimmedSelector);\r\n }\r\n\r\n applyModule(moduleClassName, element) {\r\n const hasModule = this._registeredModules.has(moduleClassName);\r\n\r\n if (!hasModule) {\r\n throw new TypeError(`No module with name '${moduleClassName}' was registered`);\r\n }\r\n\r\n if (!(element instanceof HTMLElement)) {\r\n throw new TypeError('element must be a HTMLElement');\r\n }\r\n\r\n const module = this._registeredModules.get(moduleClassName);\r\n\r\n ModuleRegistry._initModule(module, element);\r\n }\r\n\r\n _processAutoApplyModule(module, selector) {\r\n if (ModuleRegistry._isDomReady()) {\r\n const $elements = $(selector);\r\n\r\n $elements.each((i, el) => {\r\n // init the module immediately if `DOMContentLoaded already fired\r\n ModuleRegistry._initModule(module, el);\r\n });\r\n } else {\r\n const hasSelector = this._autoApplySelectors.has(selector);\r\n let modulesForSelector;\r\n\r\n if (hasSelector) {\r\n modulesForSelector = this._autoApplySelectors.get(selector);\r\n } else {\r\n modulesForSelector = new Set();\r\n this._autoApplySelectors.set(selector, modulesForSelector);\r\n }\r\n\r\n modulesForSelector.add(module);\r\n }\r\n }\r\n\r\n _initAutoApplyModules() {\r\n this._autoApplySelectors.forEach((modules, selector) => {\r\n const $elements = $(selector);\r\n\r\n $elements.each((i, el) => {\r\n modules.forEach((module) => {\r\n ModuleRegistry._initModule(module, el);\r\n });\r\n });\r\n });\r\n }\r\n\r\n static _initModule(module, element) {\r\n if (module.instances.has(element)) {\r\n throw new TypeError(`Module '${module.name}' already instantiated on given element`);\r\n }\r\n\r\n const $element = $(element);\r\n const elementData = $element.data();\r\n\r\n // eslint-disable-next-line new-cap\r\n const moduleInstance = new module.class($element, elementData);\r\n\r\n module.instances.set(element, moduleInstance);\r\n\r\n moduleInstance.init();\r\n }\r\n\r\n static _validateModuleClass(moduleClass) {\r\n if (!moduleClass || typeof moduleClass !== 'function') {\r\n throw new TypeError('moduleClass must be a function');\r\n }\r\n\r\n if (typeof moduleClass.prototype.init !== 'function') {\r\n throw new TypeError('A module must have a \"init\" method');\r\n }\r\n\r\n return true;\r\n }\r\n\r\n static _isDomReady() {\r\n const { readyState } = document;\r\n return readyState === 'interactive' || readyState === 'complete';\r\n }\r\n}\r\n\r\nexport default new ModuleRegistry();\r\n","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","export class Scrolling {\n static lastScrollTop = 0;\n\n static addBodyNoScroll() {\n const body = document.querySelector('body');\n\n if(body) {\n const scrollTop = window.scrollY;\n body.classList.add('body--no-scroll-new');\n body.style.top = -scrollTop + 'px';\n Scrolling.lastScrollTop = scrollTop;\n }\n }\n\n static removeBodyNoScroll() {\n const body = document.querySelector('body');\n\n if(body) {\n body.classList.remove('body--no-scroll-new');\n body.style.top = '';\n\n \n const html = document.querySelector('html');\n\n if(html) {\n html.style.scrollBehavior = 'auto';\n window.scrollTo(0, Scrolling.lastScrollTop);\n html.style.scrollBehavior = 'smooth';\n }\n }\n }\n}","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\nmodule.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction _regeneratorRuntime() {\n \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n module.exports = _regeneratorRuntime = function _regeneratorRuntime() {\n return e;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n var t,\n e = {},\n r = Object.prototype,\n n = r.hasOwnProperty,\n o = Object.defineProperty || function (t, e, r) {\n t[e] = r.value;\n },\n i = \"function\" == typeof Symbol ? Symbol : {},\n a = i.iterator || \"@@iterator\",\n c = i.asyncIterator || \"@@asyncIterator\",\n u = i.toStringTag || \"@@toStringTag\";\n function define(t, e, r) {\n return Object.defineProperty(t, e, {\n value: r,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }), t[e];\n }\n try {\n define({}, \"\");\n } catch (t) {\n define = function define(t, e, r) {\n return t[e] = r;\n };\n }\n function wrap(t, e, r, n) {\n var i = e && e.prototype instanceof Generator ? e : Generator,\n a = Object.create(i.prototype),\n c = new Context(n || []);\n return o(a, \"_invoke\", {\n value: makeInvokeMethod(t, r, c)\n }), a;\n }\n function tryCatch(t, e, r) {\n try {\n return {\n type: \"normal\",\n arg: t.call(e, r)\n };\n } catch (t) {\n return {\n type: \"throw\",\n arg: t\n };\n }\n }\n e.wrap = wrap;\n var h = \"suspendedStart\",\n l = \"suspendedYield\",\n f = \"executing\",\n s = \"completed\",\n y = {};\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n var p = {};\n define(p, a, function () {\n return this;\n });\n var d = Object.getPrototypeOf,\n v = d && d(d(values([])));\n v && v !== r && n.call(v, a) && (p = v);\n var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);\n function defineIteratorMethods(t) {\n [\"next\", \"throw\", \"return\"].forEach(function (e) {\n define(t, e, function (t) {\n return this._invoke(e, t);\n });\n });\n }\n function AsyncIterator(t, e) {\n function invoke(r, o, i, a) {\n var c = tryCatch(t[r], t, o);\n if (\"throw\" !== c.type) {\n var u = c.arg,\n h = u.value;\n return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) {\n invoke(\"next\", t, i, a);\n }, function (t) {\n invoke(\"throw\", t, i, a);\n }) : e.resolve(h).then(function (t) {\n u.value = t, i(u);\n }, function (t) {\n return invoke(\"throw\", t, i, a);\n });\n }\n a(c.arg);\n }\n var r;\n o(this, \"_invoke\", {\n value: function value(t, n) {\n function callInvokeWithMethodAndArg() {\n return new e(function (e, r) {\n invoke(t, n, e, r);\n });\n }\n return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n }\n });\n }\n function makeInvokeMethod(e, r, n) {\n var o = h;\n return function (i, a) {\n if (o === f) throw Error(\"Generator is already running\");\n if (o === s) {\n if (\"throw\" === i) throw a;\n return {\n value: t,\n done: !0\n };\n }\n for (n.method = i, n.arg = a;;) {\n var c = n.delegate;\n if (c) {\n var u = maybeInvokeDelegate(c, n);\n if (u) {\n if (u === y) continue;\n return u;\n }\n }\n if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) {\n if (o === h) throw o = s, n.arg;\n n.dispatchException(n.arg);\n } else \"return\" === n.method && n.abrupt(\"return\", n.arg);\n o = f;\n var p = tryCatch(e, r, n);\n if (\"normal\" === p.type) {\n if (o = n.done ? s : l, p.arg === y) continue;\n return {\n value: p.arg,\n done: n.done\n };\n }\n \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg);\n }\n };\n }\n function maybeInvokeDelegate(e, r) {\n var n = r.method,\n o = e.iterator[n];\n if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y;\n var i = tryCatch(o, e.iterator, r.arg);\n if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y;\n var a = i.arg;\n return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y);\n }\n function pushTryEntry(t) {\n var e = {\n tryLoc: t[0]\n };\n 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);\n }\n function resetTryEntry(t) {\n var e = t.completion || {};\n e.type = \"normal\", delete e.arg, t.completion = e;\n }\n function Context(t) {\n this.tryEntries = [{\n tryLoc: \"root\"\n }], t.forEach(pushTryEntry, this), this.reset(!0);\n }\n function values(e) {\n if (e || \"\" === e) {\n var r = e[a];\n if (r) return r.call(e);\n if (\"function\" == typeof e.next) return e;\n if (!isNaN(e.length)) {\n var o = -1,\n i = function next() {\n for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;\n return next.value = t, next.done = !0, next;\n };\n return i.next = i;\n }\n }\n throw new TypeError(_typeof(e) + \" is not iterable\");\n }\n return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", {\n value: GeneratorFunctionPrototype,\n configurable: !0\n }), o(GeneratorFunctionPrototype, \"constructor\", {\n value: GeneratorFunction,\n configurable: !0\n }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) {\n var e = \"function\" == typeof t && t.constructor;\n return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name));\n }, e.mark = function (t) {\n return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t;\n }, e.awrap = function (t) {\n return {\n __await: t\n };\n }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {\n return this;\n }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {\n void 0 === i && (i = Promise);\n var a = new AsyncIterator(wrap(t, r, n, o), i);\n return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {\n return t.done ? t.value : a.next();\n });\n }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () {\n return this;\n }), define(g, \"toString\", function () {\n return \"[object Generator]\";\n }), e.keys = function (t) {\n var e = Object(t),\n r = [];\n for (var n in e) r.push(n);\n return r.reverse(), function next() {\n for (; r.length;) {\n var t = r.pop();\n if (t in e) return next.value = t, next.done = !1, next;\n }\n return next.done = !0, next;\n };\n }, e.values = values, Context.prototype = {\n constructor: Context,\n reset: function reset(e) {\n if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);\n },\n stop: function stop() {\n this.done = !0;\n var t = this.tryEntries[0].completion;\n if (\"throw\" === t.type) throw t.arg;\n return this.rval;\n },\n dispatchException: function dispatchException(e) {\n if (this.done) throw e;\n var r = this;\n function handle(n, o) {\n return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o;\n }\n for (var o = this.tryEntries.length - 1; o >= 0; --o) {\n var i = this.tryEntries[o],\n a = i.completion;\n if (\"root\" === i.tryLoc) return handle(\"end\");\n if (i.tryLoc <= this.prev) {\n var c = n.call(i, \"catchLoc\"),\n u = n.call(i, \"finallyLoc\");\n if (c && u) {\n if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n } else if (c) {\n if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n } else {\n if (!u) throw Error(\"try statement without catch or finally\");\n if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n }\n }\n }\n },\n abrupt: function abrupt(t, e) {\n for (var r = this.tryEntries.length - 1; r >= 0; --r) {\n var o = this.tryEntries[r];\n if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) {\n var i = o;\n break;\n }\n }\n i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);\n var a = i ? i.completion : {};\n return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a);\n },\n complete: function complete(t, e) {\n if (\"throw\" === t.type) throw t.arg;\n return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y;\n },\n finish: function finish(t) {\n for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n var r = this.tryEntries[e];\n if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;\n }\n },\n \"catch\": function _catch(t) {\n for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n var r = this.tryEntries[e];\n if (r.tryLoc === t) {\n var n = r.completion;\n if (\"throw\" === n.type) {\n var o = n.arg;\n resetTryEntry(r);\n }\n return o;\n }\n }\n throw Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(e, r, n) {\n return this.delegate = {\n iterator: values(e),\n resultName: r,\n nextLoc: n\n }, \"next\" === this.method && (this.arg = t), y;\n }\n }, e;\n}\nmodule.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// TODO(Babel 8): Remove this file.\n\nvar runtime = require(\"../helpers/regeneratorRuntime\")();\nmodule.exports = runtime;\n\n// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\nmodule.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nmodule.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableRest, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithHoles = require(\"./arrayWithHoles.js\");\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableRest = require(\"./nonIterableRest.js\");\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\nmodule.exports = _slicedToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","export class Breakpoints {\r\n //lower the breakpoints by 1, so that the breakpoints act at the right places\r\n static BREAKPOINTS = {\r\n XS: 0,\r\n SM: 767,\r\n MD: 991,\r\n MDLG: 1023,\r\n LG: 1439,\r\n XL: 1919,\r\n XXL: 1999\r\n };\r\n\r\n static breakpointNames = ['xs', 'sm', 'md', 'mdlg', 'lg', 'xl', 'xxl'];\r\n static _breakpointChangeCallbacks = [];\r\n\r\n static onBreakpointChange(callback) {\r\n if (typeof callback !== 'function') throw new TypeError('Callback must be a function.');\r\n\r\n const breakpointChangeCallback = {\r\n from: null,\r\n to: null,\r\n callback: callback\r\n };\r\n\r\n Breakpoints._breakpointChangeCallbacks.push(breakpointChangeCallback);\r\n }\r\n\r\n static onBreakpointChangeFromSmallerTo(to, callback) {\r\n if (typeof callback !== 'function') throw new TypeError('Callback must be a function.');\r\n if (typeof !Breakpoints.breakpointNames.includes(from)) throw new TypeError('\"from\" breakpoint not known');\r\n\r\n const breakpointChangeCallback = {\r\n from: 'smaller',\r\n to: to,\r\n callback: callback\r\n };\r\n\r\n Breakpoints._breakpointChangeCallbacks.add(breakpointChangeCallback);\r\n }\r\n\r\n static onBreakpointChangeFromBiggerTo(to, callback) {\r\n if (typeof callback !== 'function') throw new TypeError('Callback must be a function.');\r\n if (typeof !Breakpoints.breakpointNames.includes(from)) throw new TypeError('\"from\" breakpoint not known');\r\n\r\n const breakpointChangeCallback = {\r\n from: 'bigger',\r\n to: to,\r\n callback: callback\r\n };\r\n\r\n Breakpoints._breakpointChangeCallbacks.add(breakpointChangeCallback);\r\n }\r\n\r\n static onBreakpointChangeFromTo(from, to, callback) {\r\n if (typeof callback !== 'function') throw new TypeError('Callback must be a function.');\r\n if (typeof !Breakpoints.breakpointNames.includes(from)) throw new TypeError('\"from\" breakpoint not known');\r\n if (typeof !Breakpoints.breakpointNames.includes(to)) throw new TypeError('\"to\" breakpoint not known');\r\n\r\n const breakpointChangeCallback = {\r\n from: from,\r\n to: to,\r\n callback: callback\r\n };\r\n\r\n Breakpoints._breakpointChangeCallbacks.add(breakpointChangeCallback);\r\n }\r\n\r\n static onBreakpointChangeFrom(from, callback) {\r\n if (typeof callback !== 'function') throw new TypeError('Callback must be a function.');\r\n if (typeof !Breakpoints.breakpointNames.includes(from)) throw new TypeError('\"from\" breakpoint not known');\r\n\r\n const breakpointChangeCallback = {\r\n from: from,\r\n to: null,\r\n callback: callback\r\n };\r\n\r\n Breakpoints._breakpointChangeCallbacks.push(breakpointChangeCallback);\r\n }\r\n\r\n static onBreakpointChangeTo(to, callback) {\r\n if (typeof callback !== 'function') throw new TypeError('Callback must be a function.');\r\n if (typeof !Breakpoints.breakpointNames.includes(to)) throw new TypeError('\"to\" breakpoint not known');\r\n\r\n const breakpointChangeCallback = {\r\n from: null,\r\n to: to,\r\n callback: callback\r\n };\r\n\r\n Breakpoints._breakpointChangeCallbacks.push(breakpointChangeCallback);\r\n }\r\n\r\n static getBreakpoint() {\r\n let breakpoint = 'xs';\r\n const width = $(window).width() + (window.innerWidth-$(document).width());\r\n \r\n for (const [key, value] of Object.entries(Breakpoints.BREAKPOINTS)) {\r\n if (value < width) breakpoint = key;\r\n }\r\n \r\n return breakpoint.toLowerCase();\r\n }\r\n \r\n static isBreakpoint(breakpointName) {\r\n return breakpointName.toLowerCase() === Breakpoints.getBreakpoint();\r\n }\r\n\r\n static isBreakpointOrLarger(breakpointName) {\r\n const breakpointIndex = this.breakpointNames.indexOf(breakpointName);\r\n const currentBreakpointIndex = this.breakpointNames.indexOf(Breakpoints.getBreakpoint());\r\n\r\n return breakpointIndex <= currentBreakpointIndex;\r\n }\r\n\r\n static isBreakpointOrSmaller(breakpointName) {\r\n const breakpointIndex = this.breakpointNames.indexOf(breakpointName);\r\n const currentBreakpointIndex = this.breakpointNames.indexOf(Breakpoints.getBreakpoint());\r\n\r\n return breakpointIndex >= currentBreakpointIndex;\r\n }\r\n\r\n static _initBreakpointChangeListener() {\r\n let lastBreakpoint = Breakpoints.getBreakpoint();\r\n \r\n $(window).on('resize', () => {\r\n const currentBreakpoint = Breakpoints.getBreakpoint();\r\n \r\n if (currentBreakpoint !== lastBreakpoint) {\r\n Breakpoints._breakpointChangeCallbacks.forEach((callbackSetting) => {\r\n if (Breakpoints._callbackShouldFire(lastBreakpoint, currentBreakpoint, callbackSetting)) {\r\n callbackSetting.callback();\r\n }\r\n });\r\n };\r\n \r\n lastBreakpoint = currentBreakpoint;\r\n });\r\n }\r\n\r\n static _callbackShouldFire(lastBreakpoint, currentBreakpoint, callbackSetting) {\r\n return callbackSetting.from === null && callbackSetting.to === null ||\r\n callbackSetting.from === lastBreakpoint && callbackSetting.to === null ||\r\n callbackSetting.from === null && callbackSetting.to === currentBreakpoint ||\r\n callbackSetting.from === lastBreakpoint && callbackSetting.to === currentBreakpoint ||\r\n callbackSetting.from === 'smaller' && callbackSetting.to === currentBreakpoint \r\n && this.breakpointNames.indexOf(lastBreakpoint) < Breakpoints.breakpointNames.indexOf(currentBreakpoint) ||\r\n callbackSetting.from === 'bigger' && callbackSetting.to === currentBreakpoint\r\n && this.breakpointNames.indexOf(lastBreakpoint) > Breakpoints.breakpointNames.indexOf(currentBreakpoint);\r\n }\r\n}\r\n\r\n(() => {\r\n Breakpoints._initBreakpointChangeListener();\r\n})();","import { Breakpoints } from '../breakpoints/breakpoints';\r\nimport moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: 'a[href^=\"#abbr-\"], *[data-abbreviation]',\r\n closeBtn: '.abbreviation__close-btn',\r\n overlay: '.abbreviation__overlay',\r\n trigger: '.abbreviation__trigger',\r\n body: 'body',\r\n wrapper: '.abbreviation',\r\n overlaySquare: '.abbreviation__overlay-square',\r\n },\r\n classNames: {\r\n overlayVisible: 'abbreviation__overlay--visible',\r\n },\r\n};\r\n\r\nclass Abbreviation {\r\n static count = 1;\r\n static data = null;\r\n static ids = [];\r\n static idCounterMap = {};\r\n\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._count = 1;\r\n this._id = '';\r\n this._title = '';\r\n this._content = '';\r\n this._$parent = null;\r\n this._$overlay = null;\r\n this._$trigger = null;\r\n this._isInserted = false;\r\n this._isVisible = false;\r\n }\r\n\r\n init() {\r\n // extract id from element\r\n let id = null;\r\n\r\n if(this._$rootElement.attr('href')) {\r\n id = this._$rootElement.attr('href').substring(6);\r\n } else if(this._$rootElement.data('abbreviation')) {\r\n id = this._$rootElement.data('abbreviation').substring(6);\r\n }\r\n\r\n if(id === null) {\r\n // console.log('no id');\r\n return;\r\n } \r\n\r\n this._id = id;\r\n\r\n if(!Abbreviation.idCounterMap[id]) {\r\n Abbreviation.idCounterMap[id] = Abbreviation.count;\r\n this._count = Abbreviation.count;\r\n Abbreviation.count++;\r\n } else {\r\n this._count = Abbreviation.idCounterMap[id];\r\n }\r\n\r\n // find matching element\r\n let abbr = null;\r\n \r\n Abbreviation.data.forEach(element => {\r\n if(element.id == this._id) {\r\n abbr = element;\r\n }\r\n });\r\n\r\n if(abbr === null) {\r\n // console.log('no abbr');\r\n return;\r\n } \r\n\r\n\r\n \r\n this._title = abbr.title;\r\n this._content = abbr.content;\r\n\r\n const html = this._generateHTML();\r\n const parent = this._$rootElement[0].parentNode;\r\n const $parent = $(parent);\r\n this._$parent = $parent;\r\n parent.replaceChild($(html)[0], this._$rootElement[0]);\r\n const $trigger = $parent.find('.abbreviation__trigger--' + this._id);\r\n\r\n this._$trigger = $trigger;\r\n \r\n $trigger.on('click', (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n const $overlays = $('.abbreviation__overlay');\r\n $overlays.css('opacity', 0);\r\n $overlays.css('pointer-events', 'none');\r\n\r\n if(this._isInserted) {\r\n this._reposition();\r\n this._$overlay.css('opacity', 1);\r\n this._$overlay.css('pointer-events', 'all');\r\n this._isBodyNoScroll(false);\r\n \r\n } else {\r\n const overlayHtml = this._generateOverlayHtml();\r\n $('main').append(overlayHtml);\r\n this._isInserted = true;\r\n\r\n this._$overlay = $(`#abbreviation-overlay-${this._id}`);\r\n this._$overlay.css('pointer-events', 'all');\r\n\r\n this._reposition();\r\n \r\n setTimeout(() => {\r\n this._$overlay.css('opacity', 1);\r\n this._isBodyNoScroll(false);\r\n }, 100)\r\n \r\n this._$overlay.find('.abbreviation__close-btn').on('mousedown', (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n \r\n this._$overlay.css('opacity', 0);\r\n this._$overlay.css('pointer-events', 'none');\r\n this._isBodyNoScroll(true);\r\n });\r\n\r\n $('body').on('mousedown', () => {\r\n this._$overlay.css('opacity', 0);\r\n this._$overlay.css('pointer-events', 'none');\r\n this._isBodyNoScroll(true);\r\n });\r\n\r\n this._$overlay.find('p').on('mousedown', (e) => {\r\n e.stopPropagation();\r\n });\r\n\r\n this._$overlay.find('.abbreviation__backdrop').on('click', (e) => {\r\n this._$overlay.css('opacity', 0);\r\n this._$overlay.css('pointer-events', 'none');\r\n this._isBodyNoScroll(true);\r\n });\r\n\r\n this._$overlay.find('a').on('mousedown', (e) => {\r\n e.stopPropagation();\r\n });\r\n\r\n this._$overlay.on('mousedown', (e) => {\r\n e.stopPropagation();\r\n });\r\n\r\n $(window).on('resize', () => {\r\n this._reposition();\r\n });\r\n } \r\n });\r\n\r\n $parent.find('.abbreviation').on('mousedown', (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n });\r\n\r\n \r\n\r\n $('body').on('mousedown', () => {\r\n $('body').find('.abbreviation__overlay').removeClass('abbreviation__overlay--visible');\r\n })\r\n }\r\n\r\n _getOffset( el ) {\r\n var _x = 0;\r\n var _y = 0;\r\n while( el && !isNaN( el.offsetLeft ) && !isNaN( el.offsetTop ) ) {\r\n _x += el.offsetLeft - el.scrollLeft;\r\n _y += el.offsetTop - el.scrollTop;\r\n\r\n el = el.offsetParent;\r\n }\r\n return { top: _y, left: _x };\r\n }\r\n\r\n _reposition() {\r\n // maybe we need to reposition the overlay, because there is not enough space on right side\r\n const $root = this._$trigger.closest('.abbreviation');\r\n const $overlay = $('body').find('.abbreviation__overlay');\r\n\r\n if(!this._$overlay) return;\r\n\r\n const offsetLeft = $root[0].offsetLeft;\r\n const overlayWidth = this._$overlay[0].clientWidth;\r\n\r\n // mobile\r\n if(Breakpoints.isBreakpoint('xs')) {\r\n this._$overlay.css('right', '0');\r\n this._$overlay.css('left', '0');\r\n this._$overlay.css('bottom', '0');\r\n this._$overlay.css('top', 'auto');\r\n this._$overlay.css('transform', 'none');\r\n this._$overlay.focus();\r\n return;\r\n } \r\n\r\n // other devices \r\n if($(window).width() - offsetLeft < overlayWidth) {\r\n if(this._$trigger.closest('.slick-track')) {\r\n // we are inside a slider\r\n const $track = this._$trigger.closest('.slick-track');\r\n var matrix = new WebKitCSSMatrix($track.css('transform'));\r\n this._$overlay.css('left', this._getOffset(this._$trigger[0]).left + 55 + matrix.m41+ 'px');\r\n }\r\n else {\r\n this._$overlay.css('left', this._getOffset(this._$trigger[0]).left - 35 + 'px');\r\n }\r\n\r\n this._$overlay.find('.abbreviation__overlay-square').css('left', 'auto');\r\n this._$overlay.find('.abbreviation__overlay-square').css('right', '30px');\r\n this._$overlay.css('transform', 'translate(-100%,-100%)');\r\n this._$overlay.css('right', 'auto');\r\n this._$overlay.css('bottom', 'auto');\r\n this._$overlay.css('top', this._getOffset(this._$trigger[0]).top - 25 + 'px');\r\n this._$overlay.focus();\r\n\r\n } else {\r\n\r\n if(this._$trigger.closest('.slick-track')) {\r\n // we are inside a slider\r\n const $track = this._$trigger.closest('.slick-track');\r\n var matrix = new WebKitCSSMatrix($track.css('transform'));\r\n this._$overlay.css('left', this._getOffset(this._$trigger[0]).left - 35 + matrix.m41+ 'px');\r\n }\r\n else {\r\n this._$overlay.css('left', this._getOffset(this._$trigger[0]).left - 35 + 'px');\r\n }\r\n\r\n this._$overlay.find('.abbreviation__overlay-square').css('right', 'auto');\r\n this._$overlay.find('.abbreviation__overlay-square').css('left', '30px');\r\n this._$overlay.css('transform', 'translateY(-100%)');\r\n this._$overlay.css('bottom', 'auto');\r\n this._$overlay.css('top', this._getOffset(this._$trigger[0]).top - 25 + 'px');\r\n this._$overlay.css('right', 'auto');\r\n this._$overlay.focus();\r\n }\r\n }\r\n\r\n static async _fetch() {\r\n // get ids of all needed abbreviations\r\n const ids = [];\r\n\r\n $(config.selectors.root).each((i, el) => {\r\n const $el = $(el);\r\n let id = '';\r\n\r\n if($el.attr('href')) {\r\n id = $el.attr('href').substring(6);\r\n } else if($el.data('abbreviation')) {\r\n id = $el.data('abbreviation').substring(6);\r\n }\r\n \r\n if(id === '') return;\r\n\r\n ids.push(id);\r\n });\r\n\r\n \r\n const finishedSplittedUrl = this._extractIsoAndLanguageFromUrl();\r\n \r\n if(ids.length === 0) return;\r\n \r\n try {\r\n let data;\r\n\r\n if(window.location.hostname === 'localhost') {\r\n data = await $.get('/assets/abbreviations.json?ids=' + ids.join(',')); \r\n } else {\r\n data = await $.get( `/${finishedSplittedUrl.isoCode}/${finishedSplittedUrl.languageSelected}` + `/abbreviations.json?ids=` + ids.join(',')); \r\n }\r\n \r\n if(!data) {\r\n return;\r\n }\r\n\r\n Abbreviation.data = data;\r\n\r\n // modules should initialize after we have the data\r\n moduleRegistry.autoApplyModule('Abbreviation', config.selectors.root);\r\n } catch (error) {\r\n // console.log('Couldnt initialize abbreviations', error);\r\n }\r\n }\r\n\r\n\r\n static _extractIsoAndLanguageFromUrl() {\r\n const currentUrl = window.location.pathname;\r\n const splittedUrl = currentUrl.split('/')\r\n const splittedIsoCode = splittedUrl[1]\r\n const splittedLanguage = splittedUrl[2]\r\n return {\r\n isoCode: splittedIsoCode,\r\n languageSelected: splittedLanguage\r\n }\r\n }\r\n\r\n _generateHTML() {\r\n return `\r\n \r\n \r\n \r\n `;\r\n }\r\n\r\n _generateOverlayHtml(left, top) {\r\n return `\r\n
\r\n
\r\n
\r\n \r\n ${this._title} [${this._count}]\r\n
${this._content}
\r\n
\r\n
\r\n
\r\n `;\r\n }\r\n _isBodyNoScroll(toRemove=Boolean) {\r\n if(window.innerWidth < 768) {\r\n if(toRemove === false) {\r\n $('body').addClass('body--no-scroll')\r\n }else {\r\n $('body').removeClass('body--no-scroll')\r\n } \r\n }\r\n $(window).on('resize', () => {\r\n $('body').removeClass('body--no-scroll')\r\n if(window.innerWidth < 768) {\r\n if(toRemove === false) {\r\n $('body').addClass('body--no-scroll')\r\n }else {\r\n $('body').removeClass('body--no-scroll')\r\n }\r\n }\r\n });\r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('Abbreviation', Abbreviation);\r\n\r\nAbbreviation._fetch();\r\n","import moduleRegistry from '../module-registry/module-registry';\n\nconst config = {\n selectors: {\n root: '.accordion-modul',\n accordionItem: '.accordion-modul__item',\n accordionHeadline: '.accordion-modul__header',\n accordionContent: '.accordion-modul__collapse',\n accordionContentShow: '.accordion-modul__collapse--show',\n accordionIcon: '.accordion-modul__header-icon'\n },\n classNames: {\n accordionContentShow: 'accordion-modul__collapse--show',\n accordionIconOpen: 'accordion-modul__header-icon--open',\n accordionHeadlineActive: 'accordion-modul__header--active',\n },\n};\n\nclass AccordionModul {\n constructor($rootElement, options) {\n this._$rootElement = $rootElement;\n this._options = options;\n this._elements = null;\n this._isHidden = true;\n }\n\n init() {\n this._elements = this._getDomElements();\n \n const smartedit = $('body').data('smartedit');\n\n if(smartedit === true || smartedit === 'true') {\n this._elements.$accordionContent.addClass(config.classNames.accordionContentShow);\n this._elements.$accordionContent.css('height', `${this._elements.$accordionContent[0].scrollHeight}px `)\n this._elements.$accordionIcon.addClass(config.classNames.accordionIconOpen)\n }\n this._accordion();\n }\n\n _getDomElements() {\n return {\n $accordionHeadline: this._$rootElement.find(config.selectors.accordionHeadline),\n $accordionItem: this._$rootElement.find(config.selectors.accordionItem),\n $accordionContentShow: this._$rootElement.find(config.selectors.accordionContentShow),\n $accordionContent: this._$rootElement.find(config.selectors.accordionContent),\n $accordionIcon: this._$rootElement.find(config.selectors.accordionIcon),\n };\n }\n _hideAll() {\n this._elements.$accordionIcon.removeClass(config.classNames.accordionIconOpen)\n this._elements.$accordionContent.removeClass(config.classNames.accordionContentShow)\n this._elements.$accordionContent.height(0);\n this._elements.$accordionHeadline.removeClass(config.classNames.accordionHeadlineActive)\n }\n\n _accordion() {\n const _this = this;\n\n this._$rootElement.find(config.selectors.accordionHeadline).on('click', (e) => {\n \n const closestContent = $(e.currentTarget).siblings(config.selectors.accordionContent);\n const closestIcon = $(e.currentTarget).children(config.selectors.accordionIcon);\n if(!closestContent.hasClass(config.classNames.accordionContentShow)) {\n \n _this._hideAll();\n $(e.currentTarget).addClass(config.classNames.accordionHeadlineActive)\n closestContent.addClass(config.classNames.accordionContentShow);\n closestContent.css('height', `${closestContent[0].scrollHeight}px `)\n \n closestIcon.addClass(config.classNames.accordionIconOpen)\n\n }else {\n $(e.currentTarget).removeClass(config.classNames.accordionHeadlineActive)\n closestContent.removeClass(config.classNames.accordionContentShow);\n closestContent.css('height', `0`)\n closestIcon.removeClass(config.classNames.accordionIconOpen)\n }\n \n })\n\n \n }\n}\n\nmoduleRegistry.registerModule('AccordionModul', AccordionModul);\nmoduleRegistry.autoApplyModule('AccordionModul', config.selectors.root);\n","import { Breakpoints } from '../breakpoints/breakpoints';\r\nimport moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.anchor-section-bar',\r\n sections: '.anchor-section-bar__sections',\r\n container: '.anchor-section-bar__container',\r\n wrapper: '.anchor-section-bar__wrapper',\r\n section: '.anchor-section',\r\n sectionLink: '.anchor-section-bar__section',\r\n arrowLeft: '.anchor-section-bar__arrow-left',\r\n arrowRight: '.anchor-section-bar__arrow-right'\r\n },\r\n dataAttributes: {\r\n sectionName: 'anchor-section-name',\r\n scrollToSectionName: 'anchor-scroll-to-section-name',\r\n anchorButtonLabel: 'anchor-button-label'\r\n },\r\n classNames: {\r\n arrowLeftVisible: 'anchor-section-bar__arrow-left--visible',\r\n arrowRightVisible: 'anchor-section-bar__arrow-right--visible',\r\n wrapperRight: 'anchor-section-bar__wrapper--right',\r\n },\r\n};\r\n\r\nclass AnchorSectionBar {\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n this._enabledArrows = false;\r\n this._lastWindowTop = 0;\r\n this._currentTranslateX = 0;\r\n }\r\n\r\n init() {\r\n this._elements = this._getDomElements();\r\n this._renderComponent();\r\n\r\n this._elements.$sections = this._$rootElement.find(config.selectors.sections);\r\n this._elements.$container = this._$rootElement.find(config.selectors.container);\r\n this._elements.$wrapper = this._$rootElement.find(config.selectors.wrapper);\r\n this._elements.$arrowLeft = this._$rootElement.find(config.selectors.arrowLeft), \r\n this._elements.$arrowRight = this._$rootElement.find(config.selectors.arrowRight), \r\n this._lastWindowTop = $(window).scrollTop();\r\n\r\n this._addEventListeners();\r\n\r\n if(this._elements.$sections.width()+30 > $( document).width() || this._elements.$sections.width() > 1300) {\r\n this._enableArrows();\r\n this._enabledArrows = true;\r\n }\r\n }\r\n\r\n _getDomElements() {\r\n return {\r\n $sections: this._$rootElement.find(config.selectors.sections), \r\n $section: $(document).find(config.selectors.section),\r\n };\r\n }\r\n\r\n\r\n _addEventListeners() {\r\n const _this = this;\r\n\r\n this._elements.$section.each((i, el) => {\r\n const $el = $(el);\r\n const sectionName = $el.data(config.dataAttributes.sectionName);\r\n\r\n $el.attr('id', sectionName);\r\n });\r\n\r\n \r\n this._$rootElement.find(config.selectors.sectionLink).on('click', function() {\r\n // StickySection.setCanBecomneSticky(false);\r\n // ParalaxSection.setCanTransform(false);\r\n\r\n \r\n\r\n // $([document.documentElement, document.body]).animate({\r\n // scrollTop: $(`[data-${config.dataAttributes.sectionName}='${$(this).data(config.dataAttributes.scrollToSectionName)}']`).offset().top\r\n // }, 2000);\r\n\r\n // setTimeout(() => {\r\n // StickySection.setCanBecomneSticky(true);\r\n // ParalaxSection.setCanTransform(true);\r\n // }, 2000);\r\n });\r\n\r\n _this._elements.$arrowLeft.on('click', () => {\r\n _this._onLeftArrowClick();\r\n });\r\n\r\n _this._elements.$arrowRight.on('click', () => {\r\n _this._onRightArrowClick();\r\n });\r\n\r\n var dwidth = $(window).width();\r\n\r\n $(window).on('resize', () => {\r\n if(Breakpoints.isBreakpoint('xs') || Breakpoints.isBreakpoint('sm')) {\r\n this._disableArrows(); \r\n this._enabledArrows = false;\r\n\r\n return;\r\n }\r\n\r\n var wwidth = $(window).width();\r\n if(dwidth !== wwidth) {\r\n this._lastWindowTop = $(window).scrollTop();\r\n if(this._elements.$sections.width()+30 > $( document).width()) {\r\n if( !this._enabledArrows){ \r\n this._enableArrows(); \r\n this._enabledArrows = true;\r\n } else {\r\n this._onLeftArrowClick();\r\n this._enabledArrows = true;\r\n }\r\n } else {\r\n if( this._enabledArrows){\r\n this._disableArrows(); \r\n this._enabledArrows = false;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n _renderComponent() {\r\n let buttonLabel \r\n if($(this._elements.$section[0]).data('anchor-button-label')) {\r\n buttonLabel = $(this._elements.$section[0]).data('anchor-button-label').split(/,/)\r\n }\r\n \r\n this._$rootElement.html(this._createHtml(buttonLabel))\r\n \r\n for (let index = 0; index < this._elements.$section.length; index++) {\r\n const element = this._elements.$section[index];\r\n \r\n if(!index==0){\r\n $(element).removeAttr('data-anchor-button-label')\r\n }\r\n \r\n }\r\n }\r\n\r\n _createItemHtml() {\r\n let html = '';\r\n\r\n this._elements.$section.each((i, el) => {\r\n const $el = $(el);\r\n const sectionName = $el.data(config.dataAttributes.sectionName);\r\n\r\n html += `\r\n
  • \r\n \r\n ${sectionName}\r\n \r\n
  • \r\n `; \r\n });\r\n\r\n return html;\r\n }\r\n\r\n _createHtml(buttonLabel) {\r\n let result = ``;\r\n result += `
    \r\n
    `\r\n if(buttonLabel === undefined) {\r\n result += `\r\n \r\n `\r\n }else {\r\n result += `\r\n \r\n `\r\n }\r\n result += `\r\n
    \r\n
      \r\n ${this._createItemHtml()}\r\n
    \r\n
    \r\n
    \r\n
    `\r\n return result;\r\n }\r\n\r\n _enableArrows() {\r\n let left = $(document).width() - 30;\r\n\r\n if(left > 1270) {\r\n left = 1270;\r\n }\r\n\r\n this._currentTranslateX = this._elements.$sections.width() - left;\r\n\r\n this._elements.$arrowLeft.removeClass(config.classNames.arrowLeftVisible);\r\n this._elements.$arrowRight.addClass(config.classNames.arrowRightVisible);\r\n this._elements.$wrapper.addClass(config.classNames.wrapperRight);\r\n this._elements.$wrapper.css(\"transform\", \"translate(\"+ ((this._currentTranslateX)) +\"px)\");\r\n }\r\n\r\n _disableArrows() {\r\n this._currentTranslateX = 0;\r\n this._elements.$arrowLeft.removeClass(config.classNames.arrowLeftVisible);\r\n this._elements.$arrowRight.removeClass(config.classNames.arrowRightVisible);\r\n this._elements.$wrapper.removeClass(config.classNames.wrapperRight);\r\n this._elements.$wrapper.css(\"transform\", \"translate(0px)\");\r\n }\r\n\r\n _onLeftArrowClick() {\r\n \r\n\r\n let left = $(document).width() - 30;\r\n\r\n if(left > 1270) {\r\n left = 1270;\r\n }\r\n\r\n this._currentTranslateX += $(document).width() / 2 - 30;\r\n\r\n const max = this._elements.$sections.width() - left;\r\n\r\n if(this._currentTranslateX > max) {\r\n this._currentTranslateX = max;\r\n }\r\n\r\n \r\n this._elements.$wrapper.css(\"transform\", \"translate(\"+ ((this._currentTranslateX)) +\"px)\");\r\n this._updateArrows();\r\n }\r\n\r\n _onRightArrowClick() {\r\n let left = $(document).width() + 30;\r\n\r\n if(left > 1270) {\r\n left = 1270;\r\n }\r\n\r\n const max = this._elements.$sections.width() - left;\r\n\r\n if(this._elements.$sections.width() > $(document).width() * 2) {\r\n this._currentTranslateX -= $(document).width() / 2 + 30;\r\n\r\n if(this._currentTranslateX < 0) {\r\n this._currentTranslateX = 0;\r\n }\r\n } else {\r\n this._currentTranslateX -= $(document).width() / 2 + 30;\r\n\r\n if(this._currentTranslateX < 0) {\r\n this._currentTranslateX = 0;\r\n }\r\n }\r\n\r\n this._elements.$wrapper.css(\"transform\", `translate(${this._currentTranslateX}px)`);\r\n this._updateArrows();\r\n }\r\n\r\n _updateArrows() {\r\n let left = $(document).width() - 30;\r\n\r\n if(left > 1270) {\r\n left = 1270;\r\n }\r\n\r\n const max = this._elements.$sections.width() - left;\r\n\r\n if(this._currentTranslateX === 0) {\r\n this._elements.$arrowRight.removeClass(config.classNames.arrowRightVisible);\r\n this._elements.$arrowLeft.addClass(config.classNames.arrowLeftVisible);\r\n } else if(this._currentTranslateX === max) {\r\n this._elements.$arrowRight.addClass(config.classNames.arrowRightVisible);\r\n this._elements.$arrowLeft.removeClass(config.classNames.arrowLeftVisible);\r\n } else {\r\n this._elements.$arrowRight.addClass(config.classNames.arrowRightVisible);\r\n this._elements.$arrowLeft.addClass(config.classNames.arrowLeftVisible);\r\n }\r\n }\r\n \r\n\r\n\r\n}\r\n\r\nmoduleRegistry.registerModule('AnchorSectionBar', AnchorSectionBar);\r\nmoduleRegistry.autoApplyModule('AnchorSectionBar', config.selectors.root);\r\n","import moduleRegistry from '../module-registry/module-registry';\n\nconst config = {\n selectors: {\n root: '.article-header',\n print: '.article-header__icon--print',\n },\n classNames: {\n\n },\n dataAttributes: {\n\n },\n};\n\nclass ArticleHeader {\n constructor($rootElement) {\n this._$rootElement = $rootElement;\n this._elements = null;\n\n }\n\n init() {\n this._elements = this._getDomElements();\n this._addEventListener();\n }\n\n\n\n _getDomElements() {\n return {\n $print: this._$rootElement.find(config.selectors.print),\n };\n }\n\n _addEventListener() {\n this._elements.$print.on('click', () => {\n window.print();\n });\n\n this._elements.$print.on('keydown', (e) => {\n if(e.keyCode !== 13) return;\n\n window.print();\n });\n }\n}\n\nmoduleRegistry.registerModule('ArticleHeader', ArticleHeader);\nmoduleRegistry.autoApplyModule('ArticleHeader', config.selectors.root);\n","/* eslint-disable import/prefer-default-export */\r\nconst config = {\r\n selectors: {\r\n root: '.drag-bar',\r\n barItems: '.drag-bar__bar-items',\r\n barItem: '.drag-bar__bar-item',\r\n controlBtn: '.drag-bar__control-btn',\r\n next: '.drag-bar__control-next',\r\n prev: '.drag-bar__control-prev',\r\n },\r\n classNames: {\r\n itemActive: 'drag-bar__bar-item--active',\r\n dotted: 'drag-bar--dotted',\r\n prevDisabled: 'drag-bar__control-prev--disabled',\r\n nextDisabled: 'drag-bar__control-next--disabled',\r\n itemLine: 'drag-bar__bar-item-line',\r\n },\r\n dataAttributes: {\r\n \r\n },\r\n easeTime: 0.5,\r\n};\r\n\r\nexport class DragBar {\r\n static getClassname() {\r\n return config.selectors.root;\r\n }\r\n\r\n static createHtml(itemCount, slidesToShow=1) {\r\n return DragBar._generateBar(new Array(itemCount), slidesToShow);\r\n }\r\n\r\n static createLabeledHtml(items, slidesToShow=1) {\r\n return DragBar._generateBar(items, slidesToShow);\r\n }\r\n\r\n static init($rootElement, onChangeCallback) {\r\n const $elements = DragBar._getDomElements($rootElement);\r\n \r\n DragBar._addEventListeners($elements, onChangeCallback);\r\n }\r\n\r\n static _getDomElements($rootElement) {\r\n return {\r\n $root: $rootElement,\r\n $barItems: $rootElement.find(config.selectors.barItems),\r\n $barItem: $rootElement.find(config.selectors.barItem),\r\n $button: $rootElement.find(config.selectors.controlBtn),\r\n $next: $rootElement.find(config.selectors.next),\r\n $prev: $rootElement.find(config.selectors.prev),\r\n };\r\n }\r\n\r\n static _getClickOffset(event, $elements) {\r\n return event.clientX - $elements.$button.offset().left;\r\n }\r\n\r\n static setIndex($el, index) {\r\n const $elements = DragBar._getDomElements($el);\r\n\r\n DragBar._syncOnIndex($elements, index);\r\n }\r\n\r\n static _addEventListeners($elements, onChangeCallback) {\r\n const buttonOffset = $elements.$button.offset().left;\r\n let mouseDown = false;\r\n let canUpdate = false;\r\n\r\n $elements.$button.on('mousedown', (e) => {\r\n canUpdate = true;\r\n const clickOffset = DragBar._getClickOffset(e, $elements);\r\n DragBar._registerMousemoveListener($elements, clickOffset, canUpdate, onChangeCallback);\r\n mouseDown = true;\r\n });\r\n\r\n $elements.$barItem.on('click', function (e) {\r\n const currentIndex = DragBar._getCurrentIndex($elements);\r\n const buttonLeft = DragBar._calculateNewButtonLeft($elements, currentIndex);\r\n let index = $(this).data('index');\r\n\r\n if(index === currentIndex) {\r\n if(buttonLeft < e.offsetX) {\r\n index++;\r\n } else {\r\n index--;\r\n }\r\n \r\n DragBar._syncOnIndex($elements, index);\r\n onChangeCallback(index);\r\n } else {\r\n DragBar._syncOnIndex($elements, index);\r\n onChangeCallback(index);\r\n }\r\n \r\n });\r\n\r\n $elements.$barItem.on('keydown', function (e) {\r\n if (e.keyCode !== 13) return;\r\n\r\n const index = $(this).data('index');\r\n DragBar._syncOnIndex($elements, index);\r\n onChangeCallback(index);\r\n });\r\n\r\n $elements.$prev.on('click', () => {\r\n const chunkIndex = DragBar._determineChunkIndex($elements, buttonOffset) - 1;\r\n DragBar._syncOnIndex($elements, chunkIndex);\r\n onChangeCallback(chunkIndex);\r\n });\r\n\r\n $elements.$prev.on('keydown', () => {\r\n if (e.keyCode !== 13) return;\r\n\r\n const chunkIndex = DragBar._determineChunkIndex($elements, buttonOffset) - 1;\r\n DragBar._syncOnIndex($elements, chunkIndex);\r\n onChangeCallback(chunkIndex);\r\n });\r\n\r\n $elements.$next.on('click', () => {\r\n const chunkIndex = DragBar._determineChunkIndex($elements, buttonOffset) + 1;\r\n DragBar._syncOnIndex($elements, chunkIndex);\r\n onChangeCallback(chunkIndex);\r\n });\r\n\r\n $elements.$next.on('keydown', () => {\r\n if (e.keyCode !== 13) return;\r\n\r\n const chunkIndex = DragBar._determineChunkIndex($elements, buttonOffset) + 1;\r\n DragBar._syncOnIndex($elements, chunkIndex);\r\n onChangeCallback(chunkIndex);\r\n });\r\n\r\n $(window).on('mouseup', (e) => {\r\n if (mouseDown) {\r\n mouseDown = false;\r\n canUpdate = false;\r\n const chunkIndex = DragBar._determineChunkIndex($elements, buttonOffset);\r\n DragBar._unregisterMousemoveListener();\r\n DragBar._syncOnIndex($elements, chunkIndex);\r\n onChangeCallback(chunkIndex);\r\n }\r\n });\r\n }\r\n\r\n static _registerMousemoveListener($elements, clickOffset, canUpdate, onChangeCallback) {\r\n let prevX = $elements.$button.offset();\r\n let prevIndex = 0;\r\n\r\n $(window).on('mousemove', (e) => {\r\n if (!canUpdate) return;\r\n\r\n let x = e.clientX;\r\n\r\n if (prevX !== 0) {\r\n const bar = $elements.$barItem;\r\n let newX = x - $elements.$root.offset().left - clickOffset;\r\n\r\n if (newX < 0) newX = 0;\r\n if (newX > bar.width() * bar.length - $elements.$button.width()) {\r\n newX = bar.width() * bar.length - $elements.$button.width();\r\n }\r\n\r\n $elements.$button.css('left', newX);\r\n\r\n const index = DragBar._determineChunkIndex($elements);\r\n\r\n if (index !== prevIndex) {\r\n onChangeCallback(index);\r\n prevIndex = index;\r\n }\r\n }\r\n\r\n prevX = x;\r\n });\r\n }\r\n\r\n static _syncOnIndex($elements, index) {\r\n const left = DragBar._calculateNewButtonLeft($elements, index)\r\n DragBar._moveButton($elements, left);\r\n\r\n $elements.$barItem.removeClass(config.classNames.itemActive);\r\n $($elements.$barItem[index]).addClass(config.classNames.itemActive);\r\n\r\n if (index !== 0) $elements.$prev.removeClass(config.classNames.prevDisabled);\r\n if (index === 0) $elements.$prev.addClass(config.classNames.prevDisabled);\r\n\r\n if (index !== $elements.$barItems[0].children.length - 1) $elements.$next.removeClass(config.classNames.nextDisabled);\r\n if (index === $elements.$barItems[0].children.length - 1) $elements.$next.addClass(config.classNames.nextDisabled);\r\n }\r\n\r\n static _calculateNewButtonLeft($elements, index) {\r\n let left;\r\n\r\n if (DragBar._isAtMinBounds(index)) left = 0;\r\n else if (DragBar._isAtMaxBounds($elements, index))\r\n left = ($elements.$barItem.width() * $elements.$barItem.length) - $elements.$button.width();\r\n else left = (index * $elements.$barItem.width() + ($elements.$barItem.width() - $elements.$button.width()) / 2);\r\n\r\n // in normal mode, we want to ease the button to the middle of the item when we are not at Bounds\r\n if (!DragBar._isAtBounds($elements, index) && !$elements.$root.hasClass(config.classNames.dotted)) {\r\n left += $elements.$barItem.width() / 2 - $elements.$button.width() / 2;\r\n }\r\n\r\n return left;\r\n }\r\n\r\n static _moveButton($elements, left) {\r\n $elements.$button.css('transition', `left ${config.easeTime}s ease`);\r\n $elements.$button.css('left', left);\r\n\r\n setTimeout(() => {\r\n $elements.$button.css('transition', 'none');\r\n }, config.easeTime * 1000);\r\n }\r\n\r\n static _alignButtonAtEnd($elements) {\r\n $elements.$button.css('transition', `right ${config.easeTime}s ease`);\r\n $elements.$button.css('right', 0);\r\n $elements.$button.css('left', 'auto');\r\n\r\n setTimeout(() => {\r\n $elements.$button.css('transition', 'none');\r\n }, config.easeTime * 1000);\r\n }\r\n\r\n static _alignButtonAtStart($elements) {\r\n $elements.$button.css('transition', `left ${config.easeTime}s ease`);\r\n $elements.$button.css('left', 0);\r\n $elements.$button.css('right', 'auto');\r\n\r\n setTimeout(() => {\r\n $elements.$button.css('transition', 'none');\r\n }, config.easeTime * 1000);\r\n }\r\n\r\n static _unregisterMousemoveListener() {\r\n $(window).off('mousemove');\r\n }\r\n\r\n static _determineChunkIndex($elements) {\r\n const offset = $elements.$root.offset().left;\r\n const currentLeft = $elements.$button.offset().left - offset;\r\n const unroundedGoTo = currentLeft / $elements.$barItem.width();\r\n\r\n return Math.round(unroundedGoTo);\r\n }\r\n\r\n static _isAtBounds($elements, index) {\r\n return this._isAtMinBounds(index) || this._isAtMaxBounds($elements, index);\r\n }\r\n\r\n static _isAtMinBounds(index) {\r\n return index <= 0;\r\n }\r\n\r\n static _isAtMaxBounds($elements, index) {\r\n return index >= $elements.$barItem.length - 1;\r\n }\r\n\r\n static _getCurrentIndex($elements) {\r\n let index = 0;\r\n\r\n $elements.$barItem.each((i, element) => {\r\n if($(element).hasClass(config.classNames.itemActive)) {\r\n index = i;\r\n }\r\n });\r\n\r\n return index;\r\n }\r\n\r\n /*\r\n SECTION TEMPLATE\r\n */\r\n\r\n static _generateBar(items, slidesToShow) {\r\n const labeled = items[0] && items[0] !== '' || false;\r\n \r\n return `\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n ${DragBar._generateBarItems(items, slidesToShow)}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n `;\r\n }\r\n\r\n static _generateBarItems(items, slidesToShow) {\r\n let html = '';\r\n //-2/-1 because bar carousel shows 3 slides \r\n // let itemlength=$('.bar-carousel__bar').children() ? items.length-2: items.length;\r\n // items.length/slidesToShow\r\n \r\n for (let index = 0; index < Math.ceil(items.length/slidesToShow); index++) {\r\n html += `\r\n
    \r\n ${items[index] ? DragBar._generateItemLabel(items[index]) : ''}\r\n \r\n
    \r\n `;\r\n }\r\n\r\n return html;\r\n }\r\n\r\n static _generateItemLabel(label) {\r\n return `\r\n ${label}\r\n `;\r\n }\r\n}\r\n","import { Breakpoints } from '../breakpoints/breakpoints';\r\nimport moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.gallery',\r\n body: 'body',\r\n mainSlides: '.gallery__main-slides',\r\n mainSlide: '.gallery__main-slide',\r\n mainSlideVisual: '.gallery__main-slide-visual',\r\n previewSlides: '.gallery__preview-slides',\r\n previewSlide: '.gallery__preview-slide',\r\n next: '.gallery__next',\r\n prev: '.gallery__prev',\r\n openBtn: '.gallery__open-btn',\r\n caption: '.gallery__caption',\r\n videoPlayButton: '.vjs-big-play-button',\r\n video: '.video-js',\r\n videoControls: '.video__controls',\r\n closeBtn: '.gallery__close-btn',\r\n currentMainSlide: '.gallery__main-slide.slick-current',\r\n fullscreenVideo: '.video__fullscreen',\r\n fullscreenPlayButton: '.video__play-pause',\r\n volume: '.video__volume',\r\n seekslider: '.video__seekslider',\r\n },\r\n classNames: {\r\n noScroll: 'no-scroll',\r\n lightboxVisible: 'gallery__lightbox--visible',\r\n fullscreenVideo: 'gallery--fullscreen',\r\n videoOverlay: 'video--overlay',\r\n volumeMute: 'video__volume--mute',\r\n volume25: 'video__volume--25',\r\n volume50: 'video__volume--50',\r\n volume75: 'video__volume--75',\r\n volume100: 'video__volume--100',\r\n currentTime: '.video__currentTime',\r\n durationTime: '.video__durationTime',\r\n },\r\n playIcon: 'Play',\r\n pauseIcon: 'Pause',\r\n dataAttributes: {\r\n slickIndex: 'slick-index',\r\n },\r\n mainSliderConfig: {\r\n dots: false,\r\n arrows: false,\r\n infinite: false,\r\n speed: 750,\r\n slidesToShow: 1.15,\r\n slidesToScroll: 1,\r\n mobileFirst: true,\r\n autoplay: false,\r\n responsive: [\r\n {\r\n breakpoint: Breakpoints.BREAKPOINTS.MD,\r\n settings: {\r\n slidesToShow: 1,\r\n },\r\n },\r\n ],\r\n // asNavFor: '.gallery__preview-slides',\r\n\r\n },\r\n previewSliderConfig: {\r\n dots: false,\r\n arrows: false,\r\n infinite: false,\r\n speed: 750,\r\n slidesToShow: 4,\r\n slidesToScroll: 1,\r\n mobileFirst: true,\r\n autoplay: false,\r\n\r\n },\r\n};\r\n\r\n// eslint-disable-next-line import/prefer-default-export\r\nexport class Gallery {\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n this._imagesHtml = [];\r\n this._captionsHtml = [];\r\n }\r\n\r\n init() {\r\n this._elements = this._getDomElements();\r\n this._elements.$mainSlides.slick(config.mainSliderConfig);\r\n this._elements.$previewSlides.slick(config.previewSliderConfig);\r\n this._addEventListeners();\r\n\r\n this._elements.$mainSlide.each((i, el) => {\r\n this._imagesHtml.push($(el).find(config.selectors.mainSlideVisual).html());\r\n this._captionsHtml.push($(el).find(config.selectors.caption).html());\r\n });\r\n }\r\n\r\n static initLater($rootElement) {\r\n const imagesHtml = [];\r\n const captionsHtml = [];\r\n \r\n const $elements = {\r\n $body: $(config.selectors.body),\r\n $root: $rootElement.find(config.selectors.root),\r\n $mainSlides: $rootElement.find(config.selectors.mainSlides),\r\n $mainSlide: $rootElement.find(config.selectors.mainSlide),\r\n $previewSlides: $rootElement.find(config.selectors.previewSlides),\r\n $previewSlide: $rootElement.find(config.selectors.previewSlide),\r\n $next: $rootElement.find(config.selectors.next),\r\n $prev: $rootElement.find(config.selectors.prev),\r\n $openBtn: $rootElement.find(config.selectors.openBtn),\r\n $closeBtn: $rootElement.find(config.selectors.closeBtn),\r\n $playButton: $rootElement.find(config.selectors.videoPlayButton),\r\n $videoControls: $rootElement.find(config.selectors.videoControls),\r\n $caption: $rootElement.find(config.selectors.caption),\r\n $fullscreenVideo: $rootElement.find(config.selectors.fullscreenVideo),\r\n $fullscreenPlayButton: $rootElement.find(config.selectors.fullscreenPlayButton),\r\n $volume: $rootElement.find(config.selectors.volume),\r\n $seekslider: $rootElement.find(config.selectors.seekslider),\r\n $video: $rootElement.find(config.selectors.video),\r\n };\r\n\r\n $($elements.$previewSlide[0]).addClass('gallery__preview-slide--active');\r\n\r\n \r\n $elements.$mainSlide.each((index, el) => {\r\n const video = $(el).find('.video-js')[0];\r\n\r\n if (video) {\r\n // eslint-disable-next-line no-undef\r\n \r\n bc(video);\r\n }\r\n\r\n \r\n });\r\n\r\n \r\n //refactoring clear names to variable names\r\n $('.gallery__main-slides').on('afterChange', () =>{\r\n let childrenisvideo = $rootElement.find('.slick-current').find('.gallery__main-slide-visual').children()[0]\r\n if($(childrenisvideo).hasClass('video')){\r\n $rootElement.find('.gallery__main-slides-wrapper').addClass('gallery__main-slides-wrapper--video')\r\n }else {\r\n $rootElement.find('.gallery__main-slides-wrapper').removeClass('gallery__main-slides-wrapper--video')\r\n }\r\n });\r\n\r\n $elements.$mainSlides.slick(config.mainSliderConfig);\r\n // $elements.$previewSlides.slick(config.previewSliderConfig);\r\n\r\n $elements.$next.on('click', () => {\r\n const videoSettings = $rootElement.find('.slick-current').find('.video-js')[0];\r\n \r\n if (videoSettings) {\r\n videoSettings.player.pause();\r\n $elements.$fullscreenPlayButton.html(config.playIcon);\r\n }\r\n \r\n $elements.$mainSlides.slick('slickNext');\r\n $elements.$previewSlides.slick('slickNext');\r\n // _setCurrentPreviewSlide();\r\n });\r\n\r\n $elements.$prev.on('click', () => {\r\n const videoSettings = $rootElement.find('.slick-current').find('.video-js')[0];\r\n\r\n if (videoSettings) {\r\n videoSettings.player.pause();\r\n $elements.$fullscreenPlayButton.html(config.playIcon);\r\n }\r\n\r\n $elements.$mainSlides.slick('slickPrev');\r\n $elements.$previewSlides.slick('slickPrev');\r\n // _setCurrentPreviewSlide();\r\n });\r\n\r\n function _goFullscreen() {\r\n //refactoring clear names to variable names\r\n if($('.overlay').hasClass('overlay--full-screen')){\r\n if(document.documentElement.requestFullscreen) {\r\n $rootElement.find('.gallery__main-slide.slick-slide.slick-current')[0].requestFullscreen()\r\n }else if(document.documentElement.webkitEnterFullscreen) {\r\n $rootElement.find('.gallery__main-slide.slick-slide.slick-current')[0].webkitEnterFullscreen()\r\n }\r\n screen.orientation.lock(\"landscape-primary\")\r\n }else {\r\n if(document.documentElement.requestFullscreen) {\r\n $('.gallery')[0].requestFullscreen()\r\n }else if(document.documentElement.webkitEnterFullscreen) {\r\n $('.gallery')[0].webkitEnterFullscreen()\r\n }\r\n screen.orientation.lock(\"landscape-primary\")\r\n }\r\n }; \r\n\r\n function _exitFullscreen() {\r\n //refactoring clear names to variable names\r\n if($('.gallery__main-slide.slick-slide.slick-current').hasClass('gallery__main-slide--fullscreen')){\r\n $rootElement.find('.gallery__main-slide.slick-slide.slick-current').removeClass('gallery__main-slide--fullscreen')\r\n }else {\r\n if(document.fullscreenElement) {\r\n document.exitFullscreen();\r\n \r\n }else if( document.webkitFullscreenElement) {\r\n document.webkitExitFullScreen()\r\n }\r\n if(screen.width <= 900 && !$('body').hasClass('safari')) {\r\n $rootElement.closest('.overlay').removeClass('overlay--full-screen');\r\n screen.orientation.unlock()\r\n }\r\n }\r\n \r\n \r\n }\r\n //refactoring clear names to variable names\r\n function _changeFullscreenState(isFullscreen=Boolean) {\r\n if(isFullscreen && screen.width >= 900) {\r\n $rootElement.closest('.overlay').removeClass('overlay--full-screen');\r\n $rootElement.find('.gallery__open-btn').removeClass('icon-arrowShrink').addClass('icon-StateDark13');\r\n }else {\r\n $elements.$videoControls.removeClass('video__controls--hidden');\r\n $rootElement.closest('.overlay').addClass('overlay--full-screen');\r\n if(screen.width >= 900) {\r\n $rootElement.find('.gallery__open-btn').removeClass('icon-StateDark13').addClass('icon-arrowShrink');\r\n }\r\n }\r\n }\r\n\r\n $elements.$closeBtn.on('click', () => {\r\n // this._elements.$mainSlides.slick('unslick');\r\n const index = $rootElement.find('.slick-current').data('slick-index');\r\n $elements.$videoControls.addClass('video__controls--hidden');\r\n\r\n const videoSettings = $rootElement.find('.slick-current').find('.video-js')[0];\r\n if (videoSettings) {\r\n videoSettings.player.pause();\r\n $elements.$fullscreenPlayButton.html(config.playIcon);\r\n }\r\n\r\n $elements.$mainSlides.slick('unslick');\r\n $elements.$mainSlides.slick(config.mainSliderConfig);\r\n $elements.$mainSlides.slick('slickGoTo', index);\r\n\r\n $elements.$previewSlides.slick('slickGoTo', index);\r\n $elements.$previewSlides.slick('unslick');\r\n $elements.$previewSlides.slick(config.previewSliderConfig);\r\n\r\n if(screen.width <= 900 ) {\r\n _exitFullscreen();\r\n }else {\r\n $rootElement.find('.gallery__open-btn').removeClass('icon-arrowShrink').addClass('icon-StateDark13');\r\n $rootElement.closest('.overlay').removeClass('overlay--full-screen');\r\n }\r\n\r\n }); \r\n\r\n \r\n\r\n $elements.$openBtn.on('click', function() {\r\n // this._elements.$mainSlides.slick('unslick');\r\n const index = $rootElement.find('.slick-current').data('slick-index');\r\n if(screen.width <= 900 && !$('body').hasClass('safari')) {\r\n _goFullscreen();\r\n }\r\n \r\n \r\n\r\n if( $rootElement.closest('.overlay').hasClass('overlay--full-screen')) {\r\n _changeFullscreenState(true)\r\n }else {\r\n _changeFullscreenState(false)\r\n }\r\n\r\n const videoSettings = $rootElement.find('.slick-current').find('.video-js')[0];\r\n if (videoSettings) {\r\n videoSettings.player.pause();\r\n $elements.$fullscreenPlayButton.html(config.playIcon);\r\n }\r\n\r\n $elements.$mainSlides.slick('unslick');\r\n $elements.$mainSlides.slick(config.mainSliderConfig);\r\n $elements.$mainSlides.slick('slickGoTo', index);\r\n\r\n });\r\n\r\n $elements.$mainSlides.on('afterChange', () => {\r\n // _setCurrentPreviewSlide();\r\n });\r\n\r\n $elements.$previewSlide.each((i, el) => {\r\n el.addEventListener('click', () => {\r\n $elements.$mainSlides.slick('slickGoTo', i);\r\n $elements.$previewSlide.removeClass('gallery__preview-slide--active');\r\n $(el).addClass('gallery__preview-slide--active');\r\n })\r\n })\r\n\r\n // eslint-disable-next-line func-names\r\n // $elements.$previewSlide.on('click', function () {\r\n // const $el = $(this);\r\n // const index = $el.data('slick-index');\r\n\r\n // $elements.$mainSlides.slick('slickGoTo', index);\r\n\r\n // $elements.$previewSlide.removeClass('slick-current');\r\n // $(this).addClass('slick-current');\r\n // });\r\n\r\n $elements.$volume.on('click', (e) => {\r\n const videoSettings = $rootElement.find('.slick-current').find('.video-js')[0];\r\n const volumeValue = e.currentTarget.value / 100;\r\n if (videoSettings.player.volume() === 0) {\r\n videoSettings.player.volume(0.25);\r\n $rootElement.find('.slick-current').find('.video__volume--mute').hide();\r\n $rootElement.find('.slick-current').find('.video__volume--25').show();\r\n } else if (videoSettings.player.volume() === 0.25) {\r\n videoSettings.player.volume(0.5);\r\n $rootElement.find('.slick-current').find('.video__volume--25').hide();\r\n $rootElement.find('.slick-current').find('.video__volume--50').show();\r\n } else if (videoSettings.player.volume() === 0.50) {\r\n videoSettings.player.volume(0.75);\r\n $rootElement.find('.slick-current').find('.video__volume--50').hide();\r\n $rootElement.find('.slick-current').find('.video__volume--75').show();\r\n } else if (videoSettings.player.volume() === 0.75) {\r\n videoSettings.player.volume(1);\r\n $rootElement.find('.slick-current').find('.video__volume--75').hide();\r\n $rootElement.find('.slick-current').find('.video__volume--100').show();\r\n } else if (volumeValue === 1) {\r\n videoSettings.player.volume(0);\r\n $rootElement.find('.slick-current').find('.video__volume--100').hide();\r\n $rootElement.find('.slick-current').find('.video__volume--mute').show();\r\n }\r\n });\r\n\r\n $elements.$fullscreenVideo.on('click', (e) => {\r\n // ('fullscreen click');\r\n if ($rootElement.hasClass(config.classNames.fullscreenVideo)) {\r\n $rootElement.removeClass(config.classNames.fullscreenVideo);\r\n } else {\r\n $rootElement.addClass(config.classNames.fullscreenVideo);\r\n // this._elements.$backdrop.addClass('');\r\n }\r\n $rootElement.find('.slick-current').find('.video').removeClass('video--fullscreen');\r\n });\r\n\r\n $elements.$fullscreenPlayButton.on('click', (e) => {\r\n const videoSettings = $rootElement.find('.slick-current').find('.video-js')[0];\r\n\r\n if (videoSettings.player.hasStarted()) {\r\n if (!videoSettings.player.paused()) {\r\n videoSettings.player.pause();\r\n $elements.$fullscreenPlayButton.html(config.playIcon);\r\n } else {\r\n videoSettings.player.play();\r\n _seeksliderTimeUpdate(videoSettings);\r\n $elements.$fullscreenPlayButton.html(config.pauseIcon);\r\n }\r\n } else {\r\n videoSettings.player.play();\r\n _seeksliderTimeUpdate(videoSettings);\r\n $elements.$fullscreenPlayButton.html(config.pauseIcon);\r\n }\r\n });\r\n\r\n $elements.$playButton.on('click', (e) => {\r\n // eslint-disable-next-line no-console\r\n const videoSettings = $rootElement.find('.slick-current').find('.video-js')[0];\r\n\r\n if (videoSettings.player.hasStarted()) {\r\n if (!videoSettings.player.paused()) {\r\n videoSettings.player.pause();\r\n $elements.$fullscreenPlayButton.html(config.playIcon);\r\n } else {\r\n videoSettings.player.play();\r\n _seeksliderTimeUpdate(videoSettings);\r\n $elements.$fullscreenPlayButton.html(config.pauseIcon);\r\n }\r\n } else {\r\n videoSettings.player.play();\r\n _seeksliderTimeUpdate(videoSettings);\r\n $elements.$fullscreenPlayButton.html(config.pauseIcon);\r\n }\r\n });\r\n\r\n $elements.$seekslider.on('change', (e) => {\r\n const videoSettings = $rootElement.find('.slick-current').find('.video-js')[0];\r\n\r\n const seekTo = videoSettings.player.duration() * ($rootElement.find('.slick-current').find('.video__seekslider')[0].value / 100);\r\n videoSettings.player.currentTime(seekTo);\r\n });\r\n\r\n $elements.$video.on('click', (e) => {\r\n const videoSettings = $rootElement.find('.slick-current').find('.video-js')[0];\r\n const videoPaused = $rootElement.find('.slick-current').find('.video-js').hasClass('vjs-paused');\r\n\r\n if (videoPaused) {\r\n videoSettings.player.play();\r\n _seeksliderTimeUpdate(videoSettings);\r\n $elements.$fullscreenPlayButton.html(config.pauseIcon);\r\n } else {\r\n videoSettings.player.pause();\r\n $elements.$fullscreenPlayButton.html(config.playIcon);\r\n }\r\n\r\n });\r\n\r\n $elements.$mainSlide.each((i, el) => {\r\n imagesHtml.push($(el).find(config.selectors.mainSlideVisual).html());\r\n captionsHtml.push($(el).find(config.selectors.caption).html());\r\n });\r\n \r\n function _setCurrentPreviewSlide() {\r\n // eslint-disable-next-line no-unused-vars\r\n const _this = this;\r\n const currentslide = $rootElement.find(config.selectors.currentMainSlide);\r\n const currentindex = currentslide.data(config.dataAttributes.slickIndex);\r\n $elements.$previewSlide.removeClass('slick-current');\r\n\r\n // eslint-disable-next-line max-len\r\n for (let index = 0; index < $rootElement.find(config.selectors.previewSlide).length; index++) {\r\n const element = $rootElement.find(config.selectors.previewSlide)[index];\r\n if ($(element).data(config.dataAttributes.slickIndex) === currentindex) {\r\n $(element).addClass('slick-current');\r\n }\r\n }\r\n }\r\n\r\n function _seeksliderTimeUpdate(videoSettings) {\r\n videoSettings.player.on('timeupdate', () => {\r\n if (videoSettings.player.ended()) {\r\n videoSettings.player.pause();\r\n return;\r\n }\r\n const newTime = videoSettings.player.currentTime() * (100 / videoSettings.player.duration());\r\n $rootElement.find('.slick-current').find('.video__seekslider')[0].value = newTime;\r\n let curmins = Math.floor(videoSettings.player.currentTime() / 60);\r\n let cursecs = Math.floor(videoSettings.player.currentTime() - curmins * 60);\r\n let durmins = Math.floor(videoSettings.player.duration() / 60);\r\n let dursecs = Math.floor(videoSettings.player.duration() - durmins * 60);\r\n if (cursecs < 10) { cursecs = `0${cursecs}`; }\r\n if (dursecs < 10) { dursecs = `0${dursecs}`; }\r\n if (curmins < 10) { curmins = `0${curmins}`; }\r\n if (durmins < 10) { durmins = `0${durmins}`; }\r\n\r\n $rootElement.find('.slick-current').find('.video__currentTime').html(`${curmins}:${cursecs}`);\r\n $rootElement.find('.slick-current').find('.video__durationTime').html(`${durmins}:${dursecs}`);\r\n });\r\n }\r\n }\r\n\r\n \r\n\r\n\r\n\r\n _getDomElements() {\r\n return {\r\n $body: $(config.selectors.body),\r\n $mainSlides: this._$rootElement.find(config.selectors.mainSlides),\r\n $mainSlide: this._$rootElement.find(config.selectors.mainSlide),\r\n $previewSlides: this._$rootElement.find(config.selectors.previewSlides),\r\n $previewSlide: this._$rootElement.find(config.selectors.previewSlide),\r\n $next: this._$rootElement.find(config.selectors.next),\r\n $prev: this._$rootElement.find(config.selectors.prev),\r\n $openBtn: this._$rootElement.find(config.selectors.openBtn),\r\n $closeBtn: this._$rootElement.find(config.selectors.closeBtn),\r\n $videoControls: this._$rootElement.find(config.selectors.videoControls),\r\n $caption: this._$rootElement.find(config.selectors.caption),\r\n $playButton: this._$rootElement.find(config.selectors.videoPlayButton),\r\n $video: this._$rootElement.find(config.selectors.video),\r\n $currentMainSlide: this._$rootElement.find(config.selectors.currentMainSlide),\r\n $fullscreenVideo: this._$rootElement.find(config.selectors.fullscreenVideo),\r\n\r\n };\r\n }\r\n\r\n _setCurrentPreviewSlide() {\r\n const _this = this;\r\n const currentslide = _this._$rootElement.find(config.selectors.currentMainSlide);\r\n const currentindex = currentslide.data(config.dataAttributes.slickIndex);\r\n _this._elements.$previewSlide.removeClass('slick-current');\r\n\r\n for (let index = 0; index < $(config.selectors.previewSlide).length; index++) {\r\n const element = $(config.selectors.previewSlide)[index];\r\n if ($(element).data(config.dataAttributes.slickIndex) === currentindex) {\r\n $(element).addClass('slick-current');\r\n }\r\n }\r\n }\r\n\r\n _addEventListeners() {\r\n const _this = this;\r\n\r\n this._elements.$next.on('click', () => {\r\n const videoSettings = this._$rootElement.find('.slick-current').find('.video-js')[0];\r\n if (videoSettings) {\r\n videoSettings.player.pause();\r\n }\r\n this._elements.$mainSlides.slick('slickNext');\r\n this._elements.$previewSlides.slick('slickNext');\r\n this._setCurrentPreviewSlide();\r\n });\r\n\r\n this._elements.$prev.on('click', () => {\r\n const videoSettings = this._$rootElement.find('.slick-current').find('.video-js')[0];\r\n if (videoSettings) {\r\n videoSettings.player.pause();\r\n }\r\n this._elements.$mainSlides.slick('slickPrev');\r\n this._elements.$previewSlides.slick('slickPrev');\r\n this._setCurrentPreviewSlide();\r\n });\r\n\r\n this._elements.$openBtn.on('click', () => {\r\n // this._elements.$mainSlides.slick('unslick');\r\n const index = this._$rootElement.find('.slick-current').data('slick-index');\r\n this._elements.$videoControls.removeClass('video__controls--hidden');\r\n\r\n const videoSettings = this._$rootElement.find('.slick-current').find('.video-js')[0];\r\n if (videoSettings) {\r\n videoSettings.player.pause();\r\n }\r\n\r\n this._elements.$mainSlides.slick('unslick');\r\n this._elements.$mainSlides.slick(config.mainSliderConfig);\r\n this._elements.$mainSlides.slick('slickGoTo', index);\r\n });\r\n\r\n this._elements.$closeBtn.on('click', () => {\r\n // this._elements.$mainSlides.slick('unslick');\r\n const index = this._$rootElement.find('.slick-current').data('slick-index');\r\n this._elements.$videoControls.addClass('video__controls--hidden');\r\n\r\n const videoSettings = this._$rootElement.find('.slick-current').find('.video-js')[0];\r\n if (videoSettings) {\r\n videoSettings.player.pause();\r\n }\r\n\r\n this._elements.$mainSlides.slick('unslick');\r\n this._elements.$mainSlides.slick(config.mainSliderConfig);\r\n this._elements.$mainSlides.slick('slickGoTo', index);\r\n\r\n this._elements.$previewSlides.slick('slickGoTo', index);\r\n });\r\n\r\n this._elements.$fullscreenVideo.on('click', (e) => {\r\n // eslint-disable-next-line no-console\r\n if (this._$rootElement.hasClass(config.classNames.fullscreenVideo)) {\r\n this._$rootElement.removeClass(config.classNames.fullscreenVideo);\r\n } else {\r\n this._$rootElement.addClass(config.classNames.fullscreenVideo);\r\n // this._elements.$backdrop.addClass('');\r\n }\r\n this._$rootElement.find('.slick-current').find('.video').removeClass('video--fullscreen');\r\n });\r\n\r\n this._elements.$playButton.on('click', (e) => {\r\n const videoSettings = this._$rootElement.find('.slick-current').find('.video-js')[0];\r\n\r\n if (videoSettings.player.hasStarted()) {\r\n if (!videoSettings.player.paused()) {\r\n videoSettings.player.pause();\r\n } else {\r\n videoSettings.player.play();\r\n }\r\n } else {\r\n videoSettings.player.play();\r\n }\r\n });\r\n\r\n this._elements.$mainSlides.on('afterChange', () => {\r\n _this._setCurrentPreviewSlide();\r\n });\r\n\r\n // eslint-disable-next-line func-names\r\n this._elements.$previewSlide.on('click', function () {\r\n const $el = $(this);\r\n const index = $el.data('slick-index');\r\n\r\n _this._elements.$mainSlides.slick('slickGoTo', index);\r\n\r\n _this._elements.$previewSlide.removeClass('slick-current');\r\n $(this).addClass('slick-current');\r\n });\r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('Gallery', Gallery);\r\nmoduleRegistry.autoApplyModule('Gallery', config.selectors.root);\r\n\r\nwindow.KSGallery = Gallery;\r\n","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\nmodule.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nmodule.exports = _iterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithoutHoles = require(\"./arrayWithoutHoles.js\");\nvar iterableToArray = require(\"./iterableToArray.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableSpread = require(\"./nonIterableSpread.js\");\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\nmodule.exports = _toConsumableArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","/**\r\n * Converts an object to a jQuery object\r\n * if it's not already a jQuery object\r\n * @param {*} htmlElementOrJqueryObject - The object to convert\r\n */\r\nexport function convertTojQuery(htmlElementOrJqueryObject) {\r\n if (isjQueryObject(htmlElementOrJqueryObject)) {\r\n // element is already a jquery object\r\n return htmlElementOrJqueryObject;\r\n }\r\n\r\n // create new jquery object\r\n return $(htmlElementOrJqueryObject);\r\n}\r\n\r\n/**\r\n * Checks if the given object is a jQuery object\r\n * @param {*} object - The object to check\r\n */\r\nexport function isjQueryObject(object) {\r\n return object instanceof jQuery;\r\n}\r\n\r\n/**\r\n * No operation function\r\n */\r\nexport function noop() { }\r\n\r\n/**\r\n * Returns the offset height of an element\r\n * @param {*} htmlElementOrJqueryObject - The element to measure\r\n */\r\nexport function getElementHeight(htmlElementOrJqueryObject) {\r\n let element;\r\n\r\n if (isjQueryObject(htmlElementOrJqueryObject)) {\r\n // element is already a jquery object\r\n // eslint-disable-next-line prefer-destructuring\r\n element = htmlElementOrJqueryObject[0];\r\n } else {\r\n element = htmlElementOrJqueryObject;\r\n }\r\n\r\n return Math.round(element.offsetHeight);\r\n}\r\n\r\n/**\r\n * Returns the offset height of an element\r\n * @param {*} htmlElementOrJqueryObject - The element to measure\r\n */\r\nexport function getElementScrollHeight(htmlElementOrJqueryObject) {\r\n let element;\r\n\r\n if (isjQueryObject(htmlElementOrJqueryObject)) {\r\n // element is already a jquery object\r\n // eslint-disable-next-line prefer-destructuring\r\n element = htmlElementOrJqueryObject[0];\r\n } else {\r\n element = htmlElementOrJqueryObject;\r\n }\r\n\r\n return Math.round(element.scrollHeight);\r\n}\r\n\r\n/**\r\n * Checks if the given event corresponds\r\n * to an click event or a keydown event\r\n * for a enter key press.\r\n * @param {Event} e - The event object to check\r\n */\r\nexport function isClickOrEnter(e) {\r\n if (e) {\r\n let event;\r\n\r\n if (Object.prototype.hasOwnProperty.call(e, 'originalEvent')) {\r\n // this is probably a jQuery event so get the originalEvent\r\n event = e.originalEvent;\r\n } else {\r\n event = e;\r\n }\r\n\r\n if (event instanceof UIEvent) {\r\n return e.type === 'click' || (e.type === 'keydown' && e.keyCode === 13);\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport function cloneArray(array) {\r\n return [...array];\r\n}\r\n\r\nexport function clickAnchor(href, target) {\r\n const a = document.createElement('a');\r\n a.href = href;\r\n\r\n if (target) {\r\n a.target = target;\r\n }\r\n\r\n a.click();\r\n}\r\n\r\nexport const generateId = (() => {\r\n const generatedIds = new Set();\r\n const letterCharset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIKLMNOPQRSTUVWXYZ';\r\n const numberCharset = '0123456789';\r\n const completeCharset = letterCharset + numberCharset;\r\n\r\n function pickRandomCharacter(charset) {\r\n return charset[Math.floor(Math.random() * charset.length)];\r\n }\r\n\r\n function generate(length) {\r\n // first character should always be a letter\r\n // so pick a random character from the\r\n // letter charset\r\n let id = pickRandomCharacter(letterCharset);\r\n\r\n for (let i = 0, iLen = length - 1; i < iLen; i++) {\r\n // then continue picking characters from the complete charset\r\n id += pickRandomCharacter(completeCharset);\r\n }\r\n\r\n return id;\r\n }\r\n\r\n return (length) => {\r\n const len = length || 8;\r\n\r\n let id;\r\n\r\n do {\r\n id = generate(len);\r\n }\r\n while (generatedIds.has(id));\r\n\r\n generatedIds.add(id);\r\n return id;\r\n };\r\n})();\r\n\r\nexport const replacePlaceholders = (input, replacements, placeholderStart = '\\\\{', placeholderEnd = '\\\\}') => {\r\n if (!input || !replacements) {\r\n return input;\r\n }\r\n\r\n const keys = Object.keys(replacements);\r\n let replacedResult = input;\r\n\r\n keys.forEach((key) => {\r\n const pattern = `${placeholderStart}\\\\s*${key}\\\\s*${placeholderEnd}`;\r\n const replacement = replacements[key];\r\n const replacementValue = (replacement === null || replacement === undefined) ? '' : replacement;\r\n replacedResult = replacedResult.replace(new RegExp(pattern, 'g'), replacementValue);\r\n });\r\n\r\n return replacedResult;\r\n};\r\n\r\n/**\r\n * Copies the given text to the clipboard\r\n * @param {string} text The text to copy\r\n * @returns {Promise} Promise which fulfills with\r\n * true or false depending on copy success\r\n */\r\nexport const copyTextToClipboard = (() => {\r\n const fallbackCopyTextToClipboard = (text) => {\r\n const textarea = document.createElement('textarea');\r\n textarea.value = text;\r\n textarea.style.cssText = 'position: fixed; left: 100%; top: 100%; width: 1px; height: 1px; opacity: 0.01;';\r\n\r\n document.body.appendChild(textarea);\r\n\r\n textarea.focus();\r\n textarea.select();\r\n\r\n try {\r\n return document.execCommand('copy');\r\n } catch (error) {\r\n return false;\r\n } finally {\r\n // document.body.removeChild(textarea);\r\n }\r\n };\r\n\r\n return async (text) => {\r\n if (!navigator.clipboard) {\r\n return fallbackCopyTextToClipboard(text);\r\n }\r\n\r\n try {\r\n await navigator.clipboard.writeText(text);\r\n return true;\r\n } catch (error) {\r\n return false;\r\n }\r\n };\r\n})();\r\n\r\n/**\r\n * Executes the given callback function\r\n * on DOMContentLoaded or immediately\r\n * if the event was already fired.\r\n * @param callback Callback function to execute\r\n */\r\nexport const domReady = (() => {\r\n const callbacks = [];\r\n const bindDOMContentLoaded = () => {\r\n document.addEventListener('DOMContentLoaded', () => {\r\n callbacks.forEach((callback) => {\r\n try {\r\n callback();\r\n } catch (error) {\r\n // nothing\r\n }\r\n });\r\n });\r\n };\r\n\r\n return (callback) => {\r\n if (typeof callback !== 'function') {\r\n return;\r\n }\r\n\r\n switch (document.readyState) {\r\n case 'interactive':\r\n case 'complete':\r\n callback();\r\n break;\r\n default: {\r\n if (callbacks.length === 0) {\r\n bindDOMContentLoaded();\r\n }\r\n\r\n callbacks.push(callback);\r\n }\r\n }\r\n };\r\n})();","/* eslint-disable import/prefer-default-export */\r\nimport moduleRegistry from '../module-registry/module-registry';\r\nimport { isClickOrEnter } from '../utils/utils';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.overlay',\r\n backdrop: '.overlay__backdrop',\r\n closeBtn: '.overlay__close-btn',\r\n backBtn: '.overlay__back-btn',\r\n content: '.overlay__content',\r\n openTrigger: '[data-overlay-open]',\r\n textAreaBtn: '.cta-button',\r\n thanks: '.contact-accordion__thanks',\r\n wrapper: '.overlay__wrapper',\r\n header: '.overlay__header',\r\n searchInput: '.search-bar__text-input',\r\n fullScreenGalleryBtn: '.gallery__open-btn',\r\n fullScreenGalleryBtnClose: '.gallery__close-btn',\r\n\r\n },\r\n classNames: {\r\n bodyNoScroll: 'body--no-scroll',\r\n overlayVisible: 'overlay--visible',\r\n sticky: 'overlay--sticky-header',\r\n stickyHeader: 'overlay__header--sticky',\r\n fullScreen: 'overlay--full-screen',\r\n },\r\n};\r\n\r\nexport class Overlay {\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n }\r\n\r\n init() {\r\n this._elements = this._getDomElements();\r\n this._addEventListeners();\r\n }\r\n static initLater($rootElement) {\r\n const $elements = {\r\n $html: $('html'),\r\n $content: $rootElement.find(config.selectors.content),\r\n $backdrop: $rootElement.find(config.selectors.backdrop),\r\n $closeBtn: $rootElement.find(config.selectors.closeBtn),\r\n $wrapper: $rootElement.find(config.selectors.wrapper),\r\n $header: $rootElement.find(config.selectors.header),\r\n $openTrigger: $(config.selectors.openTrigger),\r\n };\r\n\r\n $elements.$backdrop.on('click', () => {\r\n $rootElement.removeClass(config.classNames.overlayVisible);\r\n const videoSettings = $rootElement.find('.video-js');\r\n videoSettings.each((i, el) => {\r\n if (el.player) {\r\n el.player.pause();\r\n }\r\n });\r\n $elements.$html.removeClass('body--no-scroll');\r\n });\r\n\r\n $elements.$closeBtn.on('click', () => {\r\n $rootElement.removeClass(config.classNames.overlayVisible);\r\n const videoSettings = $rootElement.find('.video-js');\r\n videoSettings.each((i, el) => {\r\n if (el.player) {\r\n el.player.pause();\r\n }\r\n });\r\n $elements.$html.removeClass('body--no-scroll');\r\n });\r\n\r\n // eslint-disable-next-line func-names\r\n $elements.$openTrigger.on('click keydown', function (e) {\r\n // eslint-disable-next-line no-console\r\n if (!isClickOrEnter(e)) {\r\n return;\r\n }\r\n\r\n const dataId = $(this).data('overlay-open');\r\n $(`[data-overlay-id=\"${dataId}\"]`).addClass(config.classNames.overlayVisible);\r\n $elements.$html.addClass('body--no-scroll');\r\n if (dataId === 'search') {\r\n if ($(config.selectors.searchInput)) {\r\n $(config.selectors.searchInput).focus();\r\n $(config.selectors.searchInput).val('');\r\n }\r\n }\r\n });\r\n\r\n if ($rootElement.hasClass(config.classNames.sticky)) {\r\n $elements.$wrapper.on('scroll', () => {\r\n if ($elements.$wrapper[0].scrollTop === 0) {\r\n $elements.$header.removeClass(config.classNames.stickyHeader);\r\n } else {\r\n $elements.$header.addClass(config.classNames.stickyHeader);\r\n }\r\n });\r\n }\r\n }\r\n\r\n _getDomElements() {\r\n const thanks = this._$rootElement.find(config.selectors.thanks);\r\n return {\r\n $html: $('html'),\r\n $content: this._$rootElement.find(config.selectors.content),\r\n $backdrop: this._$rootElement.find(config.selectors.backdrop),\r\n $closeBtn: this._$rootElement.find(config.selectors.closeBtn),\r\n $backBtn: this._$rootElement.find(config.selectors.backBtn),\r\n $wrapper: this._$rootElement.find(config.selectors.wrapper),\r\n $header: this._$rootElement.find(config.selectors.header),\r\n $fullScreenGalleryBtn: this._$rootElement.find(config.selectors.fullScreenGalleryBtn),\r\n // eslint-disable-next-line max-len\r\n $fullScreenGalleryBtnClose: this._$rootElement.find(config.selectors.fullScreenGalleryBtnClose),\r\n $openTrigger: $(config.selectors.openTrigger),\r\n $thanksBtn: thanks.find(config.selectors.textAreaBtn),\r\n };\r\n }\r\n\r\n _addEventListeners() {\r\n // eslint-disable-next-line no-unused-vars\r\n const _this = this;\r\n this._elements.$backdrop.on('click', () => {\r\n this._$rootElement.removeClass(config.classNames.overlayVisible);\r\n const videoSettings = this._$rootElement.find('.video-js');\r\n videoSettings.each((i, el) => {\r\n if (el.player) {\r\n el.player.pause();\r\n }\r\n });\r\n $('html').removeClass('body--no-scroll');\r\n });\r\n\r\n this._elements.$closeBtn.on('click', () => {\r\n this._$rootElement.removeClass(config.classNames.overlayVisible);\r\n const videoSettings = this._$rootElement.find('.video-js');\r\n videoSettings.each((i, el) => {\r\n if (el.player) {\r\n el.player.pause();\r\n }\r\n });\r\n $('html').removeClass('body--no-scroll');\r\n });\r\n\r\n this._elements.$backBtn.on('click', () => {\r\n this._$rootElement.removeClass(config.classNames.overlayVisible);\r\n $('html').removeClass('body--no-scroll');\r\n });\r\n\r\n this._elements.$thanksBtn.on('click', () => {\r\n this._$rootElement.removeClass(config.classNames.overlayVisible);\r\n $('html').removeClass('body--no-scroll');\r\n });\r\n\r\n this._elements.$fullScreenGalleryBtn.on('click', () => {\r\n this._$rootElement.addClass(config.classNames.fullScreen);\r\n });\r\n\r\n this._elements.$fullScreenGalleryBtnClose.on('click', () => {\r\n this._$rootElement.removeClass(config.classNames.fullScreen);\r\n });\r\n\r\n // eslint-disable-next-line func-names\r\n this._elements.$openTrigger.on('click keydown', function (e) {\r\n // eslint-disable-next-line no-console\r\n if (!isClickOrEnter(e)) {\r\n return;\r\n }\r\n\r\n const dataId = $(this).data('overlay-open');\r\n $(`[data-overlay-id=\"${dataId}\"]`).addClass(config.classNames.overlayVisible);\r\n $('html').addClass('body--no-scroll');\r\n if (dataId === 'search') {\r\n if ($(config.selectors.searchInput)) {\r\n $(config.selectors.searchInput).focus();\r\n $(config.selectors.searchInput).val('');\r\n }\r\n }\r\n });\r\n\r\n if (this._$rootElement.hasClass(config.classNames.sticky)) {\r\n this._elements.$wrapper.on('scroll', () => {\r\n if (this._elements.$wrapper[0].scrollTop === 0) {\r\n this._elements.$header.removeClass(config.classNames.stickyHeader);\r\n } else {\r\n this._elements.$header.addClass(config.classNames.stickyHeader);\r\n }\r\n });\r\n }\r\n }\r\n\r\n static setContent($el, html) {\r\n $el.find(config.selectors.content).html(html);\r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('Overlay', Overlay);\r\nmoduleRegistry.autoApplyModule('Overlay', config.selectors.root);\r\n","import { Gallery } from '../gallery/gallery';\r\nimport { Overlay } from '../overlay/overlay';\r\n\r\n\r\n// eslint-disable-next-line import/prefer-default-export\r\nexport class KSUtility {\r\n static async showProductOverlay(url, id) {\r\n // eslint-disable-next-line no-console\r\n\r\n if (!$(`#productOverlay-${id}`).length) {\r\n await $.get(url, (data) => {\r\n if (data.trim() !== '') {\r\n $('body').prepend(data);\r\n\r\n const gallery = $(`#productOverlay-${id}`).find('.gallery');\r\n Gallery.initLater(gallery);\r\n const overlay = $('.overlay--product');\r\n Overlay.initLater(overlay);\r\n }\r\n });\r\n }\r\n\r\n $(`#productOverlay-${id}`).addClass('overlay--visible');\r\n $('html').addClass('body--no-scroll');\r\n }\r\n\r\n static initContactApp(speciality, tabIndex, prefilledSpeciality) {\r\n window.dispatchEvent(new CustomEvent('ContactAppInit', { detail: { initialTabIndex: tabIndex, speciality, prefilledSpeciality } }));\r\n const overlay = $('*[data-overlay-id=\"contact\"]');\r\n Overlay.initLater(overlay);\r\n }\r\n}\r\n\r\nwindow.KSUtility = KSUtility;\r\n","import { Breakpoints } from '../breakpoints/breakpoints';\r\nimport { DragBar } from '../drag-bar/drag-bar';\r\nimport { KSUtility } from '../global/global';\r\nimport moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.bar-carousel',\r\n slides: '.bar-carousel__slides',\r\n slide: '.bar-carousel__slide',\r\n bar: '.bar-carousel__bar',\r\n controlBtn: '.drag-bar__control-btn',\r\n },\r\n classNames: {\r\n\r\n },\r\n dataAttributes: {\r\n\r\n },\r\n\r\n sliderConfig: {\r\n dots: false,\r\n arrows: false,\r\n infinite: false,\r\n speed: 750,\r\n slidesToShow: 1.2,\r\n slidesToScroll: 1,\r\n // swipeToSlide: true,\r\n mobileFirst: true,\r\n autoplay: false,\r\n variableWidth: false,\r\n responsive: [\r\n {\r\n breakpoint: 991,\r\n settings: {\r\n slidesToShow: 2.1,\r\n slidesToScroll: 1,\r\n },\r\n },\r\n {\r\n breakpoint: Breakpoints.BREAKPOINTS.LG,\r\n settings: {\r\n slidesToShow: 3,\r\n slidesToScroll: 1,\r\n },\r\n },\r\n ],\r\n },\r\n easeTime: 0.2,\r\n sliderConfigDuo: {\r\n dots: false,\r\n arrows: false,\r\n infinite: false,\r\n speed: 750,\r\n slidesToShow: 1.2,\r\n slidesToScroll: 1,\r\n // swipeToSlide: true,\r\n mobileFirst: true,\r\n autoplay: false,\r\n variableWidth: false,\r\n // responsive: [\r\n\r\n // {\r\n // breakpoint: 992,\r\n // settings: 'unslick'\r\n // },\r\n // ],\r\n },\r\n easeTime: 0.2,\r\n};\r\n\r\nclass BarCarousel {\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n this._isSlider = false;\r\n this._currentIndex = 0;\r\n }\r\n\r\n init() {\r\n this._elements = this._getDomElements();\r\n this._initBar();\r\n this._addEventListener();\r\n this._setSliderState();\r\n \r\n this._$rootElement.addClass('bar-carousel--'+ this._elements.$slide.length)\r\n }\r\n\r\n _getSliderConfig() {\r\n if(this._$rootElement.hasClass('bar-carousel--2')) {\r\n return config.sliderConfigDuo;\r\n } else {\r\n return config.sliderConfig;\r\n }\r\n }\r\n\r\n _setSliderState() {\r\n if(Breakpoints.isBreakpointOrLarger('lg')) {\r\n if(this._elements.$slide.length > 3) {\r\n if(!this._elements.$slides.hasClass('slick-initialized')) {\r\n this._elements.$slides.slick(this._getSliderConfig());\r\n }\r\n\r\n this._elements.$bar.show();\r\n } else {\r\n if(this._elements.$slides.hasClass('slick-initialized')) {\r\n this._elements.$slides.slick('unslick');\r\n }\r\n\r\n this._elements.$bar.hide();\r\n }\r\n } else {\r\n if(this._elements.$slide.length === 1) {\r\n this._elements.$bar.hide();\r\n } else if(this._elements.$slide.length === 2) {\r\n if(Breakpoints.isBreakpointOrLarger('md')) {\r\n this._elements.$bar.hide();\r\n } else {\r\n if(!this._elements.$slides.hasClass('slick-initialized')) {\r\n this._elements.$slides.slick(this._getSliderConfig());\r\n }\r\n this._elements.$bar.show();\r\n }\r\n } else if(this._elements.$slide.length === 2) {\r\n if(Breakpoints.isBreakpointOrLarger('md')) {\r\n this._elements.$bar.hide();\r\n } else {\r\n if(!this._elements.$slides.hasClass('slick-initialized')) {\r\n this._elements.$slides.slick(this._getSliderConfig());\r\n }\r\n this._elements.$bar.show();\r\n }\r\n }else {\r\n if(!this._elements.$slides.hasClass('slick-initialized')) {\r\n this._elements.$slides.slick(this._getSliderConfig());\r\n }\r\n\r\n this._elements.$bar.show();\r\n }\r\n } \r\n }\r\n\r\n _getDomElements() {\r\n return {\r\n $slides: this._$rootElement.find(config.selectors.slides),\r\n $slide: this._$rootElement.find(config.selectors.slide),\r\n $bar: this._$rootElement.find(config.selectors.bar),\r\n };\r\n }\r\n\r\n _addEventListener() {\r\n const smartedit = $('body').data('smartedit');\r\n // edit-area\r\n\r\n \r\n const _this = this;\r\n\r\n this._elements.$slides.on('beforeChange', (event, slick, currentSlide, nextSlide) => {\r\n console.log('beforeChange', event);\r\n\r\n if(event.target !== _this._elements.$slides[0]) return;\r\n\r\n const $bar = _this._elements.$bar.find(DragBar.getClassname());\r\n DragBar.setIndex($bar, nextSlide);\r\n this._currentIndex = nextSlide;\r\n });\r\n\r\n if(smartedit !== true && smartedit !== 'true') {\r\n // eslint-disable-next-line func-names\r\n this._elements.$slide.on('click', async function () {\r\n const url = $(this).data('url');\r\n const id = $(this).data('id');\r\n\r\n if(!url ||!id) return;\r\n\r\n await KSUtility.showProductOverlay(url, id);\r\n\r\n // eslint-disable-next-line no-console\r\n\r\n // register click listener to init contact app\r\n // eslint-disable-next-line func-names\r\n $(`#productOverlay-${id}`).find('*[data-specialist]').on('click', function (e) {\r\n e.preventDefault();\r\n // eslint-disable-next-line no-console\r\n const $el = $(this);\r\n\r\n const speciality = $el.data('specialist');\r\n const tabIndex = $el.data('tab-index') || 0;\r\n const prefilledSpeciality = $el.data('prefilled-speciality') || '';\r\n\r\n // eslint-disable-next-line no-console\r\n\r\n KSUtility.initContactApp(speciality, tabIndex, prefilledSpeciality);\r\n });\r\n });\r\n }\r\n\r\n this._elements.$slides.on('mousedown', () => {\r\n console.log('mousedown');\r\n // Drag start logic\r\n // ...\r\n\r\n // Event to end drag, may want to include touchend events\r\n _this._elements.$slides.one('mouseup', () => {\r\n _this._elements.$slides.off('mousemove');\r\n // Drag stop logic\r\n // ...\r\n }).on('mousemove', () => {\r\n // Logic for dragging, can get mouse position\r\n // will probably want to throttle\r\n // possibly include touchmove events also\r\n\r\n for (let index = 0; index < document.querySelectorAll('.bar-carousel__slide-outer').length; index++) {\r\n const element = document.querySelectorAll('.bar-carousel__slide-outer')[index];\r\n element.style['pointer-events'] = 'none';\r\n }\r\n });\r\n });\r\n\r\n this._elements.$slides.on('mouseup', () => {\r\n console.log('mouseup');\r\n\r\n for (let index = 0; index < document.querySelectorAll('.bar-carousel__slide-outer').length; index++) {\r\n const element = document.querySelectorAll('.bar-carousel__slide-outer')[index];\r\n element.style['pointer-events'] = 'auto';\r\n }\r\n });\r\n\r\n Breakpoints.onBreakpointChange(() => {\r\n this._setSliderState();\r\n this._initBar();\r\n\r\n const $bar = this._elements.$bar.find(DragBar.getClassname());\r\n DragBar.setIndex($bar, this._currentIndex);\r\n })\r\n }\r\n\r\n _initBar() {\r\n // create bar and append into dom\r\n let barHtml;\r\n\r\n if(Breakpoints.isBreakpointOrLarger('lg')) {\r\n if(this._elements.$slide.length - 2 > 0) {\r\n barHtml = DragBar.createHtml(this._elements.$slide.length - 2);\r\n } else {\r\n barHtml = DragBar.createHtml(this._elements.$slide.length); \r\n }\r\n } else if(Breakpoints.isBreakpointOrLarger('md')) {\r\n if(this._elements.$slide.length - 1 > 0) {\r\n barHtml = DragBar.createHtml(this._elements.$slide.length - 1);\r\n } else {\r\n barHtml = DragBar.createHtml(this._elements.$slide.length); \r\n }\r\n } else {\r\n barHtml = DragBar.createHtml(this._elements.$slide.length); \r\n }\r\n \r\n this._elements.$bar.html(barHtml);\r\n\r\n // select bar and register callback\r\n const $bar = this._elements.$bar.find(DragBar.getClassname());\r\n\r\n DragBar.init($bar, (index) => {\r\n this._currentYear = index;\r\n\r\n const interval = setInterval(() => {\r\n this._elements.$slides.slick('slickGoTo', index);\r\n clearInterval(interval);\r\n }, 0);\r\n });\r\n\r\n this._setControlBtnWidth();\r\n }\r\n\r\n _setControlBtnWidth() {\r\n const $bar = this._elements.$bar.find(DragBar.getClassname());\r\n const controlBar = $bar.find(config.selectors.controlBtn);\r\n controlBar.width($bar.width() / this._elements.$slide.length);\r\n }\r\n // _initBar() {\r\n // // create bar and append into dom\r\n // const barHtml = DragBar.createHtml(this._elements.$slide.length, 2);\r\n // this._elements.$bar.html(barHtml);\r\n\r\n // // select bar and register callback\r\n // const $bar = this._elements.$bar.find(DragBar.getClassname());\r\n\r\n // DragBar.init($bar, (index) => {\r\n\r\n // this._elements.$slides.slick('slickGoTo', index);\r\n // });\r\n // }\r\n}\r\n\r\nmoduleRegistry.registerModule('BarCarousel', BarCarousel);\r\nmoduleRegistry.autoApplyModule('BarCarousel', config.selectors.root);\r\n","import { Breakpoints } from '../breakpoints/breakpoints';\r\nimport { DragBar } from '../drag-bar/drag-bar';\r\nimport moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.card-tiles',\r\n tiles: '.card-tiles__tiles',\r\n tile: '.card-tiles__tile',\r\n bar: '.card-tiles__bar',\r\n },\r\n dataAttributes: {\r\n },\r\n classNames: {\r\n cardTilesTwo: 'card-tiles--two',\r\n cardTilesThree: 'card-tiles--three',\r\n },\r\n sliderConfig: {\r\n dots: false,\r\n infinite: false,\r\n speed: 300,\r\n slidesToShow: 1.1,\r\n slidesToScroll: 1,\r\n mobileFirst: true,\r\n autoplay: false,\r\n arrows: false,\r\n },\r\n};\r\n\r\nclass CardTiles {\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n this._isSlider = false;\r\n }\r\n\r\n init() {\r\n if (!this._$rootElement.hasClass(config.classNames.cardTilesTwo)\r\n && !this._$rootElement.hasClass(config.classNames.cardTilesThree)) return;\r\n\r\n this._elements = this._getDomElements();\r\n this._addEventListeners();\r\n\r\n if (Breakpoints.isBreakpoint('xs')) {\r\n this._initSlider();\r\n this._initBar();\r\n }\r\n\r\n }\r\n\r\n _getDomElements() {\r\n return {\r\n $tiles: this._$rootElement.find(config.selectors.tiles),\r\n $tile: this._$rootElement.find(config.selectors.tile),\r\n $bar: this._$rootElement.find(config.selectors.bar),\r\n };\r\n }\r\n\r\n _addEventListeners() {\r\n const _this = this;\r\n\r\n this._elements.$tiles.on('beforeChange', (event, slick, currentSlide, nextSlide) => {\r\n const $bar = _this._elements.$bar.find(DragBar.getClassname());\r\n\r\n if(event.target !== _this._elements.$tiles[0]) return;\r\n \r\n DragBar.setIndex($bar, nextSlide);\r\n });\r\n\r\n Breakpoints.onBreakpointChange(() => {\r\n if (!this._isSlider && (Breakpoints.isBreakpoint('xs'))) {\r\n this._initSlider();\r\n this._initBar();\r\n } else if (this._isSlider && Breakpoints.isBreakpoint('sm')) {\r\n this._destroySlider();\r\n }\r\n });\r\n }\r\n\r\n _initSlider() {\r\n this._isSlider = true;\r\n this._elements.$tiles.slick(config.sliderConfig);\r\n // this._multiSlideAdaptiveHeight(this._elements.$tiles);\r\n }\r\n\r\n _destroySlider() {\r\n this._isSlider = false;\r\n this._elements.$tiles.slick('unslick');\r\n }\r\n\r\n _initBar() {\r\n // create bar and append into dom\r\n const barHtml = DragBar.createHtml(Math.ceil(this._elements.$tile.length));\r\n if(this._elements.$tile.length === 1) {\r\n this._elements.$bar.css('display', 'none')\r\n }\r\n\r\n this._elements.$bar.html(barHtml);\r\n\r\n // select bar and register callback\r\n const $bar = this._elements.$bar.find(DragBar.getClassname());\r\n\r\n DragBar.init($bar, (index) => {\r\n this._elements.$tiles.slick('slickGoTo', index);\r\n });\r\n }\r\n\r\n _multiSlideAdaptiveHeight(slider) {\r\n const _this = this;\r\n\r\n // set our vars\r\n let activeSlides = [];\r\n let tallestSlide = 0;\r\n\r\n // very short delay in order for us get the correct active slides\r\n setTimeout(() => {\r\n const sliderChildren = slider[0].children[0].children[0].children;\r\n // loop through each active slide for our current slider\r\n $(sliderChildren).each((index, item) => {\r\n // add current active slide height to our active slides array\r\n activeSlides.push([$(item)[0].scrollHeight]);\r\n });\r\n\r\n // for each of the active slides heights\r\n activeSlides.forEach((item) => {\r\n // if current active slide height is greater than tallest slide height\r\n if (item > tallestSlide) {\r\n // override tallest slide height to current active slide height\r\n tallestSlide = item;\r\n }\r\n });\r\n\r\n // set the current slider slick list height to current active tallest slide height\r\n _this._elements.$tile.height(tallestSlide);\r\n }, 500);\r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('CardTiles', CardTiles);\r\nmoduleRegistry.autoApplyModule('CardTiles', config.selectors.root);\r\n","import moduleRegistry from '../module-registry/module-registry';\r\nimport { Breakpoints } from '../breakpoints/breakpoints';\r\nconst config = {\r\n selectors: {\r\n root: '.category-overview',\r\n tab: '.category-overview__tab',\r\n tabItem: '.category-overview__tab-item',\r\n tabsContent: '.category-overview__tab-content',\r\n tabsContentWrapper: '.category-overview__tab-content-wrapper',\r\n grid: '.category-overview__tab-content-grid',\r\n tabButton: '.category-overview__tab-button',\r\n ctaButton: '.cta-button',\r\n slickTrack: '.slick-track',\r\n slickActiveButton: '.cta-button, .slick-active',\r\n tabsContentActive: '.category-overview__tab-content.slick-slide.slick-current.slick-active',\r\n tabsContentNotActive: '.category-overview__tab-content.slick-slide:not(slick-active)',\r\n loadMoreButton: '.category-overview__tab-load-more-btn',\r\n gridItem: '.category-overview__grid-item',\r\n gridItemLabel: '.category-overview__grid-item-label',\r\n gridItemContentButton: '.category-overview__grid-item-content-button',\r\n gridItemContent: '.category-overview__grid-item-content'\r\n },\r\n classNames: {\r\n tabContent: 'category-overview__tab-content',\r\n tabsActive: 'category-overview__tab-content--active',\r\n tabsVisible: 'category-overview__tab-content--visible',\r\n ctaButtonActive: 'cta-button--button-blue--active',\r\n tabItemActive: 'category-overview__tab-item--active',\r\n tabContentGridModifierPrefix: 'category-overview__tab-content-grid--',\r\n gridItemHover: 'category-overview__grid-item--hover',\r\n gridItemHoverOut: 'category-overview__grid-item--hover-out',\r\n gridItemLabelNoAnimation: 'category-overview__grid-item-label--no-animation',\r\n gridItemLabelContentButtonNoAnimation: 'category-overview__grid-item-content-button--no-animation',\r\n gridItemLabelContentNoAnimation: 'category-overview__grid-item-content--no-animation'\r\n },\r\n dataAttributes: {\r\n index: 'index',\r\n },\r\n breakPoints: {\r\n xs: 0,\r\n sm: 767,\r\n md: 991,\r\n lg: 1440,\r\n xl: 1920,\r\n xxl: 2000,\r\n },\r\n tabSliderSettings: {\r\n // slidesToShow: 4,\r\n // slidesToScroll: 1,\r\n // dots: false,\r\n // arrows: false,\r\n // // centerMode: true,\r\n // focusOnSelect: true,\r\n // variableWidth: true,\r\n // infinite: false,\r\n // swipeToSlide: true,\r\n },\r\n};\r\n\r\nclass CategoryOverview {\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n this._loadmore = false;\r\n }\r\n\r\n init() {\r\n this._elements = this._getDomElements();\r\n this._addClassesForContent();\r\n this._addEventListeners();\r\n this._loadMoreClickHandler();\r\n\r\n const _this = this;\r\n this._elements.$tab.on('init', (event, slick, direction) => {\r\n _this._slickSliderManipulation();\r\n });\r\n this._slickSliderFunctions();\r\n\r\n // this._unslickIfNonTouchOnMD();\r\n\r\n // $(window).on('resize', () => {\r\n // this._unslickIfNonTouchOnMD();\r\n // });\r\n\r\n this._elements.$tabItem.on('click', function(e) {\r\n const $el = $(this);\r\n const index = $el.data(config.dataAttributes.index);\r\n\r\n _this._elements.$tabsContent.removeClass(config.classNames.tabsActive);\r\n\r\n _this._elements.$tabItem.removeClass(config.classNames.tabItemActive);\r\n $(this).addClass(config.classNames.tabItemActive);\r\n\r\n setTimeout(() => {\r\n _this._elements.$tabsContent.removeClass(config.classNames.tabsVisible);\r\n $(_this._elements.$tabsContent[index]).addClass(config.classNames.tabsVisible);\r\n \r\n setTimeout(() => {\r\n $(_this._elements.$tabsContent[index]).addClass(config.classNames.tabsActive);\r\n }, 5);\r\n }, 650);\r\n \r\n });\r\n\r\n \r\n $(_this._elements.$tabsContent[0]).addClass(config.classNames.tabsVisible);\r\n $(_this._elements.$tabsContent[0]).addClass(config.classNames.tabsActive);\r\n $(_this._elements.$tabItem[0]).addClass(config.classNames.tabItemActive);\r\n }\r\n\r\n _getDomElements() {\r\n return {\r\n $tab: this._$rootElement.find(config.selectors.tab),\r\n $tabItem: this._$rootElement.find(config.selectors.tabItem),\r\n $tabsContent: this._$rootElement.find(config.selectors.tabsContent),\r\n $tabsContentWrapper: this._$rootElement.find(config.selectors.tabsContentWrapper),\r\n $tabButton: this._$rootElement.find(config.selectors.tabButton),\r\n $grid: this._$rootElement.find(config.selectors.grid),\r\n $ctaButton: this._$rootElement.find(config.selectors.ctaButton),\r\n $slickActiveButton: this._$rootElement.find(config.selectors.slickActiveButton),\r\n $tabsContentActive: this._$rootElement.find(config.selectors.tabsContentActive),\r\n $tabsContentNotActive: this._$rootElement.find(config.selectors.tabsContentNotActive),\r\n $loadMoreButton: this._$rootElement.find(config.selectors.loadMoreButton),\r\n $gridItem: this._$rootElement.find(config.selectors.gridItem),\r\n $gridItemLabel: this._$rootElement.find(config.selectors.gridItemLabel),\r\n $gridItemContentButton: this._$rootElement.find(config.selectors.gridItemContentButton),\r\n $gridItemContent: this._$rootElement.find(config.selectors.gridItemContent)\r\n };\r\n }\r\n\r\n _addEventListeners() {\r\n this._elements.$ctaButton.on('focus', (e) => {\r\n $(e.target).trigger('click');\r\n });\r\n\r\n const height = $('.category-overview__grid-item')[0].scrollHeight\r\n console.log($('.category-overview__grid-item')[0].sc)\r\n \r\n \r\n this._$rootElement.find('div.category-overview__grid-item').on('click', (e) => {\r\n\r\n if(Breakpoints.isBreakpointOrSmaller('sm')) {\r\n const parent = e.target.closest(config.selectors.gridItem);\r\n const childlabel = parent.querySelector(config.selectors.gridItemLabel);\r\n const childContent = parent.querySelector(config.selectors.gridItemContent);\r\n const img = parent.querySelector('.picture img');\r\n const allNoLinkElements = $('div.category-overview__grid-item')\r\n // const height = parent.scrollHeight - 40\r\n // $(childContent).css('max-height',height+ 'px')\r\n\r\n allNoLinkElements.find('.picture img').css('opacity','1')\r\n allNoLinkElements.find(config.selectors.gridItemContent).css('opacity','0')\r\n allNoLinkElements.find(config.selectors.gridItemContent).css('display','none')\r\n allNoLinkElements.find(config.selectors.gridItemContent).css('visibility','hidden')\r\n allNoLinkElements.find(config.selectors.gridItemContent).css('visibility','hidden')\r\n allNoLinkElements.find(config.selectors.gridItemLabel).css('visibility','visible')\r\n allNoLinkElements.find(config.selectors.gridItemLabel).css('opacity','1')\r\n\r\n $(childContent).removeClass(config.classNames.gridItemLabelContentNoAnimation);\r\n \r\n $(childlabel).addClass(config.classNames.gridItemLabelNoAnimation);\r\n //if onlytext\r\n let childOnlytext;\r\n \r\n if($(e.target).hasClass('category-overview__grid-item--text-only')) {\r\n childOnlytext = e.target.querySelector(config.selectors.gridItemLabel);\r\n }\r\n\r\n $(childlabel).css(\"opacity\", \"0\");\r\n $(childlabel).css(\"visibility\", \"hidden\");\r\n $(img).css(\"opacity\", \"0.3\");\r\n $(childlabel).css(\"opacity\", \"0\");\r\n $(childContent).css(\"opacity\", \"1\");\r\n $(childOnlytext).css(\"opacity\", \"1\");\r\n $(childOnlytext).css(\"visibility\", \"visible\");\r\n $(childContent).css(\"visibility\", \"visible\");\r\n $(childContent).css(\"display\", \"block\");\r\n }\r\n \r\n\r\n \r\n })\r\n\r\n this._elements.$gridItem.on('mouseenter ', (e) => {\r\n \r\n $(e.target).closest(config.selectors.gridItem).addClass(config.classNames.gridItemHover);\r\n $(e.target).closest(config.selectors.gridItem).removeClass(config.classNames.gridItemHoverOut);\r\n \r\n const parent = e.target.closest(config.selectors.gridItem);\r\n const childlabel = parent.querySelector(config.selectors.gridItemLabel);\r\n const childbutton = parent.querySelector(config.selectors.gridItemContentButton);\r\n const childContent = parent.querySelector(config.selectors.gridItemContent);\r\n // const height = parent.scrollHeight - 40\r\n // $(childContent).css('max-height',height+ 'px')\r\n $(childContent).removeClass(config.classNames.gridItemLabelContentNoAnimation);\r\n $(childbutton).removeClass(config.classNames.gridItemLabelContentButtonNoAnimation);\r\n \r\n $(childlabel).addClass(config.classNames.gridItemLabelNoAnimation);\r\n \r\n //if onlytext\r\n let childOnlytext;\r\n \r\n if($(e.target).hasClass('category-overview__grid-item--text-only')) {\r\n childOnlytext = e.target.querySelector(config.selectors.gridItemLabel);\r\n }\r\n \r\n setTimeout(() => {\r\n $(childlabel).css(\"opacity\", \"0\");\r\n $(childbutton).css(\"opacity\", \"1\");\r\n $(childContent).css(\"opacity\", \"1\");\r\n $(childOnlytext).css(\"opacity\", \"1\");\r\n $(childContent).css(\"visibility\", \"visible\");\r\n }, 1);\r\n \r\n \r\n \r\n \r\n })\r\n this._elements.$gridItem.on('mouseleave ', (e) => {\r\n \r\n $(e.target).closest(config.selectors.gridItem).removeClass(config.classNames.gridItemHover);\r\n $(e.target).closest(config.selectors.gridItem).addClass(config.classNames.gridItemHoverOut);\r\n \r\n const parent = e.target.closest(config.selectors.gridItem);\r\n const childlabel = parent.querySelector(config.selectors.gridItemLabel);\r\n const childbutton = parent.querySelector(config.selectors.gridItemContentButton);\r\n const childContent = parent.querySelector(config.selectors.gridItemContent);\r\n \r\n // $(childContent).css('max-height', 'auto')\r\n $(childbutton).addClass(config.classNames.gridItemLabelContentButtonNoAnimation);\r\n $(childContent).addClass(config.classNames.gridItemLabelContentNoAnimation);\r\n $(childlabel).removeClass(config.classNames.gridItemLabelNoAnimation);\r\n \r\n setTimeout(() => {\r\n $(childlabel).css(\"opacity\", \"1\");\r\n $(childbutton).css(\"opacity\", \"0\");\r\n $(childContent).css(\"opacity\", \"0\");\r\n $(childContent).css(\"visibility\", \"hidden\");\r\n }, 1);\r\n \r\n \r\n \r\n })\r\n }\r\n\r\n _isTouchDevice() {\r\n return (('ontouchstart' in window)\r\n || (navigator.maxTouchPoints > 0)\r\n || (navigator.msMaxTouchPoints > 0));\r\n }\r\n\r\n // _unslickIfNonTouchOnMD() {\r\n // if (!this._isTouchDevice() && Breakpoints.isBreakpoint('sm')) {\r\n // console.log('window-size between 768 and 1440px');\r\n // // this._elements.$tab.slick('unslick');\r\n // this._elements.$tab.addClass('category-overview__tab--desktop-small');\r\n\r\n // // hide buttons with index more than 2 + show load-more button\r\n // this._elements.$tab.children().each((index, item) => {\r\n // if (index > 2) {\r\n // $(item).hide();\r\n // this._elements.$loadMoreButton.html(this._elements.$loadMoreButton.attr('more'));\r\n // this._elements.$loadMoreButton.show();\r\n // }\r\n // });\r\n // } else if (!this._elements.$tab.hasClass('slick-initialized')) {\r\n // // this._elements.$tab.removeClass('category-overview__tab--desktop-small');\r\n // // this._elements.$tab.slick(config.tabSliderSettings);\r\n // // this._elements.$loadMoreButton.hide();\r\n // }\r\n // console.log('isTouchDevice: ', this._isTouchDevice());\r\n // }\r\n\r\n _loadMoreClickHandler() {\r\n this._elements.$loadMoreButton.on('click', () => {\r\n if (!this._loadmore) {\r\n this._loadmore = true;\r\n this._elements.$tab.children().each((index, item) => {\r\n $(item).show();\r\n this._elements.$loadMoreButton.html(this._elements.$loadMoreButton.attr('less'));\r\n });\r\n } else {\r\n this._loadmore = false;\r\n this._elements.$tab.children().each((index, item) => {\r\n if (index > 2) {\r\n $(item).hide();\r\n this._elements.$loadMoreButton.html(this._elements.$loadMoreButton.attr('more'));\r\n this._elements.$loadMoreButton.show();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n _setTabActive(dataId) {\r\n this._elements.$tabsContent.removeClass(config.classNames.tabsActive);\r\n this._getTabContentByID(dataId).addClass(config.classNames.tabsActive);\r\n }\r\n\r\n _getTabContentByID(dataId) {\r\n return this._$rootElement.find(`${config.selectors.tabsContent}[data-id=${dataId}]`);\r\n }\r\n\r\n _addClassesForContent() {\r\n const gridContent = this._elements.$grid;\r\n\r\n for (let i = 0; i < gridContent.length; i++) {\r\n const contentLength = $(gridContent[i])[0].children.length;\r\n $(gridContent[i])[0].classList.add(`${config.classNames.tabContentGridModifierPrefix + contentLength}`);\r\n }\r\n }\r\n\r\n _slickSliderFunctions() {\r\n // this._elements.$tabsContentWrapper.slick({\r\n // slidesToShow: 1,\r\n // slidesToScroll: 1,\r\n // arrows: false,\r\n // fade: true,\r\n // asNavFor: '.category-overview__tab',\r\n // adaptiveHeight: true,\r\n // });\r\n // this._elements.$tab.slick(config.tabSliderSettings);\r\n // this._elements.$tab.slick('setPosition');\r\n }\r\n\r\n _slickSliderManipulation() {\r\n const _this = this;\r\n this._elements.$tabsContentActive.attr('tabindex', 0);\r\n\r\n const activeChildren = $(config.selectors.tabsContentActive).children();\r\n for (let i = 0; i < activeChildren.length; i++) {\r\n const activeChildrenOfGrid = $(activeChildren[i]).children();\r\n for (let m = 0; m < activeChildrenOfGrid.length; m++) {\r\n $(activeChildrenOfGrid[m]).attr('tabindex', 0);\r\n }\r\n }\r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('CategoryOverview', CategoryOverview);\r\nmoduleRegistry.autoApplyModule('CategoryOverview', config.selectors.root);\r\n","/* eslint-disable no-restricted-syntax */\r\nimport moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.contact-accordion',\r\n item: '.contact-accordion__item',\r\n description: '.contact-accordion__description',\r\n content: '.contact-accordion__content',\r\n cta: '.contact-accordion__cta',\r\n edit: '.contact-accordion__edit',\r\n textInput: '.text-input__input-field',\r\n charactersLeft: '.text-input__characters-left',\r\n radioButtons: '.radio-buttons__default-input',\r\n privacyPolicy: '.detail-form__privacypolicy-input',\r\n inputSummary: '.contact-accordion__input-summary',\r\n errorMessage: '.contact-accordion__error-message',\r\n altErrorMessage: '.contact-accordion__alt-error-message',\r\n detailForm: '.detail-form__inner',\r\n titles: '.detail-form__titles',\r\n titleInput: '.detail-form__title-input',\r\n },\r\n classNames: {\r\n accordionItemExpanded: 'contact-accordion__item--expanded',\r\n accordionItemCollapsed: 'contact-accordion__item--collapsed',\r\n accordionItemFinished: 'contact-accordion__item--finished',\r\n accordionFinished: 'contact-accordion--finished',\r\n accordionCtaDisabled: 'contact-accordion__cta--disabled',\r\n accordionError: 'contact-accordion__error-message--visible',\r\n accordionAltError: 'contact-accordion__alt-error-message--visible',\r\n textareaAlmostFull: 'text-input__characters--red',\r\n detailFormError: 'detail-form--error',\r\n detailFormErrorMessage: 'detail-form__message',\r\n detailFormShowErrorMessage: 'detail-form__message--error',\r\n customselect: 'detail-form__custom-select',\r\n selectSelected: 'detail-form__select-selected',\r\n selectSelectedActive: 'detail-form__select-selected--active',\r\n selectItems: 'detail-form__select-items',\r\n selectItemsHide: 'detail-form__select-hide',\r\n selectItem: 'detail-form__select-item',\r\n sameAsSelected: 'detail-form__same-as-selected',\r\n customTitle: 'detail-form__title-input--custom-title',\r\n privacyPolicy: 'detail-form__privacypolicy',\r\n },\r\n dataAttributes: {\r\n index: 'index',\r\n },\r\n};\r\n\r\nclass ContentAccordion {\r\n\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n this._index = 0;\r\n this._maxlength = 500;\r\n this._altError = false;\r\n }\r\n\r\n init() {\r\n this._elements = this._getDomElements();\r\n this._addEventListeners();\r\n \r\n this._expandItem(this._index);\r\n this._elements.$textInput[0].value = '';\r\n this._elements.$radioButtons.prop('checked', false);\r\n this._elements.$privacyPolicy.prop('checked', false);\r\n for (let item of this._elements.$detailForm[0].children) {\r\n item.value = '';\r\n }\r\n // for (let item of this._elements.$radioButtons) {\r\n // console.log(item);\r\n // }\r\n }\r\n\r\n _getDomElements() {\r\n return {\r\n $content: this._$rootElement.find(config.selectors.content),\r\n $description: this._$rootElement.find(config.selectors.description),\r\n $item: this._$rootElement.find(config.selectors.item),\r\n $cta: this._$rootElement.find(config.selectors.cta),\r\n $edit: this._$rootElement.find(config.selectors.edit),\r\n $textInput: this._$rootElement.find(config.selectors.textInput),\r\n $charactersLeft: this._$rootElement.find(config.selectors.charactersLeft),\r\n $radioButtons: this._$rootElement.find(config.selectors.radioButtons),\r\n $privacyPolicy: this._$rootElement.find(config.selectors.privacyPolicy),\r\n $inputSummary: this._$rootElement.find(config.selectors.inputSummary),\r\n $errorMessage: this._$rootElement.find(config.selectors.errorMessage),\r\n $altErrorMessage: this._$rootElement.find(config.selectors.altErrorMessage),\r\n $detailForm: this._$rootElement.find(config.selectors.detailForm),\r\n $titles: this._$rootElement.find(config.selectors.titles),\r\n $titleInput: this._$rootElement.find(config.selectors.titleInput),\r\n };\r\n }\r\n\r\n _addEventListeners() {\r\n const _this = this;\r\n\r\n this._elements.$cta.on('click', function () {\r\n const index = $(this).data(config.dataAttributes.index);\r\n\r\n if (_this._validateInput()) {\r\n if (index === _this._elements.$item.length - 1) {\r\n const $accordion = _this._$rootElement;\r\n $accordion.addClass(config.classNames.accordionFinished);\r\n return;\r\n }\r\n $(_this._elements.$errorMessage[_this._index]).removeClass(config.classNames.accordionError);\r\n $(_this._elements.$altErrorMessage[_this._index]).removeClass(config.classNames.accordionAltError);\r\n _this._finishItem(index);\r\n _this._expandItem(index + 1);\r\n } else if (_this._altError) {\r\n $(_this._elements.$errorMessage[_this._index]).removeClass(config.classNames.accordionError);\r\n $(_this._elements.$altErrorMessage[_this._index]).addClass(config.classNames.accordionAltError);\r\n } else {\r\n $(_this._elements.$altErrorMessage[_this._index]).removeClass(config.classNames.accordionAltError);\r\n $(_this._elements.$errorMessage[_this._index]).addClass(config.classNames.accordionError);\r\n }\r\n });\r\n\r\n this._elements.$edit.on('click', function () {\r\n const newIndex = $(this).data(config.dataAttributes.index);\r\n if (_this._validateInput() || _this._index > newIndex) {\r\n $(_this._elements.$errorMessage[_this._index]).removeClass(config.classNames.accordionError);\r\n $(_this._elements.$altErrorMessage[_this._index]).removeClass(config.classNames.accordionAltError);\r\n _this._finishItem(_this._index);\r\n _this._expandItem(newIndex);\r\n } else if (_this._altError) {\r\n $(_this._elements.$errorMessage[_this._index]).removeClass(config.classNames.accordionError);\r\n $(_this._elements.$altErrorMessage[_this._index]).addClass(config.classNames.accordionAltError);\r\n } else {\r\n $(_this._elements.$altErrorMessage[_this._index]).removeClass(config.classNames.accordionAltError);\r\n $(_this._elements.$errorMessage[_this._index]).addClass(config.classNames.accordionError);\r\n }\r\n });\r\n\r\n this._elements.$textInput.on('input', function () {\r\n _this._elements.$inputSummary[_this._index].innerText = $(this).val();\r\n const currentLength = $(this).val().length;\r\n const charsLeft = _this._maxlength - currentLength;\r\n const $charactersLeft = _this._elements.$charactersLeft;\r\n $($charactersLeft).html(charsLeft + '/' + _this._maxlength);\r\n if (charsLeft < 20) {\r\n if (!$charactersLeft.hasClass(config.classNames.textareaAlmostFull)) {\r\n $charactersLeft.addClass(config.classNames.textareaAlmostFull);\r\n }\r\n } else {\r\n $charactersLeft.removeClass(config.classNames.textareaAlmostFull);\r\n }\r\n if (currentLength === 0) {\r\n $(_this._elements.$cta[_this._index]).addClass(config.classNames.accordionCtaDisabled);\r\n } else {\r\n $(_this._elements.$cta[_this._index]).removeClass(config.classNames.accordionCtaDisabled);\r\n }\r\n });\r\n\r\n this._elements.$radioButtons.on('change', function () {\r\n _this._elements.$inputSummary[_this._index].innerText = this.value;\r\n $(_this._elements.$cta[_this._index]).removeClass(config.classNames.accordionCtaDisabled);\r\n });\r\n\r\n this._elements.$privacyPolicy.on('change', function () {\r\n if (this.checked) {\r\n $(_this._elements.$cta[_this._index]).removeClass(config.classNames.accordionCtaDisabled);\r\n } else {\r\n $(_this._elements.$cta[_this._index]).addClass(config.classNames.accordionCtaDisabled);\r\n }\r\n });\r\n }\r\n\r\n _expandItem(index) {\r\n const $el = $(this._elements.$content[index]);\r\n $el.height(`${$el[0].scrollHeight + 15}px `);\r\n const $description = $(this._elements.$description[index]);\r\n $description.height($description[0].scrollHeight);\r\n const $item = $(this._elements.$item[index]);\r\n $item.addClass(config.classNames.accordionItemExpanded);\r\n $item.removeClass(config.classNames.accordionItemCollapsed);\r\n this._index = index;\r\n }\r\n\r\n _collapseItem(index) {\r\n const $el = $(this._elements.$content[index]);\r\n $el.height(0);\r\n const $description = $(this._elements.$description[index]);\r\n $description.height(0);\r\n const $item = $(this._elements.$item[index]);\r\n $item.removeClass(config.classNames.accordionItemFinished);\r\n $item.removeClass(config.classNames.accordionItemExpanded);\r\n $item.addClass(config.classNames.accordionItemCollapsed);\r\n }\r\n\r\n _finishItem(index) {\r\n this._collapseItem(index);\r\n const $item = $(this._elements.$item[index]);\r\n $item.removeClass(config.classNames.accordionItemExpanded);\r\n $item.removeClass(config.classNames.accordionItemCollapsed);\r\n $item.addClass(config.classNames.accordionItemFinished);\r\n }\r\n\r\n _validateInput() {\r\n this._altError = false;\r\n let valid = true;\r\n let emptyInputField = true;\r\n let detailError = false;\r\n const inputLength = this._elements.$textInput.val().length;\r\n switch (this._index) {\r\n case 0:\r\n return this._elements.$inputSummary[this._index].innerText.length > 0;\r\n case 1:\r\n if (inputLength >= this._maxlength) {\r\n return false;\r\n } else if (inputLength === 0) {\r\n this._altError = true;\r\n return false;\r\n }\r\n return true;\r\n case 2:\r\n for (let item of this._elements.$detailForm[0].children) {\r\n if ($(item).hasClass(config.classNames.detailFormErrorMessage)) {\r\n if (detailError === true) {\r\n $(item).addClass(config.classNames.detailFormShowErrorMessage);\r\n } else {\r\n $(item).removeClass(config.classNames.detailFormShowErrorMessage);\r\n }\r\n } else {\r\n if ($(item).hasClass(config.classNames.customselect)) {\r\n emptyInputField = ($(item).find('select').val() === null);\r\n } else {\r\n emptyInputField = (item.value === '');\r\n }\r\n if ((emptyInputField && !$(item).hasClass(config.classNames.privacyPolicy)\r\n && $(item).css('display') !== 'none'\r\n && item.type !== 'tel')\r\n || (item.type === 'email'\r\n && !item.validity.valid\r\n )) {\r\n $(item).addClass(config.classNames.detailFormError);\r\n valid = false;\r\n detailError = true;\r\n } else {\r\n $(item).removeClass(config.classNames.detailFormError);\r\n detailError = false;\r\n }\r\n }\r\n const $el = $(this._elements.$content[2]);\r\n $el.height($el[0].scrollHeight);\r\n }\r\n return valid;\r\n default: return true;\r\n }\r\n }\r\n\r\n \r\n}\r\n\r\nmoduleRegistry.registerModule('ContentAccordion', ContentAccordion);\r\nmoduleRegistry.autoApplyModule('ContentAccordion', config.selectors.root);\r\n","import moduleRegistry from '../module-registry/module-registry';\n\nconst config = {\n selectors: {\n root: '.cta-button--video',\n controls: '.video__controls',\n videoComponent: '.video',\n video: '.video__video',\n videoMobile: '.video__video-mobile',\n videoWrapper: '.video__wrapper',\n backdrop: '.video-lighthouse',\n closeButton: '.video__close-button',\n playPauseBtn: '.video__play-pause',\n\n },\n classNames: {\n videoHide: 'video__video--hidden',\n videoWrapperSmall: 'video__wrapper--small',\n iconButtonWrapper: 'media__play-wrapper--hidden',\n videoFullscreen: 'video--fullscreen',\n videoControlsHidden: 'video__controls--hidden',\n },\n dataAttributes: {\n videoId: 'id'\n },\n playIcon: '',\n pauseIcon: '',\n};\n\nclass CtaButton {\n constructor($rootElement) {\n this._$rootElement = $rootElement;\n this._elements = null;\n this._videoId = null;\n }\n\n init() {\n this._videoId = this._$rootElement.data(config.dataAttributes.videoId);\n\n if(!this._videoId) return;\n\n this._elements = this._getDomElements();\n\n this._elements.$videoWrapper.addClass(config.classNames.videoWrapperSmall);\n this._elements.$video.addClass(config.classNames.videoHide);\n this._elements.$videoMobile.addClass(config.classNames.videoHide);\n this._fullSizedVideo();\n this._closeVideo();\n }\n\n _getDomElements() {\n const $videoLighthouse = $(`.link-list-video[data-id='${this._videoId}'] .video-lighthouse`);\n console.log('$videoLighthouse', $videoLighthouse);\n return {\n $body: $('body'),\n $html: $('html'),\n $controls: $videoLighthouse.find(config.selectors.controls),\n $video: $videoLighthouse.find(config.selectors.video),\n $videoMobile: $videoLighthouse.find(config.selectors.videoMobile),\n $videoComponent: $videoLighthouse.find(config.selectors.videoComponent),\n $videoWrapper: $videoLighthouse.find(config.selectors.videoWrapper),\n $backdrop: $videoLighthouse,\n $closeButton: $videoLighthouse.find(config.selectors.closeButton),\n $playPauseBtn: $videoLighthouse.find(config.selectors.playPauseBtn),\n };\n }\n\n // eslint-disable-next-line class-methods-use-this\n _addEventListeners() {\n }\n\n _removeStandardControls() {\n const videoWorks = !!document.createElement('video').canPlayType;\n\n if (videoWorks) {\n this._elements.$video[0].controls = false;\n this._elements.$controls.removeClass('hidden');\n }\n }\n\n _fullSizedVideo() {\n this._$rootElement.on('click', () => {\n this._elements.$video.removeClass(config.classNames.videoHide);\n this._elements.$videoMobile.removeClass(config.classNames.videoHide);\n this._elements.$videoWrapper.removeClass(config.classNames.videoWrapperSmall);\n this._elements.$controls.removeClass(config.classNames.videoControlsHidden);\n this._elements.$backdrop[0].style.opacity = '1';\n this._elements.$backdrop[0].style.visibility = 'visible';\n this._elements.$video[0].style.opacity = '1';\n this._elements.$video[0].style.visibility = 'visible';\n this._elements.$html.addClass('body--no-scroll');\n // this._elements.$video.show();\n this._elements.$videoMobile.show();\n this._elements.$video[0].player.play();\n\n // html.style.overflow = \"hidden\"\n // main.style.overflow = \"hidden\"\n // body.style.overflow = \"hidden\"\n });\n }\n\n _closeVideo() {\n const videoSettings = this._elements.$video[0];\n // eslint-disable-next-line no-unused-vars\n this._elements.$closeButton.on('click', (e) => {\n // this._elements.$video.hide();\n this._elements.$videoMobile.hide();\n this._elements.$video.addClass(config.classNames.videoHide);\n this._elements.$videoMobile.addClass(config.classNames.videoHide);\n this._elements.$videoWrapper.addClass(config.classNames.videoWrapperSmall);\n this._elements.$controls.addClass(config.classNames.videoControlsHidden);\n this._elements.$videoComponent.removeClass(config.classNames.videoFullscreen);\n this._elements.$backdrop[0].style.opacity = '0';\n this._elements.$backdrop[0].style.visibility = 'hidden';\n this._elements.$video[0].style.opacity = '0';\n this._elements.$video[0].style.visibility = 'hidden';\n this._elements.$html.removeClass('body--no-scroll');\n videoSettings.player.pause();\n this._elements.$playPauseBtn.html(config.playIcon);\n });\n }\n}\n\nmoduleRegistry.registerModule('CtaButton', CtaButton);\nmoduleRegistry.autoApplyModule('CtaButton', config.selectors.root);\n","import moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.detail-form',\r\n titles: '.detail-form__titles',\r\n titleInput: '.detail-form__title-input',\r\n selectItems: '.detail-form__select-items',\r\n },\r\n classNames: {\r\n customTitle: 'detail-form__title-input--custom-title',\r\n customselect: 'detail-form__custom-select',\r\n selectSelected: 'detail-form__select-selected',\r\n selectSelectedActive: 'detail-form__select-selected--active',\r\n selectItems: 'detail-form__select-items',\r\n selectItemsHide: 'detail-form__select-hide',\r\n selectItem: 'detail-form__select-item',\r\n sameAsSelected: 'detail-form__same-as-selected',\r\n customTitle: 'detail-form__title-input--custom-title',\r\n },\r\n};\r\n\r\n\r\nclass DetailForm {\r\n\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n }\r\n\r\n init() {\r\n this._elements = this._getDomElements();\r\n this._addEventListeners();\r\n this._generateSelect();\r\n }\r\n\r\n _getDomElements() {\r\n return {\r\n $titles: this._$rootElement.find(config.selectors.titles),\r\n $titleInput: this._$rootElement.find(config.selectors.titleInput),\r\n $selectItems: this._$rootElement.find(config.selectors.selectItems)\r\n };\r\n }\r\n\r\n _addEventListeners() {\r\n const _this = this;\r\n\r\n this._elements.$titles.on(\"change\", function() {\r\n const $titleInput = $(_this._elements.$titleInput);\r\n if($(this).val() === \"other\") {\r\n $titleInput.addClass(config.classNames.customTitle);\r\n } else {\r\n $titleInput.removeClass(config.classNames.customTitle);\r\n }\r\n });\r\n }\r\n\r\n _generateSelect() {\r\n \r\n var customSelect, i, j, customSelectLength, selectLength, selElmnt, selectSelected, selectItems, selectItem;\r\n /* look for any elements with the class \"custom-select\": */\r\n customSelect = this._$rootElement.find('.detail-form__custom-select');\r\n customSelectLength = customSelect.length;\r\n // console.log(\"customSelect\", customSelect)\r\n\r\n // WICHTIG: in detail-form rein und nicht mit document\r\n\r\n for (i = 0; i < customSelectLength; i++) {\r\n selElmnt = customSelect[i].getElementsByTagName('select')[0];\r\n selectLength = selElmnt.length;\r\n /* for each element, create a new DIV that will act as the selected item: */\r\n selectSelected = document.createElement('DIV');\r\n selectSelected.setAttribute('class', config.classNames.selectSelected);\r\n selectSelected.innerHTML = selElmnt.options[selElmnt.selectedIndex].innerHTML;\r\n customSelect[i].appendChild(selectSelected);\r\n /* for each element, create a new DIV that will contain the option list: */\r\n selectItems = document.createElement('DIV');\r\n selectItems.setAttribute('class', config.classNames.selectItems);\r\n selectItems.classList.add(config.classNames.selectItemsHide);\r\n for (j = 1; j < selectLength; j++) {\r\n /* for each option in the original select element,\r\n create a new DIV that will act as an option item: */\r\n selectItem = document.createElement('DIV');\r\n selectItem.setAttribute('class', config.classNames.selectItem);\r\n selectItem.innerHTML = selElmnt.options[j].innerHTML;\r\n\r\n const $this = this;\r\n selectItem.addEventListener('click', function (e) {\r\n /* when an item is clicked, update the original select box,\r\n and the selected item: */\r\n var sameAsSelectedItem, i, k, defaultSelect, selectedItem, sl, yl;\r\n defaultSelect = this.parentNode.parentNode.getElementsByTagName('select')[0];\r\n sl = defaultSelect.length;\r\n selectedItem = this.parentNode.previousSibling;\r\n for (i = 0; i < sl; i++) {\r\n if (defaultSelect.options[i].innerHTML === this.innerHTML) {\r\n defaultSelect.selectedIndex = i;\r\n // console.log('ok');\r\n const $customSelect = $this._$rootElement.find(config.classNames.customselect);\r\n const hiddenSelect = $customSelect.find('select');\r\n hiddenSelect.val(this.innerHTML);\r\n selectedItem.innerHTML = this.innerHTML;\r\n sameAsSelectedItem = this.parentNode.getElementsByClassName(config.classNames.sameAsSelected);\r\n yl = sameAsSelectedItem.length;\r\n for (k = 0; k < yl; k++) {\r\n sameAsSelectedItem[k].removeAttribute('class');\r\n }\r\n this.setAttribute('class', config.classNames.sameAsSelected);\r\n break;\r\n }\r\n }\r\n selectedItem.click();\r\n });\r\n selectItems.appendChild(selectItem);\r\n }\r\n customSelect[i].appendChild(selectItems);\r\n \r\n selectSelected.addEventListener('click', function (e) {\r\n /* when the select box is clicked, close any other select boxes,\r\n and open/close the current select box: */\r\n e.stopPropagation();\r\n \r\n const nextsibling = this.nextSibling;\r\n var selecteditems = $(config.selectors.selectItems)\r\n selecteditems.addClass(config.classNames.selectItemsHide)\r\n nextsibling.classList.toggle(config.classNames.selectItemsHide);\r\n });\r\n }\r\n \r\n /* if the user clicks anywhere outside the select box,\r\n then close all select boxes: */\r\n document.addEventListener('click', this._closeAllSelects);\r\n }\r\n\r\n \r\n\r\n _closeAllSelects() {\r\n var selecteditems = $(config.selectors.selectItems)\r\n selecteditems.addClass(config.classNames.selectItemsHide)\r\n }\r\n\r\n}\r\n\r\nmoduleRegistry.registerModule('DetailForm', DetailForm);\r\nmoduleRegistry.autoApplyModule('DetailForm', config.selectors.root);","import { Breakpoints } from '../breakpoints/breakpoints';\r\nimport moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.directory',\r\n accordionItem: '.directory__accordion-item',\r\n accordionItemContent: '.directory__accordion-item-content',\r\n accordionItemHeadline: '.directory__accordion-item-headline',\r\n accordionItemLink: '.directory__accordion-item-headline-link',\r\n icon: '.directory__accordion-item-headline-icon-content',\r\n },\r\n classNames: {\r\n accordionItemContentTransition: 'directory__accordion-item-content-transition',\r\n accordionItemContentHidden: 'directory__accordion-item-content--hidden',\r\n linkIconPlain: 'icon-TickCircleForward_Circle3',\r\n linkIconHover: 'icon-TickCircleForward_Circle1',\r\n },\r\n};\r\n\r\nclass Directory {\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n this._isAccordion = false;\r\n }\r\n\r\n init() {\r\n this._elements = this._getDomElements();\r\n this._addEventListeners();\r\n this._initAccordion();\r\n\r\n \r\n }\r\n\r\n _getDomElements() {\r\n return {\r\n $accordionItem: this._$rootElement.find(config.selectors.accordionItem),\r\n $accordionItemContent: this._$rootElement.find(config.selectors.accordionItemContent),\r\n $accordionItemHeadline: this._$rootElement.find(config.selectors.accordionItemHeadline),\r\n $accordionItemLink: this._$rootElement.find(config.selectors.accordionItemLink),\r\n $icon: this._$rootElement.find(config.selectors.icon),\r\n };\r\n }\r\n\r\n _initAccordion() {\r\n if (Breakpoints.isBreakpoint('xs') || Breakpoints.isBreakpoint('sm')) {\r\n this._isAccordion = false;\r\n }else {\r\n this._elements.$accordionItemContent.each((i, element) => {\r\n if(i===0){\r\n $(element).css('height', `${$(element)[0].scrollHeight }px`);\r\n \r\n }\r\n this._isAccordion = true;\r\n });\r\n }\r\n \r\n \r\n }\r\n\r\n _hideAll() {\r\n this._elements.$accordionItemContent.each((i, element) => {\r\n $(element).height(0);\r\n this._isAccordion = true;\r\n });\r\n }\r\n\r\n _expandAll() {\r\n this._elements.$accordionItemContent.each((i, element) => {\r\n $(element).height($(element)[0].scrollHeight);\r\n this._isAccordion = false;\r\n });\r\n }\r\n\r\n _addEventListeners() {\r\n const _this = this;\r\n const icon = this._elements.$icon;\r\n const item = this._elements.$accordionItem;\r\n const content = this._elements.$accordionItemContent\r\n\r\n item.mouseover((e) => {\r\n if ($(window).width() > Breakpoints.BREAKPOINTS.MD) {\r\n this._hideAll();\r\n $(e.currentTarget.children[1]).height($(e.currentTarget.children[1])[0].scrollHeight);\r\n }\r\n });\r\n \r\n item.mouseleave((e) => {\r\n if ($(window).width() > Breakpoints.BREAKPOINTS.MD) \r\n $(e.currentTarget.children[1]).height(0);\r\n });\r\n\r\n $(window).on('resize', () => {\r\n if (!this._isAccordion && $(window).width() >= Breakpoints.BREAKPOINTS.MD) {\r\n this._hideAll();\r\n } else if (this._isAccordion && $(window).width() < Breakpoints.BREAKPOINTS.MD) {\r\n this._expandAll();\r\n }\r\n });\r\n\r\n item.on('focusin', function (e) {\r\n if ($(window).width() > Breakpoints.BREAKPOINTS.MD) {\r\n _this._hideAll();\r\n $(this.children[1]).height(this.children[1].scrollHeight);\r\n }\r\n });\r\n\r\n item.on('focusout', function (e) {\r\n if ($(window).width() > Breakpoints.BREAKPOINTS.MD) \r\n $(this.children[1]).height(0);\r\n });\r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('Directory', Directory);\r\nmoduleRegistry.autoApplyModule('Directory', config.selectors.root);\r\n","import { Breakpoints } from '../breakpoints/breakpoints';\r\nimport moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.editorial',\r\n },\r\n};\r\n\r\nclass Editorial {\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._scroll = true;\r\n }\r\n\r\n init() {\r\n // console.log('init scroll behaviour');\r\n if(navigator.userAgent.indexOf('Firefox') != -1) {\r\n $('body').addClass(\"firefox\")\r\n }\r\n \r\n const target = this._$rootElement.find('.editorial__side-stories')[0];\r\n\r\n // document.addEventListener('wheel', (e) => {\r\n // if(!Breakpoints.isBreakpointOrLarger('md')) return;\r\n\r\n // if(e.deltaY > 0) {\r\n // // scrolling down\r\n // if(this._viewPortBottomCloseElementBottom()) {\r\n // if(!this._scroll && Math.abs(target.scrollHeight - target.scrollTop - target.clientHeight) < 1) {\r\n // Scrolling.removeBodyNoScroll();\r\n // Navigation.canChangeScrollBehavior = true;\r\n // this._scroll = true;\r\n // } else if (this._scroll && !(Math.abs(target.scrollHeight - target.scrollTop - target.clientHeight) < 1)){\r\n // Scrolling.addBodyNoScroll();\r\n // Navigation.canChangeScrollBehavior = false;\r\n // this._scroll = false; \r\n // }\r\n // }\r\n // } else {\r\n // // scrolling up\r\n // if(this._viewPortTopCloseElementTop()) {\r\n // if(!this._scroll && target.scrollTop === 0) {\r\n // Scrolling.removeBodyNoScroll();\r\n // Navigation.canChangeScrollBehavior = true;\r\n // this._scroll = true;\r\n // } else if(this._scroll && target.scrollTop !== 0) {\r\n // Scrolling.addBodyNoScroll();\r\n // Navigation.canChangeScrollBehavior = false;\r\n // this._scroll = false; \r\n // }\r\n // }\r\n // }\r\n\r\n\r\n // if(!this._scroll) {\r\n // target.scrollBy(e.deltaX, e.deltaY);\r\n\r\n // if (e.deltaY > 0 && Math.abs(target.scrollHeight - target.scrollTop - target.clientHeight) < 1) {\r\n // Scrolling.removeBodyNoScroll();\r\n // Navigation.canChangeScrollBehavior = true;\r\n // // enableScroll();\r\n // this._scroll = true;\r\n // } else if (e.deltaY < 0 && target.scrollTop === 0) {\r\n // Scrolling.removeBodyNoScroll();\r\n // Navigation.canChangeScrollBehavior = true;\r\n // // enableScroll();\r\n // this._scroll = true;\r\n // }\r\n // }\r\n // });\r\n }\r\n\r\n _scrollRightSide() {\r\n const elementTop = this._$rootElement.position().top;\r\n const elementBottom = elementTop + this._$rootElement.height();\r\n const viewportTop = $(window).scrollTop();\r\n const viewportBottom = viewportTop + $(window).height();\r\n\r\n return viewportBottom >= elementBottom + 100;\r\n }\r\n\r\n _viewPortBottomCloseElementBottom() {\r\n const elementTop = this._$rootElement.position().top;\r\n const elementBottom = elementTop + this._$rootElement.height();\r\n const viewportTop = $(window).scrollTop();\r\n const viewportBottom = viewportTop + $(window).height();\r\n\r\n return viewportBottom >= elementBottom + 100; \r\n }\r\n\r\n _viewPortTopCloseElementTop() {\r\n const elementTop = this._$rootElement.position().top;\r\n const viewportTop = $(window).scrollTop();\r\n\r\n return viewportTop <= elementTop; \r\n }\r\n\r\n _isMdOrHigher() {\r\n return Breakpoints.isBreakpointOrLarger('md');\r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('Editorial', Editorial);\r\nmoduleRegistry.autoApplyModule('Editorial', config.selectors.root);\r\n","import moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.footer',\r\n accordionEntry: '.footer__link-list-wrapper',\r\n linkListHeadline: '.footer__link-list-headline',\r\n linkList: '.footer__link-list',\r\n accordionEntryOpen: '.footer__link-list-wrapper--open',\r\n linkListItemLink: '.footer__link-list-item-link'\r\n },\r\n classNames: {\r\n iconOpen: 'icon-TickCirclePlus3',\r\n iconClose: 'icon-StateWhite15',\r\n accordionEntryOpenClass: 'footer__link-list-wrapper--open'\r\n },\r\n};\r\n\r\nclass Footer {\r\n constructor($rootElement, options) {\r\n this._$rootElement = $rootElement;\r\n this._options = options;\r\n this._elements = null;\r\n this._isHidden = true;\r\n }\r\n\r\n init() {\r\n this._elements = this._getDomElements();\r\n \r\n \r\n this._accordion();\r\n\r\n this._$rootElement.find('.footer__lower-link--one-trust').on('click', (e) => {\r\n e.preventDefault();\r\n\r\n if(typeof OneTrust === 'object') {\r\n OneTrust.ToggleInfoDisplay();\r\n }\r\n });\r\n\r\n $('*[href=\"#cookie-center\"]').on('click', (e) => {\r\n e.preventDefault();\r\n\r\n if(typeof OneTrust === 'object') {\r\n OneTrust.ToggleInfoDisplay();\r\n }\r\n });\r\n }\r\n\r\n _getDomElements() {\r\n return {\r\n $linkListHeadline: this._$rootElement.find(config.selectors.linkListHeadline),\r\n $accordionEntry: this._$rootElement.find(config.selectors.accordionEntry),\r\n $accordionEntryOpen: this._$rootElement.find(config.selectors.accordionEntryOpen),\r\n $linkList: this._$rootElement.find(config.selectors.linkList),\r\n $linkListItemLink: this._$rootElement.find(config.selectors.linkListItemLink),\r\n };\r\n }\r\n\r\n _accordion() {\r\n const firstEntry = this._elements.$accordionEntry[0];\r\n $(firstEntry).addClass('footer__link-list-wrapper--open')\r\n const icon = $(firstEntry).find('.icon');\r\n icon.removeClass(config.classNames.iconOpen);\r\n icon.addClass(config.classNames.iconClose);\r\n \r\n if (this._elements.$accordionEntryOpen) {\r\n this._$rootElement.find(config.selectors.accordionEntryOpen).children(config.selectors.linkList).css('height', `${this._elements.$linkList[0].scrollHeight + 15}px `);\r\n } \r\n\r\n this._$rootElement.find(config.selectors.linkListHeadline).on('click', (e) => {\r\n const currentAccordionIcon = $(e.currentTarget).children('.icon');\r\n const closestWrapper = $(e.currentTarget).closest(config.selectors.accordionEntry);\r\n console.log(\"closestWrapper\", closestWrapper)\r\n if(this._isHidden && !closestWrapper.hasClass(config.classNames.accordionEntryOpenClass)) {\r\n closestWrapper.addClass(config.classNames.accordionEntryOpenClass);\r\n closestWrapper.children(config.selectors.linkList).css('height', `${closestWrapper.find(config.selectors.linkList)[0].scrollHeight + 15}px `)\r\n currentAccordionIcon.removeClass(config.classNames.iconOpen);\r\n currentAccordionIcon.addClass(config.classNames.iconClose);\r\n this._isHidden = false;\r\n } else {\r\n closestWrapper.removeClass(config.classNames.accordionEntryOpenClass);\r\n currentAccordionIcon.addClass(config.classNames.iconOpen);\r\n currentAccordionIcon.removeClass(config.classNames.iconClose);\r\n this._isHidden = true;\r\n closestWrapper.children(config.selectors.linkList).css('height', `0`);\r\n }\r\n })\r\n\r\n this._elements.$linkListItemLink.on('focusin',(e) => {\r\n\r\n const currentAccordionIcon = $(e.currentTarget).closest(config.selectors.accordionEntry).children(config.selectors.linkListHeadline).children('.icon');\r\n\r\n \r\n if (this._isHidden && !$(e.currentTarget).closest(config.selectors.accordionEntry).hasClass(this._elements.$accordionEntryOpen)) {\r\n $(e.currentTarget).closest(config.selectors.accordionEntry).addClass(this._elements.$accordionEntryOpen);\r\n $(e.currentTarget).closest(config.selectors.accordionEntry).children(config.selectors.linkList).css('height', `${$(e.currentTarget).closest(config.selectors.accordionEntry).find(config.selectors.linkList)[0].scrollHeight + 15}px `)\r\n currentAccordionIcon.removeClass(config.classNames.iconOpen);\r\n currentAccordionIcon.addClass(config.classNames.iconClose);\r\n this._isHidden = false;\r\n\r\n }\r\n })\r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('Footer', Footer);\r\nmoduleRegistry.autoApplyModule('Footer', config.selectors.root);\r\n","import moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.image-slider',\r\n slides: '.image-slider__slides',\r\n slide: '.image-slider__slide',\r\n dots: '.image-slider__dots',\r\n dot: '.image-slider__dot',\r\n },\r\n classNames: {\r\n dotActive: 'image-slider__dot--active',\r\n dotsVisible: 'image-slider__dots--visible'\r\n },\r\n dataAttributes: {\r\n index: 'index'\r\n },\r\n\r\n sliderConfig: {\r\n dots: false,\r\n arrows: false,\r\n infinite: false,\r\n speed: 750,\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n // swipeToSlide: true,\r\n mobileFirst: true,\r\n autoplay: false,\r\n variableWidth: false,\r\n swipe: false,\r\n swipeToSlide: false,\r\n touchMove: false,\r\n draggable: false,\r\n },\r\n easeTime: 0.2,\r\n};\r\n\r\nclass ImageSlider {\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n this._isSlider = false;\r\n this._currentIndex = 0;\r\n }\r\n\r\n init() {\r\n this._elements = this._getDomElements();\r\n\r\n if(this._elements.$slide.length > 1) {\r\n this._elements.$slides.slick(config.sliderConfig);\r\n this._elements.$dots.html(this._createDotHtml());\r\n\r\n this._elements.$dot = this._$rootElement.find(config.selectors.dot);\r\n\r\n this._addEventListener();\r\n $(this._elements.$dot[0]).addClass(config.classNames.dotActive);\r\n this._elements.$dots.addClass(config.classNames.dotsVisible);\r\n }\r\n }\r\n\r\n _getDomElements() {\r\n return {\r\n $slides: this._$rootElement.find(config.selectors.slides),\r\n $slide: this._$rootElement.find(config.selectors.slide),\r\n $dots: this._$rootElement.find(config.selectors.dots),\r\n };\r\n }\r\n\r\n _addEventListener() {\r\n const _this = this;\r\n\r\n this._elements.$dot.on('click', function(e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n const index = $(this).data(config.dataAttributes.index);\r\n\r\n _this._elements.$slides.slick('slickGoTo', index);\r\n _this._elements.$dot.removeClass(config.classNames.dotActive);\r\n $(this).addClass(config.classNames.dotActive)\r\n });\r\n\r\n this._elements.$dot.on('mousedown', function(e) {\r\n e.stopPropagation();\r\n });\r\n }\r\n\r\n _createDotHtml() {\r\n let html = '';\r\n\r\n this._elements.$slide.each((index, element) => {\r\n html += `
    `\r\n\r\n });\r\n\r\n return html;\r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('ImageSlider', ImageSlider);\r\nmoduleRegistry.autoApplyModule('ImageSlider', config.selectors.root);\r\n","import moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.image-video-tile--video',\r\n video: '.video-js',\r\n playPauseBtn: '.image-video-tile__play-pause-btn',\r\n playPauseBtnIcon: '.image-video-tile__play-pause-btn-icon',\r\n videoWrapper: '.image-video-tile__video-wrapper',\r\n imageWrapper: '.image-video-tile__image-wrapper',\r\n },\r\n classNames: {\r\n playIcon: 'image-video-tile__play-pause-btn-icon--play',\r\n pauseIcon: 'image-video-tile__play-pause-btn-icon--pause',\r\n },\r\n dataAttributes: {\r\n autoplay: 'autoplay',\r\n },\r\n pauseIconCircle: '\"Play',\r\n pauseIconCircleWhite: '\"Play',\r\n playIconPaths: '',\r\n};\r\n\r\nclass ImageVideoTile {\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n }\r\n\r\n init() {\r\n // listen for initialization event\r\n this._elements = this._getDomElements();\r\n this._addEventListeners();\r\n this._screenClick();\r\n\r\n // video isnt allowed by localization\r\n // show fallback image & hide play pause button \r\n if(this._elements.$video.length === 0) {\r\n this._elements.$playPauseBtn.hide();\r\n return;\r\n }\r\n\r\n\r\n this._elements.$playPauseBtnIcon.addClass(config.classNames.playIcon);\r\n this._autoPlayVideo();\r\n }\r\n\r\n _getDomElements() {\r\n return {\r\n $video: this._$rootElement.find(config.selectors.video),\r\n $playPauseBtn: this._$rootElement.find(config.selectors.playPauseBtn),\r\n $playPauseBtnIcon: this._$rootElement.find(config.selectors.playPauseBtnIcon),\r\n $videoWrapper: this._$rootElement.find(config.selectors.videoWrapper),\r\n $imageWrapper: this._$rootElement.find(config.selectors.imageWrapper),\r\n };\r\n }\r\n\r\n _addEventListeners() {\r\n this._elements.$playPauseBtn.on('click', () => {\r\n this._playPauseHandler();\r\n });\r\n }\r\n\r\n // eslint-disable-next-line class-methods-use-this\r\n _autoPlayVideo() {\r\n if (this._elements.$video.data(config.dataAttributes.autoplay)) {\r\n this._muteVideo();\r\n this._playPauseHandler();\r\n }\r\n }\r\n\r\n _muteVideo() {\r\n const videoSettings = this._elements.$video[0];\r\n videoSettings.player.muted(true);\r\n }\r\n\r\n _playPauseHandler() {\r\n const videoSettings = this._elements.$video[0];\r\n\r\n if (videoSettings.player.paused()) {\r\n videoSettings.player.play();\r\n\r\n this._elements.$playPauseBtnIcon.removeClass(config.classNames.playIcon);\r\n this._elements.$playPauseBtnIcon.addClass(config.classNames.pauseIcon);\r\n } else {\r\n videoSettings.player.pause();\r\n this._elements.$playPauseBtnIcon.addClass(config.classNames.playIcon);\r\n this._elements.$playPauseBtnIcon.removeClass(config.classNames.pauseIcon);\r\n // this._elements.$playPauseBtnIcon.addClass(config.classNames.playIcon);\r\n // this._elements.$playPauseBtnIcon.html(config.playIconPaths);\r\n }\r\n }\r\n\r\n _screenClick() {\r\n const _this = this;\r\n const videoSettings = this._elements.$video[0];\r\n\r\n \r\n if(videoSettings && videoSettings.player) {\r\n videoSettings.player.on('play', function() {\r\n _this._elements.$imageWrapper.hide();\r\n _this._elements.$videoWrapper.show();\r\n });\r\n \r\n this._elements.$video.on('click', (e) => {\r\n e.preventDefault();\r\n\r\n if (videoSettings.player.paused()) {\r\n this._elements.$imageWrapper.hide();\r\n this._elements.$videoWrapper.show();\r\n videoSettings.player.play();\r\n // this._elements.$playPauseBtnIcon.empty();\r\n // this._elements.$playPauseBtnIcon.html(config.playIconPaths);\r\n this._elements.$playPauseBtnIcon.removeClass(config.classNames.playIcon);\r\n this._elements.$playPauseBtnIcon.addClass(config.classNames.pauseIcon);\r\n } else {\r\n videoSettings.player.pause();\r\n this._elements.$playPauseBtnIcon.addClass(config.classNames.playIcon);\r\n this._elements.$playPauseBtnIcon.removeClass(config.classNames.pauseIcon);\r\n }\r\n });\r\n }\r\n\r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('ImageVideoTile', ImageVideoTile);\r\nmoduleRegistry.autoApplyModule('ImageVideoTile', config.selectors.root);","import moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.interactive-launcher',\r\n container: '.interactive-launcher__container',\r\n iframeContainer: '.interactive-launcher__iframe-container',\r\n iframeWrapper: '.interactive-launcher__iframe-wrapper',\r\n iframe: '.interactive-launcher__iframe',\r\n cta: '.interactive-launcher__cta',\r\n close: '.interactive-launcher__close',\r\n text: '.interactive-launcher__text'\r\n },\r\n dataAttributes: {\r\n iframeSrc: 'iframe-src'\r\n },\r\n classNames: {\r\n fullscreen: 'interactive-launcher__iframe-wrapper--fullscreen'\r\n },\r\n};\r\n\r\nclass InteractiveLauncher {\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n this._isInitialized = false;\r\n this._src = '';\r\n }\r\n\r\n init() {\r\n this._elements = this._getDomElements();\r\n\r\n if(true) {\r\n this._loadIframe();\r\n }\r\n\r\n this._addEventListeners();\r\n }\r\n\r\n _getDomElements() {\r\n return {\r\n $iframe: this._$rootElement.find(config.selectors.iframe), \r\n $iframeWrapper: this._$rootElement.find(config.selectors.iframeWrapper), \r\n $cta: this._$rootElement.find(config.selectors.cta), \r\n $close: this._$rootElement.find(config.selectors.close), \r\n };\r\n }\r\n\r\n _loadIframe() {\r\n this._elements.$iframe.attr('src', this._elements.$iframe.data(config.dataAttributes.iframeSrc));\r\n }\r\n\r\n\r\n _addEventListeners() {\r\n const _this = this;\r\n\r\n this._elements.$cta.on('click', (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this._elements.$iframeWrapper.addClass(config.classNames.fullscreen);\r\n });\r\n\r\n this._elements.$close.on('click', (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this._elements.$iframeWrapper.removeClass(config.classNames.fullscreen);\r\n });\r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('InteractiveLauncher', InteractiveLauncher);\r\nmoduleRegistry.autoApplyModule('InteractiveLauncher', config.selectors.root);\r\n","/*! @license DOMPurify 3.1.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.1.3/LICENSE */\n\nconst {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor\n} = Object;\nlet {\n freeze,\n seal,\n create\n} = Object; // eslint-disable-line import/no-mutable-exports\nlet {\n apply,\n construct\n} = typeof Reflect !== 'undefined' && Reflect;\nif (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n}\nif (!seal) {\n seal = function seal(x) {\n return x;\n };\n}\nif (!apply) {\n apply = function apply(fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n}\nif (!construct) {\n construct = function construct(Func, args) {\n return new Func(...args);\n };\n}\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\nconst numberIsNaN = unapply(Number.isNaN);\n\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param {Function} func - The function to be wrapped and called.\n * @returns {Function} A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(func) {\n return function (thisArg) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n return apply(func, thisArg, args);\n };\n}\n\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param {Function} func - The constructor function to be wrapped and called.\n * @returns {Function} A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct(func) {\n return function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return construct(func, args);\n };\n}\n\n/**\n * Add properties to a lookup table\n *\n * @param {Object} set - The set to which elements will be added.\n * @param {Array} array - The array containing elements to be added to the set.\n * @param {Function} transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns {Object} The modified set with added elements.\n */\nfunction addToSet(set, array) {\n let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n}\n\n/**\n * Clean up an array to harden against CSPP\n *\n * @param {Array} array - The array to be cleaned.\n * @returns {Array} The cleaned version of the array\n */\nfunction cleanArray(array) {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n return array;\n}\n\n/**\n * Shallow clone an object\n *\n * @param {Object} object - The object to be cloned.\n * @returns {Object} A new object that copies the original.\n */\nfunction clone(object) {\n const newObject = create(null);\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n if (isPropertyExist) {\n if (Array.isArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (value && typeof value === 'object' && value.constructor === Object) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n return newObject;\n}\n\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param {Object} object - The object to look up the getter function in its prototype chain.\n * @param {String} prop - The property name for which to find the getter function.\n * @returns {Function} The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n object = getPrototypeOf(object);\n }\n function fallbackValue() {\n return null;\n }\n return fallbackValue;\n}\n\nconst html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\n\n// SVG\nconst svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\nconst svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nconst svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\nconst mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nconst mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\nconst text = freeze(['#text']);\n\nconst html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);\nconst svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\nconst mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\nconst xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n// eslint-disable-next-line unicorn/better-regex\nconst MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nconst ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nconst TMPLIT_EXPR = seal(/\\${[\\w\\W]*}/gm);\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\n\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\n\nconst DOCTYPE_NAME = seal(/^html$/i);\nconst CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\nvar EXPRESSIONS = /*#__PURE__*/Object.freeze({\n __proto__: null,\n MUSTACHE_EXPR: MUSTACHE_EXPR,\n ERB_EXPR: ERB_EXPR,\n TMPLIT_EXPR: TMPLIT_EXPR,\n DATA_ATTR: DATA_ATTR,\n ARIA_ATTR: ARIA_ATTR,\n IS_ALLOWED_URI: IS_ALLOWED_URI,\n IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE: ATTR_WHITESPACE,\n DOCTYPE_NAME: DOCTYPE_NAME,\n CUSTOM_ELEMENT: CUSTOM_ELEMENT\n});\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5,\n // Deprecated\n entityNode: 6,\n // Deprecated\n progressingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12 // Deprecated\n};\n\nconst getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n};\n\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {HTMLScriptElement} purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return {TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n};\nfunction createDOMPurify() {\n let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n const DOMPurify = root => createDOMPurify(root);\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n DOMPurify.version = '3.1.3';\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n let {\n document\n } = window;\n const originalDocument = document;\n const currentScript = originalDocument.currentScript;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes\n } = window;\n const ElementPrototype = Element.prototype;\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n let trustedTypesPolicy;\n let emptyHTML = '';\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName\n } = document;\n const {\n importNode\n } = originalDocument;\n let hooks = {};\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT\n } = EXPRESSIONS;\n let {\n IS_ALLOWED_URI: IS_ALLOWED_URI$1\n } = EXPRESSIONS;\n\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n\n /*\n * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n\n /* Decide if document with ... should be returned */\n let WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc = null;\n\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n\n /* Specify the maximum element nesting depth to prevent mXSS */\n const MAX_NESTING_DEPTH = 255;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n const formElement = document.createElement('form');\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n\n /**\n * _parseConfig\n *\n * @param {Object} cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function _parseConfig() {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n\n /* Set configuration parameters */\n ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES),\n // eslint-disable-line indent\n cfg.ADD_URI_SAFE_ATTR,\n // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS),\n // eslint-disable-line indent\n cfg.ADD_DATA_URI_TAGS,\n // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {};\n FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {};\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, text);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n }\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n }\n\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n }\n\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n const HTML_INTEGRATION_POINTS = addToSet({}, ['foreignobject', 'annotation-xml']);\n\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n\n /**\n * @param {Element} element a DOM element whose namespace is being checked\n * @returns {boolean} Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function _checkValidNamespace(element) {\n let parent = getParentNode(element);\n\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n\n // The only way to switch from SVG to MathML is via\n // and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n\n // For XHTML and XML documents that support custom namespaces\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n return true;\n }\n\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n\n /**\n * _forceRemove\n *\n * @param {Node} node a DOM node\n */\n const _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, {\n element: node\n });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n node.parentNode.removeChild(node);\n } catch (_) {\n node.remove();\n }\n };\n\n /**\n * _removeAttribute\n *\n * @param {String} name an Attribute name\n * @param {Node} node a DOM node\n */\n const _removeAttribute = function _removeAttribute(name, node) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: node.getAttributeNode(name),\n from: node\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: node\n });\n }\n node.removeAttribute(name);\n\n // We void attribute values for unremovable \"is\"\" attributes\n if (name === 'is' && !ALLOWED_ATTR[name]) {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(node);\n } catch (_) {}\n } else {\n try {\n node.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n\n /**\n * _initDocument\n *\n * @param {String} dirty a string of dirty markup\n * @return {Document} a DOM, filled with the dirty markup\n */\n const _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n if (FORCE_BODY) {\n dirty = '' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty = '' + dirty + '';\n }\n const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n const body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param {Node} root The root element or node to start traversing on.\n * @return {NodeIterator} The created NodeIterator\n */\n const _createNodeIterator = function _createNodeIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n };\n\n /**\n * _isClobbered\n *\n * @param {Node} elm element to check for clobbering attacks\n * @return {Boolean} true if clobbered, false if safe\n */\n const _isClobbered = function _isClobbered(elm) {\n return elm instanceof HTMLFormElement && (\n // eslint-disable-next-line unicorn/no-typeof-undefined\n typeof elm.__depth !== 'undefined' && typeof elm.__depth !== 'number' ||\n // eslint-disable-next-line unicorn/no-typeof-undefined\n typeof elm.__removalCount !== 'undefined' && typeof elm.__removalCount !== 'number' || typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function' || typeof elm.hasChildNodes !== 'function');\n };\n\n /**\n * Checks whether the given object is a DOM node.\n *\n * @param {Node} object object to check whether it's a DOM node\n * @return {Boolean} true is object is a DOM node\n */\n const _isNode = function _isNode(object) {\n return typeof Node === 'function' && object instanceof Node;\n };\n\n /**\n * _executeHook\n * Execute user configurable hooks\n *\n * @param {String} entryPoint Name of the hook's entry point\n * @param {Node} currentNode node to work on with the hook\n * @param {Object} data additional hook parameters\n */\n const _executeHook = function _executeHook(entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) {\n return;\n }\n arrayForEach(hooks[entryPoint], hook => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n *\n * @param {Node} currentNode to check for permission to exist\n * @return {Boolean} true if node was killed, false if left alive\n */\n const _sanitizeElements = function _sanitizeElements(currentNode) {\n let content = null;\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeElements', currentNode, null);\n\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n\n /* Execute a hook if present */\n _executeHook('uponSanitizeElement', currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\n\n /* Detect mXSS attempts abusing namespace confusion */\n if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove any ocurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove any kind of possibly harmful comments */\n if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove element if anything forbids its presence */\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n return false;\n }\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n return false;\n }\n }\n\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n for (let i = childCount - 1; i >= 0; --i) {\n const childClone = cloneNode(childNodes[i], true);\n childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n parentNode.insertBefore(childClone, getNextSibling(currentNode));\n }\n }\n }\n _forceRemove(currentNode);\n return true;\n }\n\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */\n content = currentNode.textContent;\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n content = stringReplace(content, expr, ' ');\n });\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, {\n element: currentNode.cloneNode()\n });\n currentNode.textContent = content;\n }\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeElements', currentNode, null);\n return false;\n };\n\n /**\n * _isValidAttribute\n *\n * @param {string} lcTag Lowercase tag name of containing element.\n * @param {string} lcName Lowercase attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement || value === '__depth' || value === '__removalCount')) {\n return false;\n }\n\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n return false;\n } else ;\n return true;\n };\n\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param {string} tagName name of the tag of the node to sanitize\n * @returns {boolean} Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n };\n\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param {Node} currentNode to sanitize\n */\n const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n /* Execute a hook if present */\n _executeHook('beforeSanitizeAttributes', currentNode, null);\n const {\n attributes\n } = currentNode;\n\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes) {\n return;\n }\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR\n };\n let l = attributes.length;\n\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const {\n name,\n namespaceURI,\n value: attrValue\n } = attr;\n const lcName = transformCaseFunc(name);\n let value = name === 'value' ? attrValue : stringTrim(attrValue);\n\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n\n /* Remove attribute */\n _removeAttribute(name, currentNode);\n\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n continue;\n }\n\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Work around a security issue with comments inside attributes */\n if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title)/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n value = stringReplace(value, expr, ' ');\n });\n }\n\n /* Is `value` valid for this attribute? */\n const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n continue;\n }\n\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n\n /* Handle attributes that require Trusted Types */\n if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n if (namespaceURI) ; else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML':\n {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n case 'TrustedScriptURL':\n {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n }\n }\n }\n\n /* Handle invalid data-* attribute set by try-catching it */\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {}\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeAttributes', currentNode, null);\n };\n\n /**\n * _sanitizeShadowDOM\n *\n * @param {DocumentFragment} fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeShadowDOM', fragment, null);\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHook('uponSanitizeShadowNode', shadowNode, null);\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(shadowNode)) {\n continue;\n }\n const parentNode = getParentNode(shadowNode);\n\n /* Set the nesting depth of an element */\n if (shadowNode.nodeType === NODE_TYPE.element) {\n if (parentNode && parentNode.__depth) {\n /*\n We want the depth of the node in the original tree, which can\n change when it's removed from its parent.\n */\n shadowNode.__depth = (shadowNode.__removalCount || 0) + parentNode.__depth + 1;\n } else {\n shadowNode.__depth = 1;\n }\n }\n\n /*\n * Remove an element if nested too deeply to avoid mXSS\n * or if the __depth might have been tampered with\n */\n if (shadowNode.__depth >= MAX_NESTING_DEPTH || shadowNode.__depth < 0 || numberIsNaN(shadowNode.__depth)) {\n _forceRemove(shadowNode);\n }\n\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n shadowNode.content.__depth = shadowNode.__depth;\n _sanitizeShadowDOM(shadowNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(shadowNode);\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeShadowDOM', fragment, null);\n };\n\n /**\n * Sanitize\n * Public method providing core sanitation functionality\n *\n * @param {String|Node} dirty string or DOM node\n * @param {Object} cfg object\n */\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty) {\n let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '';\n }\n\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n\n /* Clean up removed elements */\n DOMPurify.removed = [];\n\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */\n if (dirty.nodeName) {\n const tagName = transformCaseFunc(dirty.nodeName);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n }\n }\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Sanitize tags and elements */\n if (_sanitizeElements(currentNode)) {\n continue;\n }\n const parentNode = getParentNode(currentNode);\n\n /* Set the nesting depth of an element */\n if (currentNode.nodeType === NODE_TYPE.element) {\n if (parentNode && parentNode.__depth) {\n /*\n We want the depth of the node in the original tree, which can\n change when it's removed from its parent.\n */\n currentNode.__depth = (currentNode.__removalCount || 0) + parentNode.__depth + 1;\n } else {\n currentNode.__depth = 1;\n }\n }\n\n /*\n * Remove an element if nested too deeply to avoid mXSS\n * or if the __depth might have been tampered with\n */\n if (currentNode.__depth >= MAX_NESTING_DEPTH || currentNode.__depth < 0 || numberIsNaN(currentNode.__depth)) {\n _forceRemove(currentNode);\n }\n\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n currentNode.content.__depth = currentNode.__depth;\n _sanitizeShadowDOM(currentNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(currentNode);\n }\n\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n return returnNode;\n }\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n /* Serialize doctype if allowed */\n if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n serializedHTML = '\\n' + serializedHTML;\n }\n\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n\n /**\n * Public method to set the configuration once\n * setConfig\n *\n * @param {Object} cfg configuration object\n */\n DOMPurify.setConfig = function () {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n\n /**\n * Public method to remove the configuration\n * clearConfig\n *\n */\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n\n /**\n * Public method to check if an attribute value is valid.\n * Uses last set config, if any. Otherwise, uses config defaults.\n * isValidAttribute\n *\n * @param {String} tag Tag name of containing element.\n * @param {String} attr Attribute name.\n * @param {String} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n */\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n\n /**\n * AddHook\n * Public method to add DOMPurify hooks\n *\n * @param {String} entryPoint entry point for the hook to add\n * @param {Function} hookFunction function to execute\n */\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n hooks[entryPoint] = hooks[entryPoint] || [];\n arrayPush(hooks[entryPoint], hookFunction);\n };\n\n /**\n * RemoveHook\n * Public method to remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if more are present)\n *\n * @param {String} entryPoint entry point for the hook to remove\n * @return {Function} removed(popped) hook\n */\n DOMPurify.removeHook = function (entryPoint) {\n if (hooks[entryPoint]) {\n return arrayPop(hooks[entryPoint]);\n }\n };\n\n /**\n * RemoveHooks\n * Public method to remove all DOMPurify hooks at a given entryPoint\n *\n * @param {String} entryPoint entry point for the hooks to remove\n */\n DOMPurify.removeHooks = function (entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint] = [];\n }\n };\n\n /**\n * RemoveAllHooks\n * Public method to remove all DOMPurify hooks\n */\n DOMPurify.removeAllHooks = function () {\n hooks = {};\n };\n return DOMPurify;\n}\nvar purify = createDOMPurify();\n\nexport { purify as default };\n//# sourceMappingURL=purify.es.mjs.map\n","import moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.intro',\r\n },\r\n translateTreshold: 0.9,\r\n};\r\n\r\nclass Intro {\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n }\r\n\r\n init() {\r\n $(window).on('scroll', () => {\r\n this._reveal();\r\n });\r\n }\r\n\r\n _reveal() {\r\n const elementTop = this._$rootElement.offset().top;\r\n const elementBottom = elementTop + this._$rootElement.outerHeight();\r\n const elementMiddle = elementTop + (elementBottom - elementTop) / 2;\r\n const elementHeight = elementBottom - elementTop;\r\n \r\n const viewportTop = $(window).scrollTop();\r\n const viewportBottom = viewportTop + $(window).height();\r\n const viewportMiddle = viewportTop + (viewportBottom - viewportTop) / 2;\r\n\r\n // number from -1 to 1 \r\n // 0 indicates Element viewport middle is on element middle \r\n const factor = ((elementMiddle - viewportMiddle) / (elementHeight / 2)) / 2;\r\n\r\n // number from 0 to 1\r\n const positiveFactor = Math.sqrt(factor * factor)\r\n \r\n if(positiveFactor < config.translateTreshold) {\r\n // this._$rootElement.addClass(\"intro--active\");\r\n } else {\r\n // intro shouldnt fly out\r\n // this._$rootElement.removeClass(\"intro--active\");\r\n }\r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('Intro', Intro);\r\nmoduleRegistry.autoApplyModule('Intro', config.selectors.root);\r\n","/* eslint-disable no-restricted-syntax */\nimport DOMPurify from \"dompurify\";\nimport { Breakpoints } from '../breakpoints/breakpoints';\nimport moduleRegistry from '../module-registry/module-registry';\n\nconst config = {\n selectors: {\n root: '.language-form',\n customselect: '.language-form__custom-select',\n selectItems: '.language-form__select-items',\n selectItem: '.language-form__select-item',\n selectSelected: '.language-form__select-selected',\n languageCheckbox: '.language-form__language-item',\n languageCheckboxIcon: '.language-form__language-item-icon',\n country: '.language-form__country',\n checkbox: '.language-form__language-item-input',\n languages: '.language-form__language'\n },\n classNames: {\n customselect: 'language-form__custom-select',\n selectSelected: 'language-form__select-selected',\n selectNotSelected: 'language-form__select-not-selected',\n selectSelectedActive: 'language-form__select-selected--active',\n selectItems: 'language-form__select-items',\n selectItemsHide: 'language-form__select-hide',\n selectItem: 'language-form__select-item',\n sameAsSelected: 'language-form__same-as-selected',\n countrySearchbar: 'language-form__searchbar',\n countrySearchbarInput: 'language-form__searchbar-input',\n languageCheckbox : 'language-form__language-item',\n languageCheckboxActive : 'language-form__language-item--active',\n languageCheckboxShow : 'language-form__language-item--show',\n languageCheckboxIconActive: 'language-form__language-item-icon--active',\n languageText: 'language-form__language-item-text',\n customSelectActive: 'language-form__custom-select--active',\n countryActive: 'language-form__country--active',\n languagesHidden: 'language-form__language--hidden',\n overlayButton: 'navigation__top-action--country',\n },\n dataSets: {\n isoCode: 'data-iso-code',\n languages: 'data-languages',\n forwardTarget: 'data-forward-target',\n checkboxLanguageCode: 'data-language-code',\n countriesJson: 'data-countries-json',\n flagsPath: 'data-flags-path',\n countryFlagsElements: 'data-country-flag'\n }\n \n};\n\nclass LanguageForm {\n\n constructor($rootElement) {\n this._$rootElement = $rootElement;\n this._elements = null;\n this._index = 0;\n this.data = [];\n this.fetchedCountryData = [];\n this.setLanguages = [];\n this.allAvailableLanguages = [];\n\n this.countrySelection = {\n isoCode: '',\n languageSelected: '',\n }\n\n }\n\n init() {\n this._elements = this._getDomElements();\n this._doAsync();\n }\n\n async _doAsync() {\n let data = null;\n try {\n data = await this._fetchCountriesJSON();\n } catch (error) {\n const fetchMock = await this._fetchMockData();\n data = fetchMock;\n if (fetchMock === null || fetchMock === undefined) {\n return;\n }\n } finally {\n this.fetchedCountryData = data;\n\n // console.log('this.fetchedCountryData', this.fetchedCountryData);\n\n if(!this.fetchedCountryData) {\n return;\n }\n\n // this._checkCookie();\n \n const sortCountriesBySortTitle = this._sortSelectOptionCountries(this.fetchedCountryData);\n this._getAllLanguagesAvailableFromJson();\n this._generateSelect();\n this._extractIsoAndLanguageFromUrl();\n this._fillSelectOptionsCountries(sortCountriesBySortTitle);\n this._addCurrentCountry();\n this._addEventListeners();\n\n $('*[data-language-code]').removeClass('language-form__language-item--active');\n\n const lang = window.location.pathname.split('/')[2];\n $(`*[data-language-code=\"${lang}\"]`).addClass('language-form__language-item--active');\n }\n }\n\n // _checkCookie() {\n // const cookieString = document.cookie;\n // const cookies = cookieString.split('; ');\n // let hasCookie = false;\n\n // cookies.forEach(cookie => {\n // const key = cookie.split('=');\n // if(key === 'language_cookie') {\n // hasCookie = true;\n // }\n // });\n\n // if(hasCookie) return;\n\n\n // const urlLanguage = this._extractIsoAndLanguageFromUrl();\n\n // console.log(urlLanguage);\n \n // const userLang = navigator.language || navigator.userLanguage; \n // document.cookie += '; ' + userLang;\n // const localeParts = userLang.split('-');\n // const currentURL = window.location.toString();\n\n // if(!currentURL.includes(urlLanguage.languageSelected) || !currentURL.includes(urlLanguage.isoCode)) return;\n\n // location.href = currentURL.replace(`/${urlLanguage.isoCode}/${urlLanguage.languageSelected}`, `/${localeParts[0].toLowerCase()}/${localeParts[1]}`);\n\n // }\n\n _getDomElements() {\n return {\n $customSelect: this._$rootElement.find(config.selectors.customselect),\n $selectItems: this._$rootElement.find(config.selectors.selectItems),\n $selectItem: this._$rootElement.find(config.selectors.selectItem),\n $selectSelected: this._$rootElement.find(config.selectors.selectSelected),\n $languageCheckbox: this._$rootElement.find(config.selectors.languageCheckbox),\n $languageCheckboxIcon: this._$rootElement.find(config.selectors.languageCheckboxIcon),\n $country: this._$rootElement.find(config.selectors.country),\n $checkbox: this._$rootElement.find(config.selectors.checkbox),\n $languages: this._$rootElement.find(config.selectors.languages)\n };\n }\n\n async _fetchCountriesJSON() {\n const getUrlFromDataAttribute = document.querySelector(`.${config.classNames.overlayButton}`).getAttribute(config.dataSets.countriesJson);\n const url = getUrlFromDataAttribute;\n\n const fetchedCountriesData = await $.get(url);\n\n const response = fetchedCountriesData;\n this.fetchedCountryData = response;\n\n return fetchedCountriesData;\n }\n\n async _fetchMockData() {\n const url = '/assets/mock/countries.json';\n\n const fetchedCountriesData = fetch(url)\n .then((response) => response.json())\n .then((data) => {\n this.fetchedCountryData = data;\n return data;\n })\n .catch((error) => {\n console.error(`Error in promise chain: ${error}`)\n this.fetchedCountryData = {};\n });\n\n this.fetchedCountryData = fetchedCountriesData;\n return fetchedCountriesData;\n }\n\n _addEventListeners() {\n $(document.getElementsByClassName('overlay-footer__inner')[0].children)[0].addEventListener('click', () => {\n this._$rootElement.closest('.overlay__header').removeClass('overlay__header--sticky');\n this._$rootElement.closest('.overlay').removeClass('overlay--visible');\n $('html').removeClass('body--no-scroll');\n this._changeUrl();\n });\n \n $('.language-form__searchbar-input').on('input', (e) => {\n const searchResults = this._getTitleBySearchTerm(e.currentTarget.value);\n this._fillSelectOptionsCountries(searchResults);\n });\n\n this._$rootElement.closest('.overlay').find('.overlay__close-btn').on('click', () => {\n this._$rootElement.closest('.overlay__header').removeClass('overlay__header--sticky');\n this._$rootElement.closest('.overlay').removeClass('overlay--visible');\n $('html').removeClass('body--no-scroll');\n \n setTimeout(() => {\n $('.language-form__searchbar-input').val('');\n const searchResults = this._getTitleBySearchTerm('');\n this._fillSelectOptionsCountries(searchResults);\n this._closeAllSelects();\n }, 2000);\n });\n }\n\n _changeUrl() {\n const urlLanguage = this._extractIsoAndLanguageFromUrl();\n const currentURL = window.location.toString().replace(`/${urlLanguage.isoCode}/${urlLanguage.languageSelected}`, `/${this.countrySelection.isoCode.toLowerCase()}/${this.countrySelection.languageSelected}`);;\n location.href = DOMPurify.sanitize(currentURL);\n }\n\n _extractIsoAndLanguageFromUrl() {\n const isProdStage = this._proofProdStage();\n if (!isProdStage) {\n return {\n isoCode: 'gb',\n languageSelected: 'en'\n }\n }\n const currentUrl = window.location.href;\n const hostLength = window.location.host.length + 3;\n const protocolLength = window.location.protocol.length;\n\n // slice just lang info \n const slicedUrl = currentUrl.slice(protocolLength + hostLength, protocolLength + hostLength + 5);\n\n\n const splitSlicedUrl = slicedUrl.split('/');\n \n return {\n isoCode: splitSlicedUrl[0],\n languageSelected: splitSlicedUrl[1]\n }\n }\n\n _getAllLanguagesAvailableFromJson() {\n if (this.fetchedCountryData[0].languageList !== undefined) {\n this.allAvailableLanguages = this.fetchedCountryData[0].languageList;\n }\n }\n\n _renderLanguageCheckboxes(languages) {\n const languageCodesArray = languages.split(';');\n const resultsOfFilter = [];\n const checkboxesToBeReplaced = $(`.${config.classNames.languageCheckbox}`);\n \n // Removing existing checkboxes\n checkboxesToBeReplaced.each((index, checkbox) => checkbox.remove());\n\n languageCodesArray.forEach((languageCode, index) => {\n const filteredLanguage = this.allAvailableLanguages.filter(language => language.languageCode === languageCode)\n resultsOfFilter.push(filteredLanguage[0]);\n })\n\n resultsOfFilter.map((item, index) => {\n const checkboxElement = `\n \n `;\n\n this._elements.$languages.append(DOMPurify.sanitize(checkboxElement));\n })\n \n this._setCheckboxActiveAccordingToBrowserLanguage(languageCodesArray);\n this._onCheckboxClicked();\n }\n\n _getDetailsByIsoCode(isoCode) {\n return Object.values(this.fetchedCountryData).find(country => country.isoCode === isoCode);\n }\n\n _getTitleBySearchTerm(searchTerm) {\n const results = [];\n const sortData = this._sortSelectOptionCountries(this.fetchedCountryData);\n \n sortData.forEach((country, index) => {\n if (country[0] !== undefined) {\n if (country[0].toUpperCase().includes(searchTerm.toUpperCase()) && !results.includes()) {\n results.push(country);\n } \n else {\n let languageVariationOfCountryAvailable = false;\n country[1].countriesInDifferentLanguages.forEach((title, index) => {\n // Creating element to escape HTML entities like Ü as Ãœ\n const decodeElement = document.createElement('p');\n decodeElement.innerHTML = title;\n if (decodeElement.innerHTML.toUpperCase().includes(searchTerm.toUpperCase())) {\n languageVariationOfCountryAvailable = true;\n }\n })\n if (languageVariationOfCountryAvailable) {\n results.push(country);\n }\n }\n }\n })\n return results;\n }\n \n async _generateSelect() {\n \n var customSelect, i, j, customSelectLength, selectLength, selElmnt, selectSelected, selectItems, selectItem;\n /*look for any elements with the class \"custom-select\":*/\n customSelect = document.getElementsByClassName(config.classNames.customselect);\n customSelectLength = customSelect.length;\n \n for (i = 0; i < customSelectLength; i++) {\n selElmnt = customSelect[i].getElementsByTagName('select')[0];\n selectLength = selElmnt.length;\n\n /*for each element, create a new span that will act as the selected item:*/\n selectSelected = document.createElement('span');\n selectSelected.setAttribute('class', config.classNames.selectSelected);\n selectSelected.innerHTML = selElmnt.options[selElmnt.selectedIndex].innerHTML;\n customSelect[i].appendChild(selectSelected);\n \n //create new div with class searchbar\n let searchbar = document.createElement('input');\n let searchcontainer = document.createElement('div');\n searchcontainer.setAttribute('class', config.classNames.countrySearchbar)\n searchbar.setAttribute('class', 'language-form__searchbar-input')\n searchbar.setAttribute('placeholder', 'Select Country')\n searchbar.setAttribute('name', 'language-searchbar-input')\n searchbar.setAttribute('aria-label', 'Country Search')\n let searchicon = document.createElement('i');\n searchicon.setAttribute('class', 'language-form__searchbar-input-icon icon-TickCircleSearch1');\n searchcontainer.appendChild(searchicon);\n searchcontainer.appendChild(searchbar);\n\n /*for each element, create a new DIV that will contain the option list:*/\n selectItems = document.createElement('DIV');\n selectItems.setAttribute('class', config.classNames.selectItems);\n selectItems.classList.add(config.classNames.selectItemsHide)\n\n //append searchbar div at selectitems div\n selectItems.appendChild(searchcontainer)\n \n \n for (j = 1; j < selectLength; j++) {\n \n /*for each option in the original select element,\n create a new DIV that will act as an option item:*/\n selectItem = document.createElement('span');\n selectItem.setAttribute('class', config.classNames.selectItem);\n selectItem.innerHTML = selElmnt.options[j].innerHTML;\n\n const $this = this;\n\n selectItem.addEventListener('click', function(e) {\n /*when an item is clicked, update the original select box,\n and the selected item:*/\n var sameAsSelectedItem, i, k, defaultSelect, selectedItem, defaultSelectLength, sameAsSelectedItemLength;\n defaultSelect = this.parentNode.parentNode.getElementsByTagName('select')[0];\n defaultSelectLength = defaultSelect.length;\n selectedItem = this.parentNode.previousSibling;\n \n for (i = 0; i < defaultSelectLength; i++) {\n if (defaultSelect.options[i].innerHTML == this.innerHTML) {\n defaultSelect.selectedIndex = i;\n\n //get value of select\n const $customSelect = $this._$rootElement.find(config.classNames.customselect);\n const hiddenSelect = $customSelect.find(\"select\");\n hiddenSelect.val(this.innerHTML);\n\n selectedItem.innerHTML = this.innerHTML;\n \n sameAsSelectedItem = this.parentNode.getElementsByClassName(config.classNames.sameAsSelected);\n sameAsSelectedItemLength = sameAsSelectedItem.length;\n\n for (k = 0; k < sameAsSelectedItemLength; k++) {\n $(sameAsSelectedItem[k]).removeClass(config.classNames.sameAsSelected);\n }\n \n $(this).addClass(config.classNames.sameAsSelected) ;\n break;\n }\n }\n\n selectedItem.click();\n });\n selectItems.appendChild(selectItem);\n }\n\n customSelect[i].appendChild(selectItems);\n const $this = this;\n selectSelected.addEventListener('click', function(e) {\n /*when the select box is clicked, close any other select boxes,\n and open/close the current select box:*/\n e.stopPropagation();\n const nextsibling = this.nextSibling;\n var customSelect = this.parentNode;\n var formCountry = this.parentNode.parentNode\n customSelect.classList.toggle(config.classNames.customSelectActive)\n formCountry.classList.toggle(config.classNames.countryActive)\n nextsibling.classList.toggle(config.classNames.selectItemsHide);\n\n if(Breakpoints.isBreakpoint('xs') || Breakpoints.isBreakpoint('sm')) {\n $('.language-form__language').addClass(config.classNames.languagesHidden)\n }\n\n $(`.${config.classNames.countrySearchbarInput}`).val('');\n const searchInput = document.querySelector(`.${config.classNames.countrySearchbarInput}`);\n setTimeout(() => searchInput.focus(), 500);\n });\n }\n \n \n /*if the user clicks anywhere outside the select box,\n then close all select boxes:*/\n window.addEventListener(\"click\", this._closeAllSelects );\n\n }\n\n _fillSelectOptionsCountries(sortCountriesBySortTitle) {\n // const data = await this._fetchCountriesJSON();\n // Elements generated locally\n const htmlAutoGeneratedElements = document.querySelectorAll(`.${config.classNames.selectItem}`);\n const htmlItemsWrapper = document.querySelector(`.${config.classNames.selectItems}`);\n\n if (htmlAutoGeneratedElements != undefined || htmlAutoGeneratedElements != null) {\n htmlAutoGeneratedElements.forEach((item, index) => item.remove());\n }\n\n sortCountriesBySortTitle.forEach((country, index) => {\n // show-in-selector 1 means it's supposed to be displayed\n if (country[1].showInSelector != 1) {\n return;\n }\n \n const dataLableIso = config.dataSets.isoCode;\n const dataLableLang = config.dataSets.languages;\n \n // class that was used: ${`language-form__select-item--${country[1].isoCode.toLowerCase()}`\n // background-image is set by path for each country\n const countrySelect = `\n \n ${country[0]}\n \n `;\n\n\n // creating element and adding attributes from properties\n // const createListItem = document.createElement('span');\n // const item = createListItem;\n // item.innerHTML = country[0];\n // item.classList.add(config.classNames.selectItem);\n // item.setAttribute(config.dataSets.isoCode, `${country[1].isoCode}`);\n // item.setAttribute(config.dataSets.languages, `${country[1].languages}`);\n\n // if (country[1].forwardTarget != '') {\n // item.setAttribute(config.dataSets.forwardTarget, `${country[1].forwardTarget}`);\n // }\n // Adding flags\n // item.classList.add(`language-form__select-item--${country[1].isoCode.toLowerCase()}`); \n $(htmlItemsWrapper).append(DOMPurify.sanitize(countrySelect));\n });\n\n // Adds eventlistener to country select items \n $(`.${config.classNames.selectItem}`).each((index, item) => {\n this._countryClickHandler(item);\n })\n }\n\n _addCurrentCountry() {\n const selectItems = document.querySelectorAll(`.${config.classNames.selectItem}`);\n const pageIsoCode = this._extractIsoAndLanguageFromUrl().isoCode;\n const selectedCountry = document.querySelector(config.selectors.selectSelected);\n $(selectItems).each((index, item) => {\n if (pageIsoCode.toUpperCase() === item.getAttribute(config.dataSets.isoCode)) {\n item.classList.add(config.classNames.countryActive);\n this.countrySelection.isoCode = item.getAttribute(config.dataSets.isoCode);\n const countryDetails = this._getDetailsByIsoCode(item.getAttribute(config.dataSets.isoCode));\n\n selectedCountry.innerHTML = DOMPurify.sanitize(this._findTheLanguageNeeded(countryDetails));\n selectedCountry.classList = '';\n selectedCountry.classList.add('language-form__select-selected');\n selectedCountry.classList.add(`language-form__select-selected--${countryDetails.isoCode.toLowerCase()}`);\n \n this._renderLanguageCheckboxes(countryDetails.languages);\n }\n })\n }\n\n _proofProdStage() {\n const splitted = window.location.pathname.split('/');\n const isProdStage = splitted[1] && splitted[2] && splitted[1].length === 2 && splitted[2].length === 2;\n return isProdStage\n }\n\n \n\n _selectLanguage(lang) {\n\n }\n\n _findTheLanguageNeeded(countryDetails) {\n const languageCodeFromUrl = this._extractIsoAndLanguageFromUrl();\n\n let title = '';\n\n switch(languageCodeFromUrl.languageSelected.toUpperCase()) {\n case 'DE':\n title = countryDetails.titleDE;\n break;\n case 'EN':\n title = countryDetails.titleEN;\n break;\n case 'ES':\n title = countryDetails.titleES;\n break;\n case 'FR':\n title = countryDetails.titleFR;\n break;\n case 'IT':\n title = countryDetails.titleIT;\n break;\n case 'JA':\n title = countryDetails.titleJA;\n break;\n case 'PT':\n title = countryDetails.titlePT;\n break;\n case 'RU':\n title = countryDetails.titleRU;\n break;\n case 'ZH':\n title = countryDetails.titleZH;\n break;\n default:\n title = countryDetails.titleEN;\n }\n\n return title;\n }\n\n _countryClickHandler(item) {\n $(item).on('click', (event) => {\n this.setLanguages = [];\n this._elements.$languageCheckbox.each((index, checkbox) => $(checkbox).show());\n\n const currentSelect = event.currentTarget;\n const targetDetails = this._getDetailsByIsoCode(currentSelect.getAttribute(config.dataSets.forwardTarget));\n const selectedCountry = document.querySelector(config.selectors.selectSelected);\n selectedCountry.innerHTML = currentSelect.innerHTML;\n \n // clearing classList to add new modifier to change flag\n selectedCountry.classList = '';\n selectedCountry.classList.add('language-form__select-selected');\n selectedCountry.classList.add(`language-form__select-selected--${currentSelect.getAttribute(config.dataSets.isoCode).toLowerCase()}`);\n this.countrySelection.isoCode = currentSelect.getAttribute(config.dataSets.isoCode).toLowerCase();\n \n if (currentSelect.hasAttribute(config.dataSets.forwardTarget)) {\n this._closeAllSelects(event, true);\n this._forwardPageToTarget(currentSelect);\n $('.language-form__language').removeClass(config.classNames.languagesHidden);\n this._renderLanguageCheckboxes(targetDetails.languages);\n } else {\n this._closeAllSelects(event, true);\n $('.language-form__language').removeClass(config.classNames.languagesHidden);\n this._renderLanguageCheckboxes(currentSelect.getAttribute(config.dataSets.languages));\n }\n })\n }\n\n _forwardPageToTarget(currentSelect) {\n this.countrySelection.isoCode = currentSelect.getAttribute('data-forward-target').toLowerCase();\n this._setCheckboxActiveAccordingToBrowserLanguage(currentSelect.getAttribute(config.dataSets.languages).split(';'));\n this.countrySelection.languageSelected = this.countrySelection.languageSelected;\n }\n\n _sortSelectOptionCountries(countries) {\n const countryArray = [];\n\n Object.values(countries).forEach((country, index) => {\n const countryTitle = this._findTheLanguageNeeded(country);\n const countryInformation = {\n sortTitle: decodeURI(countryTitle),\n isoCode: country.isoCode,\n languages: country.languages,\n forwardTarget: country.forwardTarget,\n showInSelector: country.showInSelector,\n countriesInDifferentLanguages: [\n country.titleDE, \n country.titleEN, \n country.titleES, \n country.titleFR, \n country.titleIT, \n country.titleJA, \n country.titlePT, \n country.titleRU, \n country.titleZH\n ]\n };\n\n countryArray.push([countryTitle, countryInformation]);\n })\n\n return countryArray.sort();\n }\n\n _setCheckboxActiveAccordingToBrowserLanguage(languages) {\n \n const pageLanguage = this._extractIsoAndLanguageFromUrl().languageSelected;\n const extractedIsoCode = this._extractIsoAndLanguageFromUrl().isoCode;\n const getCountryDetails = this._getDetailsByIsoCode(extractedIsoCode.toUpperCase());\n const getLanguage = this._findTheLanguageNeeded(getCountryDetails);\n\n const navigationActionButton = document.querySelector('.navigation__top-action--country');\n const checkboxesDisplayed = document.querySelectorAll(`.${config.classNames.languageCheckbox}`);\n let activeCheckboxes = 0;\n\n \n this._elements.$languageCheckbox.removeClass(config.classNames.languageCheckboxActive);\n\n languages.forEach((language, index) => {\n \n if (pageLanguage === language && activeCheckboxes === 0) {\n for (let i = 0; i < checkboxesDisplayed.length; i++) {\n if (checkboxesDisplayed[i].getAttribute(config.dataSets.checkboxLanguageCode) === language) {\n activeCheckboxes++;\n navigationActionButton.children[0].innerHTML = DOMPurify.sanitize(`${checkboxesDisplayed[i].children[1].innerHTML} | ${getLanguage}`);\n checkboxesDisplayed[i].classList.add(config.classNames.languageCheckboxActive);\n this.countrySelection.languageSelected = language;\n }\n }\n } else if (activeCheckboxes === 0) {\n let setLang = false;\n $(checkboxesDisplayed).each((index, checkbox) => {\n const getCheckboxAttribute = checkbox.getAttribute(config.dataSets.checkboxLanguageCode);\n\n if (checkbox.getAttribute(config.dataSets.checkboxLanguageCode) === pageLanguage){\n navigationActionButton.children[0].innerHTML = DOMPurify.sanitize(`${checkbox.innerText} | ${getLanguage}`);\n }\n if (!setLang && getCheckboxAttribute === pageLanguage && getCheckboxAttribute === language[0]) {\n setLang = true;\n this._setCheckboxActiveAndSetLanguage(checkbox);\n } else if (!setLang && getCheckboxAttribute !== pageLanguage && checkbox.getAttribute(config.dataSets.checkboxLanguageCode) === languages[0]) {\n activeCheckboxes++;\n setLang = true;\n this._setCheckboxActiveAndSetLanguage(checkbox);\n }\n })\n }\n })\n }\n\n _setCheckboxActiveAndSetLanguage(checkbox) {\n $(`.${config.classNames.languageCheckbox}`).removeClass(config.classNames.languageCheckboxActive);\n $(checkbox).addClass(config.classNames.languageCheckboxActive);\n this.countrySelection.languageSelected = checkbox.getAttribute(config.dataSets.checkboxLanguageCode);\n }\n\n _onCheckboxClicked() {\n var $this = this;\n const checkboxElements = document.querySelectorAll(`.${config.classNames.languageCheckbox}`);\n $(checkboxElements).each((index, element) => {\n element.addEventListener('click', (checkboxElement) => {\n checkboxElement.preventDefault();\n checkboxElement.stopPropagation();\n $(checkboxElements).removeClass(config.classNames.languageCheckboxActive)\n element.classList.add(config.classNames.languageCheckboxActive);\n \n // $this._elements.$checkbox.setAttribute('checked', 'checked')\n /*if the user clicks anywhere outside the select box,\n then close all select boxes:*/\n \n var selecteditems = $('.language-form__select-items')\n $this._elements.$customSelect.removeClass(config.classNames.customSelectActive)\n $this._elements.$country.removeClass(config.classNames.countryActive)\n selecteditems.addClass(config.classNames.selectItemsHide)\n \n // to get selected language informatioin\n $this.countrySelection.languageSelected = checkboxElement.currentTarget.dataset.languageCode;\n })\n }) \n }\n \n _closeAllSelects(e, choseLanguage) {\n if(e) {\n e.stopPropagation();\n e.stopPropagation();\n }\n\n var customSelect = $('.language-form__custom-select');\n var countrySelectBox = $('.language-form__country');\n var selecteditems = $('.language-form__select-items');\n\n if (choseLanguage) {\n customSelect.removeClass(config.classNames.customSelectActive);\n countrySelectBox.removeClass(config.classNames.countryActive);\n selecteditems.addClass(config.classNames.selectItemsHide);\n }\n\n else if(!Breakpoints.isBreakpoint('xs') || !Breakpoints.isBreakpoint('sm')) {\n if(e && $(e.target).hasClass('overlay__inner') ){\n customSelect.removeClass(config.classNames.customSelectActive)\n countrySelectBox.removeClass(config.classNames.countryActive)\n selecteditems.addClass(config.classNames.selectItemsHide)\n } else if(!e) {\n customSelect.removeClass(config.classNames.customSelectActive);\n countrySelectBox.removeClass(config.classNames.countryActive);\n selecteditems.addClass(config.classNames.selectItemsHide);\n }\n }\n \n else if(Breakpoints.isBreakpoint('xs') || Breakpoints.isBreakpoint('sm')) {\n $('.language-form__language').removeClass(config.classNames.languagesHidden)\n } \n\n\n \n \n\n \n }\n}\n\nmoduleRegistry.registerModule('LanguageForm', LanguageForm);\nmoduleRegistry.autoApplyModule('LanguageForm', config.selectors.root);\n","\r\nconst config = {\r\n selectors: {\r\n root: '.lightbox-slider',\r\n body: 'body',\r\n lightbox: '.lightbox-slider__lightbox',\r\n lightboxSlides: '.lightbox-slider__lightbox-slides',\r\n lightboxSlide: '.lightbox-slider__lightbox-slide',\r\n lightboxNext: '.lightbox-slider__lightbox-next',\r\n lightboxPrev: '.lightbox-slider__lightbox-prev',\r\n closeBtn: '.lightbox-slider__close-btn',\r\n backBtn: '.lightbox-slider__back',\r\n ccBtn: '.lightbox-slider__subtitle-btn',\r\n videoFullscreenBtn: '.lightbox-slider__expand-btn',\r\n video: '.video-js',\r\n videoControls: '.video__controls',\r\n playPauseBtn: '.video__play-pause',\r\n seekslider: '.video__seekslider',\r\n currentTime: '.video__currentTime',\r\n durationTime: '.video__durationTime',\r\n volume: '.video__volume',\r\n fullscreen: '.video__fullscreen',\r\n captions: '.video__captions',\r\n thumbnail: '.video__thumbnail',\r\n thumbnailTimer: '.video__thumbnail-timer',\r\n\r\n volumeMute: '.video__volume--mute',\r\n volume25: '.video__volume--25',\r\n volume50: '.video__volume--50',\r\n volume75: '.video__volume--75',\r\n volume100: '.video__volume--100',\r\n },\r\n classNames: {\r\n noScroll: 'no-scroll',\r\n lightboxVisible: 'lightbox-slider__lightbox--visible',\r\n },\r\n dataAttributes: {\r\n\r\n },\r\n mainSliderConfig: {\r\n dots: false,\r\n arrows: false,\r\n infinite: true,\r\n speed: 750,\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n mobileFirst: true,\r\n autoplay: false,\r\n centerMode: true,\r\n centerPadding: '16.66%',\r\n },\r\n previewSliderConfig: {\r\n dots: false,\r\n arrows: false,\r\n infinite: false,\r\n speed: 750,\r\n slidesToShow: 4,\r\n slidesToScroll: 1,\r\n mobileFirst: true,\r\n autoplay: false,\r\n },\r\n};\r\n\r\nexport class LightboxSlider {\r\n static $el = null;\r\n\r\n static create(items, captions) {\r\n const html = LightboxSlider._createHtml(items, captions);\r\n $('body').append(html);\r\n const $rootElement = $(config.selectors.root);\r\n LightboxSlider.$el = $rootElement;\r\n const $elements = LightboxSlider._getDomElements($rootElement);\r\n LightboxSlider._addEventListeners($elements);\r\n $elements.$lightboxSlides.slick(config.mainSliderConfig);\r\n LightboxSlider._initVideos($elements.$video, $elements.$videoControls);\r\n }\r\n\r\n static _getDomElements($rootElement) {\r\n return {\r\n $body: $(config.selectors.body),\r\n $lightbox: $rootElement.find(config.selectors.lightbox),\r\n $lightboxSlides: $rootElement.find(config.selectors.lightboxSlides),\r\n $lightboxSlide: $rootElement.find(config.selectors.lightboxSlide),\r\n $lightboxNext: $rootElement.find(config.selectors.lightboxNext),\r\n $lightboxPrev: $rootElement.find(config.selectors.lightboxPrev),\r\n $closeBtn: $rootElement.find(config.selectors.closeBtn),\r\n $backBtn: $rootElement.find(config.selectors.backBtn),\r\n $playPauseBtn: $rootElement.find(config.selectors.playPauseBtn),\r\n $volumeBtn: $rootElement.find(config.selectors.volumeBtn),\r\n $ccBtn: $rootElement.find(config.selectors.ccBtn),\r\n $videoFullscreenBtn: $rootElement.find(config.selectors.videoFullscreenBtn),\r\n $video: $rootElement.find(config.selectors.video),\r\n $videoControls: $rootElement.find(config.selectors.videoControls),\r\n $seekslider: $rootElement.find(config.selectors.seekslider),\r\n $currentTime: $rootElement.find(config.selectors.currentTime),\r\n $durationTime: $rootElement.find(config.selectors.durationTime),\r\n $fullscreen: $rootElement.find(config.selectors.fullscreen),\r\n $captions: $rootElement.find(config.selectors.captions),\r\n $volume: $rootElement.find(config.selectors.volume),\r\n $volumeMute: $rootElement.find(config.selectors.volumeMute),\r\n $volume25: $rootElement.find(config.selectors.volume25),\r\n $volume50: $rootElement.find(config.selectors.volume50),\r\n $volume75: $rootElement.find(config.selectors.volume75),\r\n $volume100: $rootElement.find(config.selectors.volume100),\r\n $thumbnail: $rootElement.find(config.selectors.thumbnail),\r\n $thumbnailTimer: $rootElement.find(config.selectors.thumbnailTimer),\r\n };\r\n }\r\n\r\n static _addEventListeners(elements) {\r\n const _this = this;\r\n\r\n elements.$lightboxNext.on('click', () => {\r\n elements.$lightboxSlides.slick('slickNext');\r\n });\r\n\r\n elements.$lightboxPrev.on('click', () => {\r\n elements.$lightboxSlides.slick('slickPrev');\r\n });\r\n\r\n\r\n elements.$closeBtn.on('click', () => {\r\n LightboxSlider.$el.remove();\r\n elements.$body.removeClass(config.classNames.noScroll);\r\n });\r\n\r\n elements.$backBtn.on('click', () => {\r\n LightboxSlider.$el.remove();\r\n elements.$body.removeClass(config.classNames.noScroll);\r\n });\r\n\r\n elements.$playPauseBtn.on('click', () => {\r\n const index = elements.$lightboxSlides.slick('slickCurrentSlide');\r\n\r\n const videoSlide = elements.$lightboxSlide;\r\n const video = $(videoSlide[index]).find(config.selectors.video)[0];\r\n\r\n LightboxSlider._playPauseVideo(video)\r\n\r\n });\r\n\r\n elements.$seekslider.on('change', () => {\r\n const index = elements.$lightboxSlides.slick('slickCurrentSlide');\r\n\r\n const videoSlide = elements.$lightboxSlide;\r\n const video = $(videoSlide[index]).find(config.selectors.video)[0];\r\n\r\n const seekTo = video.player.duration() * (this._elements.$seekslider[0].value / 100);\r\n video.player.currentTime(seekTo);\r\n })\r\n\r\n elements.$volume.on('click', (e) => {\r\n const index = elements.$lightboxSlides.slick('slickCurrentSlide');\r\n\r\n const videoSlide = elements.$lightboxSlide;\r\n const video = $(videoSlide[index]).find(config.selectors.video)[0];\r\n const volumeMute = $(videoSlide[index]).find(config.selectors.volumeMute)[0]\r\n const volume25 = $(videoSlide[index]).find(config.selectors.volume25)[0]\r\n const volume50 = $(videoSlide[index]).find(config.selectors.volume50)[0]\r\n const volume75 = $(videoSlide[index]).find(config.selectors.volume75)[0]\r\n const volume100 = $(videoSlide[index]).find(config.selectors.volume100)[0]\r\n const volumeValue = e.currentTarget.value / 100;\r\n if (video.player.volume() === 0) {\r\n video.player.volume(0.25);\r\n $(volumeMute).hide();\r\n $(volume25).show();\r\n } else if (video.player.volume() === 0.25) {\r\n video.player.volume(0.5);\r\n $(volume25).hide();\r\n $(volume50).show();\r\n } else if (video.player.volume() === 0.50) {\r\n video.player.volume(0.75);\r\n $(volume50).hide();\r\n $(volume75).show();\r\n } else if (video.player.volume() === 0.75) {\r\n video.player.volume(1);\r\n $(volume75).hide();\r\n $(volume100).show();\r\n } else if (volumeValue === 1) {\r\n video.player.volume(0);\r\n $(volume100).hide();\r\n $(volumeMute).show();\r\n }\r\n })\r\n\r\n elements.$fullscreen.on('click', () => {\r\n \r\n });\r\n }\r\n\r\n static _playPauseVideo(video) {\r\n if (video.player.paused()) {\r\n video.player.play();\r\n } else {\r\n video.player.pause();\r\n }\r\n }\r\n\r\n static _initVideos(videos, videoControls) {\r\n videos.each((index, element) => {\r\n bc(element);\r\n })\r\n\r\n videoControls.removeClass('video__controls--hidden');\r\n\r\n\r\n }\r\n\r\n static _createItemHtml(items, captions) {\r\n let html = '';\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n html += `\r\n
    \r\n
    \r\n
    \r\n ${captions[i]}\r\n
    \r\n
    \r\n Back\r\n \r\n
    \r\n
    \r\n
    \r\n ${items[i]}\r\n
    \r\n
    \r\n `;\r\n };\r\n\r\n return html;\r\n }\r\n\r\n static _createHtml(items, captions) {\r\n return `\r\n
    \r\n
    \r\n
    \r\n
    \r\n ${this._createItemHtml(items, captions)}\r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n `;\r\n }\r\n}\r\n","import { Breakpoints } from '../breakpoints/breakpoints';\r\nimport moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.location-map',\r\n map: '.location-map__map',\r\n box: '.location-map__box',\r\n mapMode: '.location-map__map-mode',\r\n locationMode: '.location-map__location-mode',\r\n zoomIn: '.location-map__zoom-in',\r\n zoomOut: '.location-map__zoom-out',\r\n overlay: '.location-map__overlay',\r\n overlayCloseBtn: '.location-map__overlay-close-btn',\r\n backdrop: '.location-map__backdrop',\r\n },\r\n dataAttributes: {\r\n url: 'url',\r\n },\r\n classNames: {\r\n mapModeActive: 'location-map__map-mode--active',\r\n locationModeActive: 'location-map__location-mode--active',\r\n backdropVisible: 'location-map__backdrop--visible',\r\n },\r\n worldZoom: 2.5,\r\n activeIconSvg: `\r\n \r\n \r\n \r\n \r\n \r\n `,\r\n iconSvg: `\r\n \r\n \r\n \r\n `,\r\n};\r\n\r\nclass LocationMap {\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n this._bounds = null;\r\n this._map = null;\r\n this._locations = [];\r\n this._json = '';\r\n this._zoom = 0;\r\n this._mapOptions = null;\r\n this._currentMode = 'all';\r\n this._headquarterMarker = null;\r\n this._headquarter = null;\r\n this._markers = [];\r\n this._visibleMarkers = [];\r\n this._activeMarker = null;\r\n this._activeMarkerPrevIcon = null;\r\n this._overlayModifier = '';\r\n this._url = '';\r\n this._navigatorLocationLat = null;\r\n this._navigatorLocationLong = null;\r\n this._isInitialized = false;\r\n }\r\n\r\n init() {\r\n window.addEventListener('LocationMapInit', () => {\r\n this._afterInit();\r\n });\r\n }\r\n\r\n async _afterInit(attempt = 1) {\r\n if(this._isInitialized) return;\r\n\r\n if (typeof google !== 'object') {\r\n\r\n if(attempt > 10) {\r\n // console.log('google script not initialized, cant init map');\r\n return;\r\n } \r\n\r\n const newAttempt = attempt + 1;\r\n \r\n setTimeout(() => {\r\n this._afterInit(newAttempt)\r\n }, 500 * attempt);\r\n \r\n return;\r\n }\r\n\r\n this._elements = this._getDomElements();\r\n this._url = this._$rootElement.data(config.dataAttributes.url);\r\n\r\n this._locations = await $.get(this._url);\r\n\r\n if (typeof this._locations !== 'object') {\r\n // console.log('couldnt fetch locations');\r\n return;\r\n }\r\n\r\n const processedLocations = [];\r\n\r\n this._locations.forEach(location => {\r\n if(!(location.latitude === 0.0 && location.longitude === 0.0)) {\r\n processedLocations.push(location);\r\n }\r\n });\r\n\r\n this._locations = processedLocations;\r\n\r\n if(this._locations.length === 0) {\r\n // console.log('no locations (or all have lat 0.0 and lon 0.0)');\r\n return;\r\n }\r\n\r\n this._locations.forEach((location) => {\r\n location.latlng = new google.maps.LatLng(location.latitude, location.longitude);\r\n });\r\n\r\n this._json = this._getWorldJson();\r\n\r\n this._zoom = config.worldZoom;\r\n this._addEventListeners();\r\n this._initMenuScroll();\r\n\r\n this._isInitialized = true;\r\n }\r\n\r\n _getDomElements() {\r\n return {\r\n $map: this._$rootElement.find(config.selectors.map),\r\n $box: this._$rootElement.find(config.selectors.box),\r\n $locationMode: this._$rootElement.find(config.selectors.locationMode),\r\n $yearControlBtn: this._$rootElement.find(config.selectors.yearControlBtn),\r\n $zoomIn: this._$rootElement.find(config.selectors.zoomIn),\r\n $zoomOut: this._$rootElement.find(config.selectors.zoomOut),\r\n $overlay: this._$rootElement.find(config.selectors.overlay),\r\n $overlayCloseBtn: this._$rootElement.find(config.selectors.overlayCloseBtn),\r\n $backdrop: this._$rootElement.find(config.selectors.backdrop),\r\n };\r\n }\r\n\r\n\r\n async _addEventListeners() {\r\n const _this = this;\r\n\r\n this._elements.$locationMode.on('click', async function () {\r\n _this._elements.$locationMode.removeClass(config.classNames.locationModeActive);\r\n $(this).addClass(config.classNames.locationModeActive);\r\n\r\n if(_this._elements.$backdrop.hasClass(config.classNames.backdropVisible)) {\r\n _this._hideBackdrop();\r\n _this._hideOverlay();\r\n }\r\n\r\n _this._currentMode = $(this).data('location-mode-type');\r\n\r\n let locations;\r\n\r\n if (_this._currentMode == 'near') {\r\n _this._map.setOptions({draggableCursor: 'progress'});\r\n const position = await _this._setUserPosition();\r\n _this._navigatorLocationLong = position.coords.longitude;\r\n _this._navigatorLocationLat = position.coords.latitude;\r\n locations = _this._getLocationsByType(_this._currentMode);\r\n } else {\r\n locations = _this._getLocationsByType(_this._currentMode);\r\n }\r\n\r\n _this._locations = locations;\r\n // _this._initMap();\r\n\r\n const newVisibleMarkers = [];\r\n\r\n _this._markers.forEach((marker) => {\r\n if (_this._currentMode === marker.type || _this._currentMode === '' || _this._currentMode === 'near') {\r\n marker.setMap(_this._map);\r\n newVisibleMarkers.push(marker);\r\n } else {\r\n marker.setMap(null);\r\n }\r\n });\r\n\r\n _this._visibleMarkers = newVisibleMarkers;\r\n\r\n if (_this._currentMode === 'headquarter') {\r\n const center = _this._calcCenterOfVisibleMarkers();\r\n _this._elements.$overlay.removeClass(_this._overlayModifier);\r\n _this._activeMarkerPrevIcon = _this._headquarterMarker.getIcon();\r\n _this._headquarterMarker.setIcon(`data:image/svg+xml;charset=UTF-8;base64,${btoa(_this._createActiveIconSvg(_this._getColorByType(_this._headquarter.type)))}`);\r\n _this._activeMarker = _this._headquarterMarker;\r\n _this._overlayModifier = `location-map__overlay--${_this._activeMarker.type}`;\r\n _this._focusPoint(center[1], center[0]);\r\n\r\n google.maps.event.addListenerOnce(_this._map, 'idle', () => {\r\n setTimeout(() => {\r\n const offsetTop = 0;\r\n\r\n // Dont use Durag names\r\n // const title = this.address[j].name;\r\n const { title } = _this._headquarter;\r\n const { description } = _this._headquarter;\r\n const { country } = _this._headquarter;\r\n const { link } = _this._headquarter;\r\n const iconColor = _this._getColorByType(_this._headquarter.type);\r\n const content = _this._createOverlayHtml(title, description, country, '#fff', link);\r\n\r\n _this._elements.$overlay.html(content);\r\n\r\n _this._showOverlay(iconColor, offsetTop);\r\n _this._showBackdrop();\r\n _this._initOverlayListeners();\r\n }, 100);\r\n });\r\n } else if (_this._currentMode == 'near') {\r\n _this._zoom = 7;\r\n _this._map.setZoom(7);\r\n _this._map.panTo(new google.maps.LatLng(_this._navigatorLocationLat, _this._navigatorLocationLong));\r\n _this._map.setOptions({draggableCursor: ''});\r\n } else {\r\n const center = _this._calcCenterOfVisibleMarkers();\r\n _this._zoom = 2.5;\r\n _this._map.setZoom(2.5);\r\n _this._map.panTo(new google.maps.LatLng(center[1], center[0]));\r\n }\r\n });\r\n\r\n this._elements.$zoomIn.on('click', () => {\r\n this._zoom++;\r\n this._map.setZoom(this._zoom);\r\n });\r\n\r\n this._elements.$backdrop.on('click', () => {\r\n if(this._elements.$backdrop.hasClass(config.classNames.backdropVisible)) {\r\n _this._hideBackdrop();\r\n _this._hideOverlay(); \r\n }\r\n });\r\n \r\n this._elements.$zoomOut.on('click', () => {\r\n this._zoom--;\r\n\r\n if (this._zoom < config.worldZoom) {\r\n this._zoom = config.worldZoom;\r\n }\r\n\r\n this._map.setZoom(this._zoom);\r\n });\r\n\r\n window.addEventListener('load', this._initMap());\r\n }\r\n\r\n _getLocationsByType(type) {\r\n const locations = [];\r\n\r\n this._locations.forEach((e) => {\r\n if (type === '' || e.type === type || type === 'near') {\r\n locations.push(e);\r\n }\r\n });\r\n\r\n return locations;\r\n }\r\n\r\n _getColorByType(type) {\r\n let iconColor = '';\r\n\r\n switch (type) {\r\n case 'manufactoring': iconColor = '#E6883B'; break;\r\n case 'sales': iconColor = '#00A854'; break;\r\n case 'training': iconColor = '#C4C746'; break;\r\n case 'headquarter': iconColor = '#8CB4F3'; break;\r\n }\r\n\r\n return iconColor;\r\n }\r\n\r\n _createOverlayHtml(title, description, country, closeColor, link) {\r\n return `\r\n
    \r\n
    \r\n <${link ? `a href=\"${link}\"` : 'span'} class=\"location-map__overlay-headline\">\r\n ${title}\r\n ${link ? `\r\n \r\n \r\n \r\n ` \r\n : ''} \r\n \r\n
    ${country}
    \r\n
    ${description}
    \r\n
    \r\n `;\r\n }\r\n\r\n _initMenuScroll() {\r\n const slider = document.querySelector('.location-map__location-modes');\r\n let isDown = false;\r\n let startX;\r\n let scrollLeft;\r\n\r\n slider.addEventListener('mousedown', (e) => {\r\n isDown = true;\r\n slider.classList.add('active');\r\n startX = e.pageX - slider.offsetLeft;\r\n scrollLeft = slider.scrollLeft;\r\n });\r\n slider.addEventListener('mouseleave', () => {\r\n isDown = false;\r\n slider.classList.remove('active');\r\n });\r\n slider.addEventListener('mouseup', () => {\r\n isDown = false;\r\n slider.classList.remove('active');\r\n });\r\n slider.addEventListener('mousemove', (e) => {\r\n if (!isDown) return;\r\n e.preventDefault();\r\n const x = e.pageX - slider.offsetLeft;\r\n const walk = (x - startX) * 3;\r\n slider.scrollLeft = scrollLeft - walk;\r\n });\r\n\r\n const styleElem = document.head.appendChild(document.createElement('style'));\r\n styleElem.innerHTML = `.location-map__location-modes:after {width: ${slider.scrollWidth}px;}`;\r\n }\r\n\r\n _showOverlay(iconColor, offsetTop) {\r\n this._elements.$overlay.css('background-color', iconColor);\r\n this._elements.$overlay.css('height', 'auto');\r\n this._elements.$overlay.css('opacity', 1);\r\n this._elements.$overlay.css('pointer-events', 'all');\r\n\r\n if (Breakpoints.isBreakpoint('sm') || Breakpoints.isBreakpoint('xs')) {\r\n this._elements.$overlay.css('left', '20px');\r\n this._elements.$overlay.css('right', '20px');\r\n this._elements.$overlay.css('top', 'auto');\r\n this._elements.$overlay.css('bottom', '20px');\r\n this._elements.$overlay.css('width', 'auto');\r\n this._elements.$overlay.css('transform', 'none');\r\n } else {\r\n const boxBottom = this._elements.$box[0].offsetTop + this._elements.$box[0].clientHeight;\r\n const overlayHeight = this._elements.$overlay[0].clientHeight;\r\n const calculatedOverlayTop = offsetTop - (overlayHeight / 2);\r\n const newOverlayTop = calculatedOverlayTop > boxBottom ? calculatedOverlayTop : boxBottom + 10;\r\n\r\n // this._elements.$overlay.css('top', newOverlayTop);\r\n this._elements.$overlay.css('top', '50%');\r\n this._elements.$overlay.css('left', '50%');\r\n // this._elements.$overlay.css('right', 'calc(50% + 20px)');\r\n this._elements.$overlay.css('bottom', 'auto');\r\n // this._elements.$overlay.css('transform', 'none');\r\n this._elements.$overlay.css('width', '300px');\r\n this._elements.$overlay.css('transform', 'translate(calc(-50% - 200px), calc(-50% + 150px))');\r\n }\r\n }\r\n\r\n _showBackdrop() {\r\n this._elements.$backdrop.addClass(config.classNames.backdropVisible);\r\n }\r\n\r\n _hideBackdrop() {\r\n this._elements.$backdrop.removeClass(config.classNames.backdropVisible);\r\n }\r\n\r\n _initOverlayListeners() {\r\n this._elements.$overlay.find(config.selectors.overlayCloseBtn).on('click', () => {\r\n this._hideBackdrop();\r\n this._hideOverlay();\r\n });\r\n }\r\n\r\n _createIconSvg(iconColor) {\r\n return `\r\n \r\n \r\n \r\n \r\n `;\r\n }\r\n\r\n _createActiveIconSvg(iconColor) {\r\n return `\r\n \r\n \r\n \r\n \r\n \r\n `;\r\n }\r\n\r\n _createMarker(iconUrl, location) {\r\n return new google.maps.Marker({\r\n icon: iconUrl,\r\n position: location.latlng,\r\n map: this._map,\r\n unreplacedTitle: location.title,\r\n title: location.title.replaceAll(' ', ' ').replaceAll('&', '&').replaceAll('ä', 'ä').replaceAll('ü', 'ü').replaceAll('ö', 'ö'),\r\n description: location.description,\r\n address: location.address,\r\n type: location.type,\r\n country: location.country,\r\n link: location.link,\r\n \r\n });\r\n }\r\n\r\n _hideMarkers() {\r\n\r\n }\r\n\r\n _focusPoint(lat, lon) {\r\n this._zoom = 6;\r\n this._map.setZoom(6);\r\n this._map.panTo(new google.maps.LatLng(lat, lon));\r\n }\r\n\r\n _createAndReturnMarkers(locations) {\r\n const markers = [];\r\n\r\n for (let i = 0; i < locations.length; i++) {\r\n const iconColor = this._getColorByType(locations[i].type);\r\n const iconSvg = this._createIconSvg(iconColor);\r\n const iconUrl = `data:image/svg+xml;charset=UTF-8;base64,${btoa(iconSvg)}`;\r\n\r\n const marker = this._createMarker(iconUrl, locations[i]);\r\n\r\n markers.push(marker);\r\n\r\n if (locations[i].type === 'headquarter') {\r\n this._headquarterMarker = marker;\r\n this._headquarter = locations[i];\r\n }\r\n\r\n const _this = this;\r\n\r\n google.maps.event.addListener(marker, 'click', function (e) {\r\n if (!e) {\r\n _this._focusPoint(_this._headquarter.latlng.lat, _this._headquarter.latlng.lon);\r\n } else {\r\n _this._focusPoint(e.latLng.lat(), e.latLng.lng());\r\n\r\n _this._elements.$overlay.removeClass(_this._overlayModifier);\r\n _this._activeMarker = marker;\r\n _this._overlayModifier = `location-map__overlay--${_this._activeMarker.type}`;\r\n _this._elements.$overlay.addClass(_this._overlayModifier);\r\n _this._activeMarkerPrevIcon = marker.getIcon();\r\n marker.setIcon(`data:image/svg+xml;charset=UTF-8;base64,${btoa(_this._createActiveIconSvg(iconColor))}`);\r\n\r\n google.maps.event.addListenerOnce(_this._map, 'idle', () => {\r\n setTimeout(() => {\r\n let offsetTop = e.domEvent.y;\r\n\r\n if (e.domEvent.path && e.domEvent.path[3]) {\r\n const $markerWrapper = e.domEvent.path[3];\r\n const $marker = e.domEvent.path[1];\r\n\r\n offsetTop = $markerWrapper.offsetTop + $marker.offsetTop;\r\n }\r\n\r\n // Dont use Durag names\r\n // const title = this.address[j].name;\r\n const { title } = this;\r\n const { description } = this;\r\n const { country } = this;\r\n const { link } = this;\r\n const {unreplacedTitle} = this;\r\n const color = this.type === 'manufactoring' ? '#000' : '#fff';\r\n\r\n const content = _this._createOverlayHtml(unreplacedTitle, description, country, color, link);\r\n\r\n _this._elements.$overlay.html(content);\r\n\r\n _this._showOverlay(iconColor, offsetTop);\r\n _this._showBackdrop();\r\n _this._initOverlayListeners();\r\n }, 100);\r\n });\r\n }\r\n });\r\n }\r\n\r\n return markers;\r\n }\r\n\r\n _setMarkers(locations) {\r\n this._bounds = new google.maps.LatLngBounds();\r\n this._markers = this._createAndReturnMarkers(locations);\r\n this._visibleMarkers = this._markers;\r\n this._markers.forEach((marker) => {\r\n this._bounds.extend(marker.position);\r\n });\r\n }\r\n\r\n _hideOverlay() {\r\n // this._elements.$overlay.css('top', 0);\r\n this._elements.$overlay.css('opacity', 0);\r\n this._elements.$overlay.css('pointer-events', 'none');\r\n this._activeMarker.setIcon(this._activeMarkerPrevIcon);\r\n setTimeout(() => {\r\n // this._elements.$overlay.css('height', '0');\r\n }, 500);\r\n }\r\n\r\n _initMap() {\r\n const maps = this._elements.$map;\r\n\r\n const styledMapType = new google.maps.StyledMapType(\r\n this._json,\r\n { name: maps[0].dataset.type },\r\n );\r\n\r\n const centerOfLocations = this._calcCenterOfLocations(this._locations);\r\n\r\n this._mapOptions = {\r\n draggable: true,\r\n scrollwheel: 'CTRL',\r\n zoomControl: false,\r\n minZoom: config.worldZoom,\r\n maxZoom: config.worldZoom + 12,\r\n mapTypeControl: false,\r\n scaleControl: false,\r\n streetViewControl: false,\r\n rotateControl: false,\r\n fullscreenControl: false,\r\n disableDefaultUI: true,\r\n };\r\n\r\n this._initOptions = {\r\n center: new google.maps.LatLng(centerOfLocations[1], centerOfLocations[0]),\r\n zoom: this._zoom,\r\n zoomControl: false,\r\n minZoom: config.worldZoom,\r\n maxZoom: config.worldZoom + 12,\r\n mapTypeControl: false,\r\n scaleControl: false,\r\n streetViewControl: false,\r\n rotateControl: false,\r\n fullscreenControl: false,\r\n disableDefaultUI: true,\r\n mapTypeControlOptions: {\r\n mapTypeIds: ['roadmap', 'satellite', 'hybrid', 'terrain', maps[0].dataset.type],\r\n },\r\n };\r\n\r\n this._map = new google.maps.Map(maps[0], this._initOptions);\r\n\r\n this._bounds = new google.maps.LatLngBounds();\r\n this._setMarkers(this._locations);\r\n\r\n this._map.mapTypes.set(maps[0].dataset.type, styledMapType);\r\n this._map.setMapTypeId(maps[0].dataset.type);\r\n\r\n window.onresize = () => {\r\n this._map.fitBounds(this._bounds);\r\n };\r\n\r\n if (this._currentMode === 'headquarter') {\r\n setTimeout(() => {\r\n google.maps.event.trigger(this._headquarterMarker, 'click');\r\n }, 500);\r\n }\r\n }\r\n\r\n // helper functions\r\n\r\n _setUserPosition() {\r\n return new Promise((res, rej) => {\r\n navigator.geolocation.getCurrentPosition(res, rej);\r\n });\r\n }\r\n\r\n _calcCenterOfLocations(locations) {\r\n let sumX = 0;\r\n let sumY = 0;\r\n let sumZ = 0;\r\n\r\n locations.forEach((location) => {\r\n const lat = this._degr2rad(location.latlng.lat());\r\n const lng = this._degr2rad(location.latlng.lng());\r\n // sum of cartesian coordinates\r\n sumX += Math.cos(lat) * Math.cos(lng);\r\n sumY += Math.cos(lat) * Math.sin(lng);\r\n sumZ += Math.sin(lat);\r\n });\r\n \r\n const avgX = sumX / locations.length;\r\n const avgY = sumY / locations.length;\r\n const avgZ = sumZ / locations.length;\r\n\r\n const lng = Math.atan2(avgY, avgX);\r\n const hyp = Math.sqrt(avgX * avgX + avgY * avgY);\r\n const lat = Math.atan2(avgZ, hyp);\r\n\r\n return ([this._rad2degr(lng), this._rad2degr(lat)]);\r\n }\r\n\r\n _calcCenterOfVisibleMarkers() {\r\n let sumX = 0;\r\n let sumY = 0;\r\n let sumZ = 0;\r\n\r\n this._visibleMarkers.forEach((marker) => {\r\n const lat = this._degr2rad(marker.position.lat());\r\n const lng = this._degr2rad(marker.position.lng());\r\n // sum of cartesian coordinates\r\n sumX += Math.cos(lat) * Math.cos(lng);\r\n sumY += Math.cos(lat) * Math.sin(lng);\r\n sumZ += Math.sin(lat);\r\n });\r\n\r\n const avgX = sumX / this._visibleMarkers.length;\r\n const avgY = sumY / this._visibleMarkers.length;\r\n const avgZ = sumZ / this._visibleMarkers.length;\r\n\r\n const lng = Math.atan2(avgY, avgX);\r\n const hyp = Math.sqrt(avgX * avgX + avgY * avgY);\r\n const lat = Math.atan2(avgZ, hyp);\r\n\r\n return ([this._rad2degr(lng), this._rad2degr(lat)]);\r\n }\r\n\r\n _rad2degr(rad) {\r\n return rad * 180 / Math.PI;\r\n }\r\n\r\n _degr2rad(degr) {\r\n return degr * Math.PI / 180;\r\n }\r\n\r\n // configuration for map styling\r\n _getWorldJson() {\r\n return [\r\n {\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#4c5b7b\"\r\n }\r\n ]\r\n },\r\n {\r\n \"elementType\": \"labels\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"administrative\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"administrative\",\r\n \"elementType\": \"labels\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"administrative.country\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"on\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"administrative.country\",\r\n \"elementType\": \"geometry.stroke\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#074089\"\r\n },\r\n {\r\n \"weight\": 1.5\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"administrative.country\",\r\n \"elementType\": \"labels\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#242b3e\"\r\n },\r\n {\r\n \"saturation\": -5\r\n },\r\n {\r\n \"lightness\": 5\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"administrative.country\",\r\n \"elementType\": \"labels.text\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#5a5c63\"\r\n },\r\n {\r\n \"visibility\": \"off\"\r\n },\r\n {\r\n \"weight\": 0.5\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"administrative.country\",\r\n \"elementType\": \"labels.text.stroke\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#505258\"\r\n },\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"administrative.province\",\r\n \"elementType\": \"geometry.stroke\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"landscape\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#4c5b7b\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"landscape\",\r\n \"elementType\": \"geometry.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#05326c\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"landscape.man_made\",\r\n \"elementType\": \"labels.text\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi\",\r\n \"elementType\": \"labels\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road\",\r\n \"elementType\": \"labels\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"transit\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"transit\",\r\n \"elementType\": \"labels\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"transit.line\",\r\n \"elementType\": \"geometry.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#283d6a\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"transit.station\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#3a4762\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"transit.station.airport\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"water\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#074089\"\r\n },\r\n {\r\n \"visibility\": \"on\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"water\",\r\n \"elementType\": \"labels\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n }\r\n ];\r\n \r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('LocationMap', LocationMap);\r\nmoduleRegistry.autoApplyModule('LocationMap', config.selectors.root);","import moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.media',\r\n controls: '.video__controls',\r\n videoComponent: '.video',\r\n video: '.video__video',\r\n videoMobile: '.video__video-mobile',\r\n videoWrapper: '.video__wrapper',\r\n activateButtonWrapper: '.media__play-wrapper',\r\n backdrop: '.video-lighthouse',\r\n closeButton: '.video__close-button',\r\n playPauseBtn: '.video__play-pause',\r\n\r\n },\r\n classNames: {\r\n videoHide: 'video__video--hidden',\r\n videoWrapperSmall: 'video__wrapper--small',\r\n iconButtonWrapper: 'media__play-wrapper--hidden',\r\n videoFullscreen: 'video--fullscreen',\r\n videoControlsHidden: 'video__controls--hidden',\r\n },\r\n playIcon: '',\r\n pauseIcon: '',\r\n};\r\n\r\nclass Media {\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n }\r\n\r\n init() {\r\n this._elements = this._getDomElements();\r\n\r\n if(this._elements.$video.length === 0) {\r\n this._elements.$activateButtonWrapper.hide();\r\n }\r\n\r\n this._elements.$videoWrapper.addClass(config.classNames.videoWrapperSmall);\r\n this._elements.$video.addClass(config.classNames.videoHide);\r\n this._elements.$videoMobile.addClass(config.classNames.videoHide);\r\n this._fullSizedVideo();\r\n this._closeVideo();\r\n }\r\n\r\n _getDomElements() {\r\n return {\r\n $body: $('body'),\r\n $html: $('html'),\r\n $controls: this._$rootElement.find(config.selectors.controls),\r\n $video: this._$rootElement.find(config.selectors.video),\r\n $videoMobile: this._$rootElement.find(config.selectors.videoMobile),\r\n $videoComponent: this._$rootElement.find(config.selectors.videoComponent),\r\n $videoWrapper: this._$rootElement.find(config.selectors.videoWrapper),\r\n $activateButtonWrapper: this._$rootElement.find(config.selectors.activateButtonWrapper),\r\n $backdrop: this._$rootElement.find(config.selectors.backdrop),\r\n $closeButton: this._$rootElement.find(config.selectors.closeButton),\r\n $playPauseBtn: this._$rootElement.find(config.selectors.playPauseBtn),\r\n };\r\n }\r\n\r\n // eslint-disable-next-line class-methods-use-this\r\n _addEventListeners() {\r\n }\r\n\r\n _removeStandardControls() {\r\n const videoWorks = !!document.createElement('video').canPlayType;\r\n\r\n if (videoWorks) {\r\n this._elements.$video[0].controls = false;\r\n this._elements.$controls.removeClass('hidden');\r\n }\r\n }\r\n\r\n _fullSizedVideo() {\r\n this._elements.$activateButtonWrapper.on('click', () => {\r\n this._elements.$video.removeClass(config.classNames.videoHide);\r\n this._elements.$videoMobile.removeClass(config.classNames.videoHide);\r\n this._elements.$videoWrapper.removeClass(config.classNames.videoWrapperSmall);\r\n this._elements.$controls.removeClass(config.classNames.videoControlsHidden);\r\n this._elements.$backdrop[0].style.opacity = '1';\r\n this._elements.$backdrop[0].style.visibility = 'visible';\r\n this._elements.$video[0].style.opacity = '1';\r\n this._elements.$video[0].style.visibility = 'visible';\r\n this._elements.$html.addClass('body--no-scroll');\r\n // this._elements.$video.show();\r\n this._elements.$videoMobile.show();\r\n this._elements.$activateButtonWrapper.addClass(config.classNames.iconButtonWrapper);\r\n this._elements.$video[0].player.play();\r\n\r\n // html.style.overflow = \"hidden\"\r\n // main.style.overflow = \"hidden\"\r\n // body.style.overflow = \"hidden\"\r\n });\r\n }\r\n\r\n _closeVideo() {\r\n const videoSettings = this._elements.$video[0];\r\n // eslint-disable-next-line no-unused-vars\r\n this._elements.$closeButton.on('click', (e) => {\r\n // this._elements.$video.hide();\r\n this._elements.$videoMobile.hide();\r\n this._elements.$video.addClass(config.classNames.videoHide);\r\n this._elements.$videoMobile.addClass(config.classNames.videoHide);\r\n this._elements.$videoWrapper.addClass(config.classNames.videoWrapperSmall);\r\n this._elements.$controls.addClass(config.classNames.videoControlsHidden);\r\n this._elements.$videoComponent.removeClass(config.classNames.videoFullscreen);\r\n this._elements.$activateButtonWrapper.removeClass(config.classNames.iconButtonWrapper);\r\n this._elements.$backdrop[0].style.opacity = '0';\r\n this._elements.$backdrop[0].style.visibility = 'hidden';\r\n this._elements.$video[0].style.opacity = '0';\r\n this._elements.$video[0].style.visibility = 'hidden';\r\n this._elements.$html.removeClass('body--no-scroll');\r\n videoSettings.player.pause();\r\n this._elements.$playPauseBtn.html(config.playIcon);\r\n });\r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('Media', Media);\r\nmoduleRegistry.autoApplyModule('Media', config.selectors.root);\r\n","\nconst config = {\n selectors: {\n root: '.navigation__main-nav-item-parent .navigation-link-section',\n },\n};\n\n\nclass NavigationLinkSection {\n\n static sort() {\n const lists = document.querySelectorAll(config.selectors.root);\n\n for(const list of lists) {\n if(list.dataset.sortByUrl == 'true') {\n Array.prototype.slice.call(list.children)\n .map(function (x) { return list.removeChild(x); })\n .sort(function (x, y) { return x.children[0] && y.children[0] && x.children[0].getAttribute('href') > y.children[0].getAttribute('href') ? 1 : -1; })\n .forEach(function (x) { list.appendChild(x); });\n } else {\n Array.prototype.slice.call(list.children)\n .map(function (x) { return list.removeChild(x); })\n .sort(function (x, y) { return x.children[0] && y.children[0] && x.children[0].innerText > y.children[0].innerText ? 1 : -1; })\n .forEach(function (x) { list.appendChild(x); });\n }\n\n }\n }\n}\n\nexport default NavigationLinkSection;","import { Breakpoints } from '../breakpoints/breakpoints';\r\nimport moduleRegistry from '../module-registry/module-registry';\r\nimport NavigationLinkSection from './navigation-link-section';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.navigation',\r\n body: 'body',\r\n mainNav: '.navigation__main-nav',\r\n mainItems: '.navigation__main-nav-item',\r\n childItem: '.navigation__child',\r\n childContent: '.navigation__child-content',\r\n childNavWrapper: '.navigation__child-nav-wrapper',\r\n childNavClose: '.navigation__child-nav-close',\r\n burger: '.navigation__action--burger',\r\n mainNavMobileClose: '.navigation__main-nav-mobile-header-close',\r\n mainNavMobileIndicator: '.navigation__main-nav-mobile-header-indicator',\r\n mainNavMobileHeader: '.navigation__main-nav-mobile-header',\r\n mainNavMobileIndicatorTitle: '.navigation__main-nav-mobile-header-indicator-title',\r\n childContentMobileClose: '.navigation__child-content-mobile-close',\r\n childNavContainer: '.navigation__child-nav-container',\r\n backdrop: '.navigation__child-nav-wrapper-backdrop',\r\n megaMenu: '.navigation__megamenu',\r\n mainNavItemNoChilds: '.navigation__main-nav-item--nochild',\r\n mobileSearch: '.navigation__mobile-search-input',\r\n mobileSearchContent: '.navigation__mobile-search-content',\r\n mobileOverlay: '.navigation__child-nav-wrapper--mobile-overlay',\r\n mainNavLink: '.navigation__main-nav-link',\r\n mobileHeader: '.navigation__main-nav-mobile-header',\r\n mobileCountryContent: '.navigation__mobile-country-content',\r\n countryActionChangeTrigger: '.navigation__country-action-change-trigger',\r\n countWrapper: '.navigation__action-count',\r\n countInner: '.navigation__action-count-inner',\r\n mobileCountWrapper: '.navigation__mobile-action-count',\r\n mobileCountInner: '.navigation__mobile-action-count-inner',\r\n }, \r\n dataAttributes: {\r\n childId: 'child-id',\r\n subchildId: 'subchild-id',\r\n subchildName: 'subchild-name',\r\n url: 'url',\r\n },\r\n classNames: {\r\n bodyNoScroll: 'body--no-scroll',\r\n mainItemActive: 'navigation__main-nav-item--active',\r\n mainItemNonTransparent: 'navigation__main-nav-item--non-transparent',\r\n childContentActive: 'navigation__child-content--active',\r\n childNavWrapperActive: 'navigation__child-nav-wrapper--active',\r\n childNavWrapperVisible: 'navigation__child-nav-wrapper--visible',\r\n mainNavOpen: 'navigation__main-nav--open',\r\n linkGroupHeadlineActive: 'navigation-link-groups__group-headline--active',\r\n childItemActive: 'navigation__child--active',\r\n indicatorVisible: 'navigation__main-nav-mobile-header-indicator--visible',\r\n mainNavMobileHeaderVisible: 'navigation__main-nav-mobile-header--visible',\r\n scrollDown: 'navigation--scrolldown',\r\n scrollUp: 'navigation--scrollup',\r\n mobileSearchContentActive: 'navigation__mobile-search-content--active',\r\n mobileOverlayActive: 'navigation__child-nav-wrapper--mobile-active',\r\n searchMobileText: 'navigation__mobile-search-text',\r\n searchMobileIcon: 'navigation__mobile-search-text-icon',\r\n mainNavMobileHeaderWhite: 'navigation__main-nav-mobile-header--white',\r\n mainNavItemNoChilds: 'navigation__main-nav-item--nochild',\r\n },\r\n titles: {\r\n countryTitle: 'Country & Language',\r\n }\r\n};\r\n\r\nexport class Navigation {\r\n static canChangeScrollBehavior = true;\r\n\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n this._shouldClose = false;\r\n this._windowWidth = window.innerWidth;\r\n this._url = '';\r\n this._isOpening = false;\r\n this._isClosing = false;\r\n // this._lastScrollY = 0;\r\n this._lastScrollY = undefined;\r\n this._isOpened = false;\r\n this._activeItem = null;\r\n this._timer = null;\r\n this._activeIndex = undefined;\r\n this._mobileSearchText = \"Start typing to search karlstorz.com\";\r\n }\r\n\r\n init() {\r\n this._mobileSearchText = this._$rootElement.data('mobile-search-text') || this._mobileSearchText;\r\n NavigationLinkSection.sort();\r\n this._elements = this._getDomElements();\r\n this._addEventListeners();\r\n this._scrollNav();\r\n this.__setDefaultActive();\r\n\r\n \r\n this.__addsearchChilds();\r\n //Navigation.updateCartNumber();\r\n\r\n // this._elements.$megaMenu.each((i,item) => {\r\n // const $item = $(item);\r\n // console.log(\"navigation\", $item)\r\n\r\n // if(i !== 0) {\r\n // $item.height(0);\r\n // }\r\n // });\r\n }\r\n\r\n _getDomElements() {\r\n return {\r\n $body: $('body'),\r\n $html: $('html'),\r\n $mainItem: this._$rootElement.find(config.selectors.mainItems),\r\n $mainNav: this._$rootElement.find(config.selectors.mainNav),\r\n $burger: this._$rootElement.find(config.selectors.burger),\r\n $childItem: this._$rootElement.find(config.selectors.childItem),\r\n $childNavClose: this._$rootElement.find(config.selectors.childNavClose),\r\n $childContent: this._$rootElement.find(config.selectors.childContent),\r\n $childNavWrapper: this._$rootElement.find(config.selectors.childNavWrapper),\r\n $mainNavMobileClose: this._$rootElement.find(config.selectors.mainNavMobileClose),\r\n $mainNavMobileIndicator: this._$rootElement.find(config.selectors.mainNavMobileIndicator),\r\n $mainNavMobileIndicatorTitle: this._$rootElement.find(config.selectors.mainNavMobileIndicatorTitle),\r\n $childContentMobileClose: this._$rootElement.find(config.selectors.childContentMobileClose),\r\n $navigationRoot: this._$rootElement.find(config.selectors.root),\r\n $childNavContainer: this._$rootElement.find(config.selectors.childNavContainer),\r\n $backdrop: this._$rootElement.find(config.selectors.backdrop),\r\n $megaMenu: this._$rootElement.find(config.selectors.megaMenu),\r\n $mainNavItemNoChilds: this._$rootElement.find(config.selectors.mainNavItemNoChilds),\r\n $mobileSearch: this._$rootElement.find(config.selectors.mobileSearch),\r\n $mobileSearchContent: this._$rootElement.find(config.selectors.mobileSearchContent),\r\n $mainNavMobileHeader: this._$rootElement.find(config.selectors.mainNavMobileHeader),\r\n $mainNavMobileHeaderVisible: this._$rootElement.find(config.classNames.mainNavMobileHeaderVisible),\r\n $mobileOverlay: this._$rootElement.find(config.selectors.mobileOverlay),\r\n $mainNavLink: this._$rootElement.find(config.selectors.mainNavLink),\r\n $mobileHeader: this._$rootElement.find(config.selectors.mobileHeader),\r\n $countryActionChangeTrigger: this._$rootElement.find(config.selectors.countryActionChangeTrigger),\r\n $mobileCountryContent: this._$rootElement.find(config.selectors.mobileCountryContent),\r\n $count: this._$rootElement.find(config.selectors.count),\r\n $mobileCount: this._$rootElement.find(config.selectors.mobileCount),\r\n };\r\n }\r\n\r\n\r\n _addEventListeners() {\r\n this._addDesktopEventListeners();\r\n this._addMobileEventListeners();\r\n \r\n //adrian fragen ob es eine gute lösung ist?\r\n // $(window).on('resize', () => {\r\n\r\n // this._windowWidth = window.innerWidth;\r\n // if(this._windowWidth < 992){\r\n \r\n \r\n // // location.reload();\r\n // }\r\n // } )\r\n\r\n $('.navigation-link-section__link').on('click', (e) => {\r\n e.stopPropagation();\r\n });\r\n }\r\n\r\n _addDesktopEventListeners() {\r\n const _this = this;\r\n\r\n $('.navigation__child-content').on('focusin', function(e) {\r\n if(Breakpoints.isBreakpoint('xs') || Breakpoints.isBreakpoint('sm')) return;\r\n\r\n const id = $(this).data('subchild-id');\r\n\r\n if(_this._activeSubchildIndex === id) return;\r\n\r\n _this._elements.$childItem.removeClass(config.classNames.childItemActive);\r\n $(this).addClass(config.classNames.childItemActive);\r\n\r\n _this._activeSubchildIndex = id;\r\n\r\n _this._elements.$childContent.removeClass(config.classNames.childContentActive);\r\n _this._elements.$childContent.each((i, el) => {\r\n if($(el).data(config.dataAttributes.subchildId) === id ) {\r\n $(el).addClass(config.classNames.childContentActive);\r\n $(el).css('height', $(el)[0].scrollHeight);\r\n let prevHeight = $(el)[0].scrollHeight;\r\n } else {\r\n $(el).css('height', 0);\r\n }\r\n })\r\n });\r\n\r\n this._elements.$mainItem.on('focusin', function(e) {\r\n if(Breakpoints.isBreakpoint('xs') || Breakpoints.isBreakpoint('sm')) return;\r\n \r\n if($(this).data('child-id') === _this._activeIndex) return;\r\n \r\n const isNoParent = $(this).hasClass(config.classNames.mainNavItemNoChilds);\r\n\r\n if(isNoParent) {\r\n e.stopPropagation();\r\n \r\n _this._activeIndex = undefined;\r\n _this._closeDesktopNav();\r\n _this._activeItem = null;\r\n this._isOpened = false;\r\n \r\n return false;\r\n }\r\n \r\n e.stopPropagation();\r\n\r\n const $currentItem = $(e.currentTarget);\r\n\r\n if(_this._isOpened) {\r\n _this._closeDesktopNav();\r\n }\r\n\r\n _this._openDesktopNav($(this));\r\n _this._isOpened = true;\r\n _this._activeItem = $currentItem;\r\n });\r\n\r\n this._$rootElement.find('.cta-button').on('click', (e) => {\r\n e.stopPropagation();\r\n })\r\n\r\n this._elements.$mainItem.on('click', function(e) {\r\n if(Breakpoints.isBreakpoint('xs') || Breakpoints.isBreakpoint('sm')) return;\r\n const isNoParent = $(this).hasClass(config.classNames.mainNavItemNoChilds);\r\n\r\n if(_this._isDesktopNav() && !$(e.target).hasClass('cta-button') && !isNoParent) {\r\n e.preventDefault();\r\n }\r\n });\r\n \r\n this._elements.$mainItem.on('mouseenter', function(e) {\r\n if(_this._isDesktopNav()) {\r\n //console.log('mouseenter');\r\n const element = e.currentTarget;\r\n // track mousemove after mouseenter\r\n $(this).on('mousemove', function(e) {\r\n // console.log('mousemove after mouseenter');\r\n clearTimeout(element.timeout); \r\n\r\n element.timeout = setTimeout(() => {\r\n // console.log('mouse didnt move for 250ms - open the flyout');\r\n clearTimeout(element.timeout);\r\n\r\n if($(this).data('child-id') === _this._activeIndex) return;\r\n \r\n if(!($(e.target).hasClass('navigation__main-nav-item') || $(e.target).hasClass('navigation__main-nav-link') || $(e.target).hasClass('navigation__main-nav-link-inner'))) {\r\n e.stopPropagation();\r\n return false;\r\n }\r\n \r\n const isNoParent = $(this).hasClass(config.classNames.mainNavItemNoChilds);\r\n \r\n if(isNoParent) {\r\n e.stopPropagation();\r\n \r\n _this._activeIndex = undefined;\r\n _this._closeDesktopNav();\r\n _this._activeItem = null;\r\n this._isOpened = false;\r\n \r\n return false;\r\n }\r\n \r\n e.stopPropagation();\r\n\r\n const $currentItem = $(e.currentTarget);\r\n\r\n if(_this._isOpened) {\r\n _this._closeDesktopNav();\r\n }\r\n \r\n _this._openDesktopNav($(this));\r\n clearTimeout(element.timeout);\r\n _this._isOpened = true;\r\n _this._activeItem = $currentItem;\r\n \r\n }, 25); \r\n });\r\n\r\n $(this).on('mouseleave', function(e) {\r\n //console.log('mouseleave after mouseenter');\r\n $(this).off('mousemove');\r\n $(this).off('mouseleave');\r\n clearTimeout(element.timeout); \r\n });\r\n }\r\n });\r\n \r\n this._elements.$childNavClose.on('click', function(e) {\r\n if(_this._isDesktopNav()) {\r\n _this._$rootElement.addClass('navigation--no-transition');\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n _this._activeIndex = undefined;\r\n _this._closeDesktopNav();\r\n\r\n setTimeout(() => {\r\n _this._$rootElement.removeClass('navigation--no-transition');\r\n }, 5);\r\n \r\n }\r\n });\r\n \r\n this._elements.$backdrop.on('mouseenter', function(e) {\r\n if(_this._isDesktopNav()) {\r\n e.stopPropagation();\r\n\r\n var ycoordinate = e.clientY;\r\n \r\n if(ycoordinate > 110) {\r\n _this._shouldClose = true;\r\n\r\n const timer = setInterval(() => {\r\n _this._activeIndex = undefined;\r\n _this._closeDesktopNav();\r\n clearInterval(timer);\r\n }, 2000);\r\n\r\n $(this).on('mouseleave', function(e) {\r\n clearInterval(timer)\r\n });\r\n }\r\n }\r\n });\r\n\r\n this._elements.$childNavWrapper.on('mouseenter', function() {\r\n if(_this._isDesktopNav()) {\r\n _this._shouldClose = false;\r\n }\r\n });\r\n\r\n this._elements.$backdrop.on('click', function(elem) {\r\n if(_this._isDesktopNav()) {\r\n _this._$rootElement.addClass('navigation--no-transition');\r\n elem.preventDefault();\r\n elem.stopPropagation();\r\n \r\n _this._activeIndex = undefined;\r\n _this._closeDesktopNav();\r\n\r\n _this._$rootElement.removeClass('navigation--no-transition');\r\n }\r\n });\r\n\r\n this._elements.$childItem.on('mouseenter', function(e) {\r\n if(_this._isDesktopNav()) {\r\n // e.preventDefault();\r\n e.stopPropagation();\r\n\r\n const id = $(this).data(config.dataAttributes.subchildId);\r\n // console.log(\"child id\", id);\r\n // console.log(\"element child\", _this._elements.$childItem)\r\n _this._elements.$childItem.removeClass(config.classNames.childItemActive);\r\n $(this).addClass(config.classNames.childItemActive);\r\n\r\n _this._activeSubchildIndex = id;\r\n\r\n _this._elements.$childContent.removeClass(config.classNames.childContentActive);\r\n _this._elements.$childContent.each((i, el) => {\r\n if($(el).data(config.dataAttributes.subchildId) === id ) {\r\n $(el).addClass(config.classNames.childContentActive);\r\n $(el).css('height', $(el)[0].scrollHeight);\r\n let prevHeight = $(el)[0].scrollHeight;\r\n } else {\r\n $(el).css('height', 0);\r\n }\r\n })\r\n }\r\n });\r\n\r\n this._elements.$childItem.on('focusin', function(e) {\r\n if(_this._isDesktopNav()) {\r\n // e.preventDefault();\r\n e.stopPropagation();\r\n\r\n const id = $(this).data(config.dataAttributes.subchildId);\r\n // console.log(\"child id\", id);\r\n // console.log(\"element child\", _this._elements.$childItem)\r\n _this._elements.$childItem.removeClass(config.classNames.childItemActive);\r\n $(this).addClass(config.classNames.childItemActive);\r\n\r\n _this._activeSubchildIndex = id;\r\n\r\n _this._elements.$childContent.removeClass(config.classNames.childContentActive);\r\n _this._elements.$childContent.each((i, el) => {\r\n if($(el).data(config.dataAttributes.subchildId) === id ) {\r\n $(el).addClass(config.classNames.childContentActive);\r\n $(el).css('height', $(el)[0].scrollHeight);\r\n let prevHeight = $(el)[0].scrollHeight;\r\n } else {\r\n $(el).css('height', 0);\r\n }\r\n })\r\n }\r\n });\r\n\r\n $('.jump-navigation').on('focusin', function(e) {\r\n _this._$rootElement.addClass(config.classNames.scrollUp);\r\n });\r\n\r\n this._elements.$childItem.on('keydown', function(e) {\r\n if(Breakpoints.isBreakpoint('xs') || Breakpoints.isBreakpoint('sm')) return;\r\n \r\n if( e.which == 9 ) {\r\n e.preventDefault();\r\n const $el = _this._$rootElement.find(`.navigation__child-content[data-subchild-id=\"${$(this).data('subchild-id')}\"]`);\r\n \r\n const $links = $el.find('.navigation-link-section__link');\r\n const $cards = $el.find('.navigation-card-section__card');\r\n\r\n $($links[0]).focus();\r\n $($cards[0]).focus();\r\n\r\n \r\n const $teaser = $el.find('.navigation__child-teaser');\r\n\r\n if($teaser.length) {\r\n $teaser.find('.cta-button').one('keydown', function(e) {\r\n if( e.which == 9 ) {\r\n const $el = _this._$rootElement.find(`.navigation__child[data-subchild-id=\"${_this._activeSubchildIndex}\"]`);\r\n $el.find('a').focus();\r\n }\r\n });\r\n } else {\r\n if($links.length) {\r\n $($links[$links.length - 1]).one('keydown', function(e) {\r\n if( e.which == 9 ) {\r\n if(_this._activeSubchildIndex !== _this._$rootElement.find(`.navigation__child`).length - 1) {\r\n const $el = _this._$rootElement.find(`.navigation__child[data-subchild-id=\"${_this._activeSubchildIndex}\"]`);\r\n $el.find('a').focus();\r\n }\r\n }\r\n });\r\n } else if($cards.length) {\r\n $($cards[$cards.length - 1]).one('keydown', function(e) {\r\n if( e.which == 9 ) {\r\n if(_this._activeSubchildIndex !== _this._$rootElement.find(`.navigation__child`).length - 1) {\r\n const $el = _this._$rootElement.find(`.navigation__child[data-subchild-id=\"${_this._activeSubchildIndex}\"]`);\r\n $el.find('a').focus();\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n _addMobileEventListeners() {\r\n const _this = this;\r\n const mainNavItemDifferendGroup = this._elements.$mainItem[1];\r\n\r\n \r\n // $('.navigation__mobile-search').on(\"click\", () => {\r\n // document.getElementById('mobile').focus()\r\n // });\r\n\r\n $(this._elements.$mobileSearch).attr('readonly', '')\r\n\r\n \r\n this._elements.$mobileSearch.on('click', function(e) {\r\n _this._elements.$mainNavMobileIndicatorTitle.html(\"Search\");\r\n _this._elements.$mainNavMobileIndicator.addClass(config.classNames.indicatorVisible);\r\n _this._elements.$mobileHeader.addClass(config.classNames.mainNavMobileHeaderVisible);\r\n _this._elements.$mobileSearchContent.addClass(config.classNames.mobileSearchContentActive);\r\n\r\n setTimeout(() => { \r\n document.querySelector('.search-bar__text-input').focus() \r\n }, 1000);\r\n });\r\n\r\n this._elements.$countryActionChangeTrigger.on('click', function(e) {\r\n _this._elements.$mainNav[0].scrollTop = 0;\r\n _this._elements.$mainNavMobileIndicatorTitle.html(config.titles.countryTitle);\r\n \r\n _this._elements.$mainNavMobileIndicator.addClass(config.classNames.indicatorVisible);\r\n _this._elements.$mobileHeader.addClass(config.classNames.mainNavMobileHeaderVisible);\r\n //ändern\r\n $('.overlay--language').addClass('overlay--visible')\r\n\r\n if ( $('.overlay--language').hasClass('overlay--visible')) {\r\n _this._elements.$mobileHeader.addClass(config.classNames.mainNavMobileHeaderWhite);\r\n _this._elements.$mainNav.css(\"overflow-y\", \"hidden\");\r\n \r\n } \r\n });\r\n\r\n this._elements.$childItem.on('click', function(e) {\r\n e.stopPropagation();\r\n\r\n if(Breakpoints.isBreakpoint('xs') || Breakpoints.isBreakpoint('sm')) {\r\n e.preventDefault();\r\n const id = $(this).data(config.dataAttributes.subchildId);\r\n const title = $(this).data(config.dataAttributes.subchildName);\r\n\r\n _this._elements.$mainNav[0].scrollTop = 0;\r\n\r\n\r\n _this._elements.$mainNavMobileIndicatorTitle.html(title);\r\n _this._elements.$mainNavMobileIndicator.addClass(config.classNames.indicatorVisible);\r\n _this._elements.$mobileHeader.addClass(config.classNames.mainNavMobileHeaderVisible);\r\n _this._elements.$mainNav.css(\"overflow-y\", \"hidden\");\r\n\r\n _this._elements.$childItem.removeClass(config.classNames.childItemActive);\r\n $(this).addClass(config.classNames.childItemActive);\r\n _this._elements.$childContent.removeClass(config.classNames.childContentActive);\r\n \r\n _this._elements.$childContent.each((i, el) => {\r\n if($(el).data(config.dataAttributes.subchildId) === id) {\r\n $(el).addClass(config.classNames.childContentActive);\r\n }\r\n }) \r\n }\r\n });\r\n \r\n this._elements.$mainNavMobileIndicator.on('click', function(e) {\r\n _this._elements.$mainNavMobileIndicator.removeClass(config.classNames.indicatorVisible);\r\n _this._elements.$mainNavMobileHeader.removeClass(config.classNames.mainNavMobileHeaderVisible);\r\n _this._elements.$childItem.removeClass(config.classNames.childItemActive);\r\n _this._elements.$childContent.removeClass(config.classNames.childContentActive);\r\n _this._elements.$mobileOverlay.removeClass(config.classNames.mobileOverlayActive);\r\n _this._elements.$mobileHeader.removeClass(config.classNames.mainNavMobileHeaderVisible);\r\n _this._elements.$mobileSearchContent.removeClass(config.classNames.mobileSearchContentActive)\r\n //ändern\r\n $('.overlay--language').removeClass('overlay--visible')\r\n _this._elements.$mobileHeader.removeClass(config.classNames.mainNavMobileHeaderWhite);\r\n _this._elements.$mainNav.css(\"overflow-y\", \"scroll\")\r\n });\r\n \r\n //mit adrian noch mal drauf schauen gibt bestimmt bessere lösung\r\n mainNavItemDifferendGroup.addEventListener('click', function(e) {\r\n if(Breakpoints.isBreakpoint('xs') || Breakpoints.isBreakpoint('sm')) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n const linkText = _this._elements.$mainNavLink[1].innerHTML;\r\n _this._elements.$mobileHeader.addClass(config.classNames.mainNavMobileHeaderVisible);\r\n _this._elements.$mainNavMobileIndicatorTitle.html(linkText);\r\n _this._elements.$mainNavMobileIndicator.addClass(config.classNames.indicatorVisible);\r\n _this._elements.$mobileOverlay.addClass(config.classNames.mobileOverlayActive) \r\n }\r\n })\r\n //ändern close ovlery by clicking at mobile cross\r\n $('.navigation__close-btn').on('click', function() {\r\n if(Breakpoints.isBreakpoint('xs') || Breakpoints.isBreakpoint('sm')) {\r\n if($('.overlay--language').hasClass('overlay--visible')) {\r\n _this._elements.$mainNavMobileIndicatorTitle.html(\"\");\r\n }\r\n \r\n $('.overlay--language').removeClass('overlay--visible');\r\n }\r\n })\r\n\r\n\r\n\r\n this._elements.$burger.on('click', function(e) {\r\n if(Breakpoints.isBreakpoint('xs') || Breakpoints.isBreakpoint('sm')) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n _this._openMobileNav();\r\n }\r\n });\r\n\r\n this._elements.$mainNavMobileClose.on('click', function(e) {\r\n if(Breakpoints.isBreakpoint('xs') || Breakpoints.isBreakpoint('sm')) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n _this._elements.$mainNav.css(\"overflow-y\", \"scroll\")\r\n _this._closeMobileNav();\r\n }\r\n });\r\n\r\n this._elements.$childContentMobileClose.on('click', function(e) {\r\n if(Breakpoints.isBreakpoint('xs') || Breakpoints.isBreakpoint('sm')) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n _this._elements.$mainNav.css(\"overflow-y\", \"scroll\")\r\n \r\n $(this).parent().removeClass(config.classNames.childContentActive);\r\n }\r\n });\r\n }\r\n\r\n _isDesktopNav() {\r\n return Breakpoints.isBreakpoint('md') || Breakpoints.isBreakpoint('mdlg') || Breakpoints.isBreakpoint('lg') || Breakpoints.isBreakpoint('xl') || Breakpoints.isBreakpoint('xxl');\r\n }\r\n\r\n _openDesktopNav($el) {\r\n if($el.data('child-id') === this._activeIndex) return;\r\n\r\n this._activeIndex = $el.data('child-id');\r\n this._lastScrollY = window.scrollY;\r\n //console.log('window y', window.scrollY);\r\n \r\n this._elements.$body.addClass(config.classNames.bodyNoScroll);\r\n this._elements.$body.css('top', `${-this._lastScrollY}px`);\r\n\r\n $el.addClass(config.classNames.mainItemActive);\r\n\r\n setTimeout(() => {\r\n $el.addClass(config.classNames.mainItemNonTransparent);\r\n }, 200);\r\n \r\n \r\n\r\n // remove scroll version \r\n $(config.selectors.root).removeClass(config.classNames.scrollUp);\r\n $(config.selectors.root).removeClass(config.classNames.scrollDown); \r\n }\r\n\r\n _closeDesktopNav() {\r\n //console.log('close desktop nav');\r\n\r\n //console.log('setIsOpened to ', false);\r\n this._elements.$body.removeClass(config.classNames.bodyNoScroll);\r\n this._elements.$mainItem.removeClass(config.classNames.mainItemNonTransparent);\r\n this._elements.$mainNavItemNoChilds.removeClass(config.classNames.mainItemNonTransparent);\r\n this._elements.$mainItem.removeClass(config.classNames.mainItemActive);\r\n this._elements.$mainNavItemNoChilds.removeClass(config.classNames.mainItemActive);\r\n \r\n this._elements.$body.css('top', '');\r\n if( this._lastScrollY != undefined) {\r\n window.scrollTo(0, this._lastScrollY); // fix scroll position after page was not scrollable\r\n this._lastScrollY = undefined\r\n }\r\n }\r\n\r\n _onDesktopSubnavSwitch() {\r\n // save height of prev submenu\r\n // get height of new submenu \r\n\r\n //make animation that adjust the height of parent b< content to use smooth animation\r\n }\r\n\r\n _openMobileNav() {\r\n this._elements.$mainNav.addClass(config.classNames.mainNavOpen);\r\n this._elements.$body.addClass(config.classNames.bodyNoScroll);\r\n this._elements.$html.addClass(config.classNames.bodyNoScroll);\r\n }\r\n\r\n _closeMobileNav() {\r\n this._elements.$mainNav.removeClass(config.classNames.mainNavOpen);\r\n this._elements.$body.removeClass(config.classNames.bodyNoScroll);\r\n this._elements.$html.removeClass(config.classNames.bodyNoScroll);\r\n }\r\n\r\n _scrollNav() {\r\n let prevScrollpos = window.pageYOffset;\r\n let currentScrollPos = window.pageYOffset;\r\n let offsetNavigation = 110;\r\n const _this = this\r\n\r\n $(window).on('scroll', (e) => {\r\n if(!Navigation.canChangeScrollBehavior) return;\r\n\r\n currentScrollPos = window.pageYOffset;\r\n _this._elements.$mobileHeader.addClass('scroll')\r\n\r\n if (currentScrollPos === 0) {\r\n _this._elements.$mobileHeader.removeClass('scroll')\r\n }\r\n\r\n const navi = $(config.selectors.root);\r\n \r\n if (currentScrollPos > prevScrollpos && currentScrollPos > offsetNavigation ) {\r\n // add scrolldown class and remove scrollup class, when currentscrollpos bigger then prevscrollpos\r\n\r\n navi.addClass(config.classNames.scrollDown);\r\n \r\n navi.removeClass(config.classNames.scrollUp);\r\n\r\n } else if (currentScrollPos < prevScrollpos ) {\r\n // remove scrolldown class and add scrollup class, when currentscrollpos smaller then prevscrollpos\r\n\r\n navi.removeClass(config.classNames.scrollDown);\r\n navi.addClass(config.classNames.scrollUp);\r\n } \r\n\r\n \r\n prevScrollpos = currentScrollPos;\r\n \r\n // if current scroll position at 0 remove class\r\n if (currentScrollPos === 0) {\r\n navi.removeClass(config.classNames.scrollUp)\r\n }\r\n });\r\n\r\n \r\n }\r\n\r\n __setDefaultActive() {\r\n if(Breakpoints.isBreakpoint('md') || Breakpoints.isBreakpoint('mdlg') || Breakpoints.isBreakpoint('lg') || Breakpoints.isBreakpoint('xl') || Breakpoints.isBreakpoint('xxl')) {\r\n //set nav child item default active\r\n this._elements.$childItem.each((i, el) => {\r\n if(i === 0) {\r\n $(el).addClass(config.classNames.childItemActive);\r\n }\r\n \r\n });\r\n //set nav child item content default active\r\n this._elements.$childContent.each((i, el) => {\r\n if(i === 0){\r\n $(el).addClass(config.classNames.childContentActive);\r\n $(el).css('height', '100%');\r\n }\r\n })\r\n }\r\n\r\n Breakpoints.onBreakpointChange(() => {\r\n if(Breakpoints.isBreakpoint('md') || Breakpoints.isBreakpoint('mdlg') || Breakpoints.isBreakpoint('lg') || Breakpoints.isBreakpoint('xl') || Breakpoints.isBreakpoint('xxl')) {\r\n //set nav child item default active\r\n this._elements.$childItem.each((i, el) => {\r\n if(i === 0) {\r\n $(el).addClass(config.classNames.childItemActive);\r\n }\r\n \r\n });\r\n //set nav child item content default active\r\n this._elements.$childContent.each((i, el) => {\r\n if(i === 0){\r\n $(el).addClass(config.classNames.childContentActive);\r\n $(el).css('height', '100%');\r\n }\r\n })\r\n } else if(Breakpoints.isBreakpoint('xs') || Breakpoints.isBreakpoint('sm')) {\r\n this._elements.$childItem.removeClass(config.classNames.childItemActive);\r\n this._elements.$childContent.removeClass(config.classNames.childContentActive);\r\n }\r\n })\r\n \r\n }\r\n\r\n __addsearchChilds() {\r\n \r\n if(Breakpoints.isBreakpoint('xs') || Breakpoints.isBreakpoint('sm')) {\r\n var searchContent = this._elements.$mobileSearchContent;\r\n\r\n if( document.querySelector('.navigation__mobile-search-content').childNodes.length <= 3 ) {\r\n var searchOverlayText = document.createElement('p');\r\n var searchIcon = document.createElement('i'); \r\n searchOverlayText.setAttribute('class', config.classNames.searchMobileText);\r\n searchContent[0].appendChild(searchOverlayText)\r\n searchIcon.setAttribute('class', config.classNames.searchMobileIcon);\r\n searchOverlayText.innerText = this._mobileSearchText;\r\n searchOverlayText.appendChild(searchIcon);\r\n \r\n $( \".search-bar__text-input\" ).on('input', (e) => {\r\n const inputVal = e.currentTarget.value;\r\n if (inputVal.length === 0) {\r\n $(searchOverlayText).css('opacity', '1')\r\n } else {\r\n $(searchOverlayText).css('opacity', '0')\r\n }\r\n })\r\n $('.search-bar__clear-search-icon').on('click', () => {\r\n $(searchOverlayText).css('opacity', '1')\r\n })\r\n }\r\n\r\n }\r\n \r\n }\r\n\r\n static updateCartNumber(basketCount) {\r\n\r\n if(!basketCount) return;\r\n \r\n let $countElt = basketCount.trim();\r\n $countElt = $countElt.substring(0, 2);\r\n\r\n if (basketCount.trim().length == 0) {\r\n // basket is empty. we check if there are already visible counts\r\n if ($(config.selectors.countWrapper).children().length > 0) {\r\n // we found them, so we just remove them and return\r\n $(config.selectors.countWrapper).html(\"\");\r\n $(config.selectors.mobileCountWrapper).html(\"\");\r\n }\r\n return;\r\n }\r\n\r\n // At this point, we do have a count, so we just update all places\r\n\r\n // First we check if there insnt already a count\r\n if ($(config.selectors.countWrapper).children().length == 0) {\r\n // we did not found any, so we first attach the element for desktop variant\r\n $(config.selectors.countWrapper).html(`${$countElt}`);\r\n // then we clone the elt, change the class of the elt & attach it for mobile\r\n $(config.selectors.mobileCountWrapper).html(`${$countElt}`);\r\n\r\n // We updated all places, so we just return\r\n return;\r\n }\r\n\r\n // We do already have elements, so we just swap the content with response value\r\n $(config.selectors.countWrapper + '> span').text($countElt);\r\n $(config.selectors.mobileCountInner + '> span').text($countElt);\r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('Navigation', Navigation);\r\nmoduleRegistry.autoApplyModule('Navigation', config.selectors.root);\r\n","import { Breakpoints } from '../breakpoints/breakpoints';\r\nimport moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.navigation-link-groups',\r\n linkGroupHeadline: '.navigation-link-groups__group-headline',\r\n },\r\n classNames: {\r\n linkGroupHeadlineActive: 'navigation-link-groups__group-headline--active',\r\n },\r\n};\r\n\r\n// this element is accordion, but we use a headline|content|headline|content markup because its a grid\r\n// we use .next() to determine the right content to toggle\r\nclass NavigationLinkGroups {\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n\r\n }\r\n\r\n init() {\r\n this._elements = this._getDomElements();\r\n this._addEventListeners();\r\n\r\n if (!Breakpoints.isBreakpoint('md') || !Breakpoints.isBreakpoint('mdlg')) {\r\n this._elements.$linkGroupHeadline.each((index, el) => {\r\n this._setActive($(el));\r\n });\r\n }\r\n\r\n this._addGridClasses();\r\n }\r\n\r\n _getDomElements() {\r\n return {\r\n $linkGroupHeadline: this._$rootElement.find(config.selectors.linkGroupHeadline),\r\n };\r\n }\r\n \r\n _setActive($headline) {\r\n const $content = $headline.next();\r\n\r\n if(Breakpoints.isBreakpoint('xs') || Breakpoints.isBreakpoint('sm') ){\r\n\r\n if ($content.height() !== 0) {\r\n $content.css('height', 0);\r\n $headline.removeClass(config.classNames.linkGroupHeadlineActive);\r\n \r\n } else {\r\n $content.css('height', `${$content[0].scrollHeight }px`);\r\n $headline.addClass(config.classNames.linkGroupHeadlineActive);\r\n }\r\n }\r\n \r\n }\r\n\r\n _addEventListeners() {\r\n const _this = this;\r\n this._elements.$linkGroupHeadline.on('click', function (e) {\r\n _this._setActive($(this));\r\n });\r\n\r\n window.addEventListener('resize', () => {\r\n if (!Breakpoints.isBreakpoint('md') || !Breakpoints.isBreakpoint('mdlg')) {\r\n this._elements.$linkGroupHeadline.each((index, el) => {\r\n this._setActive($(el));\r\n });\r\n }\r\n });\r\n }\r\n\r\n _addGridClasses() {\r\n const childCount = this._$rootElement.children().length / 2;\r\n // console.log('childCount', childCount);\r\n this._$rootElement.addClass('navigation-link-groups--' + childCount);\r\n\r\n let j = 1;\r\n\r\n this._$rootElement.children().each((i,child) => {\r\n const $child = $(child);\r\n\r\n // console.log('current', $child);\r\n \r\n if($child.hasClass('navigation-link-groups__group-headline')) {\r\n $child.addClass('navigation-link-groups__group-headline--' + j);\r\n } else {\r\n $child.addClass('navigation-link-groups__group-content--' + j);\r\n }\r\n\r\n if(i !== 0 && i % 2 !== 0) {\r\n j++;\r\n }\r\n });\r\n\r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('NavigationLinkGroups', NavigationLinkGroups);\r\nmoduleRegistry.autoApplyModule('NavigationLinkGroups', config.selectors.root);\r\n","import moduleRegistry from '../module-registry/module-registry';\n\nconst config = {\n selectors: {\n root: '.number-overview',\n itemEmployees: '.number-overview__item--0',\n itemSales: '.number-overview__item--1',\n allcounters: '.number-overview__item-content-number--counter',\n counterEmployees: '.number-overview__item-content-number-counter--0',\n counterSales: '.number-overview__item-content-number-counter--1',\n },\n classNames: {\n },\n dataAttributes: {\n startNumber: 'start',\n endNumber: 'end',\n rounded: 'rounded',\n thousandSeperator: 'thousand-seperator',\n decimalSeperator: 'decimal-seperator',\n }\n};\n\nclass NumberOverview {\n constructor($rootElement) {\n this._$rootElement = $rootElement;\n this._elements = null;\n this._started = false;\n this.initialized = false;\n }\n\n init() {\n this._elements = this._getDomElements();\n\n if (!this._started) {\n this._reveal();\n if (this._reveal()) {\n this._started = true;\n }\n } else {\n this._reset();\n if (this._reset()) {\n this._started = false\n }\n }\n \n this._scrollFunction();\n }\n\n _getDomElements() {\n return {\n $counterEmployees: this._$rootElement.find(config.selectors.counterEmployees),\n $counterSales: this._$rootElement.find(config.selectors.counterSales),\n $itemEmployees: this._$rootElement.find(config.selectors.itemEmployees),\n $itemSales: this._$rootElement.find(config.selectors.itemSales),\n $animatedItems: this._$rootElement.find('[data-start]'),\n };\n }\n\n _scrollFunction() {\n $(window).on('scroll', () => {\n if (!this._started) {\n this._reveal();\n } else {\n this._reset();\n }\n });\n }\n\n _reveal() {\n const elementTop = this._$rootElement.position().top;\n const elementVisible = 30;\n\n const viewportTop = $(window).scrollTop();\n const viewportBottom = viewportTop + $(window).height();\n const viewportMiddle = viewportTop + (viewportBottom - viewportTop) / 2;\n\n if (viewportMiddle > elementTop - elementVisible && viewportMiddle < elementTop + elementVisible * 20 ) {\n if(!this.initialized) {\n // hide skeleton, show content\n this._$rootElement.find('.ph-row').hide();\n this._elements.$animatedItems.find('span').css('opacity', '1');\n this.initialized = true;\n }\n\n this._elements.$animatedItems.each((i, el) => {\n const start = $(el).data(config.dataAttributes.startNumber);\n const end = $(el).data(config.dataAttributes.endNumber);\n const decimalSeperator = $(el).data(config.dataAttributes.decimalSeperator);\n const thousandSeperator = $(el).data(config.dataAttributes.thousandSeperator) || '';\n const counter = $(el).find('.number-overview__item-content-number')[0];\n \n if (decimalSeperator) {\n this._animateValueDecimal(counter, parseFloat(start).toFixed(2), parseFloat(end).toFixed(2), thousandSeperator, decimalSeperator);\n } else {\n this._animateValueWholeNumbers(counter, parseInt(start), parseInt(end), thousandSeperator);\n }\n });\n\n this._started = true;\n }\n }\n\n _reset() {\n const elementTop = this._$rootElement.position().top;\n const elementBotton = elementTop + (this._$rootElement[0].offsetHeight / 2);\n const elementVisibleTop = 700;\n\n if (window.scrollY < elementTop - elementVisibleTop || window.scrollY > elementBotton) {\n this._elements.$animatedItems.each((i, el) => {\n let targetContainer = $(el)[0].querySelector('.number-overview__item-content-number.odometer');\n let start = $(el).data(config.dataAttributes.startNumber);\n targetContainer.innerHTML = start;\n });\n this._started = false;\n }\n }\n\n _animateValueDecimal(el, start, end, thousandSeperator, decimalSeperator) {\n // if (start === end) return;\n // el.innerHTML = end;\n \n const range = (end - start);\n let current = Number(start);\n \n const stepTime = 20;\n const countDuration = 600;\n const steps = countDuration / stepTime;\n let increment = (range / steps);\n\n if(increment < 0.01) {\n increment = 0.01;\n }\n\n const timer = setInterval(function () {\n current = Number(current) + Number(increment);\n current = Number(parseFloat(current)).toFixed(2);\n\n if(current > end) {\n current = end;\n }\n\n const pastThousand = Math.floor(current / 1000) > 0 ? Math.floor(current / 1000) : '';\n const integerPortion = Math.floor(current) - pastThousand * 1000;\n\n let decimalPortion = Math.floor((current - Math.floor(current)) * 100);\n decimalPortion = decimalPortion === 0 ? '00' : decimalPortion;\n\n el.innerHTML = '' + pastThousand + thousandSeperator + integerPortion + decimalSeperator + decimalPortion;\n\n\n if (current == parseFloat(end)) {\n clearInterval(timer);\n }\n }, stepTime);\n }\n\n _animateValueWholeNumbers(el, start, end, thousandSeperator) {\n // if (start === end) return;\n // el.innerHTML = end;\n \n const range = end - start;\n let current = start;\n const stepTime = 20;\n const countDuration = 600;\n const steps = countDuration / stepTime;\n\n const increment = Math.floor(range / steps);\n\n const timer = setInterval(function () {\n if(current + increment > end) {\n current = end;\n } else {\n (current) += increment;\n }\n\n if(current >= 1000) {\n el.innerHTML = current.toString().substring(0, 1) + thousandSeperator + current.toString().substring(1);\n } else {\n el.innerHTML = + current.toString();\n // el.innerHTML = '0,' + current.toString();\n }\n\n if (current === end) {\n clearInterval(timer)\n }\n }, stepTime);\n\n \n }\n}\n\nmoduleRegistry.registerModule('NumberOverview', NumberOverview);\nmoduleRegistry.autoApplyModule('NumberOverview', config.selectors.root);\n","import moduleRegistry from '../module-registry/module-registry';\n\nconst config = {\n selectors: {\n root: '.one-trust-overlay',\n updateConsent: '.one-trust-overlay__update-consent',\n openCenter: '#cookie-center',\n },\n dataAttributes: {\n url: 'url',\n },\n classNames: {\n visible: 'one-trust-overlay--visible',\n clickable: 'one-trust-overlay--clickable',\n },\n};\n\nclass OneTrustOverlay {\n constructor($rootElement) {\n this._$rootElement = $rootElement;\n this._elements = null;\n }\n\n init() {\n this._elements = this._getDomElements();\n\n if(window.location.hostname === 'localhost') {\n this._$rootElement.removeClass(config.classNames.clickable); \n }\n\n window.addEventListener('OneTrustInit', () => {\n if(typeof OneTrust === 'object') {\n if (!OnetrustActiveGroups.split(',').includes('C0003')) {\n this._$rootElement.addClass(config.classNames.visible);\n this._$rootElement.addClass(config.classNames.clickable);\n } else {\n this._$rootElement.removeClass(config.classNames.visible);\n this._$rootElement.removeClass(config.classNames.clickable);\n }\n } else {\n if(window.location.hostname === 'localhost') {\n this._$rootElement.addClass(config.classNames.visible); \n }\n }\n });\n\n this._elements.$updateConsent.on('click', () => {\n if(window.location.hostname === 'localhost') {\n this._$rootElement.removeClass(config.classNames.visible);\n this._$rootElement.removeClass(config.classNames.clickable);\n window.dispatchEvent(new CustomEvent('LocationMapInit', { detail: {} }));\n window.dispatchEvent(new CustomEvent('InteractiveLauncherInit', { detail: {} }));\n } else if(typeof OneTrust === 'object') {\n if($('#onetrust-banner-sdk').length === 0) {\n $('body').append('
    ');\n }\n OneTrust.UpdateConsent(\"Category\",\"C0003:1\"); \n }\n });\n }\n\n _getDomElements() {\n return {\n $updateConsent: this._$rootElement.find(config.selectors.updateConsent),\n $openCenter: $(config.selectors.openCenter),\n };\n }\n}\n\nmoduleRegistry.registerModule('OneTrustOverlay', OneTrustOverlay);\nmoduleRegistry.autoApplyModule('OneTrustOverlay', config.selectors.root);","import moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.overlay-footer',\r\n shareCta: '.overlay-footer__share',\r\n tooltip: '.overlay-footer__tooltip',\r\n },\r\n classNames: {\r\n overlayTooltipVisible: 'overlay-footer__tooltip--visible',\r\n },\r\n};\r\n\r\nexport class OverlayFooter {\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n }\r\n\r\n init() {\r\n this._elements = this._getDomElements();\r\n this._addEventListeners();\r\n }\r\n\r\n _getDomElements() {\r\n return {\r\n $shareCta: this._$rootElement.find(config.selectors.shareCta),\r\n $tooltip: this._$rootElement.find(config.selectors.tooltip),\r\n };\r\n }\r\n\r\n _addEventListeners() {\r\n const _this = this;\r\n\r\n this._elements.$shareCta.on('click', () => {\r\n window.navigator.clipboard.writeText(this._elements.$shareCta[0].attributes.data.value);\r\n const $tooltip = $(_this._elements.$tooltip);\r\n $tooltip.height(64);\r\n setTimeout(function () {\r\n $tooltip.height(0);\r\n }, 2000);\r\n });\r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('OverlayFooter', OverlayFooter);\r\nmoduleRegistry.autoApplyModule('OverlayFooter', config.selectors.root);\r\n","import moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.paralax-section',\r\n },\r\n classNames: {\r\n inViewport: 'paralax-section--in-viewport'\r\n },\r\n dataAttributes: {\r\n smartedit: 'smartedit',\r\n },\r\n minPadding: 0,\r\n maxPadding: 130,\r\n translateTreshold: 0.2,\r\n maxTransitionDuration: 4,\r\n scrollDistanceTrigger: 1,\r\n};\r\n\r\nexport class ParalaxSection {\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n this._isTransformed = false;\r\n this._prevPadding = 0;\r\n this.padding = 0;\r\n }\r\n\r\n static _canTransform = true;\r\n\r\n\r\n init() {\r\n this._elements = this._getDomElements();\r\n\r\n const child = document.querySelectorAll(config.selectors.root);\r\n for (const paralaxElement of child) {\r\n const children = $(paralaxElement.children);\r\n let myDivObjBgColor = children.css(\"background-color\");\r\n\r\n if(children.hasClass('anchor-section')) {\r\n const subChildren = $(children.children());\r\n myDivObjBgColor = subChildren.css(\"background-color\");\r\n }\r\n\r\n if($(children[0]).hasClass('edit-area')) {\r\n const subChildren =$(children[1]);\r\n myDivObjBgColor = subChildren.css(\"background-color\");\r\n }\r\n \r\n const element = $(paralaxElement);\r\n element.css(\"background-color\", myDivObjBgColor);\r\n }\r\n\r\n const smartedit = $('body').data(config.dataAttributes.smartedit);\r\n // edit-area\r\n\r\n if(smartedit !== true && smartedit !== 'true') {\r\n this._addEventListeners();\r\n \r\n const elementTop = this._$rootElement.offset().top;\r\n const elementBottom = elementTop + this._$rootElement.outerHeight();\r\n const elementMiddle = elementTop + (elementBottom - elementTop) / 2;\r\n const elementHeight = elementBottom - elementTop;\r\n \r\n const viewportTop = $(window).scrollTop();\r\n const viewportBottom = viewportTop + $(window).height();\r\n const viewportMiddle = viewportTop + (viewportBottom - viewportTop) / 2;\r\n\r\n const difference = elementMiddle - viewportMiddle;\r\n\r\n const factor = (difference / (elementHeight / 2)) / 2;\r\n\r\n // initialization rules\r\n if(factor > 1) {\r\n // elements below viewport\r\n this._$rootElement.css('opacity', '0');\r\n this._$rootElement.css('padding-top', config.maxPadding);\r\n } else if(factor < -1) {\r\n // elements above viewport\r\n this._$rootElement.css('opacity', '1');\r\n this._$rootElement.css('padding-top', 0);\r\n } else {\r\n // elements in viewport\r\n this._$rootElement.css('opacity', '1');\r\n this._$rootElement.css('padding-top', 0);\r\n }\r\n }\r\n\r\n }\r\n\r\n _getDomElements() {\r\n return {\r\n\r\n }\r\n }\r\n\r\n _addEventListeners() {\r\n let prevViewportTop = $(window).scrollTop();\r\n let prevTimeStamp = new Date().getTime();\r\n \r\n $(window).on('scroll', (e) => {\r\n if (!ParalaxSection._canTransform) return;\r\n\r\n const timeStamp = new Date().getTime();\r\n const viewportTop = $(window).scrollTop();\r\n const difference = viewportTop - prevViewportTop;\r\n const positiveDifference = Math.sqrt(difference * difference);\r\n const scrollingDown = difference > 0;\r\n\r\n if (positiveDifference > config.scrollDistanceTrigger) {\r\n prevViewportTop = viewportTop;\r\n prevTimeStamp = timeStamp;\r\n this._adjustPadding(scrollingDown);\r\n }\r\n });\r\n }\r\n\r\n static setCanTransform(bool) {\r\n ParalaxSection._canTransform = bool;\r\n }\r\n\r\n _adjustPadding(scrollingDown) {\r\n const elementTop = this._$rootElement.offset().top;\r\n const elementBottom = elementTop + this._$rootElement.outerHeight();\r\n const elementMiddle = elementTop + (elementBottom - elementTop) / 2;\r\n const elementHeight = elementBottom - elementTop;\r\n\r\n const viewportTop = $(window).scrollTop();\r\n const viewportBottom = viewportTop + $(window).height();\r\n const viewportMiddle = viewportTop + (viewportBottom - viewportTop) / 2;\r\n\r\n const difference = elementMiddle - viewportBottom;\r\n\r\n // do nothing when element is not in viewport\r\n // if(Math.sqrt(difference * difference) > viewportBottom - viewportTop) return;\r\n\r\n // number indicating element position\r\n // x > 1: viewport above element\r\n // x = 1: element top at viewport bottom \r\n // x = 0: viewport middle === element middle \r\n // x = -1: element bottom at viewport top\r\n // x < -1: below element\r\n const factor = (difference / (elementHeight / 2));\r\n\r\n // handle opacity independant\r\n if(factor > 1) {\r\n this._$rootElement.css('opacity', '0');\r\n } else if(factor < -1) {\r\n this._$rootElement.css('opacity', '1');\r\n } else {\r\n this._$rootElement.css('opacity', '1');\r\n this._$rootElement.css('transition', `opacity 0.2s ease-in, padding ${this._calcTransitionDuration(0)}s ease`);\r\n }\r\n\r\n\r\n // 0.5 means element top or bottom is at viewport middle\r\n if( 1 > factor && factor > 0.5 && scrollingDown) {\r\n // coming from top\r\n // console.log('coming from top - shrink');\r\n const newFactor = (factor - 0.5) * 2;\r\n\r\n const padding = config.minPadding + config.maxPadding - (1 - newFactor) * (config.maxPadding);\r\n\r\n // console.log('calculated padding', padding);\r\n\r\n\r\n if(this.padding !== 0 && padding > this.padding) return;\r\n\r\n \r\n this._$rootElement.css('transition', `opacity 0.2s ease-in, padding ${this._calcTransitionDuration(padding)}s ease`);\r\n this._$rootElement.css('padding-top', padding);\r\n this.padding = padding;\r\n\r\n return;\r\n }\r\n\r\n if(!scrollingDown && 1 < factor && this.padding !== this.maxPadding) {\r\n this._$rootElement.css('padding-top', config.maxPadding);\r\n this.padding = config.maxPadding;\r\n }\r\n }\r\n\r\n _calcTransitionDuration(padding) {\r\n const difference = this._prevPadding - padding;\r\n const factor = difference / config.maxPadding;\r\n const positiveFactor = Math.sqrt(factor * factor);\r\n\r\n return positiveFactor * config.maxTransitionDuration;\r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('ParalaxSection', ParalaxSection);\r\nmoduleRegistry.autoApplyModule('ParalaxSection', config.selectors.root);\r\n","/* eslint-disable class-methods-use-this */\r\n/* eslint-disable import/prefer-default-export */\r\nimport { Breakpoints } from '../breakpoints/breakpoints';\r\nimport moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.search-bar',\r\n input: '.search-bar__text-input',\r\n fakeInput: '.search-bar__fake-input',\r\n overlay: '.search-bar__overlay',\r\n clearInput: '.search-bar__clear-search-icon',\r\n searchButton: '.search-bar__cta',\r\n suggestionList: '.search-bar__suggestion-list',\r\n errorMessage: '.search-bar__error-message',\r\n closeOverlay: '.search-bar__overlay-close-btn',\r\n overlayContainer: '.search-bar__overlay-container',\r\n overlayInfoWrapper: '.search-bar__overlay-info-wrapper',\r\n\r\n },\r\n classNames: {\r\n input: 'search-bar__text-input',\r\n fakeInputError: 'search-bar__fake-input--error',\r\n fakeInputFocus: 'search-bar__fake-input--focus',\r\n suggestionListItem: 'search-bar__suggestion-list-item',\r\n suggestionListItemLink: 'search-bar__suggestion-list-item-link',\r\n overlayContainer: 'search-bar__overlay-container--mobile-suggestions',\r\n },\r\n htmlElements: {\r\n highlightingOpeneningTag: '',\r\n highlightingClosingTag: '',\r\n },\r\n};\r\n\r\nexport class SearchBar {\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n this.isMobileOrTabletScreen = false;\r\n this.suggestions = [];\r\n }\r\n\r\n init() {\r\n this._elements = this._getDomElements();\r\n this._addEventListeners();\r\n this._inputValue = '';\r\n }\r\n\r\n _getDomElements() {\r\n return {\r\n $input: this._$rootElement.find(config.selectors.input),\r\n $fakeInput: this._$rootElement.find(config.selectors.fakeInput),\r\n $overlay: this._$rootElement.find(config.selectors.overlay),\r\n $clearInput: this._$rootElement.find(config.selectors.clearInput),\r\n $searchButton: this._$rootElement.find(config.selectors.searchButton),\r\n $suggestionList: this._$rootElement.find(config.selectors.suggestionList),\r\n $errorMessage: this._$rootElement.find(config.selectors.errorMessage),\r\n $closeOverlay: this._$rootElement.find(config.selectors.closeOverlay),\r\n $overlayContainer: this._$rootElement.find(config.selectors.overlayContainer),\r\n $overlayInfoWrapper: this._$rootElement.find(config.selectors.overlayInfoWrapper),\r\n };\r\n }\r\n\r\n _addEventListeners() {\r\n this._getScreenSize();\r\n this._showClearIconOnDesktopScreens();\r\n this._clearInput();\r\n this._searchButtonHandler();\r\n this._openOverlayOnTabletAndMobileScreens();\r\n this._closeOverlay();\r\n this._searchOnEnter();\r\n\r\n $(window).on('resize', () => {\r\n this._getScreenSize();\r\n });\r\n\r\n this._elements.$input.on('input', (e) => {\r\n this._inputValue = e.currentTarget.value;\r\n this._elements.$fakeInput.removeClass(config.classNames.fakeInputError);\r\n this._elements.$errorMessage.hide();\r\n\r\n if (this._inputValue.length > 2) {\r\n this._getSearchSuggestions(this._inputValue);\r\n } else if (this._inputValue.length === 0) {\r\n this._elements.$clearInput.hide();\r\n this._elements.$suggestionList.hide();\r\n } else {\r\n this._resetSuggestions();\r\n }\r\n });\r\n }\r\n\r\n _getScreenSize() {\r\n if (Breakpoints.isBreakpoint('xs') || Breakpoints.isBreakpoint('sm')) {\r\n this.isMobileOrTabletScreen = true;\r\n } else {\r\n this.isMobileOrTabletScreen = false;\r\n }\r\n }\r\n\r\n _showClearIconOnDesktopScreens() {\r\n this._elements.$input.on('input', () => {\r\n this._elements.$clearInput.show();\r\n });\r\n }\r\n\r\n _clearInput() {\r\n this._elements.$clearInput.on('click', () => {\r\n this._elements.$input.val('');\r\n this.suggestions = [];\r\n this._elements.$suggestionList.hide();\r\n this._elements.$suggestionList.html('');\r\n this._elements.$overlayInfoWrapper.show();\r\n this._elements.$overlayContainer.removeClass(config.classNames.overlayContainer);\r\n\r\n if (!this.isMobileOrTabletScreen) {\r\n this._elements.$clearInput.hide();\r\n }\r\n\r\n this._elements.$input.focus();\r\n });\r\n }\r\n\r\n _openOverlayOnTabletAndMobileScreens() {\r\n this._elements.$input.on('click', () => {\r\n if (this.isMobileOrTabletScreen) {\r\n this._elements.$overlay.show(250);\r\n this._elements.$input.focus();\r\n this._elements.$overlayContainer.addClass(config.classNames.overlayContainer);\r\n setTimeout(() => {\r\n this._elements.$clearInput.show();\r\n }, 250);\r\n } else {\r\n this._elements.$fakeInput.addClass(config.classNames.fakeInputFocus);\r\n }\r\n });\r\n\r\n this._elements.$input.focusout(() => {\r\n this._elements.$fakeInput.removeClass(config.classNames.fakeInputFocus);\r\n });\r\n }\r\n\r\n _closeOverlay() {\r\n this._elements.$closeOverlay.on('click', () => {\r\n this._elements.$overlay.hide(250);\r\n\r\n if (this.isMobileOrTabletScreen) {\r\n this._elements.$clearInput.hide();\r\n this._resetSuggestions();\r\n this._elements.$input.val('');\r\n }\r\n });\r\n }\r\n\r\n async _getSearchSuggestions(searchVal) {\r\n const suggestionsAPIUrl = `${this._$rootElement[0].getAttribute('data-suggestions')}?term=${searchVal}`;\r\n\r\n try {\r\n const filteredList = await this._getData(suggestionsAPIUrl);\r\n\r\n this._resetSuggestions();\r\n\r\n const formattedFilteredList = (typeof (filteredList) === 'string') ? JSON.parse(filteredList) : filteredList;\r\n\r\n if (formattedFilteredList.length === 0) {\r\n // TODO - ? Error message - no entries found ?\r\n } else {\r\n this.suggestions = formattedFilteredList;\r\n this._highlightingSuggestions(searchVal);\r\n }\r\n } catch (err) {\r\n // console.log(err);\r\n }\r\n }\r\n\r\n _resetSuggestions() {\r\n this.suggestions = [];\r\n this._elements.$suggestionList.html('');\r\n this._elements.$suggestionList.hide();\r\n }\r\n\r\n _getData(url) {\r\n return $.ajax({\r\n url,\r\n type: 'GET',\r\n });\r\n }\r\n\r\n _highlightingSuggestions(searchVal) {\r\n const { suggestions } = this;\r\n let startIndex = null;\r\n let endIndex = null;\r\n const manipulatedStrings = [];\r\n\r\n suggestions.forEach((item) => {\r\n const lowercasedResultString = item.value.toLowerCase();\r\n const loweredCaseSearchVal = searchVal.toLowerCase();\r\n\r\n if (lowercasedResultString.indexOf(loweredCaseSearchVal) > -1) {\r\n const searchValLength = searchVal.length;\r\n startIndex = lowercasedResultString.indexOf(loweredCaseSearchVal);\r\n endIndex = startIndex + searchValLength;\r\n // eslint-disable-next-line max-len\r\n manipulatedStrings.push(this._createSuggestionItem(this._manipulateString(startIndex, endIndex, item.value), item.value));\r\n }\r\n });\r\n if (manipulatedStrings.length === 0) {\r\n this._elements.$errorMessage.show();\r\n this._elements.$fakeInput.addClass(config.classNames.fakeInputError);\r\n } else {\r\n this._elements.$suggestionList.append(manipulatedStrings.join(''));\r\n this._elements.$overlayInfoWrapper.hide();\r\n $('.search-bar__suggestions').show();\r\n this._elements.$suggestionList.show();\r\n }\r\n }\r\n\r\n _createSuggestionItem(string, value) {\r\n return `\r\n
  • \r\n \r\n ${string}\r\n \r\n
  • \r\n `;\r\n }\r\n\r\n _manipulateString(startIndex, endIndex, string) {\r\n return `${string.slice(startIndex - startIndex, startIndex)}${config.htmlElements.highlightingOpeneningTag}${string.slice(startIndex, endIndex)}${config.htmlElements.highlightingClosingTag}${string.slice(endIndex)}`;\r\n }\r\n\r\n // TODO add error message if no results found\r\n\r\n _searchButtonHandler() {\r\n this._elements.$searchButton.on('click', () => {\r\n window.open(`${this._$rootElement[0].getAttribute('data-search')}?keyword=${this._inputValue}&action=search&search_mode=website`, '_self');\r\n this._elements.$errorMessage.hide();\r\n this._elements.$fakeInput.removeClass(config.classNames.fakeInputError);\r\n });\r\n }\r\n\r\n _searchOnEnter() {\r\n this._elements.$input[0].addEventListener('keypress', (event) => {\r\n if (event.key === 'Enter') {\r\n event.preventDefault();\r\n this._elements.$searchButton.click();\r\n }\r\n });\r\n }\r\n\r\n _showHideErrorMessage() {\r\n if (this.suggestions.length === 0) {\r\n this._elements.$errorMessage.show();\r\n this._elements.$fakeInput.addClass(config.classNames.fakeInputError);\r\n } else {\r\n this._elements.$errorMessage.hide();\r\n this._elements.$fakeInput.removeClass(config.classNames.fakeInputError);\r\n }\r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('SearchBar', SearchBar);\r\nmoduleRegistry.autoApplyModule('SearchBar', config.selectors.root);\r\n","import moduleRegistry from '../module-registry/module-registry';\n\nconst config = {\n openCloseDelayMs: 20,\n selectors: {\n share: '.share',\n shareHead: '.share__head',\n shareLinks: '.share__links',\n shareWrapper: '.share__wrapper',\n },\n classNames: {\n shareWrapperActive: 'share__wrapper--active',\n shareHeadActive: 'share__head--active',\n shareLinksActive: 'share__links--active',\n },\n};\n\nclass Share {\n constructor($rootElement) {\n this._$rootElement = $rootElement;\n this._elements = null;\n this._isVisible = false;\n }\n\n init() {\n this._elements = this._getDomElements();\n this._addEventListeners();\n\n this._initShariff();\n }\n\n async _initShariff() {\n // fetch data\n const finishedSplittedUrl = this._extractIsoAndLanguageFromUrl();\n let data;\n\n if(window.location.hostname === 'localhost') {\n data = await $.get('/assets/shariff.json'); \n } else {\n try {\n data = await $.get( `/${finishedSplittedUrl.isoCode}/${finishedSplittedUrl.languageSelected}/shariff.json`);\n } catch (error) {\n data = \n [\n {\n \"icon\": \"mail\",\n \"country\": \"\"\n },\n {\n \"icon\": \"twitter\",\n \"country\": \"\"\n },\n {\n \"icon\": \"facebook\",\n \"country\": \"\"\n },\n {\n \"icon\": \"linkedin\",\n \"country\": \"\"\n },\n {\n \"icon\": \"whatsapp\",\n \"country\": \"\"\n },\n {\n \"icon\": \"xing\",\n \"country\": \"\"\n }\n ];\n }\n }\n\n const services = [];\n\n data.forEach(element => {\n if(element.country === '') {\n services.push(element.icon);\n return;\n }\n\n const isos = element.country.split(';');\n\n if(isos.includes(finishedSplittedUrl.isoCode.toUpperCase())) {\n services.push(element.icon);\n }\n \n });\n\n const lang = this._elements.$shareLinks.data('lang');\n\n // init shariff\n new Shariff(this._elements.$shareLinks, {\n services: services,\n orientation: 'vertical',\n theme: 'white',\n mailUrl: 'mailto:',\n lang: lang,\n });\n }\n\n /**\n * Returns an object contain the required\n * DOM elements as jQuery objects\n * @returns {object} - An object contain the DOM elements\n */\n _getDomElements() {\n const elements = {\n $shareHeads: this._$rootElement.find(config.selectors.shareHead),\n $shareLinks: this._$rootElement.find(config.selectors.shareLinks),\n $shareWrapper: this._$rootElement.find(config.selectors.shareWrapper),\n };\n\n return elements;\n }\n\n _show() {\n this._elements.$shareLinks.addClass(config.classNames.shareLinksActive);\n this._elements.$shareHeads.addClass(config.classNames.shareHeadActive);\n this._elements.$shareWrapper.addClass(config.classNames.shareWrapperActive);\n }\n\n _hide() {\n this._elements.$shareLinks.removeClass(config.classNames.shareLinksActive);\n this._elements.$shareHeads.removeClass(config.classNames.shareHeadActive);\n this._elements.$shareWrapper.removeClass(config.classNames.shareWrapperActive);\n }\n\n _extractIsoAndLanguageFromUrl() {\n const currentUrl = window.location.pathname;\n const splittedUrl = currentUrl.split('/')\n const splittedIsoCode = splittedUrl[1]\n const splittedLanguage = splittedUrl[2]\n return {\n isoCode: splittedIsoCode,\n languageSelected: splittedLanguage\n }\n }\n\n _addEventListeners() {\n this._elements.$shareHeads.click((e) => {\n e.stopPropagation();\n\n if (!this._isVisible) {\n this._show();\n } else {\n this._hide();\n }\n\n this._isVisible = !this._isVisible;\n });\n\n this._elements.$shareHeads.on('keydown', (e) => {\n if (e.keyCode !== 13) return;\n\n e.stopPropagation();\n\n if (!this._isVisible) {\n this._show();\n } else {\n this._hide();\n }\n\n this._isVisible = !this._isVisible;\n });\n\n this._elements.$shareWrapper.click((e) => {\n e.stopPropagation();\n });\n\n $(document).click(() => {\n this._hide();\n this._isVisible = false;\n });\n }\n}\n\nmoduleRegistry.registerModule('Share', Share);\nmoduleRegistry.autoApplyModule('Share', config.selectors.share);\n","import moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.slim-hero__video',\r\n video: '.video-js',\r\n playPauseBtn: '.slim-hero__play-pause-btn',\r\n playPauseBtnIcon: '.slim-hero__play-pause-btn-icon',\r\n videoWrapper: '.slim-hero__video-wrapper',\r\n imageWrapper: '.slim-hero__image-wrapper',\r\n },\r\n classNames: {\r\n playIcon: 'slim-hero__play-pause-btn-icon--play',\r\n pauseIcon: 'slim-hero__play-pause-btn-icon--pause',\r\n },\r\n dataAttributes: {\r\n autoplay: 'autoplay',\r\n },\r\n pauseIconCircle: '\"Play',\r\n pauseIconCircleWhite: '\"Play',\r\n playIconPaths: '',\r\n};\r\n\r\nclass SlimHero {\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n }\r\n\r\n init() {\r\n this._elements = this._getDomElements();\r\n\r\n if(this._elements.$video.length === 0) {\r\n this._elements.$playPauseBtn.hide();\r\n }\r\n\r\n this._addEventListeners();\r\n this._screenClick();\r\n this._elements.$playPauseBtnIcon.addClass(config.classNames.playIcon);\r\n this._autoPlayVideo();\r\n }\r\n\r\n _getDomElements() {\r\n return {\r\n $video: this._$rootElement.find(config.selectors.video),\r\n $playPauseBtn: this._$rootElement.find(config.selectors.playPauseBtn),\r\n $playPauseBtnIcon: this._$rootElement.find(config.selectors.playPauseBtnIcon),\r\n $videoWrapper: this._$rootElement.find(config.selectors.videoWrapper),\r\n $imageWrapper: this._$rootElement.find(config.selectors.imageWrapper),\r\n };\r\n }\r\n\r\n _addEventListeners() {\r\n this._elements.$playPauseBtn.on('click', () => {\r\n this._playPauseHandler();\r\n });\r\n }\r\n\r\n // eslint-disable-next-line class-methods-use-this\r\n _autoPlayVideo() {\r\n if (this._elements.$video.data(config.dataAttributes.autoplay)) {\r\n this._muteVideo();\r\n this._playPauseHandler();\r\n }\r\n }\r\n\r\n _muteVideo() {\r\n const videoSettings = this._elements.$video[0];\r\n videoSettings.player.muted(true);\r\n }\r\n\r\n _playPauseHandler() {\r\n const videoSettings = this._elements.$video[0];\r\n if (videoSettings.player.paused()) {\r\n this._elements.$imageWrapper.hide();\r\n this._elements.$videoWrapper.show();\r\n videoSettings.player.play();\r\n this._elements.$playPauseBtnIcon.removeClass(config.classNames.playIcon);\r\n this._elements.$playPauseBtnIcon.addClass(config.classNames.pauseIcon);\r\n } else {\r\n videoSettings.player.pause();\r\n this._elements.$playPauseBtnIcon.addClass(config.classNames.playIcon);\r\n this._elements.$playPauseBtnIcon.removeClass(config.classNames.pauseIcon);\r\n // this._elements.$playPauseBtnIcon.addClass(config.classNames.playIcon);\r\n // this._elements.$playPauseBtnIcon.html(config.playIconPaths);\r\n }\r\n }\r\n\r\n _screenClick() {\r\n const videoSettings = this._elements.$video[0];\r\n\r\n this._elements.$video.on('click', (e) => {\r\n e.preventDefault();\r\n if (videoSettings.player.paused()) {\r\n this._elements.$imageWrapper.hide();\r\n this._elements.$videoWrapper.show();\r\n videoSettings.player.play();\r\n this._elements.$playPauseBtnIcon.removeClass(config.classNames.playIcon);\r\n this._elements.$playPauseBtnIcon.addClass(config.classNames.pauseIcon);\r\n } else {\r\n videoSettings.player.pause();\r\n this._elements.$playPauseBtnIcon.addClass(config.classNames.playIcon);\r\n this._elements.$playPauseBtnIcon.removeClass(config.classNames.pauseIcon);\r\n }\r\n });\r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('SlimHero', SlimHero);\r\nmoduleRegistry.autoApplyModule('SlimHero', config.selectors.root);\r\n","import moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.speciality-hero__video',\r\n video: '.video-js',\r\n playPauseBtn: '.speciality-hero__play-pause-btn',\r\n playPauseBtnIcon: '.speciality-hero__play-pause-btn-icon',\r\n videoWrapper: '.speciality-hero__video-wrapper',\r\n imageWrapper: '.speciality-hero__visual',\r\n videoTextblock: '.speciality-hero__textblock'\r\n },\r\n classNames: {\r\n playIcon: 'speciality-hero__play-pause-btn-icon--play',\r\n pauseIcon: 'speciality-hero__play-pause-btn-icon--pause',\r\n hiddenControls: 'speciality-hero__textblock--hidden-control'\r\n },\r\n dataAttributes: {\r\n autoplay: 'autoplay',\r\n },\r\n pauseIconCircle: '\"Play',\r\n pauseIconCircleWhite: '\"Play',\r\n playIconPaths: '',\r\n};\r\n\r\nclass SpecialityHero {\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n this._videoVisible = false;\r\n }\r\n\r\n init() {\r\n this._elements = this._getDomElements();\r\n\r\n if(this._elements.$video.length === 0) {\r\n this._elements.$playPauseBtn.hide(); \r\n }\r\n\r\n this._addEventListeners();\r\n this._screenClick();\r\n this._elements.$playPauseBtnIcon.addClass(config.classNames.playIcon);\r\n this._autoPlayVideo();\r\n this._hidePlayPauseBtn();\r\n }\r\n\r\n _getDomElements() {\r\n return {\r\n $video: this._$rootElement.find(config.selectors.video),\r\n $playPauseBtn: this._$rootElement.find(config.selectors.playPauseBtn),\r\n $playPauseBtnIcon: this._$rootElement.find(config.selectors.playPauseBtnIcon),\r\n $videoWrapper: this._$rootElement.find(config.selectors.videoWrapper),\r\n $imageWrapper: this._$rootElement.find(config.selectors.imageWrapper),\r\n };\r\n }\r\n\r\n _addEventListeners() {\r\n const videoSettings = this._elements.$video[0];\r\n const _this = this;\r\n \r\n this._elements.$playPauseBtn.on('click', () => {\r\n this._playPauseHandler();\r\n });\r\n\r\n // only show video if it can be played, else stay on image\r\n if(videoSettings && videoSettings.player) {\r\n videoSettings.player.on(\"play\", function () {\r\n if(!_this._videoVisible) {\r\n _this._elements.$imageWrapper.hide();\r\n _this._elements.$videoWrapper.show();\r\n _this._videoVisible = true;\r\n }\r\n });\r\n }\r\n \r\n }\r\n\r\n // eslint-disable-next-line class-methods-use-this\r\n _autoPlayVideo() {\r\n const videoSettings = this._elements.$video[0];\r\n if (this._elements.$video.data(config.dataAttributes.autoplay)) {\r\n this._muteVideo();\r\n this._playPauseHandler();\r\n videoSettings.player.on(\"ended\", function () {\r\n //loop if video ended\r\n videoSettings.player.play();\r\n });\r\n }\r\n }\r\n\r\n _muteVideo() {\r\n const videoSettings = this._elements.$video[0];\r\n videoSettings.player.muted(true);\r\n }\r\n\r\n _playPauseHandler() {\r\n const videoSettings = this._elements.$video[0];\r\n\r\n if (videoSettings.player.paused()) {\r\n videoSettings.player.play();\r\n\r\n this._elements.$playPauseBtnIcon.removeClass(config.classNames.playIcon);\r\n this._elements.$playPauseBtnIcon.addClass(config.classNames.pauseIcon);\r\n } else {\r\n videoSettings.player.pause();\r\n this._elements.$playPauseBtnIcon.addClass(config.classNames.playIcon);\r\n this._elements.$playPauseBtnIcon.removeClass(config.classNames.pauseIcon);\r\n }\r\n }\r\n\r\n _screenClick() {\r\n const videoSettings = this._elements.$video[0];\r\n\r\n this._elements.$video.on('click', (e) => {\r\n e.preventDefault();\r\n if (videoSettings.player.paused()) {\r\n videoSettings.player.play();\r\n\r\n this._elements.$playPauseBtnIcon.removeClass(config.classNames.playIcon);\r\n this._elements.$playPauseBtnIcon.addClass(config.classNames.pauseIcon);\r\n } else {\r\n videoSettings.player.pause();\r\n this._elements.$playPauseBtnIcon.addClass(config.classNames.playIcon);\r\n this._elements.$playPauseBtnIcon.removeClass(config.classNames.pauseIcon);\r\n }\r\n });\r\n }\r\n\r\n _hidePlayPauseBtn() {\r\n const videoElements = $(this._elements.$video)\r\n for (let index = 0; index < videoElements.length; index++) {\r\n const videoElement = videoElements[index];\r\n \r\n if($(videoElement).data(config.dataAttributes.autoplay)) {\r\n $(videoElement).closest(config.selectors.root).find(config.selectors.videoTextblock).addClass(config.classNames.hiddenControls)\r\n }else {\r\n $(videoElement).closest(config.selectors.root).find(config.selectors.videoTextblock).removeClass(config.classNames.hiddenControls)\r\n }\r\n }\r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('SpecialityHero', SpecialityHero);\r\nmoduleRegistry.autoApplyModule('SpecialityHero', config.selectors.root);\r\n","import moduleRegistry from '../module-registry/module-registry';\r\n\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.sticky-section',\r\n stickyBar: '.sticky-section__bar',\r\n stickyBarItems: '.sticky-section__bar-items',\r\n stickyBarItem: '.sticky-section__bar-item',\r\n stickySectionContent: '.sticky-section__content',\r\n stickySectionContentWrapper: '.sticky-section__content-wrapper',\r\n stickyBarItemsWrapper: '.sticky-section__bar-items-wrapper',\r\n arrowLeft: '.sticky-section__bar-arrow-left',\r\n arrowRight: '.sticky-section__bar-arrow-right'\r\n },\r\n classNames: {\r\n stickyBarItemActive: 'sticky-section__bar-item--active',\r\n stickySectionContentVisible: 'sticky-section__content--visible',\r\n stickySectionBarSticky: 'sticky-section__bar--sticky',\r\n stickyBarUp: 'sticky-section__bar--up',\r\n stickyBarDown: 'sticky-section__bar--down',\r\n stickyBarTransition: 'sticky-section__bar--transition',\r\n arrowLeftVisible: 'sticky-section__bar-arrow-left--visible',\r\n arrowRightVisible: 'sticky-section__bar-arrow-right--visible',\r\n stickyBarItemsWrapperRight: 'sticky-section__bar-items-wrapper--right',\r\n\r\n },\r\n dataAttributes: {\r\n stickySectionId: 'sticky-section-id',\r\n smartedit: 'smartedit',\r\n }\r\n};\r\n\r\nexport class StickySection {\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n this._initialStickyBarTop = 0;\r\n this._canChangeState = true;\r\n this._lastWindowTop = 0;\r\n this._isSticky = false;\r\n this._enabledArrows = false;\r\n this._currentIndex = 0;\r\n this._currentTranslateX = 0;\r\n this._touchStart = 0;\r\n this._delta = 0;\r\n }\r\n\r\n static _canBecomeSticky = true;\r\n\r\n init() {\r\n this._elements = this._getDomElements();\r\n this._elements.$stickyBarItems.html(this._createStickyBarItemHtml());\r\n\r\n const smartedit = $('body').data(config.dataAttributes.smartedit);\r\n\r\n if(smartedit === true || smartedit === 'true') {\r\n StickySection._canBecomeSticky = false;\r\n }\r\n\r\n // append dynamic content to elements\r\n this._elements.$stickyBarItem = this._$rootElement.find(config.selectors.stickyBarItem);\r\n\r\n this._initialStickyBarTop = this._elements.$stickyBar.offset().top;\r\n this._lastWindowTop = $(window).scrollTop();\r\n this._addEventListeners();\r\n this.checkSticky();\r\n\r\n // this._elements.$stickySectionContent.each((i,item) => {\r\n // const $item = $(item);\r\n\r\n // if(i !== 0) {\r\n // $item.height(0);\r\n // }\r\n // });\r\n\r\n if(this._elements.$stickyBarItems.width()+30 > $( document).width() || this._elements.$stickyBarItems.width() > 1270) {\r\n this._enableArrows();\r\n this._enabledArrows = true;\r\n }\r\n\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const section = urlParams.get('section');\r\n const _this = this;\r\n\r\n if(section) {\r\n _this._elements.$stickyBarItem.removeClass(config.classNames.stickyBarItemActive);\r\n _this._elements.$stickySectionContent.removeClass(config.classNames.stickySectionContentVisible);\r\n\r\n if(!_this._$rootElement.hasClass('sticky-section--was-clicked')) {\r\n _this._$rootElement.addClass('sticky-section--was-clicked');\r\n }\r\n\r\n const $section = _this._$rootElement.find(`.sticky-section__content[data-sticky-section-id=\"${section}\"]`);\r\n const $item = _this._$rootElement.find(`.sticky-section__bar-item[data-sticky-section-id=\"${section}\"]`);\r\n const child = _this._findFirstColoredChild($section[0]);\r\n\r\n $item.addClass(config.classNames.stickyBarItemActive);\r\n\r\n \r\n\r\n if(smartedit !== true && smartedit !== 'true') {\r\n _this._elements.$stickySectionContentWrapper.css('background-color', $(child).css('background-color'));\r\n }\r\n \r\n let number = 0;\r\n\r\n if(_this._enabledArrows) {\r\n let index = 0;\r\n _this._elements.$stickyBar.find(config.selectors.stickyBarItem).each((i, el) => {\r\n if(el === $item[0]) {\r\n index = i;\r\n }\r\n\r\n if(index === 0) {\r\n if(i === 0) {\r\n number += $(el).width()+ 19.95;\r\n } else {\r\n number += $(el).width() + 19.95;\r\n } \r\n }\r\n });\r\n\r\n // special cases\r\n if(index === 0) {\r\n const containerWidth = _this._$rootElement.find('.sticky-section__bar-container').width();\r\n const max = _this._elements.$stickyBarItems.width() - containerWidth;\r\n\r\n _this._elements.$stickyBarItemsWrapper.css(\"transform\", \"translate(\"+ (max) +\"px)\");\r\n _this._currentTranslateX = max;\r\n } else if(index === _this._elements.$stickyBar.find(config.selectors.stickyBarItem).length - 1) {\r\n _this._elements.$stickyBarItemsWrapper.css(\"transform\", \"translate(\"+ (0) +\"px)\");\r\n _this._currentTranslateX = 0;\r\n } else {\r\n // default case\r\n const containerWidth = _this._$rootElement.find('.sticky-section__bar-container').width();\r\n const max = _this._elements.$stickyBarItems.width() - containerWidth;\r\n number = _this._elements.$stickyBarItemsWrapper.width() - number - containerWidth;\r\n number += 30;\r\n const activeElementWidth = $(_this._elements.$stickyBar.find(config.selectors.stickyBarItem)[index]).width() + 19.95;\r\n const previousElementWidth = $(_this._elements.$stickyBar.find(config.selectors.stickyBarItem)[index-1]).width() + 19.95;\r\n\r\n if(containerWidth > activeElementWidth + previousElementWidth) {\r\n number += previousElementWidth;\r\n }\r\n\r\n if(number > max) {\r\n number = max;\r\n }\r\n \r\n if(number < 0) {\r\n _this._elements.$stickyBarItemsWrapper.css(\"transform\", \"translate(\"+ (0) +\"px)\");\r\n _this._currentTranslateX = 0;\r\n } else {\r\n _this._elements.$stickyBarItemsWrapper.css(\"transform\", \"translate(\"+ (number) +\"px)\");\r\n _this._currentTranslateX = number;\r\n }\r\n }\r\n\r\n _this._updateArrows();\r\n }\r\n \r\n \r\n\r\n setTimeout(() => {\r\n _this._elements.$stickySectionContent.height(0);\r\n $section.height($section[0].scrollHeight);\r\n \r\n if(!(smartedit === true || smartedit === 'true')) {\r\n window.scrollTo({\r\n top: $item.closest('.sticky-section')[0].offsetTop - $item.closest('.sticky-section__bar')[0].getBoundingClientRect().height + 150,\r\n left: 0,\r\n behavior: \"smooth\",\r\n });\r\n }\r\n\r\n _this._becomeSticky();\r\n\r\n setTimeout(() => {\r\n $section.addClass(config.classNames.stickySectionContentVisible);\r\n }, 5);\r\n }, 650); \r\n }\r\n\r\n }\r\n\r\n _getDomElements() {\r\n return {\r\n $stickyBar: this._$rootElement.find(config.selectors.stickyBar),\r\n $stickyBarItems: this._$rootElement.find(config.selectors.stickyBarItems),\r\n $stickyBarItem: null,\r\n $stickySectionContent: this._$rootElement.find(config.selectors.stickySectionContent), \r\n $stickySectionContentWrapper: this._$rootElement.find(config.selectors.stickySectionContentWrapper), \r\n $stickyBarItemsWrapper: this._$rootElement.find(config.selectors.stickyBarItemsWrapper), \r\n $arrowLeft: this._$rootElement.find(config.selectors.arrowLeft), \r\n $arrowRight: this._$rootElement.find(config.selectors.arrowRight), \r\n };\r\n }\r\n\r\n _addEventListeners() {\r\n const _this = this;\r\n\r\n _this._elements.$arrowLeft.on('click', () => {\r\n _this._onLeftArrowClick();\r\n });\r\n\r\n _this._elements.$arrowRight.on('click', () => {\r\n _this._onRightArrowClick();\r\n });\r\n\r\n _this._elements.$stickyBar.find(config.selectors.stickyBarItem).on('click', function () {\r\n const smartedit = $('body').data(config.dataAttributes.smartedit);\r\n\r\n if(!_this._$rootElement.hasClass('sticky-section--was-clicked')) {\r\n _this._$rootElement.addClass('sticky-section--was-clicked');\r\n const el = _this._elements.$stickySectionContent[0];\r\n $(el).height(el.scrollHeight);\r\n }\r\n \r\n const $el = $(this);\r\n const id = $el.data(config.dataAttributes.stickySectionId);\r\n\r\n _this._updateUrl(id);\r\n\r\n\r\n if(!(smartedit === true || smartedit === 'true')) {\r\n window.scrollTo({\r\n top: $el.closest('.sticky-section')[0].offsetTop - $el.closest('.sticky-section__bar')[0].getBoundingClientRect().height,\r\n left: 0,\r\n behavior: \"smooth\",\r\n });\r\n }\r\n \r\n \r\n _this._elements.$stickyBarItem.removeClass(config.classNames.stickyBarItemActive);\r\n $el.addClass(config.classNames.stickyBarItemActive);\r\n\r\n _this._elements.$stickySectionContent.removeClass(config.classNames.stickySectionContentVisible);\r\n\r\n const $section = _this._$rootElement.find(`.sticky-section__content[data-sticky-section-id=\"${id}\"]`);\r\n\r\n const child = _this._findFirstColoredChild($section[0]);\r\n\r\n if(smartedit !== true && smartedit !== 'true') {\r\n _this._elements.$stickySectionContentWrapper.css('background-color', $(child).css('background-color'));\r\n }\r\n \r\n let number = 0;\r\n\r\n if(_this._enabledArrows) {\r\n let index = 0;\r\n _this._elements.$stickyBar.find(config.selectors.stickyBarItem).each((i, el) => {\r\n if(el === this) {\r\n index = i;\r\n }\r\n\r\n if(index === 0) {\r\n if(i === 0) {\r\n number += $(el).width()+ 19.95;\r\n } else {\r\n number += $(el).width() + 19.95;\r\n } \r\n }\r\n });\r\n\r\n // special cases\r\n if(index === 0) {\r\n const containerWidth = _this._$rootElement.find('.sticky-section__bar-container').width();\r\n const max = _this._elements.$stickyBarItems.width() - containerWidth;\r\n\r\n _this._elements.$stickyBarItemsWrapper.css(\"transform\", \"translate(\"+ (max) +\"px)\");\r\n _this._currentTranslateX = max;\r\n \r\n } else if(index === _this._elements.$stickyBar.find(config.selectors.stickyBarItem).length - 1) {\r\n _this._elements.$stickyBarItemsWrapper.css(\"transform\", \"translate(\"+ (0) +\"px)\");\r\n _this._currentTranslateX = 0;\r\n } else {\r\n // default case\r\n const containerWidth = _this._$rootElement.find('.sticky-section__bar-container').width();\r\n const max = _this._elements.$stickyBarItems.width() - containerWidth;\r\n number = _this._elements.$stickyBarItemsWrapper.width() - number - containerWidth;\r\n number += 30;\r\n const activeElementWidth = $(_this._elements.$stickyBar.find(config.selectors.stickyBarItem)[index]).width() + 19.95;\r\n const previousElementWidth = $(_this._elements.$stickyBar.find(config.selectors.stickyBarItem)[index-1]).width() + 19.95;\r\n\r\n if(containerWidth > activeElementWidth + previousElementWidth) {\r\n number += previousElementWidth;\r\n }\r\n\r\n if(number > max) {\r\n number = max;\r\n }\r\n \r\n if(number < 0) {\r\n _this._elements.$stickyBarItemsWrapper.css(\"transform\", \"translate(\"+ (0) +\"px)\");\r\n _this._currentTranslateX = 0;\r\n } else {\r\n _this._elements.$stickyBarItemsWrapper.css(\"transform\", \"translate(\"+ (number) +\"px)\");\r\n _this._currentTranslateX = number;\r\n }\r\n }\r\n\r\n _this._updateArrows();\r\n }\r\n \r\n \r\n\r\n setTimeout(() => {\r\n _this._elements.$stickySectionContent.height(0);\r\n $section.height($section[0].scrollHeight);\r\n \r\n\r\n setTimeout(() => {\r\n $section.addClass(config.classNames.stickySectionContentVisible);\r\n }, 5);\r\n }, 650); \r\n });\r\n var dwidth = $(window).width();\r\n\r\n $(window).on('resize', () => {\r\n var wwidth = $(window).width();\r\n if(dwidth !== wwidth) {\r\n this._lastWindowTop = $(window).scrollTop();\r\n if(this._elements.$stickyBarItems.width()+30 > $( document).width() || this._elements.$stickyBarItems.width() > 1270) {\r\n if( !this._enabledArrows){ \r\n this._enableArrows(); \r\n this._enabledArrows = true;\r\n } else {\r\n this._onLeftArrowClick();\r\n this._enabledArrows = true;\r\n }\r\n } else {\r\n if( this._enabledArrows){\r\n this._disableArrows(); \r\n this._enabledArrows = false;\r\n }\r\n }\r\n }\r\n });\r\n\r\n $(window).on('scroll', () => {\r\n const elementTop = this._elements.$stickyBar.offset().top;\r\n const elementHeight = this._elements.$stickyBar.height();\r\n const elementBottom = elementTop + elementHeight;\r\n\r\n const $activeContent = this._$rootElement.find(`.${config.classNames.stickySectionContentVisible}`);\r\n const contentTop = this._$rootElement.offset().top;\r\n const contentBottom = contentTop + this._$rootElement.height();\r\n\r\n const windowTop = $(window).scrollTop();\r\n const topDifference = elementTop - contentTop;\r\n // console.log(contentTop);\r\n\r\n\r\n // scroll bottom\r\n if (this._lastWindowTop < windowTop) {\r\n $(_this._elements.$stickyBar).removeClass(config.classNames.stickyBarTransition)\r\n $(_this._elements.$stickyBar).removeClass(config.classNames.stickyBarUp);\r\n \r\n if(windowTop >= elementTop && !(windowTop >= elementBottom) && !(elementBottom >= contentBottom)) {\r\n this._becomeSticky();\r\n // console.log('sticky');\r\n }\r\n\r\n if (windowTop > contentBottom && this._isSticky) {\r\n \r\n this._becomeUnsticky(windowTop - contentTop);\r\n }\r\n } \r\n\r\n // scroll top\r\n else if (this._lastWindowTop > windowTop) {\r\n if( $(_this._elements.$stickyBar).hasClass(config.classNames.stickySectionBarSticky)){\r\n \r\n $(_this._elements.$stickyBar).addClass(config.classNames.stickyBarUp)\r\n $(_this._elements.$stickyBar).addClass(config.classNames.stickyBarTransition)\r\n } else {\r\n $(_this._elements.$stickyBar).removeClass(config.classNames.stickyBarUp)\r\n }\r\n\r\n \r\n if (windowTop < elementTop && elementTop > contentTop) {\r\n \r\n \r\n this._becomeSticky();\r\n \r\n }\r\n \r\n \r\n \r\n if ((windowTop + 110) <= contentTop) {\r\n \r\n this._becomeUnsticky(0);\r\n }\r\n }\r\n\r\n this._lastWindowTop = windowTop;\r\n }); \r\n \r\n this._elements.$stickyBarItemsWrapper.on('dragstart', () => {\r\n\r\n });\r\n\r\n this._elements.$stickyBarItemsWrapper.on('dragend', () => {\r\n\r\n });\r\n\r\n // track touchstart and delta positions\r\n this._elements.$stickyBarItemsWrapper.on('touchmove', (e) => {\r\n const position = (e.changedTouches[0].clientX - window.innerWidth / 2) * 0.5;\r\n\r\n if(this._touchStart === 0) {\r\n this._touchStart = position\r\n }\r\n \r\n this._delta = position;\r\n });\r\n\r\n // trigger function depending on resulting positions & reset positions after\r\n this._elements.$stickyBarItemsWrapper.on(\"touchend\", () => {\r\n if(this._enabledArrows) {\r\n if(this._delta - this._touchStart > 0) {\r\n _this._onLeftArrowClick();\r\n } else {\r\n _this._onRightArrowClick();\r\n }\r\n \r\n this._touchStart = 0;\r\n }\r\n \r\n });\r\n }\r\n\r\n _enableArrows() {\r\n let left = $(document).width() - 30;\r\n\r\n if(left > 1270) {\r\n left = 1270;\r\n }\r\n\r\n this._currentTranslateX = this._elements.$stickyBarItems.width() - left;\r\n\r\n this._elements.$arrowLeft.removeClass(config.classNames.arrowLeftVisible);\r\n this._elements.$arrowRight.addClass(config.classNames.arrowRightVisible);\r\n this._elements.$stickyBarItemsWrapper.addClass(config.classNames.stickyBarItemsWrapperRight);\r\n this._elements.$stickyBarItemsWrapper.css(\"transform\", \"translate(\"+ ((this._currentTranslateX)) +\"px)\");\r\n }\r\n\r\n _disableArrows() {\r\n this._currentTranslateX = 0;\r\n this._elements.$arrowLeft.removeClass(config.classNames.arrowLeftVisible);\r\n this._elements.$arrowRight.removeClass(config.classNames.arrowRightVisible);\r\n this._elements.$stickyBarItemsWrapper.removeClass(config.classNames.stickyBarItemsWrapperRight);\r\n this._elements.$stickyBarItemsWrapper.css(\"transform\", \"translate(0px)\");\r\n }\r\n\r\n _onLeftArrowClick() {\r\n \r\n\r\n let left = $(document).width() - 30;\r\n\r\n if(left > 1270) {\r\n left = 1270;\r\n }\r\n\r\n this._currentTranslateX += $(document).width() / 2 - 30;\r\n\r\n const max = this._elements.$stickyBarItems.width() - left;\r\n\r\n if(this._currentTranslateX > max) {\r\n this._currentTranslateX = max;\r\n }\r\n\r\n \r\n this._elements.$stickyBarItemsWrapper.css(\"transform\", \"translate(\"+ ((this._currentTranslateX)) +\"px)\");\r\n this._updateArrows();\r\n }\r\n\r\n _onRightArrowClick() {\r\n let left = $(document).width() + 30;\r\n\r\n if(left > 1270) {\r\n left = 1270;\r\n }\r\n\r\n const max = this._elements.$stickyBarItems.width() - left;\r\n\r\n if(this._elements.$stickyBarItems.width() > $(document).width() * 2) {\r\n this._currentTranslateX -= $(document).width() / 2 + 30;\r\n\r\n if(this._currentTranslateX < 0) {\r\n this._currentTranslateX = 0;\r\n }\r\n } else {\r\n this._currentTranslateX = 0;\r\n }\r\n\r\n this._elements.$stickyBarItemsWrapper.css(\"transform\", `translate(${this._currentTranslateX}px)`);\r\n this._updateArrows();\r\n }\r\n\r\n _updateArrows() {\r\n let left = $(document).width() - 30;\r\n\r\n if(left > 1270) {\r\n left = 1270;\r\n }\r\n\r\n const max = this._elements.$stickyBarItems.width() - left;\r\n\r\n if(this._currentTranslateX === 0) {\r\n this._elements.$arrowRight.removeClass(config.classNames.arrowRightVisible);\r\n this._elements.$arrowLeft.addClass(config.classNames.arrowLeftVisible);\r\n } else if(this._currentTranslateX >= max) {\r\n this._elements.$arrowRight.addClass(config.classNames.arrowRightVisible);\r\n this._elements.$arrowLeft.removeClass(config.classNames.arrowLeftVisible);\r\n } else {\r\n this._elements.$arrowRight.addClass(config.classNames.arrowRightVisible);\r\n this._elements.$arrowLeft.addClass(config.classNames.arrowLeftVisible);\r\n }\r\n }\r\n\r\n _becomeSticky() {\r\n if (!StickySection._canBecomeSticky) return;\r\n\r\n this._isSticky = true;\r\n this._elements.$stickyBar.addClass(config.classNames.stickySectionBarSticky);\r\n this._elements.$stickyBar.css('position', 'fixed');\r\n \r\n\r\n this._elements.$stickyBar.css('top', 0);\r\n // ParalaxSection.setCanTransform(false);\r\n \r\n }\r\n\r\n _becomeUnsticky(top) {\r\n this._isSticky = false;\r\n this._elements.$stickyBar.removeClass(config.classNames.stickySectionBarSticky);\r\n this._elements.$stickyBar.css('position', 'absolute');\r\n this._elements.$stickyBar.css('top', top);\r\n // ParalaxSection.setCanTransform(true);\r\n }\r\n\r\n _createStickyBarItemHtml() {\r\n let html = '';\r\n let defaultActive = 0;\r\n if(this._elements.$stickyBarItems[0].attributes.defaultActive !== undefined) {\r\n defaultActive = Number(this._elements.$stickyBarItems[0].attributes.defaultActive.value);\r\n }\r\n\r\n this._elements.$stickySectionContent.each((i, el) => {\r\n const $el = $(el);\r\n const id = $el.data(config.dataAttributes.stickySectionId);\r\n \r\n const active = i === defaultActive ? ` ${config.classNames.stickyBarItemActive}` : '';\r\n\r\n html += `\r\n
  • \r\n ${id}\r\n
  • \r\n `;\r\n });\r\n\r\n return html;\r\n }\r\n\r\n static setCanBecomneSticky(bool) {\r\n StickySection._canBecomeSticky = bool;\r\n }\r\n\r\n checkSticky(){\r\n // console.log(this._isSticky, $('.navigation').hasClass('navigation--scrollup'))\r\n // if(this._isSticky && $('.navigation--scrollup')){\r\n // this._elements.$stickyBar.css('top', '110px');\r\n // }\r\n }\r\n\r\n _findFirstColoredChild(element) {\r\n // Ãœberprüfen, ob das aktuelle Element eine Hintergrundfarbe hat\r\n const bgColor = window.getComputedStyle(element).getPropertyValue('background-color');\r\n const isColored = bgColor !== 'rgba(0, 0, 0, 0)' && bgColor !== 'transparent';\r\n \r\n if (isColored) {\r\n // Wenn das aktuelle Element eine Hintergrundfarbe hat, geben Sie es zurück\r\n return element;\r\n } else {\r\n // Durchlaufen Sie alle Kindknoten und rufen Sie die Funktion rekursiv auf\r\n for (let i = 0; i < element.children.length; i++) {\r\n if(i === 0) {\r\n const coloredChild = this._findFirstColoredChild(element.children[i]);\r\n \r\n if (coloredChild) {\r\n // Wenn ein gefärbtes Kind gefunden wurde, geben Sie es zurück\r\n return coloredChild;\r\n }\r\n }\r\n \r\n }\r\n }\r\n \r\n // Wenn kein gefärbtes Kind gefunden wurde, geben Sie null zurück\r\n return null;\r\n }\r\n\r\n _updateUrl(id) {\r\n history.pushState({}, \"\", `${window.location.pathname}?section=${encodeURIComponent(id)}`);\r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('StickySection', StickySection);\r\nmoduleRegistry.autoApplyModule('StickySection', config.selectors.root);\r\n","import moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.textblock',\r\n headlineContent: '.textblock__headline-content',\r\n headlineText: '.textblock__headline-text',\r\n headlineIcon: '.textblock__headline-icon',\r\n },\r\n};\r\n\r\nclass Textblock {\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n this.hasBr = false;\r\n }\r\n\r\n init() {\r\n this._elements = this._getDomElements();\r\n this._calculateSpaceFromStringEndToRight();\r\n\r\n $(window).on('resize', () => {\r\n this._calculateSpaceFromStringEndToRight();\r\n })\r\n\r\n // checking if there is a
    tag in headline\r\n\r\n }\r\n\r\n _getDomElements() {\r\n return {\r\n $headlineContent: this._$rootElement.find(config.selectors.headlineContent),\r\n $headlineText: this._$rootElement.find(config.selectors.headlineText),\r\n $headlineIcon: this._$rootElement.find(config.selectors.headlineIcon),\r\n };\r\n }\r\n\r\n // Calculate left space from Headline to the right border\r\n _calculateSpaceFromStringEndToRight() {\r\n // this if condition is needed in case there is no headline icon\r\n // or even no headline in textblock\r\n if (this._elements.$headlineContent.html()?.indexOf('textblock__headline-icon') === undefined || this._elements.$headlineContent.html()?.indexOf('textblock__headline-icon') === -1) {\r\n return;\r\n } else {\r\n // getting widths\r\n // console.log('it is running');\r\n const textblockWidth = this._$rootElement[0].scrollWidth;\r\n const headlineText = this._elements.$headlineText;\r\n const headlineWidth = headlineText[0].offsetWidth;\r\n\r\n // calculating width difference between textblock (root) and headline\r\n const differenceOfWidth = textblockWidth - headlineWidth;\r\n\r\n const lastWord = this._getLastWordOfHeadline(headlineText);\r\n // inserts last word and icon into dom, to get width\r\n const lastWordWithIcon = this._elements.$headlineIcon.html(lastWord + this._elements.$headlineIcon.html())[0].offsetWidth;\r\n // removes last word of icon span after calculation is done\r\n this._elements.$headlineIcon.html(this._elements.$headlineIcon.html().replace(lastWord, ''));\r\n\r\n // if there is a br-tag and enough space in first line to fir last word and icon = remove br-tag\r\n if (headlineText.html().indexOf('
    ') !== -1 && differenceOfWidth > lastWordWithIcon) {\r\n this._resetString(headlineText.html());\r\n }\r\n\r\n // 28 to make sure the icon never stands alone - Icon width = 16px, icon margin-left: 5px\r\n if (differenceOfWidth < 28 && headlineText.html().indexOf('
    ') === -1 ) {\r\n if (lastWord.length !== 0) {\r\n const headlineTextLength = headlineText.html().length;\r\n const headlineWithoutLastWord = headlineTextLength - lastWord.length;\r\n\r\n // string without last word\r\n const headlineSliced = headlineText.html().slice(0, headlineWithoutLastWord);\r\n\r\n // building string with break\r\n const newHeadlineHtml = headlineSliced + '
    ' + lastWord;\r\n\r\n this._elements.$headlineText.html(newHeadlineHtml);\r\n }\r\n }\r\n\r\n }\r\n }\r\n\r\n _getLastWordOfHeadline(headlineText) {\r\n let lastWord = '';\r\n\r\n headlineText.each((index, item) => {\r\n const headlineTextSplit = item.innerText.split(\" \");\r\n lastWord = headlineTextSplit[headlineTextSplit.length - 1];\r\n });\r\n\r\n return lastWord;\r\n }\r\n\r\n _resetString(headlineText) {\r\n if (headlineText.indexOf('
    ') !== -1) {\r\n this._elements.$headlineText.html(headlineText.replace('
    ', ''));\r\n }\r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('Textblock', Textblock);\r\nmoduleRegistry.autoApplyModule('Textblock', config.selectors.root);\r\n","/* eslint-disable prefer-arrow-callback */\r\nimport { Breakpoints } from '../breakpoints/breakpoints';\r\nimport { DragBar } from '../drag-bar/drag-bar';\r\nimport moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.timeline',\r\n content: '.timeline__content',\r\n yearline: '.timeline__yearline',\r\n items: '.timeline__items',\r\n item: '.timeline__item',\r\n itemYearIndicator: '.timeline__yearline',\r\n yearControl: '.timeline__year-control',\r\n timelineInner: '.timeline__inner',\r\n fixedYearCentury: '.timeline__fixed-year-century-inner',\r\n fixedYearDecade: '.timeline__fixed-year-decade-inner',\r\n fixedYearDecadeText: '.timeline__fixed-year-decade-inner',\r\n intro: '.timeline__intro',\r\n controlBtn: '.drag-bar__control-btn',\r\n },\r\n dataAttributes: {\r\n items: 'items',\r\n year: 'year',\r\n },\r\n classNames: {\r\n translated: 'timeline__content--translated',\r\n prevItem: 'timeline__item--prev',\r\n fixedYearDecadeHidden: 'timeline__fixed-year-decade-inner--hidden',\r\n fixedYearDecadeShowTransition: 'timeline__fixed-year-decade-inner--show-transition',\r\n fixedYearCenturyHidden: 'timeline__fixed-year-century-inner--hidden',\r\n fixedYearCenturyShowTransition: 'timeline__fixed-year-century-inner--show-transition',\r\n introHidden: 'timeline__intro--hidden',\r\n },\r\n};\r\n\r\nclass Timeline {\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n this._items = [];\r\n this._years = [];\r\n this._decades = [];\r\n this._centurys = [];\r\n this._currentYear = 0;\r\n this._previousCentury = 0;\r\n this._lastCentury = 0;\r\n this._lastDecade = 0;\r\n this._currentDecade = 0;\r\n this._currentCentury = 0;\r\n this._currentIndex = 0;\r\n this._activeIndex = 0;\r\n this._translate = 0;\r\n this._itemWidth = 0;\r\n this._itemMarginRight = 0;\r\n this._yearLineItemLineLeft = 0;\r\n this._centuryWidth = 0;\r\n this._previousGoTo = 0;\r\n this._isLeft = true;\r\n this._decadeWidth = 0;\r\n this._lastClickCentury = 0;\r\n this._animationLength = 750;\r\n this._lineOffset = 20;\r\n this._yearEndMarker = '';\r\n \r\n // mobile variables\r\n this._touchStart = 0;\r\n this._delta = 0;\r\n this._isBeingTouched = false;\r\n }\r\n\r\n init() {\r\n const smartedit = $('body').data('smartedit');\r\n\r\n if(smartedit === true || smartedit === 'true') {\r\n return;\r\n }\r\n \r\n this._yearEndMarker = this._$rootElement.data('year-end-marker');\r\n this._elements = this._getDomElements();\r\n // this._elements.$items.slick(config.sliderConfig);\r\n this._extractYearsAndDecades();\r\n\r\n\r\n // create draggable div\r\n this._calcItemWidth();\r\n\r\n const itemHTML = this._elements.$items[0].innerHTML;\r\n\r\n let draggable = `\r\n
    \r\n ${itemHTML}\r\n
    \r\n `;\r\n\r\n this._elements.$items.html(draggable);\r\n \r\n this._activeIndex = 0;\r\n this._elements.$items.find(config.selectors.item).find('img').attr('draggable', false);\r\n this._calcItemMarginRight();\r\n this._generateYearline();\r\n this._addEventListeners();\r\n this._initBar();\r\n this._setItemsHeight();\r\n this._elements.$fixedYearCentury.html(this._centurys[0]);\r\n this._centuryWidth = this._elements.$fixedYearCentury.width();\r\n this._elements.$fixedYearDecade.html(this._decades[0]);\r\n this._decadeWidth = this._$rootElement.find('.timeline__fixed-year-decade').width();\r\n this._currentCentury = this._centurys[0];\r\n this._currentDecade = this._decades[0];\r\n this._setYearlineItemLeft();\r\n }\r\n\r\n _getDomElements() {\r\n return {\r\n $content: this._$rootElement.find(config.selectors.content),\r\n $yearline: this._$rootElement.find(config.selectors.yearline),\r\n $items: this._$rootElement.find(config.selectors.items),\r\n $item: this._$rootElement.find(config.selectors.item),\r\n $yearControl: this._$rootElement.find(config.selectors.yearControl),\r\n $timelineInner: this._$rootElement.find(config.selectors.timelineInner),\r\n $fixedYearCentury: this._$rootElement.find(config.selectors.fixedYearCentury),\r\n $fixedYearDecade: this._$rootElement.find(config.selectors.fixedYearDecade),\r\n $fixedYearDecadeText: this._$rootElement.find(config.selectors.fixedYearDecadeText),\r\n $intro: this._$rootElement.find(config.selectors.intro),\r\n };\r\n }\r\n\r\n _addEventListeners() {\r\n const _this = this;\r\n\r\n // x value to calculate scroll distance since mousedown\r\n let lastPageX = 0;\r\n\r\n // and additional translate value with which we start to calculate\r\n let startTranslate = 0;\r\n\r\n // mobile device handler\r\n this._$rootElement.find('.timeline__draggable').on('touchstart', () => this._onTouchStart());\r\n this._$rootElement.find('.timeline__draggable').on('touchmove', (e) => this._onTouchMove(e));\r\n\r\n // desktop drag handler\r\n this._$rootElement.find('.timeline__draggable').on('mousedown', function(e){\r\n\r\n if(Breakpoints.isBreakpoint('xs') || Breakpoints.isBreakpoint('sm')) {\r\n return;\r\n }\r\n\r\n if(_this._isTouchDevice() || _this._isBeingTouched) return;\r\n // console.log('mousedown');\r\n lastPageX = 0;\r\n startTranslate = _this._translate;\r\n // console.log('startTranslate: ', startTranslate);\r\n\r\n _this._$rootElement.find('.timeline__fixed-year-century').css('opacity', `1`);\r\n _this._$rootElement.find('.timeline__year-line-item-decade').css('transition', `none`);\r\n\r\n // cancel when mouseup\r\n $(this).one('mouseup', function(e) {\r\n // console.log('mouseup');\r\n $(this).off('mousemove');\r\n\r\n _this._goToFromClick();\r\n });\r\n\r\n let previousDifference = 0;\r\n let isLeft = false;\r\n\r\n $(this).on('mousemove', function(e){\r\n if(lastPageX === 0) {\r\n lastPageX = e.pageX;\r\n }\r\n\r\n const difference = lastPageX - e.pageX;\r\n isLeft = difference - previousDifference > 0;\r\n const translateX = -difference - startTranslate > 0 ? 0 : -difference - startTranslate;\r\n _this._translate = translateX;\r\n\r\n // console.log('scroll distance', _this._getPositiveScrollDistanceFromContent());\r\n\r\n // if(_this._getPositiveScrollDistanceFromContent() > 30) {\r\n // const currentItem = _this._$rootElement.find(`.timeline__year-line-item[data-index=\"${_this._activeIndex}\"]`);\r\n // if(currentItem.hasClass('timeline__year-line-item--no-century')) {\r\n // currentItem.find('.timeline__year-line-item-century').css('width', 0);\r\n // }\r\n // }\r\n\r\n if(_this._translate !== 0 && _this._translate > (Math.ceil(_this._decadeWidth) + this._lineOffset)) {\r\n // console.log('line hits century');\r\n }\r\n\r\n _this._updateActiveIndexByPosition();\r\n _this._updateIntroOpacity();\r\n _this._updateDecadeOpacity();\r\n _this._updateDragbar();\r\n _this._updateTranslations();\r\n _this._updateFixedYearState();\r\n\r\n previousDifference = difference;\r\n }); \r\n });\r\n\r\n $('body').on('click', function(e) {\r\n _this._$rootElement.find('.timeline__draggable').off('mousemove');\r\n });\r\n\r\n $(window).on('resize', () => {\r\n if(this._isTouchDevice() || this._isBeingTouched) return;\r\n\r\n this._setControlBtnWidth();\r\n this._setItemsHeight();\r\n this._calcItemWidth();\r\n this._calcItemMarginRight();\r\n this._updateIntroOpacity();\r\n this._updateTranslations();\r\n this._goTo();\r\n });\r\n }\r\n\r\n _onTouchMove(e) {\r\n if(!this._isBeingTouched) return;\r\n\r\n const position = (e.changedTouches[0].clientX - window.innerWidth / 2) * 0.5;\r\n\r\n if(this._touchStart === 0) {\r\n this._touchStart = position\r\n }\r\n\r\n this._delta = position; \r\n }\r\n\r\n _onTouchStart() {\r\n if(!this._isBeingTouched) {\r\n this._$rootElement.find('.timeline__draggable').one(\"touchend\", () => this._onTouchEnd());\r\n }\r\n \r\n this._isBeingTouched = true;\r\n }\r\n\r\n _onTouchEnd() {\r\n if(!this._isBeingTouched) return;\r\n \r\n if(this._delta - this._touchStart > 0) {\r\n if(this._activeIndex > 0) {\r\n this._activeIndex = this._activeIndex - 1;\r\n this._goToFromClick(true);\r\n }\r\n } else {\r\n if(this._activeIndex < this._elements.$item.length - 1) {\r\n this._activeIndex = this._activeIndex + 1;\r\n this._goToFromClick(true);\r\n }\r\n }\r\n\r\n this._touchStart = 0;\r\n\r\n setTimeout(() => {\r\n this._isBeingTouched = false; \r\n }, this._animationLength)\r\n \r\n }\r\n\r\n _calcItemWidth() {\r\n const itemWidth = $(this._elements.$items[0]).width();\r\n this._elements.$items.find(config.selectors.item).width(itemWidth);\r\n this._itemWidth = itemWidth;\r\n }\r\n\r\n _calcItemMarginRight() {\r\n const itemMarginString = this._elements.$items.find(config.selectors.item).css('marginRight');\r\n this._itemMarginRight = Number(itemMarginString.substring(0, itemMarginString.length - 2));\r\n }\r\n\r\n _setYearlineItemLeft() {\r\n this._$rootElement.find('.timeline__year-line-item').each((i, el) => {\r\n const $el = $(el);\r\n const centuryWidth = $el.find('.timeline__year-line-item-century').width() || 0;\r\n const decadeWidth = $el.find('.timeline__year-line-item-decade').width() || 0;\r\n const combinedWidth = centuryWidth + decadeWidth;\r\n const width = combinedWidth === 0 ? this._itemMarginRight + this._itemWidth + this._lineOffset : this._itemMarginRight + this._itemWidth - combinedWidth - this._lineOffset;\r\n const left = combinedWidth === 0 ? combinedWidth : combinedWidth + 10;\r\n this._yearLineItemLineLeft = left;\r\n this._yearLineItemLineWidth = width;\r\n $el.find('.timeline__year-line-item-line').css('width', width);\r\n $el.lineWidth = width;\r\n $el.find('.timeline__year-line-item-line').css('right', combinedWidth === 0 ? 0 : this._lineOffset);\r\n });\r\n }\r\n\r\n _updateActiveIndexByPosition() {\r\n const oldIndex = this._activeIndex;\r\n this._activeIndex = this._getActiveIndexByPosition();\r\n\r\n if(oldIndex !== this._activeIndex) {\r\n // console.log('index changed while dragging');\r\n }\r\n }\r\n\r\n _getActiveIndexByPosition() {\r\n return Math.ceil(this._translate / Math.ceil(this._itemWidth + this._itemMarginRight)) * -1;\r\n }\r\n\r\n _updateIntroOpacity() {\r\n let introOpacityFactor = this._translate / (this._itemMarginRight + this._itemWidth) * -1;\r\n introOpacityFactor = 1 - (introOpacityFactor > 1 ? 1 : introOpacityFactor);\r\n this._elements.$intro.css('opacity', introOpacityFactor);\r\n }\r\n\r\n _updateDecadeOpacity() {\r\n const activeIndex = this._getActiveIndexByPosition();\r\n const currentItem = this._$rootElement.find(`.timeline__year-line-item[data-index=\"${activeIndex}\"]`);\r\n\r\n if(activeIndex === 0) {\r\n let decadeOpacityFactor = 1 - ((this._translate % ((this._itemWidth + this._itemMarginRight))) / (-100))\r\n currentItem.find('.timeline__year-line-item-decade').css('opacity', decadeOpacityFactor);\r\n currentItem.find('.timeline__year-line-item-line').css('opacity', decadeOpacityFactor); \r\n } else {\r\n let decadeOpacityFactor = 1 - ((this._translate % ((this._itemWidth + this._itemMarginRight) * activeIndex)) / (-100 * activeIndex))\r\n currentItem.find('.timeline__year-line-item-decade').css('opacity', decadeOpacityFactor); \r\n currentItem.find('.timeline__year-line-item-line').css('opacity', decadeOpacityFactor); \r\n }\r\n } \r\n\r\n _updateDragbar() {\r\n const $bar = this._elements.$yearControl.find(DragBar.getClassname());\r\n DragBar.setIndex($bar, this._activeIndex); \r\n }\r\n\r\n _getScrollDistanceFromContent() {\r\n const factor = (this._itemWidth + this._itemMarginRight) * this._activeIndex;\r\n if(factor === 0) {\r\n return this._translate;\r\n } else {\r\n return this._translate % ((this._itemWidth + this._itemMarginRight) * this._activeIndex);\r\n }\r\n }\r\n\r\n _getPositiveScrollDistanceFromContent() {\r\n return this._getScrollDistanceFromContent() * -1;\r\n }\r\n\r\n _updateTranslations() {\r\n const activeIndex = this._getActiveIndexByPosition();\r\n const prevItem = this._$rootElement.find(`.timeline__year-line-item[data-index=\"${activeIndex - 1}\"]`);\r\n const currentItem = this._$rootElement.find(`.timeline__year-line-item[data-index=\"${activeIndex}\"]`);\r\n const nextItem = this._$rootElement.find(`.timeline__year-line-item[data-index=\"${activeIndex + 1}\"]`);\r\n\r\n let additionalTranslate = this._$rootElement.find('.timeline__fixed-year-century').width() + this._elements.$intro.width() - this._itemWidth;\r\n additionalTranslate = additionalTranslate * (this._translate % (this._itemWidth + this._itemMarginRight) / (this._itemWidth + this._itemMarginRight));\r\n\r\n // apply transformations\r\n this._$rootElement.find('.timeline__year-line-root').css('transform', `translateX(${this._translate}px)`); \r\n this._$rootElement.find('.timeline__draggable').css('transform', `translateX(${this._translate}px)`); \r\n\r\n if(additionalTranslate < -5) {\r\n nextItem.find('.timeline__year-line-item-decade').css('transform', `translateX(${additionalTranslate * -1}px)`); \r\n nextItem.find('.timeline__year-line-item-century').css('transform', `translateX(${additionalTranslate * -1}px)`); \r\n }\r\n \r\n\r\n if(nextItem.hasClass('timeline__year-line-item--no-decade')) {\r\n currentItem.find('.timeline__year-line-item-line').css('right', `${additionalTranslate}px`);\r\n } else {\r\n currentItem.find('.timeline__year-line-item-line').css('right', `${additionalTranslate + this._lineOffset}px`);\r\n }\r\n \r\n currentItem.find('.timeline__year-line-item-line').css('width', `${this._yearLineItemLineWidth + (additionalTranslate) - this._lineOffset}px`); \r\n\r\n prevItem.find('.timeline__year-line-item-line').css('right', this._lineOffset);\r\n prevItem.find('.timeline__year-line-item-line').css('width', `${this._yearLineItemLineWidth - this._lineOffset * (this._activeIndex - 1)}px`); \r\n }\r\n\r\n _updateFixedYearState() {\r\n const nextItem = this._$rootElement.find(`.timeline__year-line-item[data-index=\"${this._activeIndex + 1}\"]`);\r\n const currentItem = this._$rootElement.find(`.timeline__year-line-item[data-index=\"${this._activeIndex}\"]`);\r\n\r\n this._currentCentury = currentItem.data('century');\r\n this._currentDecade = currentItem.data('decade');\r\n\r\n this._$rootElement.find('.timeline__fixed-year-century').html(this._currentCentury);\r\n this._$rootElement.find('.timeline__fixed-year-decade').html(this._currentDecade);\r\n \r\n if(nextItem.hasClass('timeline__year-line-item--no-decade')) {\r\n this._$rootElement.find('.timeline__fixed-year-decade').css('opacity', 1);\r\n } else {\r\n this._$rootElement.find('.timeline__fixed-year-decade').css('opacity', 0);\r\n }\r\n\r\n if(!nextItem.hasClass('timeline__year-line-item--no-century')) {\r\n this._$rootElement.find('.timeline__fixed-year-decade').css('opacity', 1);\r\n } else {\r\n \r\n }\r\n\r\n if(!nextItem.hasClass('timeline__year-line-item--no-decade') && !nextItem.hasClass('timeline__year-line-item--no-century')) {\r\n this._$rootElement.find('.timeline__fixed-year-decade').css('opacity', 0);\r\n this._$rootElement.find('.timeline__fixed-year-century').css('opacity', 0);\r\n // currentItem.find('.timeline__year-line-item-century').css('width', 'auto');\r\n currentItem.find('.timeline__year-line-item-decade').css('transform', 'none');\r\n }\r\n }\r\n\r\n _goToNew() {\r\n // console.log('_goToNew', this._activeIndex);\r\n const index = this._getActiveIndexByPosition();\r\n const currentItem = this._$rootElement.find(`.timeline__year-line-item[data-index=\"${index}\"]`);\r\n const marginFactor = this._itemMarginRight;\r\n const totalMargin = marginFactor * this._activeIndex;\r\n const totalItems = this._itemWidth * this._activeIndex;\r\n const total = totalItems + totalMargin + this._elements.$intro.width() - this._itemWidth;\r\n \r\n\r\n const difference = this._activeIndex === 0 ? -this._translate : -this._translate - total;\r\n const step = difference / 1000;\r\n\r\n this._updateDragbar();\r\n this._currentCentury = currentItem.data('century');\r\n this._currentDecade = currentItem.data('decade');\r\n\r\n let i = 0;\r\n for(let i = 0; i < 100; i++) {\r\n setTimeout(() => {\r\n this._translate += step;\r\n this._updateIntroOpacity();\r\n this._updateDecadeOpacity(); \r\n this._updateTranslations();\r\n this._updateFixedYearState();\r\n\r\n if(i === 99) {\r\n this._$rootElement.find('.timeline__fixed-year-century').html(this._currentCentury);\r\n this._$rootElement.find('.timeline__fixed-year-decade').html(this._currentDecade);\r\n }\r\n }, i)\r\n }\r\n\r\n }\r\n\r\n _goToFromClick(registerTouchEnd = false) {\r\n // isLeft means new index is higher\r\n const isLeft = this._activeIndex > this._previousGoTo;\r\n this._updateDragbar();\r\n\r\n const itemWidth = this._itemWidth;\r\n const draggable = this._$rootElement.find('.timeline__draggable');\r\n const yearlineRoot = this._$rootElement.find('.timeline__year-line-root');\r\n const currentItem = this._$rootElement.find(`.timeline__year-line-item[data-index=\"${this._activeIndex}\"]`);\r\n const prevItem = this._$rootElement.find(`.timeline__year-line-item[data-index=\"${this._activeIndex - 1}\"]`);\r\n const nextItem = this._$rootElement.find(`.timeline__year-line-item[data-index=\"${this._activeIndex + 1}\"]`);\r\n\r\n const currentDecade = currentItem.find('.timeline__year-line-item-decade');\r\n // currentItem.find('.timeline__year-line-item-line').css('left', this._centuryWidth + currentDecade.width());\r\n\r\n this._activateTransitions();\r\n\r\n this._lastDecade = this._currentDecade;\r\n this._lastCentury = this._currentCentury;\r\n this._currentCentury = currentItem.data('century');\r\n this._currentDecade = currentItem.data('decade');\r\n\r\n // handle decade & century opacity & line width\r\n if(isLeft) {\r\n if(this._activeIndex === 0) {\r\n this._$rootElement.find('.timeline__year-line-item').each((i, el) => {\r\n if(i === this._activeIndex) {\r\n $(el).find('.timeline__year-line-item-line').css('width', this._yearLineItemLineWidth + this._lineOffset); \r\n }\r\n });\r\n } else {\r\n this._$rootElement.find('.timeline__year-line-item').each((i, el) => {\r\n if(i < this._activeIndex) {\r\n // for all previous items, we let the decade fade out\r\n $(el).find('.timeline__year-line-item-decade').css('opacity', 0);\r\n\r\n // for all previous items, we let the line fade out\r\n $(el).find('.timeline__year-line-item-line').css('opacity', 0);\r\n\r\n // for all previous items, we let the line shrink\r\n $(el).find('.timeline__year-line-item-line').css('width', 0);\r\n } else if(i === this._activeIndex) {\r\n // for the active element, if it has a decade, we need to apply additional translation\r\n // for the active element, we need to adjust the line so it fits\r\n if(!$(el).hasClass('timeline__year-line-item--no-decade') && !$(el).hasClass('timeline__year-line-item--no-century')) {\r\n // if the yearline item which gets active doesnt have a century, but a decade, we need additional translate for its decade\r\n let additionalTranslate = 0;\r\n \r\n if(Breakpoints.isBreakpoint('xs') || Breakpoints.isBreakpoint('sm')) {\r\n\r\n } else {\r\n additionalTranslate += this._elements.$intro.width() - itemWidth;\r\n }\r\n \r\n $(el).find('.timeline__year-line-item-century').css('transform', `translateX(${additionalTranslate}px)`);\r\n $(el).find('.timeline__year-line-item-decade').css('transform', `translateX(${additionalTranslate}px)`);\r\n $(el).find('.timeline__year-line-item-line').css('width', this._yearLineItemLineWidth - this._lineOffset);\r\n } else if(!$(el).hasClass('timeline__year-line-item--no-decade') && $(el).hasClass('timeline__year-line-item--no-century')) {\r\n // if the yearline item which gets active doesnt have a century, but a decade, we need additional translate for its decade\r\n let additionalTranslate = this._centuryWidth;\r\n \r\n if(Breakpoints.isBreakpoint('xs') || Breakpoints.isBreakpoint('sm')) {\r\n\r\n } else {\r\n additionalTranslate += this._elements.$intro.width() - itemWidth;\r\n }\r\n \r\n $(el).find('.timeline__year-line-item-decade').css('transform', `translateX(${additionalTranslate}px)`);\r\n $(el).find('.timeline__year-line-item-line').css('width', this._yearLineItemLineWidth - this._lineOffset);\r\n\r\n } else {\r\n $(el).find('.timeline__year-line-item-line').css('width', $(el).lineWidth); \r\n }\r\n\r\n $(el).find('.timeline__year-line-item-line').css('opacity', 1);\r\n }\r\n\r\n // since we were going from low to high (isLeft), next items shouldnt need to get touched \r\n });\r\n }\r\n \r\n // if the decade changes, we need to hide the fixed decade\r\n if(this._currentDecade != this._lastDecade) {\r\n this._$rootElement.find('.timeline__fixed-year-decade').css('opacity', 0);\r\n }\r\n\r\n // if the century changes, we need to hide the fixed century\r\n if(this._currentCentury != this._lastCentury) {\r\n this._$rootElement.find('.timeline__fixed-year-century').css('opacity', 0);\r\n }\r\n } else {\r\n if(this._activeIndex === 0) {\r\n this._$rootElement.find('.timeline__year-line-item').each((i, el) => {\r\n // remove translation from all decades\r\n $(el).find('.timeline__year-line-item-decade').css('transform', `translateX(0)`);\r\n\r\n // for all items, we let the decade fade in\r\n $(el).find('.timeline__year-line-item-decade').css('opacity', 1);\r\n\r\n // for all items, we let the line fade in\r\n $(el).find('.timeline__year-line-item-line').css('opacity', 1);\r\n\r\n if(i === this._activeIndex) {\r\n $(el).find('.timeline__year-line-item-line').css('width', this._yearLineItemLineWidth); \r\n } else {\r\n // for all items, we let the line expand\r\n if($(el).hasClass('timeline__year-line-item--no-century') && $(el).hasClass('timeline__year-line-item--no-decade')) {\r\n const width = this._yearLineItemLineWidth + this._decadeWidth + this._centuryWidth + this._lineOffset;\r\n\r\n $(el).find('.timeline__year-line-item-line').css('width', width); \r\n } else if($(el).hasClass('timeline__year-line-item--no-century')) {\r\n const width = this._yearLineItemLineWidth + this._decadeWidth;\r\n $(el).find('.timeline__year-line-item-line').css('width', width); \r\n }\r\n }\r\n });\r\n } else {\r\n this._$rootElement.find('.timeline__year-line-item').each((i, el) => {\r\n if(i > this._activeIndex) {\r\n // for all next items, we set the default decade position\r\n $(el).find('.timeline__year-line-item-decade').css('transform', `translateX(0)`);\r\n\r\n // for all next items, we set the default century position\r\n $(el).find('.timeline__year-line-item-century').css('transform', `translateX(0)`);\r\n \r\n // for all next items, we let the decade fade in\r\n $(el).find('.timeline__year-line-item-decade').css('opacity', 1);\r\n\r\n // for all next items, we let the line fade in\r\n $(el).find('.timeline__year-line-item-line').css('opacity', 1);\r\n\r\n // for all next items, handle line width\r\n if($(el).hasClass('timeline__year-line-item--no-decade') && $(el).hasClass('timeline__year-line-item--no-century')) {\r\n const width = this._yearLineItemLineWidth + this._decadeWidth + this._centuryWidth + this._lineOffset * 2;\r\n $(el).find('.timeline__year-line-item-line').css('width', width);\r\n } else if($(el).hasClass('timeline__year-line-item--no-century')) {\r\n const width = this._yearLineItemLineWidth + this._centuryWidth;\r\n $(el).find('.timeline__year-line-item-line').css('width', width);\r\n } else {\r\n const width = this._yearLineItemLineWidth;\r\n $(el).find('.timeline__year-line-item-line').css('width', width);\r\n }\r\n } else if(i === this._activeIndex) {\r\n // for the active element, if id has a decade, we need to apply additional translation\r\n // for the active element, we need to adjust the line so it fits\r\n if(!$(el).hasClass('timeline__year-line-item--no-decade')) {\r\n // if the yearline item which gets active doesnt have a century, but a decade, we need additional translate for its decade\r\n let additionalTranslate = this._$rootElement.find('.timeline__fixed-year-century').width();\r\n \r\n if(Breakpoints.isBreakpoint('xs') || Breakpoints.isBreakpoint('sm')) {\r\n\r\n } else {\r\n additionalTranslate += this._elements.$intro.width() - itemWidth;\r\n }\r\n \r\n $(el).find('.timeline__year-line-item-decade').css('transform', `translateX(${additionalTranslate}px)`);\r\n }\r\n\r\n $(el).find('.timeline__year-line-item-line').css('opacity', 1);\r\n // $(el).find('.timeline__year-line-item-line').css('width', this._yearLineItemLineWidth );\r\n $(el).find('.timeline__year-line-item-line').css('width', this._yearLineItemLineWidth - this._lineOffset);\r\n }\r\n\r\n // since we were going from high to low (isLeft), previous items shouldnt need to get touched \r\n });\r\n }\r\n }\r\n\r\n // special reoutine to handle same index from drag event \r\n if(this._activeIndex === this._previousGoTo) {\r\n this._$rootElement.find('.timeline__year-line-item').each((i, el) => {\r\n if(i === this._activeIndex) {\r\n //start proof: if we clicked twice, proof if century changed and change opacity for line-item-decade (CL)\r\n if(this._lastCentury === this._currentCentury ) {\r\n $(el).find('.timeline__year-line-item-decade').css('opacity', 0);\r\n $(el).find('.timeline__year-line-item-decade').css('transform', `translateX(0px)`);\r\n\r\n } else {\r\n $(el).find('.timeline__year-line-item-decade').css('opacity', 1);\r\n }\r\n //end proof\r\n\r\n // $(el).find('.timeline__year-line-item-decade').css('opacity', 1);\r\n\r\n $(el).find('.timeline__year-line-item-line').css('opacity', 1);\r\n\r\n const width = this._yearLineItemLineWidth;\r\n\r\n $(el).find('.timeline__year-line-item-line').css('width', width); \r\n $(el).find('.timeline__year-line-item-line').css('right', 0); \r\n } \r\n });\r\n }\r\n\r\n // perform translations\r\n if(this._activeIndex === 0) {\r\n draggable.css('transform', `translateX(0px)`);\r\n yearlineRoot.css('transform', `translateX(0px)`);\r\n this._elements.$intro.css('opacity', 1);\r\n this._translate = 0;\r\n } else {\r\n this._elements.$intro.css('opacity', 0);\r\n const marginFactor = this._itemMarginRight;\r\n const totalMargin = marginFactor * this._activeIndex;\r\n const totalItems = itemWidth * this._activeIndex;\r\n let total = totalItems + totalMargin;\r\n \r\n if(Breakpoints.isBreakpoint('xs') || Breakpoints.isBreakpoint('sm')) {\r\n\r\n } else {\r\n total += this._elements.$intro.width() - itemWidth;\r\n\r\n }\r\n\r\n this._translate = total;\r\n draggable.css('transform', `translateX(${-total}px)`);\r\n yearlineRoot.css('transform', `translateX(${-total}px)`);\r\n }\r\n\r\n\r\n\r\n // if(this._activeIndex === 0) {\r\n // draggable.css('transform', `translateX(0px)`);\r\n // yearlineRoot.css('transform', `translateX(0px)`);\r\n // this._elements.$intro.css('opacity', 1);\r\n // this._translate = 0;\r\n // } else {\r\n // this._elements.$intro.css('opacity', 0);\r\n // const marginFactor = this._itemMarginRight;\r\n // const totalMargin = marginFactor * this._activeIndex;\r\n // const totalItems = itemWidth * this._activeIndex;\r\n // const total = totalItems + totalMargin + this._elements.$intro.width() - itemWidth;\r\n // this._translate = total;\r\n \r\n // this._$rootElement.find('.timeline__year-line-item-line').css('right', 0);\r\n\r\n // this._$rootElement.find('.timeline__year-line-item').each((i, el) => {\r\n // if (i === this._activeIndex) return;\r\n // const $el = $(el);\r\n // const centuryWidth = $el.find('.timeline__year-line-item-century').width() || 0;\r\n // const decadeWidth = $el.find('.timeline__year-line-item-decade').width() || 0;\r\n // const combinedWidth = centuryWidth + decadeWidth;\r\n // const left = combinedWidth === 0 ? combinedWidth : combinedWidth + 10;\r\n // this._yearLineItemLineLeft = left;\r\n // console.log('left', left);\r\n // // $el.find('.timeline__year-line-item-line').css('left', left);\r\n // });\r\n\r\n // draggable.css('transform', `translateX(${-total}px)`);\r\n // yearlineRoot.css('transform', `translateX(${-total}px)`);\r\n\r\n \r\n // prevItem.find('.timeline__year-line-item-decade').css('opacity', `0`);\r\n\r\n // if(currentItem.hasClass('timeline__year-line-item--no-century') && currentItem.hasClass('timeline__year-line-item--no-decade')) {\r\n // this._$rootElement.find('.timeline__fixed-year-decade').css('opacity', 1);\r\n // this._$rootElement.find('.timeline__fixed-year-century').css('opacity', 1);\r\n // } else if (currentItem.hasClass('timeline__year-line-item--no-century') && !currentItem.hasClass('timeline__year-line-item--no-decade')) {\r\n // this._$rootElement.find('.timeline__fixed-year-decade').css('opacity', 0);\r\n // this._$rootElement.find('.timeline__fixed-year-century').css('opacity', 1);\r\n // } else if (!currentItem.hasClass('timeline__year-line-item--no-century') && !currentItem.hasClass('timeline__year-line-item--no-decade')) {\r\n // this._$rootElement.find('.timeline__fixed-year-decade').css('opacity', 0);\r\n // this._$rootElement.find('.timeline__fixed-year-century').css('opacity', 0);\r\n // }\r\n\r\n // if(currentItem.hasClass('timeline__year-line-item--no-century')) {\r\n // if(!currentItem.hasClass('timeline__year-line-item--no-decade')) {\r\n // // if the yearline item which gets active doesnt have a century, but a decade, we need additional translate for its decade\r\n // const additionalTranslate = this._$rootElement.find('.timeline__fixed-year-century').width() + this._elements.$intro.width() - itemWidth;\r\n // currentItem.find('.timeline__year-line-item-decade').css('transform', `translateX(${additionalTranslate}px)`);\r\n // // prevItem.addClass('timeline__year-line-item--hide-line');\r\n // // this._$rootElement.find('.timeline__fixed-year-decade').css('opacity', 0);\r\n // } else {\r\n // // this._$rootElement.find('.timeline__fixed-year-decade').css('opacity', 1);\r\n // }\r\n // } else {\r\n // if(!currentItem.hasClass('timeline__year-line-item--no-decade')) {\r\n // // if the yearline item which gets active has a century, we need to hide the fixed century\r\n // this._$rootElement.find('.timeline__fixed-year-century').css('opacity', 0);\r\n // // this._$rootElement.find('.timeline__fixed-year-decade').css('opacity', 0);\r\n // const additionalTranslate = this._elements.$intro.width() - itemWidth; \r\n // currentItem.find('.timeline__year-line-item-decade').css('transform', `translateX(${additionalTranslate}px)`);\r\n // currentItem.find('.timeline__year-line-item-century').css('transform', `translateX(${additionalTranslate}px)`);\r\n // } else {\r\n // // this._$rootElement.find('.timeline__fixed-year-decade').css('opacity', 1);\r\n // }\r\n // }\r\n // }\r\n\r\n // // remove additional translation from all other inactive items\r\n // this._$rootElement.find('.timeline__year-line-item').each((i, el) => {\r\n // if(i===this._activeIndex) {\r\n // $(el).addClass('timeline__year-line-item--active');\r\n // $(el).removeClass('timeline__year-line-item--hide-line');\r\n\r\n // } else {\r\n // $(el).removeClass('timeline__year-line-item--active');\r\n\r\n // if(i >= this._activeIndex) {\r\n // $(el).removeClass('timeline__year-line-item--hide-line');\r\n // $(el).find('.timeline__year-line-item-decade').css('opacity', `1`);\r\n // }\r\n\r\n // if(i > this._activeIndex) {\r\n // $(el).find('.timeline__year-line-item-decade').css('transform', `translateX(0)`);\r\n // $(el).find('.timeline__year-line-item-century').css('transform', `translateX(0)`);\r\n // }\r\n\r\n // if(i < this._activeIndex) {\r\n // $(el).find('.timeline__year-line-item-decade').css('transform', `translateX(0)`);\r\n // }\r\n // }\r\n // });\r\n this._updateFixedYearHtml();\r\n\r\n setTimeout(() => {\r\n this._deactivateTransitions();\r\n\r\n if(registerTouchEnd) {\r\n // this._$rootElement.find('.timeline__draggable').one(\"touchend\", () => this._onTouchEnd());\r\n }\r\n \r\n\r\n // since the screen isnt in any interaction now, we can show the fixed year indicators\r\n this._$rootElement.find('.timeline__fixed-year-century').css('opacity', 1);\r\n this._$rootElement.find('.timeline__fixed-year-decade').css('opacity', 1);\r\n this._$rootElement.find('.timeline__year-line-item-line').css('opacity', 1);\r\n\r\n if(currentItem.data('index') === this._elements.$item.length - 1) {\r\n currentItem.find('.timeline__year-line-item-decade').css('opacity', 0);\r\n }\r\n }, this._animationLength);\r\n\r\n this._previousGoTo = this._activeIndex;\r\n }\r\n\r\n _activateTransitions() {\r\n const draggable = this._$rootElement.find('.timeline__draggable');\r\n const yearlineRoot = this._$rootElement.find('.timeline__year-line-root');\r\n\r\n this._$rootElement.find('.timeline__year-line-item-decade').css('transition', `transform ${this._animationLength / 1000}s ease-in-out, opacity ${this._animationLength / 1000}s ease-in-out`);\r\n this._$rootElement.find('.timeline__year-line-item-century').css('transition', `transform ${this._animationLength / 1000}s ease-in-out, opacity ${this._animationLength / 1000}s ease-in-out`);\r\n draggable.css('transition', `transform ${this._animationLength / 1000}s ease-in-out`);\r\n yearlineRoot.css('transition', `transform ${this._animationLength / 1000}s ease-in-out`);\r\n this._elements.$intro.css('transition', `opacity ${this._animationLength / 1000}s ease-in-out`);\r\n this._$rootElement.find('.timeline__year-line-item-line').css('transition', `width ${this._animationLength / 1000}s ease-in-out, right ${this._animationLength / 1000}s ease-in-out`);\r\n }\r\n\r\n _deactivateTransitions() {\r\n const draggable = this._$rootElement.find('.timeline__draggable');\r\n const yearlineRoot = this._$rootElement.find('.timeline__year-line-root');\r\n\r\n yearlineRoot.css('transition', `none`);\r\n draggable.css('transition', `none`);\r\n this._$rootElement.find('.timeline__year-line-item-line').css('transition', 'none');\r\n this._$rootElement.find('.timeline__year-line-item-decade').css('transition', 'none');\r\n this._$rootElement.find('.timeline__year-line-item-century').css('transition', 'none');\r\n this._elements.$intro.css('transition', 'none');\r\n this._$rootElement.find('.timeline__fixed-year-century').css('transition', 'none');\r\n this._$rootElement.find('.timeline__fixed-year-decade').css('transition', 'none');\r\n }\r\n\r\n _updateFixedYearHtml() {\r\n this._$rootElement.find('.timeline__fixed-year-century').html(this._currentCentury);\r\n this._$rootElement.find('.timeline__fixed-year-decade').html(this._currentDecade);\r\n }\r\n\r\n // fired when clicked on navi items and on mouseup after dragging\r\n _goTo(registerTouchEnd = false) {\r\n const isLeft = this._activeIndex > this._previousGoTo;\r\n\r\n this._updateDragbar();\r\n\r\n const itemWidth = this._itemWidth;\r\n const draggable = this._$rootElement.find('.timeline__draggable');\r\n const yearlineRoot = this._$rootElement.find('.timeline__year-line-root');\r\n const currentItem = this._$rootElement.find(`.timeline__year-line-item[data-index=\"${this._activeIndex}\"]`);\r\n const prevItem = this._$rootElement.find(`.timeline__year-line-item[data-index=\"${this._activeIndex - 1}\"]`);\r\n const nextItem = this._$rootElement.find(`.timeline__year-line-item[data-index=\"${this._activeIndex + 1}\"]`);\r\n\r\n const currentDecade = currentItem.find('.timeline__year-line-item-decade');\r\n // currentItem.find('.timeline__year-line-item-line').css('left', this._centuryWidth + currentDecade.width());\r\n\r\n // activate transitions\r\n this._$rootElement.find('.timeline__year-line-item-decade').css('transition', `transform 1s ease-in-out, opacity 0.4s ease`);\r\n this._$rootElement.find('.timeline__year-line-item-century').css('transition', `transform 1s ease-in-out, opacity 0.4s ease`);\r\n draggable.css('transition', `transform 1s ease-in-out`);\r\n yearlineRoot.css('transition', `transform 1s ease-in-out`);\r\n this._elements.$intro.css('transition', 'opacity 0.65s ease');\r\n this._$rootElement.find('.timeline__year-line-item-line').css('transition', 'left 0.65s ease, right 0.65s ease');\r\n\r\n const lastCentury = this._currentCentury;\r\n const lastDecade = this._currentDecade;\r\n\r\n this._currentCentury = currentItem.data('century');\r\n this._currentDecade = currentItem.data('decade');\r\n\r\n if(this._activeIndex === 0) {\r\n draggable.css('transform', `translateX(0px)`);\r\n yearlineRoot.css('transform', `translateX(0px)`);\r\n this._elements.$intro.css('opacity', 1);\r\n this._translate = 0;\r\n } else {\r\n this._elements.$intro.css('opacity', 0);\r\n const marginFactor = this._itemMarginRight;\r\n const totalMargin = marginFactor * this._activeIndex;\r\n const totalItems = itemWidth * this._activeIndex;\r\n const total = totalItems + totalMargin + this._elements.$intro.width() - itemWidth;\r\n this._translate = total;\r\n \r\n this._$rootElement.find('.timeline__year-line-item-line').css('right', 0);\r\n\r\n this._$rootElement.find('.timeline__year-line-item').each((i, el) => {\r\n if (i === this._activeIndex) return;\r\n const $el = $(el);\r\n const centuryWidth = $el.find('.timeline__year-line-item-century').width() || 0;\r\n const decadeWidth = $el.find('.timeline__year-line-item-decade').width() || 0;\r\n const combinedWidth = centuryWidth + decadeWidth;\r\n const left = combinedWidth === 0 ? combinedWidth : combinedWidth + 10;\r\n this._yearLineItemLineLeft = left;\r\n // $el.find('.timeline__year-line-item-line').css('left', left);\r\n });\r\n\r\n draggable.css('transform', `translateX(${-total}px)`);\r\n yearlineRoot.css('transform', `translateX(${-total}px)`);\r\n\r\n \r\n prevItem.find('.timeline__year-line-item-decade').css('opacity', `0`);\r\n\r\n if(currentItem.hasClass('timeline__year-line-item--no-century') && currentItem.hasClass('timeline__year-line-item--no-decade')) {\r\n this._$rootElement.find('.timeline__fixed-year-decade').css('opacity', 1);\r\n this._$rootElement.find('.timeline__fixed-year-century').css('opacity', 1);\r\n } else if (currentItem.hasClass('timeline__year-line-item--no-century') && !currentItem.hasClass('timeline__year-line-item--no-decade')) {\r\n this._$rootElement.find('.timeline__fixed-year-decade').css('opacity', 0);\r\n this._$rootElement.find('.timeline__fixed-year-century').css('opacity', 1);\r\n } else if (!currentItem.hasClass('timeline__year-line-item--no-century') && !currentItem.hasClass('timeline__year-line-item--no-decade')) {\r\n this._$rootElement.find('.timeline__fixed-year-decade').css('opacity', 0);\r\n this._$rootElement.find('.timeline__fixed-year-century').css('opacity', 0);\r\n }\r\n\r\n if(currentItem.hasClass('timeline__year-line-item--no-century')) {\r\n if(!currentItem.hasClass('timeline__year-line-item--no-decade')) {\r\n // if the yearline item which gets active doesnt have a century, but a decade, we need additional translate for its decade\r\n const additionalTranslate = this._$rootElement.find('.timeline__fixed-year-century').width() + this._elements.$intro.width() - itemWidth;\r\n currentItem.find('.timeline__year-line-item-decade').css('transform', `translateX(${additionalTranslate}px)`);\r\n // prevItem.addClass('timeline__year-line-item--hide-line');\r\n // this._$rootElement.find('.timeline__fixed-year-decade').css('opacity', 0);\r\n } else {\r\n // this._$rootElement.find('.timeline__fixed-year-decade').css('opacity', 1);\r\n }\r\n } else {\r\n if(!currentItem.hasClass('timeline__year-line-item--no-decade')) {\r\n // if the yearline item which gets active has a century, we need to hide the fixed century\r\n this._$rootElement.find('.timeline__fixed-year-century').css('opacity', 0);\r\n // this._$rootElement.find('.timeline__fixed-year-decade').css('opacity', 0);\r\n const additionalTranslate = this._elements.$intro.width() - itemWidth; \r\n currentItem.find('.timeline__year-line-item-decade').css('transform', `translateX(${additionalTranslate}px)`);\r\n currentItem.find('.timeline__year-line-item-century').css('transform', `translateX(${additionalTranslate}px)`);\r\n } else {\r\n // this._$rootElement.find('.timeline__fixed-year-decade').css('opacity', 1);\r\n }\r\n }\r\n }\r\n\r\n // remove additional translation from all other inactive items\r\n this._$rootElement.find('.timeline__year-line-item').each((i, el) => {\r\n if(i===this._activeIndex) {\r\n $(el).addClass('timeline__year-line-item--active');\r\n $(el).removeClass('timeline__year-line-item--hide-line');\r\n\r\n } else {\r\n $(el).removeClass('timeline__year-line-item--active');\r\n\r\n if(i >= this._activeIndex) {\r\n $(el).removeClass('timeline__year-line-item--hide-line');\r\n $(el).find('.timeline__year-line-item-decade').css('opacity', `1`);\r\n }\r\n\r\n if(i > this._activeIndex) {\r\n $(el).find('.timeline__year-line-item-decade').css('transform', `translateX(0)`);\r\n $(el).find('.timeline__year-line-item-century').css('transform', `translateX(0)`);\r\n }\r\n\r\n if(i < this._activeIndex) {\r\n $(el).find('.timeline__year-line-item-decade').css('transform', `translateX(0)`);\r\n }\r\n }\r\n });\r\n\r\n setTimeout(() => {\r\n yearlineRoot.css('transition', `none`);\r\n draggable.css('transition', `none`);\r\n this._$rootElement.find('.timeline__fixed-year-century').html(this._currentCentury);\r\n this._$rootElement.find('.timeline__fixed-year-decade').html(this._currentDecade);\r\n this._$rootElement.find('.timeline__fixed-year-century').css('opacity', 1);\r\n // this._$rootElement.find('.timeline__fixed-year-decade').css('opacity', 1);\r\n this._$rootElement.find('.timeline__year-line-item-decade').css('opacity', 1);\r\n this._$rootElement.find('.timeline__year-line-item-line').css('transition', 'none');\r\n this._elements.$intro.css('transition', 'none');\r\n this._$rootElement.find('.timeline__fixed-year-century').css('transition', 'none');\r\n this._$rootElement.find('.timeline__fixed-year-decade').css('transition', 'none');\r\n\r\n if(registerTouchEnd) {\r\n // this._$rootElement.find('.timeline__draggable').one(\"touchend\", () => this._onTouchEnd());\r\n }\r\n \r\n }, 1000);\r\n }\r\n\r\n _updateYearControl(index) {\r\n const $items = this._$rootElement.find(config.selectors.yearControlItem);\r\n $items.removeClass(config.classNames.yearControlItemActive);\r\n $items.removeClass(config.classNames.yearControlItemPreActive);\r\n this._elements.$yearControlBtn.css('left', `${index * 75}px`);\r\n\r\n $items.each((i, item) => {\r\n if (i === this._activeIndex) {\r\n $(item).addClass(config.classNames.yearControlItemActive);\r\n } else if (i <= this._activeIndex) {\r\n $(item).addClass(config.classNames.yearControlItemPreActive);\r\n }\r\n i++;\r\n });\r\n }\r\n\r\n _extractYearsAndDecades() {\r\n this._elements.$item.each((index, item) => {\r\n const $item = $(item);\r\n const year = $item.data(config.dataAttributes.year);\r\n const decade = this._getDecadeFromYear(year);\r\n const century = this._getCenturyFromYear(year);\r\n\r\n if (!this._years.includes(year)) this._years.push(year);\r\n if (!this._decades.includes(decade)) this._decades.push(decade);\r\n if (!this._centurys.includes(century)) this._centurys.push(century);\r\n });\r\n }\r\n\r\n _generateYearIndicators() {\r\n this._$rootElement.find(config.selectors.item).each((i, el) => {\r\n const $el = $(el);\r\n\r\n const $yearIndicator = $el.find(config.selectors.itemYearIndicator);\r\n const year = $el.data(config.dataAttributes.year);\r\n\r\n $yearIndicator.html(this._generateYearIndicatorForItem(year));\r\n });\r\n }\r\n\r\n _generateYearlineItem(year, isLast) {\r\n if (isNaN(year) || isLast) {\r\n return `\r\n
    \r\n ${year}\r\n \r\n
    \r\n `;\r\n }\r\n const firstPart = this._getCenturyFromYear(year);\r\n const secondPart = this._getDecadeFromYear(year);\r\n\r\n const centuryChange = this._lastCentury !== 0 && firstPart !== this._lastCentury;\r\n const decadeChange = this._lastDecade === 0 || secondPart !== this._lastDecade;\r\n\r\n this._lastDecade = secondPart;\r\n this._lastCentury = firstPart;\r\n\r\n return `\r\n
    \r\n ${centuryChange ? `${firstPart}` : ''}\r\n ${decadeChange ? `${secondPart}` : ''}\r\n \r\n
    \r\n `;\r\n }\r\n\r\n _getCenturyFromYear(year) {\r\n return year.toString().substring(0, 2);\r\n }\r\n\r\n _getDecadeFromYear(year, isLastElement = false) {\r\n if(isNaN(year)) {\r\n return year.toString().substring(2);\r\n }\r\n\r\n if(isLastElement) {\r\n return year.toString().substring(2) + this._yearEndMarker;\r\n }\r\n\r\n return year.toString().substring(2,3) + '0' + this._yearEndMarker;\r\n }\r\n\r\n _generateYearline() {\r\n let lastCentury = 0;\r\n let lastDecade = 0;\r\n const size = this._elements.$item.length;\r\n \r\n this._elements.$item.each((i, el) => {\r\n const $el = $(el);\r\n const year = $el.data(config.dataAttributes.year);\r\n const century = this._getCenturyFromYear(year);\r\n let decade = this._getDecadeFromYear(year);\r\n\r\n if(i === this._elements.$item.length-1) {\r\n decade = this._getDecadeFromYear(year, true)\r\n }\r\n\r\n let html = '';\r\n\r\n \r\n html = `\r\n
    \r\n `;\r\n \r\n // generate a century at item position\r\n html += `\r\n \r\n ${century}\r\n \r\n `;\r\n \r\n \r\n if(decade !== lastDecade) {\r\n // generate a decade at item position\r\n html += `\r\n \r\n ${decade}\r\n \r\n `;\r\n }\r\n \r\n html += `\r\n \r\n \r\n \r\n `;\r\n \r\n html += '
    ';\r\n\r\n \r\n\r\n this._$rootElement.find('.timeline__year-line-root').append(html);\r\n\r\n lastCentury = century;\r\n lastDecade = decade;\r\n // $el.append(this._generateYearlineItem(year));\r\n });\r\n\r\n // this._elements.$yearline.html(html);\r\n }\r\n\r\n _initBar() {\r\n // create bar and append into dom\r\n const barHtml = DragBar.createLabeledHtml(this._years);\r\n this._elements.$yearControl.html(barHtml);\r\n\r\n // select bar and register callback\r\n const $bar = this._elements.$yearControl.find(DragBar.getClassname());\r\n\r\n DragBar.init($bar, (index) => {\r\n this._activeIndex = index; \r\n\r\n this._goToFromClick();\r\n \r\n });\r\n\r\n this._setControlBtnWidth();\r\n }\r\n\r\n _setControlBtnWidth() {\r\n const $bar = this._elements.$yearControl.find(DragBar.getClassname());\r\n const controlBar = $bar.find(config.selectors.controlBtn);\r\n controlBar.width($bar.width() / this._elements.$item.length);\r\n }\r\n\r\n _setItemsHeight() {\r\n if (Breakpoints.isBreakpoint('xs') || Breakpoints.isBreakpoint('sm') || Breakpoints.isBreakpoint('md') ) {\r\n setTimeout(() => {\r\n this._elements.$timelineInner.height('auto');\r\n }, 500);\r\n } else {\r\n \r\n setTimeout(() => {\r\n const sliderHeight = 750;\r\n this._elements.$timelineInner.height(`${sliderHeight}px`);\r\n }, 500);\r\n }\r\n }\r\n\r\n _isTouchDevice() {\r\n return (('ontouchstart' in window) ||\r\n (navigator.maxTouchPoints > 0) ||\r\n (navigator.msMaxTouchPoints > 0));\r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('Timeline', Timeline);\r\nmoduleRegistry.autoApplyModule('Timeline', config.selectors.root);\r\n","import moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.video-round',\r\n controls: '.video__controls',\r\n videoComponent: '.video',\r\n video: '.video__video',\r\n videoMobile: '.video__video-mobile',\r\n videoWrapper: '.video__wrapper',\r\n videoRoundWrapper: '.video-round__video-wrapper',\r\n activateButton: '.video-round__icon-button',\r\n activateButtonWrapper: '.video-round__icon-button-wrapper',\r\n backdrop: '.video-round__backdrop',\r\n closeButton: '.video__close-button',\r\n playPauseBtn: '.video__play-pause',\r\n\r\n },\r\n classNames: {\r\n videoHide: 'video__video--hidden',\r\n videoWrapperSmall: 'video__wrapper--small',\r\n iconButtonWrapper: 'video-round__icon-button-wrapper--hidden',\r\n videoFullsizeWrapper: 'video-round__video-wrapper--full-size',\r\n videoFullscreen: 'video--fullscreen',\r\n videoControlsHidden: 'video__controls--hidden',\r\n },\r\n playIcon: '',\r\n pauseIcon: '',\r\n};\r\n\r\nclass VideoRound {\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n }\r\n\r\n init() {\r\n this._elements = this._getDomElements();\r\n\r\n if(this._elements.$video.length === 0) {\r\n this._elements.$activateButtonWrapper.hide();\r\n }\r\n\r\n this._elements.$videoWrapper.addClass(config.classNames.videoWrapperSmall);\r\n this._elements.$video.addClass(config.classNames.videoHide);\r\n this._elements.$videoMobile.addClass(config.classNames.videoHide);\r\n this._fullSizedVideo();\r\n this._closeVideo();\r\n }\r\n\r\n _getDomElements() {\r\n return {\r\n $body: $('body'),\r\n $html: $('html'),\r\n $controls: this._$rootElement.find(config.selectors.controls),\r\n $video: this._$rootElement.find(config.selectors.video),\r\n $videoMobile: this._$rootElement.find(config.selectors.videoMobile),\r\n $videoComponent: this._$rootElement.find(config.selectors.videoComponent),\r\n $videoWrapper: this._$rootElement.find(config.selectors.videoWrapper),\r\n $activateButton: this._$rootElement.find(config.selectors.activateButton),\r\n $activateButtonWrapper: this._$rootElement.find(config.selectors.activateButtonWrapper),\r\n $videoRoundWrapper: this._$rootElement.find(config.selectors.videoRoundWrapper),\r\n $backdrop: this._$rootElement.find(config.selectors.backdrop),\r\n $closeButton: this._$rootElement.find(config.selectors.closeButton),\r\n $playPauseBtn: this._$rootElement.find(config.selectors.playPauseBtn),\r\n };\r\n }\r\n\r\n // eslint-disable-next-line class-methods-use-this\r\n _addEventListeners() {\r\n }\r\n\r\n _removeStandardControls() {\r\n const videoWorks = !!document.createElement('video').canPlayType;\r\n\r\n if (videoWorks) {\r\n this._elements.$video[0].controls = false;\r\n this._elements.$controls.removeClass('hidden');\r\n }\r\n }\r\n\r\n _fullSizedVideo() {\r\n this._elements.$activateButtonWrapper.on('click', () => {\r\n this._elements.$video.removeClass(config.classNames.videoHide);\r\n this._elements.$videoMobile.removeClass(config.classNames.videoHide);\r\n this._elements.$videoWrapper.removeClass(config.classNames.videoWrapperSmall);\r\n this._elements.$controls.removeClass(config.classNames.videoControlsHidden);\r\n this._elements.$backdrop[0].style.opacity = '1';\r\n this._elements.$backdrop[0].style.visibility = 'visible';\r\n this._elements.$video[0].style.opacity = '1';\r\n this._elements.$video[0].style.visibility = 'visible';\r\n this._elements.$html.addClass('body--no-scroll');\r\n // this._elements.$video.show();\r\n this._elements.$videoMobile.show();\r\n this._elements.$activateButtonWrapper.addClass(config.classNames.iconButtonWrapper);\r\n this._elements.$video[0].player.play();\r\n\r\n // html.style.overflow = \"hidden\"\r\n // main.style.overflow = \"hidden\"\r\n // body.style.overflow = \"hidden\"\r\n });\r\n }\r\n\r\n _closeVideo() {\r\n const videoSettings = this._elements.$video[0];\r\n // eslint-disable-next-line no-unused-vars\r\n this._elements.$closeButton.on('click', (e) => {\r\n // this._elements.$video.hide();\r\n this._elements.$videoMobile.hide();\r\n this._elements.$video.addClass(config.classNames.videoHide);\r\n this._elements.$videoMobile.addClass(config.classNames.videoHide);\r\n this._elements.$videoWrapper.addClass(config.classNames.videoWrapperSmall);\r\n this._elements.$controls.addClass(config.classNames.videoControlsHidden);\r\n this._elements.$videoComponent.removeClass(config.classNames.videoFullscreen);\r\n this._elements.$activateButtonWrapper.removeClass(config.classNames.iconButtonWrapper);\r\n this._elements.$backdrop[0].style.opacity = '0';\r\n this._elements.$backdrop[0].style.visibility = 'hidden';\r\n this._elements.$video[0].style.opacity = '0';\r\n this._elements.$video[0].style.visibility = 'hidden';\r\n this._elements.$html.removeClass('body--no-scroll');\r\n videoSettings.player.pause();\r\n this._elements.$playPauseBtn.html(config.playIcon);\r\n });\r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('VideoRound', VideoRound);\r\nmoduleRegistry.autoApplyModule('VideoRound', config.selectors.root);\r\n","import moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.video',\r\n video: '.video-js',\r\n videoCustomControls: '.video__controls',\r\n playPauseBtn: '.video__play-pause',\r\n seekslider: '.video__seekslider',\r\n currentTime: '.video__currentTime',\r\n durationTime: '.video__durationTime',\r\n volume: '.video__volume',\r\n fullscreen: '.video__fullscreen',\r\n captions: '.video__captions',\r\n thumbnail: '.video__thumbnail',\r\n thumbnailTimer: '.video__thumbnail-timer',\r\n\r\n volumeMute: '.video__volume--mute',\r\n volume25: '.video__volume--25',\r\n volume50: '.video__volume--50',\r\n volume75: '.video__volume--75',\r\n volume100: '.video__volume--100',\r\n },\r\n classNames: {\r\n fullscreen: 'video--fullscreen',\r\n overlay: 'gallery__main-slide-visual',\r\n },\r\n playIcon: 'Play',\r\n pauseIcon: 'Pause'\r\n};\r\n\r\nclass Video {\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n\r\n this._playPauseHandler = this._playPauseHandler.bind(this);\r\n //this._captionsHandler = this._captionsHandler.bind(this);\r\n this._seeksliderThumbnailOnHover = this._seeksliderTimerOnHover.bind(this);\r\n }\r\n\r\n init() {\r\n this._elements = this._getDomElements();\r\n this._playPauseHandler();\r\n this._seeksliderChangeHandler();\r\n // this._seeksliderTimeUpdate();\r\n this._setVolume();\r\n this._setFullscreen();\r\n this._screenClick();\r\n this._createMenuItems();\r\n this._seeksliderTimerOnHover();\r\n // Funkction for video thumbnail base set-up\r\n // this._renderThumbnail();\r\n \r\n }\r\n\r\n _getDomElements() {\r\n return {\r\n $video: this._$rootElement.find(config.selectors.video),\r\n $videoCustomControls: this._$rootElement.find(config.selectors.videoCustomControls),\r\n $playPauseBtn: this._$rootElement.find(config.selectors.playPauseBtn),\r\n $seekslider: this._$rootElement.find(config.selectors.seekslider),\r\n $currentTime: this._$rootElement.find(config.selectors.currentTime),\r\n $durationTime: this._$rootElement.find(config.selectors.durationTime),\r\n $fullscreen: this._$rootElement.find(config.selectors.fullscreen),\r\n $captions: this._$rootElement.find(config.selectors.captions),\r\n $volume: this._$rootElement.find(config.selectors.volume),\r\n $volumeMute: this._$rootElement.find(config.selectors.volumeMute),\r\n $volume25: this._$rootElement.find(config.selectors.volume25),\r\n $volume50: this._$rootElement.find(config.selectors.volume50),\r\n $volume75: this._$rootElement.find(config.selectors.volume75),\r\n $volume100: this._$rootElement.find(config.selectors.volume100),\r\n $thumbnail: this._$rootElement.find(config.selectors.thumbnail),\r\n $thumbnailTimer: this._$rootElement.find(config.selectors.thumbnailTimer),\r\n };\r\n }\r\n\r\n _playPauseHandler() {\r\n const videoSettings = this._elements.$video[0];\r\n\r\n if(videoSettings && videoSettings.player) {\r\n this._seeksliderTimeUpdate(videoSettings);\r\n\r\n videoSettings.player.on('play', () => {\r\n this._elements.$playPauseBtn.html(config.pauseIcon);\r\n });\r\n }\r\n\r\n this._elements.$playPauseBtn.on('click', (e) => {\r\n if (videoSettings.player.paused()) {\r\n this._seeksliderTimeUpdate(videoSettings);\r\n videoSettings.player.play();\r\n this._elements.$playPauseBtn.html(config.pauseIcon);\r\n } else {\r\n videoSettings.player.pause();\r\n this._elements.$playPauseBtn.html(config.playIcon);\r\n }\r\n });\r\n\r\n \r\n }\r\n\r\n _seeksliderChangeHandler() {\r\n\r\n this._elements.$seekslider.on('change', () => {\r\n const videoSettings = this._elements.$video[0];\r\n\r\n const seekTo = videoSettings.player.duration() * (this._elements.$seekslider[0].value / 100);\r\n videoSettings.player.currentTime(seekTo);\r\n })\r\n }\r\n\r\n _seeksliderTimerOnHover() {\r\n const videoSettings = this._elements.$video[0];\r\n const progressBar = this._elements.$seekslider;\r\n const thumbnail = this._elements.$thumbnail;\r\n let mouseHoverTime = 0;\r\n thumbnail.hide();\r\n\r\n progressBar.on('mouseover', () => {\r\n thumbnail.show();\r\n })\r\n\r\n progressBar.on('mouseleave', () => {\r\n thumbnail.hide();\r\n })\r\n\r\n progressBar.mousemove((e) => {\r\n const mousePositionX = e.pageX;\r\n const progressBarPosition = progressBar[0].getBoundingClientRect();\r\n const mouseTime = (mousePositionX - progressBarPosition.x) / progressBarPosition.width * videoSettings.duration;\r\n mouseHoverTime = Math.floor((mouseTime * 100) / 100) / 100;\r\n if (parseFloat(mouseHoverTime).toFixed(2) < 0.00) {\r\n thumbnail.hide();\r\n return;\r\n }\r\n this._elements.$thumbnailTimer.html(parseFloat(mouseHoverTime).toFixed(2));\r\n thumbnail.css({'top':progressBarPosition.y,'left':(mousePositionX - progressBarPosition.x), 'position':'absolute', 'border':'1px solid black', 'padding':'5px', 'border-radius': '5px'});\r\n // this._renderThumbnail();\r\n });\r\n }\r\n\r\n // Gets canvas elements and renders a piece of the running video in thunmbnail element\r\n /*_renderThumbnail() {\r\n const video = document.querySelector(config.selectors.video);\r\n const processor = {};\r\n\r\n const timerCallback = () => {\r\n if (this.video.paused || this.video.ended) {\r\n return;\r\n }\r\n computeFrame();\r\n setTimeout(() => {\r\n timerCallback();\r\n }, 0);\r\n };\r\n\r\n video.addEventListener('loadeddata', () => {\r\n console.log('doLoad');\r\n this.video = video;\r\n\r\n this.c1 = document.getElementById('c1');\r\n this.ctx1 = this.c1.getContext('2d');\r\n\r\n this.c2 = document.getElementById('c2');\r\n this.ctx2 = this.c2.getContext('2d');\r\n\r\n console.log('canvas - c1: ', this.c1);\r\n console.log('canvas - ctx1: ', this.ctx1);\r\n\r\n console.log('canvas - c2: ', this.c2);\r\n console.log('canvas - ctx2: ', this.ctx2);\r\n\r\n video.addEventListener('play', () => {\r\n this.width = video.videoWidth / 2;\r\n this.height = video.videoHeight / 2;\r\n timerCallback();\r\n }, false);\r\n });\r\n\r\n const computeFrame = () => {\r\n console.log('computeFrame');\r\n this.ctx1.drawImage(this.video, 0, 0, this.width, this.height);\r\n const frame = this.ctx1.getImageData(0, 0, this.width, this.height);\r\n const length = frame.data.length;\r\n const data = frame.data;\r\n\r\n for (let i = 0; i < length; i += 4) {\r\n const red = data[i + 0];\r\n const green = data[i + 1];\r\n const blue = data[i + 2];\r\n if (green > 100 && red > 100 && blue < 43) {\r\n data[i + 3] = 0;\r\n }\r\n }\r\n this.ctx2.putImageData(frame, 0, 0);\r\n };\r\n }*/\r\n\r\n _seeksliderTimeUpdate(videoSettings) {\r\n videoSettings.player.on('timeupdate', () => {\r\n if (videoSettings.player.ended()) {\r\n videoSettings.player.pause();\r\n return;\r\n };\r\n const newTime = videoSettings.player.currentTime() * (100 / videoSettings.player.duration());\r\n this._elements.$seekslider[0].value = newTime;\r\n let curmins = Math.floor(videoSettings.player.currentTime() / 60);\r\n let cursecs = Math.floor(videoSettings.player.currentTime() - curmins * 60);\r\n let durmins = Math.floor(videoSettings.player.duration() / 60);\r\n let dursecs = Math.floor(videoSettings.player.duration() - durmins * 60);\r\n if(cursecs < 10){ cursecs = \"0\"+cursecs; }\r\n if(dursecs < 10){ dursecs = \"0\"+dursecs; }\r\n if(curmins < 10){ curmins = \"0\"+curmins; }\r\n if(durmins < 10){ durmins = \"0\"+durmins; }\r\n this._elements.$currentTime.html(curmins+\":\"+cursecs);\r\n this._elements.$durationTime.html(durmins+\":\"+dursecs);\r\n })\r\n }\r\n\r\n _setVolume() {\r\n const videoSettings = this._elements.$video[0];\r\n \r\n this._elements.$volume.on('click', (e) => {\r\n \r\n const volumeValue = e.currentTarget.value / 100;\r\n \r\n if (volumeValue === 0) {\r\n videoSettings.player.volume(.25);\r\n this._elements.$volumeMute.hide();\r\n this._elements.$volume25.show();\r\n } else if (volumeValue === .25) {\r\n videoSettings.player.volume(.5);\r\n this._elements.$volume25.hide();\r\n this._elements.$volume50.show();\r\n } else if (volumeValue === .50) {\r\n videoSettings.player.volume(.75);\r\n this._elements.$volume50.hide();\r\n this._elements.$volume75.show();\r\n } else if (volumeValue === .75) {\r\n videoSettings.player.volume(1);\r\n this._elements.$volume75.hide();\r\n this._elements.$volume100.show();\r\n } else if (volumeValue === 1) {\r\n videoSettings.player.volume(0);\r\n this._elements.$volume100.hide();\r\n this._elements.$volumeMute.show();\r\n }\r\n })\r\n }\r\n\r\n _setFullscreen() {\r\n const videoSettings = this._elements.$video[0];\r\n this._elements.$fullscreen.on('click', () => {\r\n \r\n if (!this._$rootElement.parent().hasClass(config.classNames.overlay)) {\r\n if (this._$rootElement.hasClass(config.classNames.fullscreen)) {\r\n this._$rootElement.removeClass(config.classNames.fullscreen);\r\n this._$rootElement.find('.video__fullscreen-icon').removeClass('icon-arrowShrink').addClass('icon-StateDark13');\r\n } else {\r\n this._$rootElement.addClass(config.classNames.fullscreen)\r\n this._$rootElement.find('.video__fullscreen-icon').removeClass('icon-StateDark13').addClass('icon-arrowShrink');\r\n // this._elements.$backdrop.addClass('');\r\n }\r\n }\r\n\r\n\r\n });\r\n }\r\n\r\n _screenClick() {\r\n const videoSettings = this._elements.$video[0];\r\n this._elements.$video.on('click', (e) => {\r\n const videoPaused = this._elements.$video.hasClass('vjs-paused');\r\n\r\n if (videoPaused) {\r\n videoSettings.player.play();\r\n this._seeksliderTimeUpdate(videoSettings);\r\n this._elements.$playPauseBtn.html(config.pauseIcon);\r\n } else {\r\n videoSettings.player.pause();\r\n this._elements.$playPauseBtn.html(config.playIcon);\r\n }\r\n })\r\n }\r\n\r\n\r\n\r\n _createMenuItems(id, lang, label) {\r\n const videoSettings = this._elements.$video[0];\r\n const captionsMenuButtons = [];\r\n const listItem = document.createElement('li');\r\n const button = listItem.appendChild(document.createElement('button'));\r\n button.setAttribute('id', id);\r\n button.classList.add('video__captions-button');\r\n if (lang?.length > 0) button.setAttribute('lang', lang);\r\n button.value = label;\r\n button.setAttribute('data-state', 'inactive');\r\n button.appendChild(document.createTextNode(label));\r\n\r\n $(button).on('click', (v, i, a) => {\r\n captionsMenuButtons.map(() => {\r\n captionsMenuButtons[i].setAttribute('data-state', 'inactive');\r\n });\r\n const lang = this.getAttribute('lang');\r\n for (let i = 0; i < videoSettings.textTracks.length; i++) {\r\n if (videoSettings.textTracks[i].language == lang) {\r\n videoSettings.textTracks[i].mode = 'showing';\r\n this.setAttribute('data-sate', 'active');\r\n } else {\r\n videoSettings.textTracks[i].mode = 'hidden';\r\n }\r\n }\r\n $('video__captions-menu')[0].style.display = 'none';\r\n });\r\n captionsMenuButtons.push(button);\r\n return listItem;\r\n\r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('Video', Video);\r\nmoduleRegistry.autoApplyModule('Video', config.selectors.root);","import moduleRegistry from '../module-registry/module-registry';\n\nconst config = {\n selectors: {\n root: '.legal-overlay',\n checkbox: '.legal-overlay__checkbox',\n openBox: '.legal-overlay--open'\n },\n ids: {\n submit: 'cookie-confirm-btn',\n cancle: 'cookie-cancel-btn'\n },\n class: {\n rootOpen: 'legal-overlay--open'\n }\n \n};\n\nclass LegalOverlay {\n constructor($rootElement) {\n this._$rootElement = $rootElement;\n }\n\n init() {\n this._elements = this._getDomElements();\n this._addEventListeners();\n \n $(config.selectors.root).addClass('legal-overlay--open')\n if($(config.selectors.root).hasClass('legal-overlay--open')) {\n $('body').addClass('body--no-scroll')\n }\n }\n\n _getDomElements() {\n return {\n $root: this._$rootElement.find(config.selectors.root),\n $submit: document.getElementById(config.ids.submit),\n $cancle: document.getElementById(config.ids.cancle),\n $checkbox: this._$rootElement.find(config.selectors.checkbox),\n $openBox: this._$rootElement.find(config.selectors.openBox)\n };\n }\n\n _addEventListeners() {\n $(this._elements.$submit).on('click', (event) => {\n event.stopPropagation();\n if(!$(this._elements.$checkbox).checked) {\n $(this._elements.$checkbox).addClass('required')\n }else {\n $(this._elements.$checkbox).removeClass('required')\n $('body').removeClass('body--no-scroll')\n }\n })\n\n $(this._elements.$cancle).on('click', (event) => {\n event.stopPropagation();\n $('body').removeClass('body--no-scroll')\n })\n\n\n $(this._elements.$checkbox).on('click', (event) => {\n \n if($(this._elements.$checkbox)) {\n $(this._elements.$checkbox).removeClass('required')\n }\n \n })\n }\n\n \n}\n\nmoduleRegistry.registerModule('LegalOverlay', LegalOverlay);\nmoduleRegistry.autoApplyModule('LegalOverlay', config.selectors.root);","import { Breakpoints } from '../breakpoints/breakpoints';\r\nimport moduleRegistry from '../module-registry/module-registry';\r\n\r\nconst config = {\r\n selectors: {\r\n root: '.carousel-hero',\r\n slides: '.carousel-hero__slides',\r\n slide: '.carousel-hero__slide',\r\n next: '.carousel-hero__next',\r\n prev: '.carousel-hero__prev',\r\n nextSlide: '.carousel-hero__slide--next',\r\n prevSlide: '.carousel-hero__slide--prev',\r\n dots: '.carousel-hero__dots',\r\n dot: '.carousel-hero__dot',\r\n greyDot: '.carousel-hero__dot-grey',\r\n activeDot: '.carousel-hero__dot--active',\r\n playPauseBtn: '.carousel-hero__play-pause-btn',\r\n playPauseBtnIcon: '.carousel-hero__play-pause-btn-icon',\r\n playPauseBtnImageVideoTile: '.image-video-tile__play-pause-btn-icon',\r\n\r\n },\r\n classNames: {\r\n header: 'carousel-hero--header',\r\n slideDotActive: 'carousel-hero__dot--active',\r\n slideDotsPaused: 'carousel-hero__dots--paused',\r\n btnPlaying: 'carousel-hero__play-pause-btn--playing',\r\n slideActive: 'carousel-hero__slide--active',\r\n slidePrev: 'carousel-hero__slide--prev',\r\n slideNext: 'carousel-hero__slide--next',\r\n playIcon: 'icon-TickCirclePlay3',\r\n pauseIcon: 'icon-TickCirclePause3',\r\n imageVideoTilePlayIcon: 'image-video-tile__play-pause-btn-icon--play',\r\n imageVideoTilePauseIcon: 'image-video-tile__play-pause-btn-icon--pause',\r\n },\r\n dataAttributes: {\r\n slides: 'slides',\r\n slide: 'slide',\r\n dotnumber: 'dotnumber',\r\n imageLength: 'image-length',\r\n },\r\n sliderConfig: {\r\n arrows: false,\r\n dots: false,\r\n infinite: true,\r\n speed: 750,\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n mobileFirst: true,\r\n autoplay: true,\r\n autoplaySpeed: 4000,\r\n responsive: [\r\n {\r\n breakpoint: Breakpoints.BREAKPOINTS.SM,\r\n settings: {\r\n arrows: false,\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n centerMode: true,\r\n centerPadding: '8.33%',\r\n },\r\n },\r\n ],\r\n },\r\n sliderConfigHero: {\r\n arrows: false,\r\n dots: false,\r\n infinite: true,\r\n speed: 750,\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n mobileFirst: true,\r\n autoplay: false,\r\n autoplaySpeed: 4000,\r\n responsive: [\r\n {\r\n breakpoint: Breakpoints.BREAKPOINTS.SM,\r\n settings: {\r\n arrows: false,\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n centerMode: true,\r\n },\r\n },\r\n ],\r\n },\r\n sliderConfigProducts: {\r\n dots: false,\r\n arrows: false,\r\n infinite: true,\r\n speed: 750,\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n mobileFirst: true,\r\n autoplay: false,\r\n autoplaySpeed: 2500,\r\n centerPadding: '8.33%',\r\n responsive: [\r\n {\r\n breakpoint: Breakpoints.BREAKPOINTS.LG,\r\n settings: {\r\n arrows: false,\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n centerMode: true,\r\n centerPadding: '8.33%',\r\n },\r\n \r\n }\r\n ],\r\n },\r\n};\r\n\r\nclass CarouselHero {\r\n constructor($rootElement) {\r\n this._$rootElement = $rootElement;\r\n this._elements = null;\r\n this._isPaused = false;\r\n this._slides = [];\r\n this._currentSlide = 0;\r\n this._isInitialized = false;\r\n this._nextSlides = [];\r\n this._prevSlides = [];\r\n this._doneFix = false;\r\n this._imageDuration = 5000;\r\n this._currentTime = 0;\r\n this._timer = null;\r\n this._isPlaying = false;\r\n }\r\n\r\n async init() {\r\n const _this = this;\r\n this._elements = this._getDomElements();\r\n\r\n if (this._$rootElement.hasClass(config.classNames.header)) {\r\n this._elements.$slides.slick(config.sliderConfigHero);\r\n } else if (this._$rootElement.hasClass('carousel-hero--products')) {\r\n this._elements.$slides.slick(config.sliderConfigProducts);\r\n } else {\r\n this._elements.$slides.slick(config.sliderConfig);\r\n }\r\n\r\n if(this._$rootElement.hasClass(config.classNames.header)) {\r\n // read data attribute\r\n if(this._$rootElement.data(config.dataAttributes.imageLength)) {\r\n this._imageDuration = this._$rootElement.data(config.dataAttributes.imageLength) || 5000;\r\n }\r\n\r\n _this._updateDots(0);\r\n _this._updateClasses();\r\n _this._onSlideChange();\r\n\r\n this._elements.$slides.on('beforeChange', async (event, slick, currentSlide, nextSlide) => {\r\n clearInterval(_this._timer);\r\n _this._isPlaying = true;\r\n _this._currentSlide = nextSlide;\r\n _this._updateDots(nextSlide);\r\n _this._updateClasses();\r\n _this._onSlideChange();\r\n });\r\n\r\n this._elements.$next.on('click', () => {\r\n this._pauseAllVideos();\r\n this._isPlaying = false;\r\n this._elements.$slides.slick('slickNext');\r\n });\r\n \r\n this._elements.$prev.on('click', () => {\r\n this._pauseAllVideos();\r\n this._isPlaying = false;\r\n\r\n if (this._currentSlide === 0) {\r\n this._goToSlide(this._elements.$slide.length - 1);\r\n } else {\r\n this._elements.$slides.slick('slickPrev');\r\n }\r\n });\r\n\r\n this._elements.$greyDot.on('click', (e) => {\r\n this._isPlaying = false;\r\n const $currentTarget = $(e.currentTarget);\r\n const dotnumber = $currentTarget[0].lastElementChild.getAttribute('data-dotnumber');\r\n this._goToSlide(dotnumber);\r\n });\r\n } else {\r\n this._addEventListeners();\r\n this._updateDots(0);\r\n this._updateClasses();\r\n }\r\n\r\n this._isInitialized = true;\r\n }\r\n\r\n _getDomElements() {\r\n return {\r\n $slides: this._$rootElement.find(config.selectors.slides),\r\n $slide: this._$rootElement.find(config.selectors.slide),\r\n $next: this._$rootElement.find(config.selectors.next),\r\n $prev: this._$rootElement.find(config.selectors.prev),\r\n $dots: this._$rootElement.find(config.selectors.dots),\r\n $dot: this._$rootElement.find(config.selectors.dot),\r\n $greyDot: this._$rootElement.find(config.selectors.greyDot),\r\n $playPauseBtn: this._$rootElement.find(config.selectors.playPauseBtn),\r\n $playPauseBtnIcon: this._$rootElement.find(config.selectors.playPauseBtnIcon),\r\n };\r\n }\r\n\r\n _addEventListeners() {\r\n const _this = this;\r\n this._elements.$playPauseBtn.on('click', () => {\r\n this._isPaused = !this._isPaused;\r\n const $btn = this._$rootElement.find(config.selectors.playPauseBtn);\r\n if (this._isPaused) {\r\n this._elements.$slides.slick('slickPause');\r\n $btn.removeClass(config.classNames.btnPlaying);\r\n this._elements.$playPauseBtnIcon.removeClass(config.classNames.pauseIcon);\r\n this._elements.$playPauseBtnIcon.addClass(config.classNames.playIcon);\r\n this._elements.$dots.addClass(config.classNames.slideDotsPaused);\r\n } else {\r\n this._elements.$slides.slick('slickPlay');\r\n $btn.addClass(config.classNames.btnPlaying);\r\n this._elements.$playPauseBtnIcon.removeClass(config.classNames.playIcon);\r\n this._elements.$playPauseBtnIcon.addClass(config.classNames.pauseIcon);\r\n this._elements.$dots.removeClass(config.classNames.slideDotsPaused);\r\n }\r\n });\r\n\r\n this._elements.$greyDot.on('click', (e) => {\r\n const $currentTarget = $(e.currentTarget);\r\n const dotnumber = $currentTarget[0].lastElementChild.getAttribute('data-dotnumber');\r\n this._goToSlide(dotnumber);\r\n });\r\n\r\n this._elements.$next.on('click', () => {\r\n const videoSettings = this._$rootElement.find('.slick-current').find('.video-js')[0];\r\n if (videoSettings) {\r\n videoSettings.player.pause();\r\n $(config.selectors.playPauseBtnImageVideoTile).removeClass(config.classNames.pauseImageVideoTile)\r\n $(config.selectors.playPauseBtnImageVideoTile).addClass(config.classNames.playImageVideoTile)\r\n }\r\n this._elements.$slides.slick('slickNext');\r\n });\r\n\r\n this._elements.$prev.on('click', () => {\r\n const videoSettings = this._$rootElement.find('.slick-current').find('.video-js')[0];\r\n if (videoSettings) {\r\n videoSettings.player.pause();\r\n $(config.selectors.playPauseBtnImageVideoTile).removeClass(config.classNames.pauseImageVideoTile)\r\n $(config.selectors.playPauseBtnImageVideoTile).addClass(config.classNames.playImageVideoTile)\r\n }\r\n if (this._currentSlide === 0) {\r\n this._goToSlide(2);\r\n } else {\r\n this._elements.$slides.slick('slickPrev');\r\n }\r\n });\r\n\r\n this._$rootElement.find(config.selectors.slide).on('click', (x) => {\r\n const $slide = x.currentTarget.attributes.class.value;\r\n if ($slide.includes(config.classNames.slideNext)) {\r\n this._elements.$slides.slick('slickNext');\r\n } else if ($slide.includes(config.classNames.slidePrev)) {\r\n if (this._currentSlide === 0) {\r\n this._goToSlide(2);\r\n } else {\r\n this._elements.$slides.slick('slickPrev');\r\n }\r\n }\r\n });\r\n\r\n this._$rootElement.on('beforeChange', (event, slick, currentSlide, nextSlide) => {\r\n _this._currentSlide = nextSlide;\r\n _this._updateDots(nextSlide);\r\n _this._updateClasses();\r\n });\r\n\r\n this._$rootElement.on('breakpoint', (event, slick, currentSlide, nextSlide) => {\r\n _this._updateClasses();\r\n });\r\n }\r\n\r\n _pauseAllVideos() {\r\n this._$rootElement.find('.video-js').each((i, video) => {\r\n if(video && video.player) {\r\n video.player.pause();\r\n }\r\n });\r\n }\r\n\r\n _onVideoTimerTick() {\r\n const $currentSlide = $(this._elements.$slide[this._currentSlide]);\r\n const $video = $currentSlide.find('.video-js');\r\n const videoDuration = $video[0].player.duration() * 1000;\r\n const currentTime = $video[0].player.currentTime() * 1000;\r\n\r\n if(currentTime >= videoDuration) {\r\n clearInterval(this._timer);\r\n this._isPlaying = false;\r\n this._elements.$slides.slick('slickNext');\r\n\r\n return;\r\n }\r\n\r\n if(this._isPlaying) {\r\n this._currentTime = currentTime;\r\n }\r\n }\r\n\r\n _onImageTimerTick() {\r\n if((this._currentTime * 1000) >= this._imageDuration) {\r\n clearInterval(this._timer);\r\n this._isPlaying = false;\r\n this._elements.$slides.slick('slickNext');\r\n \r\n\r\n return;\r\n }\r\n \r\n if(this._isPlaying) {\r\n this._currentTime += 1;\r\n }\r\n }\r\n\r\n async _onSlideChange() {\r\n const _this = this;\r\n const $currentSlide = $(this._elements.$slide[this._currentSlide]);\r\n const $video = $currentSlide.find('.video-js');\r\n\r\n const isVideo = !($video.length === 0);\r\n this._pauseAllVideos();\r\n \r\n if(isVideo) {\r\n $currentSlide.find('.image-video-tile__play-pause-btn-icon').removeClass(config.classNames.imageVideoTilePlayIcon);\r\n $currentSlide.find('.image-video-tile__play-pause-btn-icon').addClass(config.classNames.imageVideoTilePauseIcon);\r\n\r\n \r\n\r\n try {\r\n $video.find('video')[0].removeAttribute(\"loop\");\r\n $video[0].removeAttribute(\"loop\");\r\n $video[0].player.loop(false);\r\n $video[0].player.muted(true);\r\n \r\n const promise = await $video[0].player.play();\r\n\r\n $currentSlide.find('.image-video-tile__image-wrapper').hide();\r\n $currentSlide.find('.image-video-tile__video-wrapper').show();\r\n $currentSlide.find('.image-video-tile__play-pause-btn-icon').removeClass(config.classNames.imageVideoTilePlayIcon);\r\n $currentSlide.find('.image-video-tile__play-pause-btn-icon').addClass(config.classNames.imageVideoTilePauseIcon);\r\n\r\n this._isPlaying = true;\r\n \r\n\r\n this._timer = setInterval(async function () {\r\n _this._onVideoTimerTick();\r\n }, 10);\r\n } catch (error) {\r\n // console.log('error', error);\r\n this._currentTime = 0;\r\n this._isPlaying = true;\r\n this._timer = setInterval(async function () {\r\n _this._onImageTimerTick();\r\n }, 1000);\r\n }\r\n } else {\r\n this._currentTime = 0;\r\n this._isPlaying = true;\r\n this._timer = setInterval(async function () {\r\n _this._onImageTimerTick();\r\n }, 1000);\r\n }\r\n }\r\n\r\n \r\n\r\n _updateClasses() {\r\n let $currentEl = null;\r\n this._prevSlides = [];\r\n this._nextSlides = [];\r\n \r\n\r\n this._$rootElement.find(config.selectors.slide).each((i, el) => {\r\n const $el = $(el);\r\n $el.removeClass(config.classNames.slidePrev);\r\n $el.removeClass(config.classNames.slideNext);\r\n $el.removeClass(config.classNames.slideActive);\r\n\r\n if (this._currentSlide === i) {\r\n $currentEl = $el;\r\n }\r\n\r\n if (this._isInitialized && this._currentSlide === 0 && $el.data('slick-index') === 3) {\r\n $el.addClass(config.classNames.slideActive);\r\n // this._$rootElement.find('[data-slick-index=1]').addClass(config.classNames.slidePrev);\r\n this._$rootElement.find('[data-slick-index=2]').addClass(config.classNames.slidePrev);\r\n this._$rootElement.find('[data-slick-index=4]').addClass(config.classNames.slidePrev);\r\n return;\r\n }\r\n\r\n if ($el.data('slick-index') < this._currentSlide) {\r\n if(!$el.hasClass(config.selectors.nextSlide)) {\r\n $el.addClass(config.classNames.slidePrev);\r\n this._prevSlides.push($el);\r\n }\r\n } else if (this._currentSlide === $el.data('slick-index')) {\r\n $el.addClass(config.classNames.slideActive);\r\n } else if ($el.data('slick-index') > this._currentSlide) {\r\n $el.addClass(config.classNames.slideNext);\r\n this._nextSlides.push($el);\r\n }\r\n });\r\n\r\n this._doneFix = true;\r\n }\r\n\r\n _updateDots(index) {\r\n const $items = this._$rootElement.find(config.selectors.dot);\r\n $items.removeClass(config.classNames.slideDotActive);\r\n $($items[index % $items.length]).addClass(config.classNames.slideDotActive);\r\n }\r\n\r\n _goToSlide(dotnumber) {\r\n this._currentSlide = dotnumber;\r\n this._elements.$slides.slick('slickGoTo', dotnumber);\r\n }\r\n}\r\n\r\nmoduleRegistry.registerModule('CarouselHero', CarouselHero);\r\nmoduleRegistry.autoApplyModule('CarouselHero', config.selectors.root);\r\n","import moduleRegistry from './module-registry/module-registry';\r\n\r\n// // Online-Catalogue\r\n// import '../../online-cataloge-pages/scripts/modules/main';\r\n\r\n// static imports start\r\n\r\nimport './scrolling/scrolling';\r\n\r\n// static imports end\r\n\r\nimport './abbreviation/abbreviation';\r\nimport './accordion-modul/accordion-modul';\r\nimport './anchor-section-bar/anchor-section-bar';\r\nimport './article-header/article-header';\r\nimport './bar-carousel/bar-carousel';\r\nimport './card-tiles/card-tiles';\r\nimport './category-overview/category-overview';\r\nimport './contact-accordion/contact-accordion';\r\nimport './cta-button/cta-button';\r\nimport './detail-form/detail-form';\r\nimport './directory/directory';\r\nimport './editorial/editorial';\r\nimport './footer/footer';\r\nimport './gallery/gallery';\r\nimport './image-slider/image-slider';\r\nimport './image-video-tile/image-video-tile';\r\nimport './interactive-launcher/interactive-launcher';\r\nimport './intro/intro';\r\nimport './language-form/language-form';\r\nimport './lightbox-slider/lightbox-slider';\r\nimport './location-map/location-map';\r\nimport './media/media';\r\nimport './navigation/navigation';\r\nimport './navigation/navigation-link-groups';\r\nimport './number-overview/number-overview';\r\nimport './one-trust-overlay/one-trust-overlay';\r\nimport './overlay-footer/overlay-footer';\r\nimport './overlay/overlay';\r\nimport './paralax-section/paralax-section';\r\nimport './search-bar/search-bar';\r\nimport './share/share';\r\nimport './slim-hero/slim-hero';\r\nimport './speciality-hero/speciality-hero';\r\nimport './sticky-section/sticky-section';\r\nimport './textblock/textblock';\r\nimport './timeline/timeline';\r\nimport './video-round/video-round';\r\nimport './video/video';\r\nimport './legal-overlay/legal-overlay';\r\n// import './large-image-video-tile-hero/large-image-video-tile-hero';\r\n\r\n// need to be after image video tile\r\nimport './carousel-hero/carousel-hero';\r\n// should be last\r\n// import './hover-icon/hover-icon';\r\n\r\nwindow.client = {\r\n moduleRegistry,\r\n};\r\n\r\n(() => {\r\n const navigatorUserAgentToLowerCase = window.navigator.userAgent.toLowerCase();\r\n const isChrome = navigatorUserAgentToLowerCase.indexOf('chrome');\r\n // eslint-disable-next-line no-unused-vars\r\n const isFirefox = navigatorUserAgentToLowerCase.indexOf('firefox');\r\n const isSafari = navigatorUserAgentToLowerCase.indexOf('safari');\r\n\r\n if (isSafari !== -1 && isChrome === -1) {\r\n document.body.setAttribute('class', 'safari');\r\n }\r\n})();\r\n\r\n/**\r\n // eslint-disable-next-line max-len, max-len\r\n * @description This function initializes Events for\r\n * buttons which should initialize the contact vue app\r\n * @author ALI\r\n */\r\n(() => {\r\n const $el = $('*[data-specialist]');\r\n\r\n $el.on('click', (e) => {\r\n console.log(e);\r\n const speciality = $el.data('specialist');\r\n const tabIndex = $el.data('tab-index') || 0;\r\n const prefilledSpeciality = $el.data('prefilled-speciality') || '';\r\n\r\n if (speciality) {\r\n window.dispatchEvent(new CustomEvent('ContactAppInit', { detail: { initialTabIndex: tabIndex, speciality: speciality, prefilledSpeciality: prefilledSpeciality } }));\r\n\r\n const html = `\r\n
    \r\n
    `;\r\n\r\n $(e.currentTarget).append(html);\r\n }\r\n });\r\n})();\r\n"]}