{"version":3,"file":"PromotionBanner.js","mappings":"0KAAqBA,EAAAA,W,yCACTC,kBAAV,mBAA2E,IAA5BC,IAAAA,EAAgBC,KAAAA,OAC7DC,WAAWC,KAAKC,gBAAgBC,KAAtB,YAAVH,I,EAEME,gBAAR,cACE,IAAME,EAAUC,SAAAA,eAAhB,GACID,GAAWA,EAAf,gBAEIE,OAAD,mBAAmC,CAClCC,MADkC,cAElCC,cAFkC,WAGlCC,YAHkC,SAIlCC,UAAW,CAJuB,cAKlCC,YAAaP,IAGXL,KAAAA,MAAAA,EAAJ,KACEE,KAAA,wB,EAjBaL,I,wnBCKrB,IAAMgB,EAAUN,OAAD,GAAsBA,OAAD,IAApC,GASaO,EAA4C,CACvDC,YADuD,sBAEvDC,SAFuD,mBAGvDC,KAHuD,YAIvDC,QAJuD,mBAKvDC,MAAO,aAGYC,EAAAA,SAAAA,G,QAInB,cAA4D,MAA9CC,EAA8C,EAA9CA,UAAWC,EAAmC,EAAnCA,MAAmC,IAC1D,sBAD0D,iEAE1D,IAAMjB,EAAUC,SAAAA,cAAAA,SAAAA,EAAhB,MACA,MACE,MAAM,IAAIiB,MAAM,6CAAV,EAAN,gCAIF,YAAiBlB,EAAjB,GACA,UAEA,IAGA,EAHMmB,EAAYjB,OACfA,OAAD,YADe,iDAAjB,cAX0D,OAiBxDkB,GADF,IAAID,EAAAA,QAAAA,YACFC,YACK,IAAID,EAAAA,QAAAA,WACTC,WACK,IAAID,EAAAA,QAAAA,eACTC,eAEAD,IAAAA,EAAAA,QAAAA,UADK,IAELA,EAAAA,QAAAA,QAEAC,OAEAA,QAEF,SA9B0D,E,mGAgClDC,KAAV,cACEb,EAAAA,KAAW,CACTc,cAAe,EAAF,MAEXC,cAAe,KAEjBC,GAAI3B,KALK,UAMT4B,OAAAA,K,EA3CeV,CAAoBvB,EAAAA,I,4LCVzC,IAAMkC,EAAyC,CAC7ChB,YAD6C,wCAE7CC,SAF6C,mCAG7CC,KAH6C,qBAI7CC,QAJ6C,qCAK7CC,MAAO,wBAGIa,EAAb,Y,QACE,gBAGE,aACA,wBACA,uBAA6B,CAC3BC,MAAO,CACLC,eAAgB,CACd,IAAI,EAAJ,EAAWpB,EAAAA,EAAe,EAA1B,MAAsCiB,EAAY,EAAlD,MAFG,IAILI,2BAA2B,GAE7BC,aAAc,CACZ,uCAAwC,EAAKd,SAGjD,oBAAuB,EAAvB,WAbA,EAJJ,O,EAAA,G,EAAA,G,sEAAA,S,gLCpBqBe,EAQnB,gBAWE,IAPEC,EAOF,EAPEA,IACAC,EAMF,EANEA,OACAC,EAKF,EALEA,MACAC,EAIF,EAJEA,gBACAC,EAGF,EAHEA,SACAC,EAEF,EAFEA,SAEF,qIACAzC,KAAA,YAAmB,CACjB0C,KADiB,EAEjBC,OAFiB,aAGjBP,IAAAA,GAEFpC,KAAA,MAAa,CACX4C,QADW,EAEXR,IAAKE,GAEPtC,KAAA,KAAY,CACVwC,SAAU,CACRK,MADQ,EAERC,YAFQ,EAGRC,SAHQ,EAIRC,WAAYR,IAGhBxC,KAAA,WACAA,KAAA","sources":["webpack://casperComponentProvider/./src/Impression.ts","webpack://casperComponentProvider/./src/Placeholder.ts","webpack://casperComponentProvider/./src/PromotionBanner.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 { CarouselProps } from './Carousel'\nimport { PromotionBannerProps } from './PromotionBanner'\nimport { PushBannersProps } from './PushBanners'\nimport Impression from './Impression'\n\nconst uiSDK = ((window as any).ui = (window as any).ui || [])\n\n// ContentSlots\n// home-main\n// capsulesPDP-main\n// accessoriesPDP-main\n// machinesPDP-main\n// capsulesPLP-main\n// machinesPLP-main\nexport const contentSlotMap: { [key: string]: string } = {\n  accessories: 'accessoriesPDP-main',\n  capsules: 'capsulesPDP-main',\n  home: 'home-main',\n  machine: 'machinesPDP-main',\n  other: 'free-html',\n}\n\nexport default class Placeholder extends Impression {\n  protected page: string\n  protected title?: string\n  protected elementId: string\n  constructor({ elementId, title }: PlaceholderConfiguration) {\n    super()\n    const element = document.querySelector(`[id^='${elementId}']`)\n    if (!element) {\n      throw new Error(\n        `Casper ComponentProvider: ERROR, Element #${elementId} cannot be found in the DOM.`\n      )\n    }\n    this.elementId = element.id\n    this.title = title\n\n    const pageName = (window[\n      (window as any).config.padl.namespace\n    ] as any).dataLayer.page.page.pageInfo.pageName.toLowerCase()\n    let page\n\n    if (pageName.indexOf('capsules') !== -1) {\n      page = 'capsules'\n    } else if (pageName.indexOf('machine') !== -1) {\n      page = 'machine'\n    } else if (pageName.indexOf('accessories') !== -1) {\n      page = 'accessories'\n    } else if (\n      pageName.indexOf('home') !== -1 &&\n      pageName.indexOf('page') !== -1\n    ) {\n      page = 'home'\n    } else {\n      page = 'other'\n    }\n    this.page = page\n  }\n  protected push(module: string, configuration: UIConfiguration): void {\n    uiSDK.push({\n      configuration: {\n        ...configuration,\n        eCommerceData: {},\n      },\n      id: this.elementId,\n      module,\n    })\n  }\n}\n\nexport interface PlaceholderConfiguration {\n  elementId?: string\n  title?: string\n}\ninterface UIConfiguration {\n  props: PushBannersProps | PromotionBannerProps | CarouselProps\n  translations: ObjectAny\n}\nexport interface ObjectAny {\n  [key: string]: any\n}\n\n/**\n * [Creatives for responsive design](https://wiki.nespresso.com/display/DIANA/INTERNAL+CAMPAIGN+TRACKING+PROCESS#INTERNALCAMPAIGNTRACKINGPROCESS-4.CREATIVES)\n */\n// Other Creatives\n\n// responsive_plp_coffee_push\n// responsive_plp_accessories_push\n// responsive_plp_machines_push\n\n// responsive_hp_main\n// responsive_hp_marketingpush\n// responsive_hp_recipepush\n","import Banner, { BannerConfiguration } from './components/Banner'\nimport Placeholder, {\n  contentSlotMap,\n  PlaceholderConfiguration,\n} from './Placeholder'\n\n// Creatives\n// responsive_hp_main\n// responsive_plp_coffee_top_banner\n// responsive_plp_accessories_top_banner\n// responsive_plp_machines_top_banner\n// TO NOT USE: responsive_pdp_top_banner\nconst creativeMap: { [key: string]: string } = {\n  accessories: 'responsive_plp_accessories_top_banner',\n  capsules: 'responsive_plp_coffee_top_banner',\n  home: 'responsive_hp_main',\n  machine: 'responsive_plp_machines_top_banner',\n  other: 'responsive_free_html',\n}\n\nexport class PromotionBanner extends Placeholder {\n  constructor(\n    configuration: PlaceholderConfiguration,\n    banner: BannerConfiguration\n  ) {\n    super(configuration)\n    this.push('PromotionBanner', {\n      props: {\n        bannerElements: [\n          new Banner(contentSlotMap[this.page], creativeMap[this.page], banner),\n        ],\n        shouldHaveBackgroundColor: true,\n      },\n      translations: {\n        'promotionbannersrespblock.a11y.title': this.title,\n      },\n    })\n    this.waitForImpression(this.elementId)\n  }\n}\n\nexport interface PromotionBannerProps {\n  bannerElements: Banner[]\n  shouldHaveBackgroundColor?: boolean\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","contentSlotMap","accessories","capsules","home","machine","other","Placeholder","elementId","title","Error","pageName","page","push","configuration","eCommerceData","id","module","creativeMap","PromotionBanner","props","bannerElements","shouldHaveBackgroundColor","translations","Banner","url","button","image","backgroundColor","tracking","lightbox","name","target","altText","click","contentSlot","creative","impression"],"sourceRoot":""}