{"version":3,"sources":["scripts/typescript/carousels.ts","scripts/typescript/sticky-header.ts","scripts/typescript/tooltip-web-scroll.ts","scripts/typescript/action-tracker.ts","scripts/typescript/ajax-loader-request.ts","scripts/typescript/ajax-loader.ts","scripts/typescript/collapse.ts","scripts/typescript/sub-features-equal-height.ts","scripts/typescript/tooltip-manager.mobileshop.ts"],"names":["carousels","stickyHeader","AAS","scopeForCarousel","ActionTracker","triggerActionEvent","document","querySelector","setTimeout","eventAggregator","publish","actionSubject","actionType","readyState","addEventListener","triggerOpenDetailsEvent","AjaxLoaderRequest","apiUrl","isMobileShop","this","prototype","requestFor","savKeyToLoad","content","itemOrigin","detailsCanBeHidden","displayedInCategoryNavKey","showHeader","_this","Promise","resolve","url","getAjaxUrl","request","XMLHttpRequest","onreadystatechange","status","responseText","ontimeout","open","timeout","send","savKey","concat","AjaxLoader","ajaxLoader","getApiUrl","window","shell","subscribeTo","payload","update","Object","defineProperty","_instance","dataset","apiurl","classList","contains","queryAas","queryString","querySelectorAll","event","detail","targetContent","scopesToUpdate","scopesToUpdateArray","Array","slice","call","_i","scopesToUpdateArray_1","length","scope","updateOneScope","isTrue","value","toString","toLowerCase","displayedInCategoryNavkey","ajaxResponse","_b","sent","replace","initJsComponents","publishTo","newAas","forEach","basketLink","redesignOrderModalLinkCallback","bind","_a","documentElement","addTabNavigationEvents","addTabNavigationToMpcButtons","message","target","currentTarget","salesArticleNo","salesarticleno","masterArticleNo","masterarticleno","colorCode","colorcode","sizeCode","sizecode","itemorigin","links","StickyHeader","once","Carousels","SubFeaturesEqualHeight","link","containsQueryParameter","getAttribute","indexOf","setAttribute","button","key","click","code","preventDefault","d","div","a","anchor","response","createElement","aasToReplace","innerHTML","parentNode","replaceChild","triggerAppShellUpdate","savKeyToReplace","instance","aasScope","getElementsByTagName","initCarousel","bindEvents","updatePager","currentIndex","currentIndexSelector","getSelectorFromCardIndex","wrappers","wrappersArray_1","add","dots","cardsCount","aasContent","bindNext","bindPrev","Hammer","Manager","domEvents","recognizers","Swipe","direction","DIRECTION_HORIZONTAL","threshold","velocity","drag_block_vertical","on","gestureAngle","Math","abs","angle","goPrev","goNext","index","nextButton","stopPropagation","nextIndex","updateIndexSelector","prevButton","prevIndex","newIndex","newIndexSelector","wrappersArray_2","element","remove","card","pagerWrappers","pagerWrapperArray_1","pagerDots","pagerDotsArray","pagerDotsArray_1","scopeForStickyHeader","Collapse","subFeatureEqualHeightCalculator","rowHeight","separators","separatorArray","details","detailElements","saveRowHeight","bindCollapseEvents","bindToggleOnlyDifferences","bindToggleShowDetails","adjustFallbackIconContainerHeight","collapseAble","collapseAbleArray_1","row","rowIndex","rowWrapper","height","style","clientHeight","removeProperty","String","bindToggleRow","bindToggleAllRows","shouldFold","clickedSeparator","closest","setRowHeight","collapseAllButton","separator","toggle","toggleOnlyDifferences","showOnlyDifferencesButton","subFeatures","subFeaturesArray","detailElement","_c","_d","subFeaturesArray_1","subFeature","setEqualHeightForEachSubFeature","loadingSpinner","clickedButton","showOnlyDifferences","toggleSameFeatures","updateSameSubFeatures","sameFeatures","sameFeaturesArray_1","sameFeature","parentElement","featureWithSameSubFeatures","featureWithSameSubFeaturesArray_1","feature","rowWithSubFeatures","rowWithSubFeaturesArray","featureRowIsFolded","rowWithSubFeaturesArray_1","adjustSubFeatureStyles","updateRowHeight","subFeatureContainers","subFeatureContainersArray_1","container","adjustLastSubFeatureDividerVisibility","lastVisibleBeforeUpdate","visibleNow","lastVisibleNow","isFolded","fold","rowElements","rowElementsArray","rowElementsArray_1","savFilterValues","featureValueRowToAdjust","savFilterValue","savFilterFeatureValue","featureRowIdentifier","featureRow","featureValueRow","featureIndex","push","featureRowIdentifierParts","split","fallbackIcon","shouldSticky","consumerCssModification","isPDP","getElementById","aasSalesDesignationHeader","salesDesignation","originalSalesDesignationOffSetTop","offsetTop","bindEvent","setInterval","didScroll","setHeaderSticky","rebindScrollContainer","saveConsumerViewChange","useStickyHeader","cssModification","salesdesignationHeaderViewSticky","setConsumerViewChange","topPosition","scrollPosition","scrollTop","pageYOffset","imageLoadingCounter","selectedSubFeatures","selectedSubFeatureArray","subFeatureImages","textModulesTextOnly","subFeatureImageArray","setImageLoadingMonitor","image","complete","imageLoadFinished","rowSelected","rowWrapperElement","subFeatureSelectedRow","subFeatureWrapperRow","subFeatureRowArray","subFeatureRowArray2","subFeatureRowArray_1","subFeatureRow","subFeatureIndex","filter","sf","maxOfHeight","unshift","this_1","getMaxOfHeight","setSubFeatureHeight","subFeatureHeightArray","subFeatures_1","max","apply","subFeatures_2","ToolTipManagerMobileView","triggerInitToolTips","selector","scopeAas","initToolTips","toolTipContainersList","toolTipContainers","modal","b","onclick","display","toolTipContainers_1","toolTipContainer","infoIcons","toolTipContent","infoIconArray_1","ToolTipScroll","closeDelay","registerEvents","aasToolTipContainer","aasToolTipContainerArray_1","aasTooltipContainer","aasTooltip","handleMouseOverTooltipEvent","handleMouseLeaveTooltipEvent","aasToolTip","closeOpenTooltips","scrollTooltipIntoViewportIfNeeded","allTooltips","allTooltipsArray_1","ttTop","getBoundingClientRect","top","currentToolTipHeight","shouldScrollUp","shouldScrollDown","positionToScrollTo","innerHeight","supportsNativeSmoothScroll","scrollBy","behavior","smoothScrollBy"],"mappings":"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","file":"aas-bundle.js","sourcesContent":["/// \r\nnamespace AAS {\r\n export class Carousels {\r\n private cardsCount: number;\r\n private currentIndex: number;\r\n constructor(private readonly aasScope: HTMLElement, public readonly savKey?: string) {\r\n const isMobileShop: boolean = document.getElementsByTagName('html')[0].classList.contains('mobileshop');\r\n if (!isMobileShop) {\r\n return;\r\n }\r\n this.initCarousel(aasScope);\r\n this.bindEvents(aasScope);\r\n this.updatePager();\r\n }\r\n\r\n private initCarousel(scope: HTMLElement): void {\r\n // always start from beginning\r\n this.currentIndex = 0;\r\n const currentIndexSelector = this.getSelectorFromCardIndex(this.currentIndex);\r\n\r\n //assign init position for all cards and wrappers\r\n const wrappers = scope.querySelectorAll('.wrapper');\r\n const wrappersArray: Array = Array.prototype.slice.call(wrappers);\r\n for (const element of wrappersArray) {\r\n element.classList.add(currentIndexSelector);\r\n }\r\n const card = scope.querySelector('.aas-card');\r\n card.classList.add(currentIndexSelector);\r\n\r\n //get total count of cards from pager\r\n const dotWrapper = scope.querySelector('.pager-dot-wrapper');\r\n const dots = dotWrapper.querySelectorAll('.pager-dot');\r\n this.cardsCount = dots.length;\r\n }\r\n\r\n private bindEvents(scope: HTMLElement): void {\r\n this.bindNext(scope);\r\n this.bindPrev(scope);\r\n const aasContent: HTMLElement = scope.querySelector('.aas-content') as HTMLElement;\r\n const hammertime = new Hammer.Manager(aasContent, {\r\n domEvents: true,\r\n recognizers: [\r\n [Hammer.Swipe, { direction: Hammer.DIRECTION_HORIZONTAL, threshold: 5, velocity: 0.1 }]\r\n ],\r\n drag_block_vertical: true\r\n });\r\n\r\n hammertime.on('swipe', (event: HammerInput) => {\r\n const gestureAngle: number = Math.abs(event.angle);\r\n if (gestureAngle >= 0 && gestureAngle <= 45) {\r\n //swipe to right, within a cone of +/-45deg\r\n this.goPrev();\r\n } else if (gestureAngle >= 135 && gestureAngle <= 180) {\r\n //swipe to left, within a cone of +/-45deg\r\n this.goNext();\r\n }\r\n });\r\n }\r\n\r\n private getSelectorFromCardIndex(index: number): string {\r\n return 'card-' + index.toString();\r\n }\r\n\r\n private bindNext(scope: HTMLElement): void {\r\n const nextButton: Element = scope.querySelector('.pager-arrow-right');\r\n if (nextButton) {\r\n nextButton.addEventListener('click', (event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.goNext();\r\n });\r\n }\r\n }\r\n\r\n private goNext() {\r\n const nextIndex = (this.currentIndex + 1) < this.cardsCount ? this.currentIndex + 1 : this.currentIndex;\r\n this.updateIndexSelector(nextIndex);\r\n }\r\n\r\n private bindPrev(scope: HTMLElement): void {\r\n const prevButton: Element = scope.querySelector('.pager-arrow-left');\r\n if (prevButton) {\r\n prevButton.addEventListener('click', (event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.goPrev();\r\n });\r\n }\r\n }\r\n\r\n private goPrev() {\r\n const prevIndex = (this.currentIndex - 1) >= 0 ? this.currentIndex - 1 : this.currentIndex;\r\n this.updateIndexSelector(prevIndex);\r\n }\r\n\r\n private updateIndexSelector(newIndex: number) {\r\n if (newIndex === this.currentIndex) {\r\n return;\r\n }\r\n\r\n const currentIndexSelector: string = this.getSelectorFromCardIndex(this.currentIndex);\r\n const newIndexSelector: string = this.getSelectorFromCardIndex(newIndex);\r\n const wrappers = this.aasScope.querySelectorAll('.wrapper');\r\n const wrappersArray: Array = Array.prototype.slice.call(wrappers);\r\n for (const element of wrappersArray) {\r\n element.classList.add(newIndexSelector);\r\n element.classList.remove(currentIndexSelector);\r\n }\r\n\r\n const card = this.aasScope.querySelector('.aas-card');\r\n card.classList.remove(currentIndexSelector);\r\n card.classList.add(newIndexSelector);\r\n\r\n this.currentIndex = newIndex;\r\n\r\n //Also update pager\r\n this.updatePager();\r\n }\r\n\r\n private updatePager() {\r\n const pagerWrappers: NodeListOf = this.aasScope.querySelectorAll('.pager-dot-wrapper');\r\n const pagerWrapperArray: Array = Array.prototype.slice.call(pagerWrappers);\r\n for (const element of pagerWrapperArray) {\r\n const pagerDots = element.querySelectorAll('.pager-dot');\r\n const pagerDotsArray: Array = Array.prototype.slice.call(pagerDots);\r\n for (const dot of pagerDotsArray) {\r\n dot.classList.remove('current-dot');\r\n }\r\n pagerDotsArray[this.currentIndex].classList.add('current-dot');\r\n }\r\n \r\n const prevButton: HTMLElement = this.aasScope.querySelector('.pager-arrow-left') as HTMLElement;\r\n const nextButton: HTMLElement = this.aasScope.querySelector('.pager-arrow-right') as HTMLElement;\r\n prevButton.classList.remove('hidden');\r\n nextButton.classList.remove('hidden');\r\n if (this.currentIndex === 0) {\r\n prevButton.classList.add('hidden');\r\n } else if (this.currentIndex === (this.cardsCount - 1)) {\r\n nextButton.classList.add('hidden');\r\n }\r\n }\r\n }\r\n}\r\n\r\n//ToDo: find a better way to init this\r\n//ToDo: should consider multiple instance problem\r\n//ToDo: should be identifiable via savKey or something\r\n// For now, just init for first instance of aas scope\r\nconst scopeForCarousel = document.querySelectorAll('.scope-aas')[0] as HTMLElement;\r\n\r\nif (scopeForCarousel && scopeForCarousel.querySelector('.aas-grid')) {\r\n const carousels = new AAS.Carousels(scopeForCarousel);\r\n}\r\n\r\n","namespace AAS {\r\n export class StickyHeader {\r\n private aasScope: HTMLElement;\r\n private aasSalesDesignationHeader: HTMLElement;\r\n private originalSalesDesignationOffSetTop: number;\r\n private didScroll: boolean;\r\n private aasContent: HTMLElement;\r\n private consumerCssModification = '';\r\n private isPDP = false;\r\n\r\n constructor(public readonly savKey: string, public readonly content: string, private shouldSticky: boolean = false) {\r\n const isMobileShop: boolean = document.getElementsByTagName('html')[0].classList.contains('mobileshop');\r\n this.isPDP = !!document.getElementById('product-details-page-entry');\r\n\r\n if (!isMobileShop) {\r\n return;\r\n }\r\n\r\n this.aasScope = document.querySelector(`.scope-aas[data-sav-key=\"${savKey}\"][data-content=\"${content}\"]`) as HTMLElement;\r\n\r\n this.aasSalesDesignationHeader = this.aasScope.querySelector('.aas-salesdesignation-header-container') as HTMLElement;\r\n const salesDesignation: HTMLElement = this.aasScope.querySelector('.aas-grid .index-product .sav-salesdesignation') as HTMLElement;\r\n this.originalSalesDesignationOffSetTop = salesDesignation.offsetTop;\r\n this.aasContent = this.aasScope.querySelector('.aas-content') as HTMLElement;\r\n this.bindEvent();\r\n\r\n if (shouldSticky) {\r\n this.shouldSticky = shouldSticky;\r\n }\r\n }\r\n\r\n private bindEvent() {\r\n setInterval(() => {\r\n if (this.didScroll && this.shouldSticky) {\r\n this.didScroll = false;\r\n this.setHeaderSticky();\r\n }\r\n }, 125);\r\n\r\n document.addEventListener('scroll', () => {\r\n this.didScroll = true;\r\n }, true);\r\n\r\n window.shell.subscribeTo('AAS.view.shown', (payload) => { this.rebindScrollContainer(payload); }, 'AAS.view.shown.sticky.header');\r\n window.shell.subscribeTo('AAS.view.changed', (payload) => { this.saveConsumerViewChange(payload); }, 'AAS.view.shown.sticky.header');\r\n }\r\n\r\n private rebindScrollContainer(payload: AASViewShownPayload) {\r\n if (payload.detail.useStickyHeader != null) {\r\n this.shouldSticky = payload.detail.useStickyHeader;\r\n if (this.isPDP) {\r\n const salesDesignation: HTMLElement = this.aasScope.querySelector('.aas-grid .index-product .sav-salesdesignation') as HTMLElement;\r\n this.originalSalesDesignationOffSetTop = salesDesignation.offsetTop;\r\n }\r\n }\r\n }\r\n\r\n private saveConsumerViewChange(payload: AASViewChangedPayload) {\r\n if (payload.detail.cssModification == null) {\r\n return;\r\n }\r\n\r\n if (payload.detail.cssModification.salesdesignationHeaderViewSticky == null) {\r\n return;\r\n }\r\n\r\n this.consumerCssModification = payload.detail.cssModification.salesdesignationHeaderViewSticky;\r\n this.setConsumerViewChange();\r\n }\r\n\r\n private setConsumerViewChange() {\r\n if (this.aasSalesDesignationHeader.classList.contains('sticky')) {\r\n this.aasSalesDesignationHeader.setAttribute('style', this.consumerCssModification);\r\n } else {\r\n this.aasSalesDesignationHeader.setAttribute('style', '');\r\n }\r\n }\r\n\r\n private setHeaderSticky(): void {\r\n const topPosition: number = this.originalSalesDesignationOffSetTop - this.scrollPosition();\r\n const shouldStick: boolean = topPosition <= 10;\r\n this.aasSalesDesignationHeader.classList.toggle('sticky', shouldStick);\r\n this.setConsumerViewChange();\r\n }\r\n\r\n private scrollPosition(): number {\r\n return this.aasContent != null ? this.aasContent.scrollTop : window.pageYOffset;\r\n }\r\n }\r\n}\r\n\r\nconst scopeForStickyHeader = document.querySelectorAll('.scope-aas')[0] as HTMLElement;\r\n\r\nif (scopeForStickyHeader && scopeForStickyHeader.querySelector('.aas-grid')) {\r\n const stickyHeader = new AAS.StickyHeader(scopeForStickyHeader.dataset.savKey, scopeForStickyHeader.dataset.content, true);\r\n}\r\n","namespace AAS {\r\n\r\n export class ToolTipScroll {\r\n private scope: HTMLElement;\r\n private readonly closeDelay: number = 2000;\r\n\r\n public constructor() {\r\n if (this.isMobileShop()) {\r\n return;\r\n }\r\n\r\n this.bindEvents();\r\n }\r\n\r\n private bindEvents(): void {\r\n window.shell.subscribeTo('AAS.updateFinished', (payload) => {\r\n this.triggerInitToolTips(payload.querySelector);\r\n }, 'AAS.update');\r\n }\r\n\r\n private triggerInitToolTips(selector = '.scope-aas.aas-full'): void {\r\n const scopeAas = document.querySelector(selector) as HTMLElement;\r\n\r\n if (!scopeAas) {\r\n return;\r\n }\r\n\r\n this.scope = scopeAas;\r\n this.registerEvents();\r\n }\r\n\r\n private get supportsNativeSmoothScroll() {\r\n return 'scrollBehavior' in document.documentElement.style;\r\n }\r\n\r\n private isMobileShop(): boolean {\r\n return document.querySelector('html').classList.contains('mobileshop');\r\n }\r\n\r\n private registerEvents(): void {\r\n const aasToolTipContainer = this.scope.querySelectorAll('.aas-tooltip-container');\r\n const aasToolTipContainerArray: Array = Array.prototype.slice.call(aasToolTipContainer);\r\n\r\n for (const aasTooltipContainer of aasToolTipContainerArray) {\r\n const aasTooltip = aasTooltipContainer.querySelector('.aas-tooltip');\r\n\r\n aasTooltipContainer.addEventListener('mouseenter', () => {\r\n this.handleMouseOverTooltipEvent(aasTooltip);\r\n });\r\n aasTooltipContainer.addEventListener('mouseleave', () => {\r\n this.handleMouseLeaveTooltipEvent(aasTooltip);\r\n });\r\n }\r\n }\r\n\r\n private handleMouseOverTooltipEvent(aasToolTip: Element): void {\r\n this.closeOpenTooltips();\r\n aasToolTip.classList.add('show-aas-tooltip');\r\n this.scrollTooltipIntoViewportIfNeeded(aasToolTip);\r\n }\r\n\r\n private closeOpenTooltips() {\r\n const allTooltips = this.scope.querySelectorAll('.aas-tooltip-container .aas-tooltip.show-aas-tooltip');\r\n const allTooltipsArray: Array = Array.prototype.slice.call(allTooltips);\r\n for (const tooltip of allTooltipsArray) {\r\n tooltip.classList.remove('show-aas-tooltip');\r\n }\r\n }\r\n\r\n private scrollTooltipIntoViewportIfNeeded(aasToolTip: Element): void {\r\n const ttTop: number = aasToolTip.getBoundingClientRect().top;\r\n const currentToolTipHeight: number = aasToolTip.clientHeight + ttTop;\r\n\r\n if (this.shouldScrollUp(ttTop) || this.shouldScrollDown(currentToolTipHeight)) {\r\n aasToolTip.classList.add('scrollingToViewport');\r\n let positionToScrollTo: number =\r\n this.shouldScrollUp(ttTop) ? ttTop - 20 : currentToolTipHeight - window.innerHeight + 20;\r\n\r\n if (this.supportsNativeSmoothScroll) {\r\n window.scrollBy({\r\n 'behavior': 'smooth',\r\n 'top': positionToScrollTo\r\n });\r\n } else {\r\n // Only for IE 11\r\n positionToScrollTo = (this.shouldScrollUp(ttTop) ? positionToScrollTo * -1 : positionToScrollTo);\r\n for (let index = 1; index <= positionToScrollTo; index++) {\r\n this.smoothScrollBy(this.shouldScrollUp(ttTop) ? -1 : 1);\r\n }\r\n }\r\n\r\n setTimeout(() => {\r\n aasToolTip.classList.remove('scrollingToViewport');\r\n }, this.closeDelay);\r\n }\r\n }\r\n\r\n private shouldScrollUp(top: number): boolean {\r\n return top < 0;\r\n }\r\n\r\n private shouldScrollDown(currentToolTipHeight: number): boolean {\r\n return currentToolTipHeight > window.innerHeight;\r\n }\r\n\r\n private handleMouseLeaveTooltipEvent(aasToolTip: Element): void {\r\n if (aasToolTip.classList.contains('scrollingToViewport')) {\r\n setTimeout(() => { aasToolTip.classList.remove('show-aas-tooltip'); }, this.closeDelay);\r\n aasToolTip.classList.remove('scrollingToViewport');\r\n } else {\r\n aasToolTip.classList.remove('show-aas-tooltip');\r\n }\r\n }\r\n\r\n private smoothScrollBy(index: number): void {\r\n setTimeout(() => { window.scrollBy(0, index); }, 300);\r\n }\r\n }\r\n}\r\n\r\nnew AAS.ToolTipScroll();\r\n","namespace AAS {\n export class ActionTracker {\n\n static triggerOpenDetailsEvent() {\n eventAggregator.publish('actionControl.genericAction',\n { actionSubject: 'alternative', actionType: 'open' });\n }\n\n constructor() {\n const triggerActionEvent = () => {\n const aasScopeAvailable = document.querySelector('.scope-aas');\n if (aasScopeAvailable && typeof (eventAggregator) === 'object') {\n\n // \n // delayed publish event in order to let action tracker first subscribe\n //\n setTimeout(() => {\n eventAggregator.publish('actionControl.genericAction',\n { actionSubject: 'alternative', actionType: 'loaded' });\n }, 1000);\n }\n };\n\n if (document.readyState === 'complete') {\n triggerActionEvent();\n } else {\n document.addEventListener('DOMContentLoaded', triggerActionEvent);\n }\n }\n }\n}\n\nnew AAS.ActionTracker();\n","/// \r\n\r\nnamespace AAS {\r\n export class AjaxLoaderRequest implements IAjaxLoaderRequest {\r\n\n constructor(\n readonly apiUrl: string,\r\n readonly isMobileShop: boolean,\r\n ) {\r\n }\r\n\r\n requestFor(savKeyToLoad: string, content: string, itemOrigin: string, detailsCanBeHidden: boolean, displayedInCategoryNavKey: string, showHeader: boolean): Promise {\r\n return new Promise(resolve => {\r\n const url = this.getAjaxUrl(savKeyToLoad, content, itemOrigin, detailsCanBeHidden, displayedInCategoryNavKey, showHeader);\r\n const request = new XMLHttpRequest();\r\n\r\n request.onreadystatechange = () => {\r\n if (request.readyState === 4 && request.status === 200) {\r\n resolve(request.responseText);\r\n } else if (request.status >= 300 || request.status === 204) {\r\n resolve('');\r\n }\r\n };\r\n\r\n request.ontimeout = () => {\r\n resolve('');\r\n };\r\n \r\n request.open('GET', url, true);\r\n request.timeout = 30000;\r\n request.send();\r\n });\r\n }\r\n\r\n private getAjaxUrl(savKey: string, content: string, itemOrigin: string, detailsCanBeHidden: boolean, displayedInCategoryNavKey: string, showHeader: boolean): string {\n return `${this.apiUrl}articles/${savKey}` \n + '?viewMode=ajax'\n + '&maxNumberOfAlternativeArticles=3'\n + `&isMobileShop=${this.isMobileShop}` \n + `&content=${content}` \n + (itemOrigin != null ? `&itemorigin=${itemOrigin}` : '')\n + `&detailsCanBeHidden=${detailsCanBeHidden}` \n + (displayedInCategoryNavKey ? `&displayedInCategoryNavKey=${displayedInCategoryNavKey}` : '')\n + `&showHeader=${showHeader}`;\r\n }\r\n }\r\n}\r\n\r\n","/// \r\n/// \r\n/// \r\n\r\nnamespace AAS {\r\n export class AjaxLoader implements IAjaxLoader {\r\n private static _instance: IAjaxLoader;\r\n private readonly ajaxLoader: IAjaxLoaderRequest;\r\n\r\n private constructor() {\r\n this.ajaxLoader = new AAS.AjaxLoaderRequest(this.getApiUrl(), this.isMobileShop());\r\n\r\n //\r\n // PDP triggers AAS.update events on page load, variant change\r\n //\r\n window.shell.subscribeTo('AAS.update', (payload) => { this.update(payload); }, 'AAS.update');\r\n }\r\n\r\n static get instance() {\r\n return this._instance || (this._instance = new this());\r\n }\r\n\r\n private getApiUrl(): string {\r\n return document.querySelector('.scope-aas').dataset.apiurl;\r\n }\r\n\r\n private isMobileShop(): boolean {\r\n return document.querySelector('html').classList.contains('mobileshop');\r\n }\r\n\r\n private queryAas(content?: string): NodeList {\r\n let queryString = '.scope-aas'; \r\n\r\n if (content) {\r\n queryString += `[data-content=\"${content}\"]`;\r\n }\r\n\r\n return document.querySelectorAll(queryString);\r\n } \r\n\r\n async update(event: CustomEvent): Promise {\r\n const savKeyToLoad = event.detail.savKeyToLoad;\r\n const targetContent = event.detail.content;\r\n\r\n const scopesToUpdate = this.queryAas(targetContent);\r\n const scopesToUpdateArray: Array = Array.prototype.slice.call(scopesToUpdate);\r\n\r\n for (const scope of scopesToUpdateArray) {\r\n this.updateOneScope(scope, savKeyToLoad);\r\n }\r\n }\r\n\r\n private isTrue(value: string): boolean {\r\n if (value == null || value.toString().toLowerCase() !== 'true') {\r\n return false;\r\n }\r\n \r\n return true;\r\n }\r\n\r\n private async updateOneScope(scope: HTMLElement, savKeyToLoad: string): Promise {\r\n const content: string = scope.dataset.content;\r\n const ajaxResponse = await this.ajaxLoader.requestFor(\r\n savKeyToLoad,\r\n content,\r\n scope.dataset.itemOrigin,\r\n this.isTrue(scope.dataset.detailsCanBeHidden),\r\n scope.dataset.displayedInCategoryNavkey || '',\r\n this.isTrue(scope.dataset.showHeader)\r\n );\r\n\r\n if (!ajaxResponse) {\r\n window.shell.publishTo('AAS.updateError', { detail: {content: content, message: `Error loading AAS for ${savKeyToLoad}`, savKeyToLoad: savKeyToLoad}});\r\n return;\r\n } \r\n \r\n this.replace(ajaxResponse, content);\r\n this.initJsComponents(savKeyToLoad, content);\r\n\r\n const payload: AjaxUpdateFinishedPayload = { detail: { queryString: `.scope-aas[data-sav-key=\"${savKeyToLoad}\"][data-content=\"${content}\"]` } };\r\n window.shell.publishTo('AAS.updateFinished', payload);\r\n\r\n if (content === 'full') {\r\n const newAas = this.queryAas(content)[0] as HTMLElement;\r\n window.shell.publishTo('ManualProductComparison.CreateTouchPoints', newAas);\r\n\r\n newAas.querySelectorAll('a[data-quick-order-modal]').forEach(basketLink => {\r\n basketLink.addEventListener('click', this.redesignOrderModalLinkCallback.bind(this));\r\n })\r\n }\r\n\r\n if (document.documentElement?.classList.contains('desktop')) {\r\n this.addTabNavigationEvents(content);\r\n // wait for MPC buttons to render\r\n setTimeout(() => this.addTabNavigationToMpcButtons(content), 300);\r\n }\r\n }\r\n\r\n private redesignOrderModalLinkCallback(event: Event): void {\r\n const target = event.currentTarget as HTMLElement;\r\n window.shell.publishTo('ESPP.OrderModal.Open', { \r\n salesArticleNo: target.dataset.salesarticleno,\r\n masterArticleNo: target.dataset.masterarticleno,\r\n colorCode: target.dataset.colorcode,\r\n sizeCode: target.dataset.sizecode,\r\n itemOrigin: target.dataset.itemorigin\r\n });\r\n }\r\n\r\n private initJsComponents(savKey: string, content: string): void {\r\n const newAas = this.queryAas(content)[0] as HTMLElement;\r\n \r\n //\r\n // In Mobile AAS is hidden on PDP initially and opend in modal\r\n // Only if AAS becomes visible, we can calculate correct heights etc.\r\n //\r\n if (this.isMobileShop()) {\r\n new StickyHeader(savKey, content);\r\n window.shell.once('AAS.view.shown', () => {\r\n new Carousels(newAas);\r\n new SubFeaturesEqualHeight(newAas);\r\n //\r\n // AAS.view.shown is sent by PDP, when AAS is opened in mobile\r\n //\r\n ActionTracker.triggerOpenDetailsEvent();\r\n });\r\n } else {\r\n new Carousels(newAas);\r\n new SubFeaturesEqualHeight(newAas);\r\n }\r\n\r\n const links = newAas.querySelectorAll('a[data-itemorigin]');\r\n\r\n for (const link of Array.prototype.slice.call(links) as Array) {\r\n link.addEventListener('mouseover', function () {\r\n if (link.getAttribute('href')?.indexOf('itemorigin') < 0) {\r\n const href = link.getAttribute('href');\r\n const containsQueryParameter : boolean = href.indexOf('?') > 0;\r\n link.setAttribute('href', link.getAttribute('href') + (containsQueryParameter ? '&' : '?') + 'itemorigin=' + link.dataset.itemorigin);\r\n }\r\n });\r\n\r\n link.addEventListener('touchstart', function () {\r\n if (link.getAttribute('href')?.indexOf('itemorigin') < 0) {\r\n const href = link.getAttribute('href');\r\n const containsQueryParameter: boolean = href.indexOf('?') > 0;\r\n link.setAttribute('href', link.getAttribute('href') + (containsQueryParameter ? '&' : '?') + 'itemorigin=' + link.dataset.itemorigin);\r\n }\r\n });\r\n }\r\n }\r\n\r\n private addTabNavigationToMpcButtons(content: string): void {\r\n const newAas = this.queryAas(content)[0] as HTMLElement;\r\n const mpcButtons = newAas.querySelectorAll('.mpc-scope.scale-tile-container');\r\n \r\n mpcButtons.forEach((button: HTMLDivElement) => {\r\n button.setAttribute('role', 'button');\r\n button.setAttribute('focusable', 'true');\r\n\r\n button.addEventListener('keydown', (event: KeyboardEvent) => {\r\n if (event.key === 'Enter') button.click();\r\n });\r\n });\r\n }\r\n\r\n private addTabNavigationEvents(content: string): void {\r\n const newAas = this.queryAas(content)[0] as HTMLElement;\r\n\r\n // prevent page jump for AAS content\r\n newAas.addEventListener('keydown', (event) => {\r\n if (event.code === 'Space') event.preventDefault();\r\n });\r\n\r\n // Enter event for divs\r\n const divsToActivate = ['.view-button', '.separator'];\r\n divsToActivate.forEach((d) => newAas.querySelectorAll(d).forEach((div: HTMLDivElement) => {\r\n div.addEventListener('keydown', (event: KeyboardEvent) => {\r\n if (event.key === 'Enter') div.click();\r\n });\r\n }));\r\n\r\n // Space event for anchors\r\n const anchorsToActivate = ['.index-product a', '.aas-button.basket a'];\r\n anchorsToActivate.forEach((a) => newAas.querySelectorAll(a).forEach((anchor: HTMLAnchorElement) => {\r\n anchor.addEventListener('keydown', (event: KeyboardEvent) => {\r\n if (event.code === 'Space') anchor.click();\r\n });\r\n }));\r\n }\r\n\r\n private replace(response: string, content: string): void {\r\n let newAas: HTMLElement = document.createElement('div') as HTMLElement;\r\n newAas.innerHTML = response;\r\n newAas = newAas.querySelector('.scope-aas') as HTMLElement;\r\n\r\n const aasToReplace = document.querySelector(`.scope-aas[data-content=\"${content}\"]`) as HTMLElement\r\n\r\n aasToReplace.parentNode.replaceChild(newAas, aasToReplace);\r\n }\r\n\r\n // DEBUG only\r\n triggerAppShellUpdate(savKeyToReplace: string, savKeyToLoad: string, content: string, target: string): void {\r\n\r\n const payload: AjaxPayload =\r\n {\r\n detail:\r\n {\r\n savKeyToReplace: savKeyToReplace,\r\n savKeyToLoad: savKeyToLoad,\r\n content: content,\r\n target: target\r\n }\r\n };\r\n\r\n window.shell.publishTo('AAS.update', payload);\r\n }\r\n }\r\n}\r\n\r\nAAS.AjaxLoader.instance; //NOSONAR\r\n","namespace AAS {\r\n export class Collapse {\r\n private rowHeight: { [index: string]: number } = {};\r\n private readonly separatorArray: Array;\r\n private readonly detailElements: Array;\r\n\r\n constructor(\r\n private readonly scope: HTMLElement,\r\n private subFeatureEqualHeightCalculator: SubFeaturesEqualHeight,\r\n public readonly savKey?: string\r\n ) {\r\n if (!scope) {\r\n return;\r\n }\r\n\r\n const separators: NodeListOf = this.scope.querySelectorAll('.separator');\r\n this.separatorArray = Array.prototype.slice.call(separators);\r\n if (!this.separatorArray.length) {\r\n return;\r\n }\r\n \r\n const details: NodeListOf = this.scope.querySelectorAll('.detailsHidden');\r\n this.detailElements = Array.prototype.slice.call(details);\r\n\r\n this.saveRowHeight();\r\n this.bindCollapseEvents();\r\n this.bindToggleOnlyDifferences();\r\n this.bindToggleShowDetails();\r\n\r\n this.adjustFallbackIconContainerHeight();\r\n }\r\n\r\n private saveRowHeight(): void {\r\n const collapseAble = this.scope.querySelectorAll('.collapse-able');\r\n const collapseAbleArray: Array = Array.prototype.slice.call(collapseAble);\r\n\r\n for (const row of collapseAbleArray) {\r\n const rowIndex: string = row.classList[0];\r\n const rowWrapperSelector = '.' + rowIndex + '.wrapper';\r\n const rowWrapper = this.scope.querySelector(rowWrapperSelector) as HTMLElement;\r\n\r\n row.style.height = 'auto';\r\n let height: number = row.clientHeight;\r\n if (rowWrapper) {\r\n rowWrapper.style.removeProperty('height');\r\n if (rowWrapper.clientHeight > height) {\r\n height = rowWrapper.clientHeight;\r\n }\r\n }\r\n \r\n this.rowHeight[rowIndex] = height;\r\n row.style.height = String(height) + 'px';\r\n if (rowWrapper) {\r\n rowWrapper.style.height = String(height) + 'px';\r\n }\r\n }\r\n }\r\n\r\n private bindCollapseEvents(): void {\r\n this.bindToggleRow();\r\n this.bindToggleAllRows();\r\n }\r\n\r\n private bindToggleRow(): void {\r\n this.scope.addEventListener('click', (event: Event) => {\r\n const clickedElement: HTMLElement = event.target as HTMLElement;\r\n // ToDo: replace closest\r\n const clickedSeparator: HTMLElement | null = clickedElement.closest('.separator') as HTMLElement;\r\n if (clickedSeparator == null) {\r\n return;\r\n }\r\n\r\n const shouldFold = !clickedSeparator.classList.contains('folded');\r\n this.setRowHeight(clickedSeparator, shouldFold);\r\n });\r\n }\r\n\r\n private bindToggleAllRows(): void {\r\n const collapseAllButton: HTMLElement = this.scope.querySelector('.collapse-all') as HTMLElement;\r\n\r\n collapseAllButton.addEventListener('click', () => {\r\n const shouldFold = !collapseAllButton.classList.contains('folded');\r\n \r\n for (const separator of this.separatorArray) {\r\n this.setRowHeight(separator, shouldFold);\r\n }\r\n\r\n collapseAllButton.classList.toggle('folded');\r\n });\r\n }\r\n\r\n private bindToggleOnlyDifferences(): void {\r\n const button: HTMLElement = this.scope.querySelector('.only-differences') as HTMLElement;\r\n \r\n button.addEventListener('click', (event) => {\r\n this.toggleOnlyDifferences(event.currentTarget);\r\n });\r\n }\r\n\r\n private bindToggleShowDetails(): void {\r\n const button: HTMLElement = this.scope.querySelector('.collapse-details') as HTMLElement;\r\n\r\n if (!button) {\r\n return;\r\n }\r\n\r\n const collapseAllButton: HTMLElement = this.scope.querySelector('.collapse-all') as HTMLElement;\r\n const showOnlyDifferencesButton: HTMLElement = this.scope.querySelector('.only-differences') as HTMLElement;\r\n const subFeatures: NodeListOf = this.scope.querySelectorAll('.sub-features');\r\n const subFeaturesArray = Array.prototype.slice.call(subFeatures);\r\n \r\n button.addEventListener('click', () => {\r\n if (!button.classList.contains('folded')) {\r\n ActionTracker.triggerOpenDetailsEvent();\r\n }\r\n\r\n button.classList.toggle('folded');\r\n\r\n for (const detailElement of this.detailElements) {\r\n detailElement.classList.toggle('detailsHidden');\r\n detailElement.classList.remove('hide-feature');\r\n detailElement.style.removeProperty('height');\r\n }\r\n \r\n collapseAllButton.classList.remove('folded');\r\n for (const separator of this.separatorArray) {\r\n separator.classList.remove('folded');\r\n }\r\n\r\n showOnlyDifferencesButton.classList.remove('checked');\r\n\r\n for (const subFeature of subFeaturesArray) {\r\n subFeature.style.removeProperty('height');\r\n subFeature.classList.remove('hide-feature');\r\n }\r\n\r\n this.subFeatureEqualHeightCalculator.setEqualHeightForEachSubFeature();\r\n\r\n this.saveRowHeight();\r\n });\r\n }\r\n\r\n private loadingSpinner(open: boolean) {\r\n return new Promise(resolve => {\r\n if (open) {\r\n this.scope.classList.add('open-overlay');\r\n } else {\r\n this.scope.classList.remove('open-overlay');\r\n }\r\n setTimeout(() => {\r\n resolve('true');\r\n }, 1000);\r\n });\r\n }\r\n\r\n async toggleOnlyDifferences(button: EventTarget) {\r\n const clickedButton = button as HTMLElement;\r\n clickedButton.classList.toggle('checked');\r\n\r\n const showOnlyDifferences: boolean = clickedButton.classList.contains('checked');\r\n\r\n await this.loadingSpinner(true);\r\n this.toggleSameFeatures(showOnlyDifferences);\r\n this.updateSameSubFeatures();\r\n this.loadingSpinner(false);\r\n }\r\n\r\n private toggleSameFeatures(showOnlyDifferences: boolean): void {\r\n const sameFeatures = this.scope.querySelectorAll('.same-features');\r\n const sameFeaturesArray: Array = Array.prototype.slice.call(sameFeatures);\r\n\r\n for (const sameFeature of sameFeaturesArray) {\r\n if (showOnlyDifferences) {\r\n sameFeature.classList.add('hide-feature');\r\n if (sameFeature.classList.contains('extras')) {\r\n sameFeature.parentElement.classList.add('hide-feature')\r\n }\r\n } else {\r\n sameFeature.classList.remove('hide-feature');\r\n if (sameFeature.classList.contains('extras')) {\r\n sameFeature.parentElement.classList.remove('hide-feature')\r\n }\r\n }\r\n }\r\n }\r\n\r\n private updateSameSubFeatures(): void {\r\n const featureWithSameSubFeatures = this.scope.querySelectorAll('.same-sub-features');\r\n const featureWithSameSubFeaturesArray: Array = Array.prototype.slice.call(featureWithSameSubFeatures);\r\n\r\n for (const feature of featureWithSameSubFeaturesArray) {\r\n const index: string = feature.classList[0];\r\n const rowWithSubFeatures: NodeListOf = this.scope.querySelectorAll('.' + index + ':not(.separator)');\r\n const rowWithSubFeaturesArray: Array = Array.prototype.slice.call(rowWithSubFeatures);\r\n const featureRowIsFolded: boolean = feature.classList.contains('folded');\r\n\r\n for (const row of rowWithSubFeaturesArray) {\r\n this.adjustSubFeatureStyles(row);\r\n this.updateRowHeight(row, index, featureRowIsFolded);\r\n }\r\n\r\n if (!featureRowIsFolded) {\r\n this.setRowHeight(feature, false);\r\n }\r\n }\r\n }\r\n\r\n private adjustSubFeatureStyles(row: HTMLElement): void {\r\n const subFeatureContainers: NodeListOf = row.querySelectorAll('.sav-filters');\r\n const subFeatureContainersArray: Array = Array.prototype.slice.call(subFeatureContainers);\r\n\r\n for (const container of subFeatureContainersArray) {\r\n this.adjustLastSubFeatureDividerVisibility(container);\r\n }\r\n }\r\n\r\n private adjustLastSubFeatureDividerVisibility(container: HTMLElement): void {\r\n const lastVisibleBeforeUpdate: HTMLElement = container.querySelector('.sub-features.last-visible') as HTMLElement;\r\n if (lastVisibleBeforeUpdate) {\r\n lastVisibleBeforeUpdate.classList.remove('last-visible');\r\n }\r\n\r\n const visibleNow: NodeListOf = container.querySelectorAll('.sub-features:not(.hide-feature)');\r\n const lastVisibleNow: HTMLElement = visibleNow[visibleNow.length - 1] as HTMLElement;\r\n if (lastVisibleNow) {\r\n lastVisibleNow.classList.add('last-visible');\r\n }\r\n }\r\n\r\n // TODO: Clarify the terminology. As the input row is a HTMLElement, for me it more like a cell\r\n private updateRowHeight(row: HTMLElement, index: string, isFolded: boolean): void {\r\n row.style.height = 'auto';\r\n this.rowHeight[index] = row.clientHeight;\r\n\r\n if (isFolded) {\r\n row.style.height = '0';\r\n }\r\n }\r\n\r\n private setRowHeight(separator: HTMLElement, fold: boolean): void {\r\n // ToDo: make it save! Can break when someone is changing order of classes in cshtml\r\n const rowIndex: string = separator.classList[0];\r\n const rowElements: NodeListOf = this.scope.querySelectorAll('.' + rowIndex + ':not(.separator)');\r\n const rowElementsArray: Array = Array.prototype.slice.call(rowElements);\r\n\r\n const rowHeight: number = fold ? 0 : this.rowHeight[rowIndex];\r\n\r\n for (const element of rowElementsArray) {\r\n element.style.height = String(rowHeight) + 'px';\r\n }\r\n\r\n if (fold) {\r\n separator.classList.add('folded');\r\n } else {\r\n separator.classList.remove('folded');\r\n }\r\n }\r\n\r\n private adjustFallbackIconContainerHeight() {\r\n const savFilterValues = this.scope.querySelectorAll('.sav-filters');\r\n const featureValueRowToAdjust: string[] = [];\r\n \r\n //\r\n // Determine actual height of feature values having height >= 48px (more than 2 lines)\r\n // Only for that specific feature value rows we need to adjust height of fallback icons of that feature value row\r\n //\r\n savFilterValues.forEach((savFilterValue) => {\r\n savFilterValue.querySelectorAll('.aas-feature-value-distance[data-feature-value-row]').forEach((savFilterFeatureValue: HTMLElement) => {\r\n if (savFilterFeatureValue.clientHeight >= 48) {\r\n const featureRow = savFilterFeatureValue.dataset.featureValueRow;\r\n const featureIndex = savFilterFeatureValue.dataset.featureIndex;\r\n const featureRowIdentifier = featureIndex + '#' + featureRow + '#' + savFilterFeatureValue.clientHeight;\r\n if (featureValueRowToAdjust.indexOf(featureRowIdentifier) < 0) {\r\n featureValueRowToAdjust.push(featureRowIdentifier);\r\n }\r\n }\r\n });\r\n });\r\n\r\n //\r\n // Adjust fallback icons height of feature value rows where needed\r\n //\r\n featureValueRowToAdjust.forEach(featureRowIdentifier => {\r\n const featureRowIdentifierParts = featureRowIdentifier.split('#');\r\n savFilterValues.forEach((savFilterValue) => {\r\n savFilterValue.querySelectorAll(`.aas-feature-value-fallback-icon[data-feature-index='${featureRowIdentifierParts[0]}'][data-feature-value-row='${featureRowIdentifierParts[1]}']`).forEach((fallbackIcon : HTMLElement) => {\r\n fallbackIcon.style.height = featureRowIdentifierParts[2] + 'px';\r\n });\r\n });\r\n });\r\n }\r\n }\r\n}\r\n","namespace AAS {\r\n export class SubFeaturesEqualHeight {\r\n private scope: HTMLElement;\r\n private subFeatureImageArray: Array;\r\n private selectedSubFeatureArray: Array;\r\n private imageLoadingCounter = 0;\r\n private textModulesTextOnly: NodeListOf;\r\n\r\n\r\n public constructor(scope: HTMLElement) {\r\n if (!scope) {\r\n return;\r\n }\r\n\r\n this.scope = scope;\r\n const selectedSubFeatures: NodeListOf = this.scope.querySelectorAll('.selected.has-sub-features');\r\n this.selectedSubFeatureArray = Array.prototype.slice.call(selectedSubFeatures);\r\n const subFeatureImages: NodeListOf = this.scope.querySelectorAll('.sub-features img.feature-image');\r\n\r\n this.textModulesTextOnly = this.scope.querySelectorAll('.sub-features.extras div.feature-textbaustein-noimage');\r\n\r\n this.subFeatureImageArray = Array.prototype.slice.call(subFeatureImages);\r\n\r\n this.setImageLoadingMonitor();\r\n }\r\n \r\n private setImageLoadingMonitor() {\r\n if (!this.subFeatureImageArray.length) {\r\n\r\n // we still need to recalculate heights of subfeature cells\r\n // in case only textmodules with text (no images) are present\r\n if (this.textModulesTextOnly.length > 0) {\r\n this.setEqualHeightForEachSubFeature();\r\n }\r\n\r\n new Collapse(this.scope, this);\r\n return;\r\n }\r\n\r\n // if subfeature images wait until all are loaded\r\n // then recalculate heights of subfeature cells\r\n this.imageLoadingCounter = 0;\r\n for (const image of this.subFeatureImageArray) {\r\n if (image.complete) {\r\n this.imageLoadFinished.bind(this)();\r\n } else {\r\n image.addEventListener('load', this.imageLoadFinished.bind(this));\r\n // we don't care if image load failed\r\n image.addEventListener('error', this.imageLoadFinished.bind(this));\r\n }\r\n }\r\n }\r\n\r\n private imageLoadFinished() {\r\n this.imageLoadingCounter += 1;\r\n if (this.imageLoadingCounter === this.subFeatureImageArray.length) {\r\n this.setEqualHeightForEachSubFeature();\r\n new Collapse(this.scope, this);\r\n }\r\n }\r\n\r\n public setEqualHeightForEachSubFeature() {\r\n for (const rowSelected of this.selectedSubFeatureArray) {\r\n // ToDo: make it save! Can break when someone is changing order of classes in cshtml\r\n const rowIndex = rowSelected.classList[0];\r\n const rowWrapper = '.' + rowIndex + '.wrapper';\r\n const rowWrapperElement = this.scope.querySelector(rowWrapper);\r\n\r\n const subFeatureSelectedRow = rowSelected.querySelectorAll('.sub-features');\r\n const subFeatureWrapperRow = rowWrapperElement.querySelectorAll('.sub-features');\r\n const subFeatureRowArray: Array = Array.prototype.slice.call(subFeatureSelectedRow);\r\n const subFeatureRowArray2: Array = Array.prototype.slice.call(subFeatureWrapperRow);\r\n\r\n for (const subFeatureRow of subFeatureRowArray) {\r\n // ToDo: make it save! Can break when someone is changing order of classes in cshtml\r\n const subFeatureIndex = subFeatureRow.classList[1];\r\n const subFeatures = subFeatureRowArray2.filter(sf => sf.classList.contains(subFeatureIndex));\r\n subFeatures.unshift(subFeatureRow);\r\n\r\n const maxOfHeight = this.getMaxOfHeight(subFeatures);\r\n this.setSubFeatureHeight(subFeatures, maxOfHeight);\r\n }\r\n }\r\n }\r\n\r\n private getMaxOfHeight(subFeatures: HTMLElement[]): number {\r\n const subFeatureHeightArray: Array = [];\r\n for (const subFeature of subFeatures) {\r\n subFeatureHeightArray.push(subFeature.clientHeight);\r\n }\r\n\r\n return Math.max(...subFeatureHeightArray);\r\n }\r\n\r\n private setSubFeatureHeight(subFeatures: HTMLElement[], height: number): void {\r\n for (const subFeature of subFeatures) {\r\n subFeature.style.height = height + 'px';\r\n }\r\n }\r\n }\r\n}\r\n\r\n//ToDo: find a better way to init this\r\n//ToDo: should consider multiple instance problem\r\n//ToDo: should be identifiable via savKey or something\r\n// For now, just init for first instance of aas scope\r\n// Currently only needed for standalone mode\r\ndocument.addEventListener('DOMContentLoaded',\r\n function () {\r\n const scope = document.querySelector('.scope-aas.aas-full') as HTMLElement;\r\n new AAS.SubFeaturesEqualHeight(scope);\r\n }\r\n);\r\n","namespace AAS {\r\n\r\n export class ToolTipManagerMobileView {\r\n\r\n // Working for multiple only when triggered by Event for one Scope AAS\r\n // when initialized by constructor only initialized for first scope-aas \r\n public constructor() {\r\n if (!this.isMobileShop()) {\r\n return;\r\n }\r\n\r\n this.bindEvents();\r\n this.triggerInitToolTips();\r\n }\r\n\r\n private bindEvents(): void {\r\n window.shell.subscribeTo('AAS.updateFinished', (payload) => {\r\n this.triggerInitToolTips(payload.querySelector);\r\n }, 'AAS.update');\r\n }\r\n\r\n private isMobileShop(): boolean {\r\n return document.querySelector('html').classList.contains('mobileshop');\r\n }\r\n\r\n private triggerInitToolTips(selector = '.scope-aas'): void {\r\n const scopeAas = document.querySelector(selector) as HTMLElement;\r\n\r\n if (!scopeAas) {\r\n return;\r\n }\r\n \r\n this.initToolTips(scopeAas);\r\n }\r\n\r\n private initToolTips(scopeAas: HTMLElement): void {\r\n const toolTipContainersList: NodeListOf = scopeAas.querySelectorAll('.aas-tooltip-container');\r\n const toolTipContainers: Array = Array.prototype.slice.call(toolTipContainersList);\r\n const modal: HTMLElement = scopeAas.querySelector('.aas-modal') as HTMLElement;\r\n\r\n if (!modal) {\r\n return;\r\n }\r\n \r\n const closeButtons = modal.querySelectorAll('.aas-modal-close') as NodeListOf;\r\n closeButtons.forEach(b => b.onclick = () => { modal.style.display = 'none';});\r\n\r\n for (const toolTipContainer of toolTipContainers) {\r\n const infoIcons = toolTipContainer.querySelectorAll('svg');\r\n const toolTipContent = toolTipContainer.querySelector('.aas-tooltip-content');\r\n\r\n const infoIconArray: Array = Array.prototype.slice.call(infoIcons);\r\n\r\n for (const infoIcon of infoIconArray) {\r\n infoIcon.onclick = () => {\r\n const content = modal.querySelector('.aas-modal-content');\r\n content.innerHTML = toolTipContent.innerHTML;\r\n modal.style.display = 'block';\r\n };\r\n }\r\n }\r\n\r\n window.onclick = (event) => {\r\n if (event.target === modal) {\r\n modal.style.display = 'none';\r\n }\r\n };\r\n }\r\n }\r\n}\r\n\r\nnew AAS.ToolTipManagerMobileView();\r\n"]}