{"version":3,"file":"MiniBasketBanner.js","mappings":"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","sources":["webpack://casperComponentProvider/./src/Impression.ts","webpack://casperComponentProvider/./src/MiniBasketBanner.ts","webpack://casperComponentProvider/./src/components/Banner.ts"],"sourcesContent":["export default class Impression {\n protected waitForImpression(elementId: string, start: number = Date.now()) {\n setTimeout(this.checkImpression.bind(this), 333, start, elementId)\n }\n private checkImpression(start: number, elementId: string) {\n const element = document.getElementById(elementId)\n if (element && element.hasChildNodes()) {\n // eslint-disable-next-line no-extra-semi\n ;(window as any).gtmDataObject.push({\n event: 'itemDisplay',\n eventRaisedBy: 'FreeHTML',\n eventAction: 'Scroll',\n itemTypes: ['promotions'],\n rootElement: element,\n })\n } else {\n if (Date.now() - start < 3000) {\n this.waitForImpression(elementId, start)\n }\n }\n }\n}\n","import Banner, { BannerConfiguration } from './components/Banner'\nimport Impression from './Impression'\n\nconst uiSDK = ((window as any).ui = (window as any).ui || [])\n\nexport class MiniBasketBanner extends Impression {\n constructor(\n configuration: MiniBasketBannerConfiguration,\n banner: BannerConfiguration\n ) {\n super()\n const miniBasket: HTMLElement | null = document.querySelector(\n '.MiniBasketDropdown > div'\n )\n if (miniBasket) {\n this.observeDropDown(miniBasket, configuration, banner)\n } else {\n const headerContainer = document.querySelector(\n \"div[id*='HeaderRespBlock']\"\n )\n if (headerContainer) {\n new MutationObserver((mutation, observer) => {\n if (mutation.length && mutation[0].addedNodes.length) {\n const miniBasket: HTMLElement | null = headerContainer.querySelector(\n '.MiniBasketDropdown > div'\n )\n if (miniBasket) {\n this.observeDropDown(miniBasket, configuration, banner)\n observer.disconnect()\n }\n }\n }).observe(headerContainer, { childList: true, subtree: true })\n }\n }\n }\n observeDropDown(\n miniBasket: HTMLElement,\n configuration: MiniBasketBannerConfiguration,\n banner: BannerConfiguration\n ) {\n new MutationObserver((mutation) => {\n if (mutation.length && mutation[0].addedNodes.length) {\n if (miniBasket.querySelector('.MiniBasketDropdown__wrapper')) {\n this.push(configuration, banner)\n } else {\n const miniBasketDropdown = document.querySelector(\n '.MiniBasketDropdown__dropdown'\n )\n if (miniBasketDropdown) {\n new MutationObserver((_, observer) => {\n this.push(configuration, banner)\n observer.disconnect()\n }).observe(miniBasketDropdown, { childList: true })\n }\n }\n }\n }).observe(miniBasket, { childList: true })\n }\n public push(\n configuration: MiniBasketBannerConfiguration,\n banner: BannerConfiguration\n ) {\n const existingBenefitMessage = document.querySelector('.BenefitMessage')\n if (existingBenefitMessage) {\n existingBenefitMessage.id = 'BenefitMessage'\n } else {\n const benefitMessage = document.createElement('div')\n benefitMessage.id = 'BenefitMessage'\n benefitMessage.className = 'BenefitMessage'\n const headerNode = document.querySelector('.MiniBasketDropdown__header')\n if (headerNode) {\n headerNode.insertAdjacentElement('afterend', benefitMessage)\n }\n }\n\n uiSDK.push({\n configuration: {\n props: {\n bannerElements: [\n new Banner('miniBasket', 'responsive_mini_basket_benefits', banner),\n ],\n shouldHaveBackgroundColor: true,\n },\n eCommerceData: {},\n translations: {\n 'promotionbannersrespblock.a11y.title': configuration.title,\n },\n },\n id: 'BenefitMessage',\n module: 'PromotionBanner',\n })\n this.waitForImpression('BenefitMessage')\n if ((window as any).formFactor.detect() === 'NARROW') {\n const newBenefitMessage = document.getElementById('BenefitMessage')\n if (newBenefitMessage) {\n new MutationObserver((mutation, observer) => {\n let newPromotionBanner\n for (const mut of mutation) {\n const addedNodes = mut.addedNodes\n if (addedNodes.length) {\n newPromotionBanner = addedNodes[0] as HTMLElement\n if (newPromotionBanner.className === 'PromotionBanner') {\n break\n } else {\n newPromotionBanner = null\n }\n }\n }\n if (newPromotionBanner) {\n const promotionBannerLink = newPromotionBanner.querySelector(\n '.Banner__link'\n )\n if (promotionBannerLink) {\n new MutationObserver((mutation2, observer2) => {\n if (mutation2.length === 2) {\n promotionBannerLink.id = banner.tracking.id + '_link'\n uiSDK.push({\n configuration: {\n props: {\n policy: 'small',\n src: banner.image,\n width: '100%',\n },\n eCommerceData: {},\n },\n id: banner.tracking.id + '_link',\n module: 'ResponsiveImage',\n })\n observer2.disconnect()\n }\n }).observe(promotionBannerLink, { childList: true })\n }\n observer.disconnect()\n }\n }).observe(newBenefitMessage, { childList: true })\n }\n }\n }\n}\n\ninterface MiniBasketBannerConfiguration {\n title: string\n}\n","export default class Banner {\n public backgroundColor?: string\n public lightbox?: BannerLightbox\n public linkElement: BannerLink\n public media: BannerMedia\n public meta: {\n tracking: BannerTracking\n }\n constructor(\n contentSlot: string,\n creative: string,\n {\n url,\n button,\n image,\n backgroundColor,\n tracking,\n lightbox,\n }: BannerConfiguration\n ) {\n this.linkElement = {\n name: button,\n target: 'SAMEWINDOW',\n url,\n }\n this.media = {\n altText: button,\n url: image,\n }\n this.meta = {\n tracking: {\n click: tracking,\n contentSlot,\n creative,\n impression: tracking,\n },\n }\n this.lightbox = lightbox\n this.backgroundColor = backgroundColor\n }\n}\n\nexport interface BannerConfiguration {\n backgroundColor?: string\n lightbox?: BannerLightbox\n button?: string\n url: string\n image: string\n tracking: Tracking\n}\ninterface BannerLink {\n name?: string\n target: string\n url: string\n}\ninterface BannerMedia {\n altText?: string\n url: string\n}\ninterface BannerTracking {\n click: Tracking\n contentSlot: string\n creative: string\n impression: Tracking\n}\ninterface BannerLightbox {\n linkLabel: string\n title: string\n content: string\n}\ninterface Tracking {\n id: string\n name: string\n}\n"],"names":["Impression","waitForImpression","start","Date","setTimeout","this","checkImpression","bind","element","document","window","event","eventRaisedBy","eventAction","itemTypes","rootElement","uiSDK","MiniBasketBanner","miniBasket","headerContainer","mutation","observer","childList","subtree","observeDropDown","miniBasketDropdown","existingBenefitMessage","benefitMessage","headerNode","configuration","props","bannerElements","shouldHaveBackgroundColor","eCommerceData","translations","title","id","module","newBenefitMessage","addedNodes","newPromotionBanner","promotionBannerLink","mutation2","banner","policy","src","width","observer2","Banner","url","button","image","backgroundColor","tracking","lightbox","name","target","altText","click","contentSlot","creative","impression"],"sourceRoot":""}