{"version":3,"file":"MenuBanner.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,0SCerB,IAAagB,EAAb,Y,QACE,gBAGE,MASA,EARMC,GAAsBC,EAAAA,EAAAA,GAA5B,uBACA,MACE,MAAM,IAAIC,MAAV,4BAGFC,EAAAA,UAA0BH,EAA1BG,GACA,uBAGA,Y,0sBAAA,CAAmBH,EAAAA,cAAAA,MAAnB,0BAAsE,KAA3DI,EAA2D,QACpE,GAAIA,EAAAA,KAAAA,IAAAA,QAAsBD,EAAtBC,UAAJ,EAAuD,CACrDC,EAAAA,EACA,OAGJ,MACE,MAAM,IAAIH,MAAM,aAAaC,EAAvB,QAAN,eAjBF,OAmBAE,EAAAA,kBAAAA,YAAiD,CAC/C,IAAI,EAAJ,+BAEE,8BAAgCF,EAFlC,QADFE,IAOA,6BAAiCL,EAAjC,eA1BA,EAJJ,O,EAAA,G,EAAA,G,sEAAA,S,wnBCVA,IAAMM,EAAUb,OAAD,GAAsBA,OAAD,IAApC,GASac,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,IAAMxB,EAAUC,SAAAA,cAAAA,SAAAA,EAAhB,MACA,MACE,MAAM,IAAIU,MAAM,6CAAV,EAAN,gCAIF,YAAiBX,EAAjB,GACA,UAEA,IAGA,EAHMyB,EAAYvB,OACfA,OAAD,YADe,iDAAjB,cAX0D,OAiBxDwB,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,cACEZ,EAAAA,KAAW,CACTH,cAAe,EAAF,MAEXgB,cAAe,KAEjBC,GAAIhC,KALK,UAMTiC,OAAAA,K,EA3CeR,CAAoB9B,EAAAA,I,gLCtBpBuC,EAQnB,gBAWE,IAPEC,EAOF,EAPEA,IACAC,EAMF,EANEA,OACAC,EAKF,EALEA,MACAC,EAIF,EAJEA,gBACAC,EAGF,EAHEA,SACAC,EAEF,EAFEA,SAEF,qIACAxC,KAAA,YAAmB,CACjByC,KADiB,EAEjBC,OAFiB,aAGjBP,IAAAA,GAEFnC,KAAA,MAAa,CACX2C,QADW,EAEXR,IAAKE,GAEPrC,KAAA,KAAY,CACVuC,SAAU,CACRK,MADQ,EAERC,YAFQ,EAGRC,SAHQ,EAIRC,WAAYR,IAGhBvC,KAAA,WACAA,KAAA,oB,8JCtCJ,IAAMkB,EAAUb,OAAD,GAAsBA,OAAD,IAApC,GAEO,SAASQ,EAAcmC,EAAvB,GAEL,IADA,MACA,I,0sBAAA,mBAA+B,KAApBC,EAAoB,QAC7B,GACEA,EAAAA,SAAAA,KACCjB,GAAKiB,EAAAA,GAAAA,QAAAA,IAAH,GACH,CACAC,EAAAA,EACA,OAGJ","sources":["webpack://casperComponentProvider/./src/Impression.ts","webpack://casperComponentProvider/./src/MenuBanner.ts","webpack://casperComponentProvider/./src/Placeholder.ts","webpack://casperComponentProvider/./src/components/Banner.ts","webpack://casperComponentProvider/./src/utils.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 Placeholder, { PlaceholderConfiguration } from './Placeholder'\nimport { findComponent } from './utils'\n\n// Creatives\n// responsive_menu_pushbanner\n// responsive_menu_pushbanner_machine\n// responsive_menu_pushbanner_coffee\n// responsive_menu_pushbanner_accessories\n// responsive_menu_pushbanner_businesssolutions\n// responsive_menu_pushbanner_ourvalues\n// responsive_menu_pushbanner_shop\n// responsive_menu_pushbanner_sweettreats\n// responsive_menu_pushbanner_services\n\nexport class MenuBanner extends Placeholder {\n  constructor(\n    configuration: MenuBannerConfiguration,\n    banner: BannerConfiguration\n  ) {\n    const headerNavigationBar = findComponent('HeaderNavigationBar')\n    if (!headerNavigationBar) {\n      throw new Error('Menu component not found')\n    }\n\n    configuration.elementId = headerNavigationBar.id\n    super(configuration)\n\n    let menuToPushBanner\n    for (const menu of headerNavigationBar.configuration.props.menuItems) {\n      if (menu.meta.uid.indexOf(configuration.tabName) >= 0) {\n        menuToPushBanner = menu\n        break\n      }\n    }\n    if (!menuToPushBanner) {\n      throw new Error(`Menu tab '${configuration.tabName}' not found`)\n    }\n    menuToPushBanner.dropdownMenuPanel.pushBanners = [\n      new Banner(\n        'productPageTemplate-header',\n        'responsive_menu_pushbanner_' + configuration.tabName,\n        banner\n      ),\n    ]\n    this.push('HeaderNavigationBar', headerNavigationBar.configuration)\n  }\n}\n\ntype TTabs = 'coffee' | 'machines' | 'accessories'\ninterface MenuBannerConfiguration extends PlaceholderConfiguration {\n  tabName: TTabs\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","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","const uiSDK = ((window as any).ui = (window as any).ui || [])\n\nexport function findComponent(moduleName: string, id?: string) {\n  let existingComponent\n  for (const component of uiSDK) {\n    if (\n      component.module === moduleName &&\n      (id ? component.id.indexOf(id) > -1 : true)\n    ) {\n      existingComponent = component\n      break\n    }\n  }\n  return existingComponent\n}\n"],"names":["Impression","waitForImpression","start","Date","setTimeout","this","checkImpression","bind","element","document","window","event","eventRaisedBy","eventAction","itemTypes","rootElement","MenuBanner","headerNavigationBar","findComponent","Error","configuration","menu","menuToPushBanner","uiSDK","contentSlotMap","accessories","capsules","home","machine","other","Placeholder","elementId","title","pageName","page","push","eCommerceData","id","module","Banner","url","button","image","backgroundColor","tracking","lightbox","name","target","altText","click","contentSlot","creative","impression","moduleName","component","existingComponent"],"sourceRoot":""}