{"version":3,"file":"oneblock-widgets-DKKuER_J.js","sources":["../../../../Coloplast.UI/src/oneblock/assets/js/oneblock-tracking.mjs","../../../../Coloplast.UI/src/oneblock/assets/js/oneblock-widgets.mjs"],"sourcesContent":["\r\nimport Cookies from 'js-cookie';\r\nimport { cookieNames, trackingDimensionConstants, trackingOrderTypes } from 'shared/settings/constants';\r\n\r\nexport function getVisitorID() {\r\n let cookies = document.cookie.split(';')\r\n let visitorId = '';\r\n let regex = /^\\s?VisitorID=(.*)/;\r\n cookies.forEach((cookie) => {\r\n let match = regex.exec(cookie);\r\n if (match) {\r\n visitorId = match[1];\r\n }\r\n })\r\n return visitorId;\r\n}\r\n\r\nexport function track(payload, callback, event) {\r\n window.dataLayer = window.dataLayer || [];\r\n if (window.google_tag_manager && callback) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n payload.eventCallback = callback;\r\n }\r\n window.dataLayer.push(payload);\r\n console.debug(JSON.stringify(payload));\r\n}\r\n\r\nexport function trackInteractionEvent(eventCategory, eventAction, eventLabel) {\r\n let payload = {\r\n event: 'interactionEvent',\r\n eventcategory: eventCategory,\r\n eventaction: eventAction,\r\n eventlabel: eventLabel,\r\n eventnoninteraction: false,\r\n }\r\n track(payload);\r\n}\r\n\r\nexport function getOneBlockTrackingStrings(ob) {\r\n const headlineElm = ob.querySelector('.c-ob__headline');\r\n const headline = headlineElm ? headlineElm.innerText : '';\r\n const sectionElm = ob.closest('.c-section');\r\n const sectionHeadlineElm = sectionElm ? sectionElm.querySelector('.c-section__headline') : null;\r\n const sectionHeadline = sectionHeadlineElm ? sectionHeadlineElm.innerText : '';\r\n let headlines = [];\r\n if (sectionHeadline) {\r\n headlines.push(sectionHeadline);\r\n }\r\n if (headline) {\r\n headlines.push(headline);\r\n }\r\n const culture = getCulture();\r\n\r\n return {\r\n action: `${headlines.join(' | ')} ${culture} ${location.pathname}`,\r\n headline,\r\n allHeadlines: headlines.join(' | '),\r\n culture,\r\n pathname: location.pathname,\r\n pageType: getPageType(),\r\n visitorID: getVisitorID(),\r\n label: getVisitorID(),\r\n }\r\n}\r\n\r\nexport function getCulture() {\r\n return document.documentElement.getAttribute('lang');\r\n}\r\n\r\nexport function getPageType() {\r\n const pageTypeEntry = window.dataLayer.find((entry) => entry.hasOwnProperty('PageType'));\r\n return pageTypeEntry ? pageTypeEntry.PageType : '';\r\n}\r\n\r\nexport function oneBlockBuildLineItemTrackingParameters() {\r\n return {\r\n dimension9: trackingDimensionConstants.NO_DATA,\r\n dimension10: trackingOrderTypes.NEW_ORDER,\r\n dimension11: trackingDimensionConstants.NO_DATA,\r\n };\r\n}\r\n","/* eslint no-empty: [\"error\", { \"allowEmptyCatch\": true }] */\r\n\r\n/**\r\n * OneBlock Widgets.\r\n * @module oneblock-widgets.mjs\r\n * @version 1.0.03\r\n * @summary 23-10-2019\r\n * @author Mads Stoumann\r\n * @description Custom Widgets and extensions for OneBlock, can be added though data-js, data-js-event and data-js-param.\r\n * NOTE: Either import or paste the code for custom widgets in this module.\r\n */\r\n\r\nimport { oneBlockBuildLineItemTrackingParameters } from './oneblock-tracking.mjs';\r\nimport { track_add_to_cart } from 'shared/services/tracking/basketTrackingService.ts';\r\n\r\n/**\r\n * @function countDown\r\n * @param {Event} event\r\n * @param {Node} hook\r\n * @param {String} selector\r\n * @param {String} timeStamp\r\n * @param {String} lblDays\r\n * @param {String} lblHours\r\n * @param {String} lblMins\r\n * @param {String} lblSecs\r\n * @description Renders a countDown-widget in `selector`-element. Creadits to: https://codepen.io/SitePoint/pen/QpwRxz\r\n */\r\n\r\nexport function countDown(\r\n\tevent,\r\n\thook,\r\n\tselector,\r\n\ttimeStamp,\r\n\tlblDays,\r\n\tlblHours,\r\n\tlblMins,\r\n\tlblSecs\r\n) {\r\n\tconst ob = hook.closest('.c-ob');\r\n\tif (!ob) {\r\n\t\treturn false;\r\n\t}\r\n\tconst clock = ob.querySelector(`.${selector}`);\r\n\tconst endTime = new Date(timeStamp).getTime();\r\n\r\n\tfunction getRemainingTime(deadline) {\r\n\t\tconst currentTime = new Date().getTime();\r\n\t\treturn deadline - currentTime;\r\n\t}\r\n\r\n\tfunction pad(value) {\r\n\t\treturn ('0' + Math.floor(value)).slice(-2);\r\n\t}\r\n\r\n\tfunction showTime() {\r\n\t\tconst remainingTime = getRemainingTime(endTime);\r\n\t\tconst seconds = pad((remainingTime / 1000) % 60);\r\n\t\tconst minutes = pad((remainingTime / (60 * 1000)) % 60);\r\n\t\tconst hours = pad((remainingTime / (60 * 60 * 1000)) % 24);\r\n\t\tconst days = pad(remainingTime / (24 * 60 * 60 * 1000));\r\n\t\tclock.innerHTML = `\r\n\t\t
\r\n\t\t\t
${days}${lblDays}
\r\n\t\t\t
${hours}${lblHours}
\r\n\t\t\t
${minutes}${lblMins}
\r\n\t\t\t
${seconds}${lblSecs}
\r\n\t\t
`;\r\n\r\n\t\tif (remainingTime >= 1000) {\r\n\t\t\trequestAnimationFrame(showTime);\r\n\t\t}\r\n\t}\r\n\trequestAnimationFrame(showTime);\r\n}\r\n\r\n/**\r\n * @function scrollToElm\r\n * @param {Event} event\r\n * @param {Node} hook\r\n * @param {String} selector\r\n * @description Scrolls to element matching `selector`, or to the bottom of hook-parent\r\n */\r\nexport function scrollToElm(event, hook, selector) {\r\n\tevent.preventDefault();\r\n\tconst ob = hook.closest('.c-ob');\r\n\tif (!ob) {\r\n\t\treturn false;\r\n\t}\r\n\tconst element = selector ? ob.querySelector(`.${selector}`) : ob;\r\n\tconst isIE11 = !!window.MSInputMethodContext && !!document.documentMode;\r\n\tif (element) {\r\n\t\tconst rect = element.getBoundingClientRect();\r\n\t\tif (isIE11) {\r\n\t\t\twindow.scrollTo(0, selector ? rect.top : rect.bottom);\r\n\t\t} else {\r\n\t\t\twindow.scrollBy({\r\n\t\t\t\ttop: selector ? rect.top : rect.bottom,\r\n\t\t\t\tbehavior: 'smooth',\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * @function sampleCatalogContent\r\n * @param {Event} event\r\n * @param {Node} sourceElm\r\n * @param {String} idStr\r\n */\r\nexport async function sampleCatalogContent(event, sourceElm, idStr) {\r\n\tevent.preventDefault();\r\n\tconst ids = idStr.split(';');\r\n\ttry {\r\n\t\tconst ob = sourceElm.closest('[data-catalog-content-vm]');\r\n\t\tconst lineItemSource = !!ob\r\n\t\t\t? ob.dataset.lineItemSource || 'OneblockProductSampler'\r\n\t\t\t: 'OneblockProductSampler';\r\n\t\tconst apiUrl = sourceElm.dataset.jsApiurl;\r\n\t\tconst result = await (\r\n\t\t\tawait fetch(apiUrl, {\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t\theaders: {\r\n\t\t\t\t\t'Content-Type': 'application/json;charset=utf-8',\r\n\t\t\t\t},\r\n\t\t\t\tbody: JSON.stringify({\r\n\t\t\t\t\tproductCodes: ids,\r\n\t\t\t\t\tlineItemSource: lineItemSource,\r\n\t\t\t\t\ttrackingParameters:\r\n\t\t\t\t\t\toneBlockBuildLineItemTrackingParameters(lineItemSource),\r\n\t\t\t\t}),\r\n\t\t\t})\r\n\t\t).json();\r\n\r\n\t\t//ga4 tracking - uses the new IHasBasketChangesTrackingParameters Interface\r\n\t\ttrack_add_to_cart(result);\r\n\t\tresult.quickSample = true;\r\n\r\n\t\tlet event = new CustomEvent('samplesadded', { detail: result });\r\n\t\twindow.dispatchEvent(event);\r\n\t\treturn result;\r\n\t} catch (ex) {\r\n\t\tconsole.error('An error occured while adding samples to basket', ex);\r\n\t\treturn null;\r\n\t}\r\n}\r\n\r\n/**\r\n * @function activateConsumerSignup\r\n * @param {Event} event\r\n * @param {Node} sourceElm\r\n * @param {String} idStr\r\n */\r\nexport function activateConsumerSignup(event) {\r\n\tevent.preventDefault();\r\n\tlet activateSignUpEvent = new CustomEvent('activateconsumersignup');\r\n\tdocument.dispatchEvent(activateSignUpEvent);\r\n}\r\n"],"names":["getVisitorID","cookies","visitorId","regex","cookie","match","track","payload","callback","event","trackInteractionEvent","eventCategory","eventAction","eventLabel","getOneBlockTrackingStrings","ob","headlineElm","headline","sectionElm","sectionHeadlineElm","sectionHeadline","headlines","culture","getCulture","getPageType","pageTypeEntry","entry","oneBlockBuildLineItemTrackingParameters","trackingDimensionConstants","trackingOrderTypes","countDown","hook","selector","timeStamp","lblDays","lblHours","lblMins","lblSecs","clock","endTime","getRemainingTime","deadline","currentTime","pad","value","showTime","remainingTime","seconds","minutes","hours","days","scrollToElm","element","isIE11","rect","sampleCatalogContent","sourceElm","idStr","ids","lineItemSource","apiUrl","result","track_add_to_cart","ex","activateConsumerSignup","activateSignUpEvent"],"mappings":"sIAIO,SAASA,GAAe,CAC3B,IAAIC,EAAU,SAAS,OAAO,MAAM,GAAG,EACnCC,EAAY,GACZC,EAAQ,qBACZ,OAAAF,EAAQ,QAASG,GAAW,CACxB,IAAIC,EAAQF,EAAM,KAAKC,CAAM,EACzBC,IACAH,EAAYG,EAAM,CAAC,EAE/B,CAAK,EACMH,CACX,CAEO,SAASI,EAAMC,EAASC,EAAUC,EAAO,CAC5C,OAAO,UAAY,OAAO,WAAa,CAAA,EACnC,OAAO,oBAAsBD,IAI7BD,EAAQ,cAAgBC,GAE5B,OAAO,UAAU,KAAKD,CAAO,EAC7B,QAAQ,MAAM,KAAK,UAAUA,CAAO,CAAC,CACzC,CAEO,SAASG,EAAsBC,EAAeC,EAAaC,EAAY,CAQ1EP,EAPc,CACV,MAAO,mBACP,cAAeK,EACf,YAAaC,EACb,WAAYC,EACZ,oBAAqB,EACxB,CACY,CACjB,CAEO,SAASC,EAA2BC,EAAI,CAC3C,MAAMC,EAAcD,EAAG,cAAc,iBAAiB,EAChDE,EAAWD,EAAcA,EAAY,UAAY,GACjDE,EAAaH,EAAG,QAAQ,YAAY,EACpCI,EAAqBD,EAAaA,EAAW,cAAc,sBAAsB,EAAI,KACrFE,EAAkBD,EAAqBA,EAAmB,UAAY,GAC5E,IAAIE,EAAY,CAAA,EACZD,GACAC,EAAU,KAAKD,CAAe,EAE9BH,GACAI,EAAU,KAAKJ,CAAQ,EAE3B,MAAMK,EAAUC,IAEhB,MAAO,CACH,OAAQ,GAAGF,EAAU,KAAK,KAAK,CAAC,IAAIC,CAAO,IAAI,SAAS,QAAQ,GAChE,SAAAL,EACA,aAAcI,EAAU,KAAK,KAAK,EAClC,QAAAC,EACA,SAAU,SAAS,SACnB,SAAUE,EAAa,EACvB,UAAWxB,EAAc,EACzB,MAAOA,EAAc,CACxB,CACL,CAEO,SAASuB,GAAa,CACzB,OAAO,SAAS,gBAAgB,aAAa,MAAM,CACvD,CAEO,SAASC,GAAc,CAC1B,MAAMC,EAAgB,OAAO,UAAU,KAAMC,GAAUA,EAAM,eAAe,UAAU,CAAC,EACvF,OAAOD,EAAgBA,EAAc,SAAW,EACpD,CAEO,SAASE,GAA0C,CACtD,MAAO,CACH,WAAYC,EAA2B,QACvC,YAAaC,EAAmB,UAChC,YAAaD,EAA2B,OAChD,CACA,CCtDO,SAASE,EACfrB,EACAsB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACC,CACD,MAAMtB,EAAKgB,EAAK,QAAQ,OAAO,EAC/B,GAAI,CAAChB,EACJ,MAAO,GAER,MAAMuB,EAAQvB,EAAG,cAAc,IAAIiB,CAAQ,EAAE,EACvCO,EAAU,IAAI,KAAKN,CAAS,EAAE,QAAO,EAE3C,SAASO,EAAiBC,EAAU,CACnC,MAAMC,EAAc,IAAI,KAAM,EAAC,QAAO,EACtC,OAAOD,EAAWC,CAClB,CAED,SAASC,EAAIC,EAAO,CACnB,OAAQ,IAAM,KAAK,MAAMA,CAAK,GAAG,MAAM,EAAE,CACzC,CAED,SAASC,GAAW,CACnB,MAAMC,EAAgBN,EAAiBD,CAAO,EACxCQ,EAAUJ,EAAKG,EAAgB,IAAQ,EAAE,EACzCE,EAAUL,EAAKG,GAAiB,GAAK,KAAS,EAAE,EAChDG,EAAQN,EAAKG,GAAiB,GAAK,GAAK,KAAS,EAAE,EACnDI,EAAOP,EAAIG,GAAiB,GAAK,GAAK,GAAK,IAAK,EACtDR,EAAM,UAAY;AAAA;AAAA,gCAEYY,CAAI,SAAShB,CAAO;AAAA,gCACpBe,CAAK,SAASd,CAAQ;AAAA,gCACtBa,CAAO,SAASZ,CAAO;AAAA,gCACvBW,CAAO,SAASV,CAAO;AAAA,UAGjDS,GAAiB,KACpB,sBAAsBD,CAAQ,CAE/B,CACD,sBAAsBA,CAAQ,CAC/B,CASO,SAASM,EAAY1C,EAAOsB,EAAMC,EAAU,CAClDvB,EAAM,eAAc,EACpB,MAAMM,EAAKgB,EAAK,QAAQ,OAAO,EAC/B,GAAI,CAAChB,EACJ,MAAO,GAER,MAAMqC,EAAUpB,EAAWjB,EAAG,cAAc,IAAIiB,CAAQ,EAAE,EAAIjB,EACxDsC,EAAS,CAAC,CAAC,OAAO,sBAAwB,CAAC,CAAC,SAAS,aAC3D,GAAID,EAAS,CACZ,MAAME,EAAOF,EAAQ,wBACjBC,EACH,OAAO,SAAS,EAAGrB,EAAWsB,EAAK,IAAMA,EAAK,MAAM,EAEpD,OAAO,SAAS,CACf,IAAKtB,EAAWsB,EAAK,IAAMA,EAAK,OAChC,SAAU,QACd,CAAI,CAEF,CACF,CAQO,eAAeC,EAAqB9C,EAAO+C,EAAWC,EAAO,CACnEhD,EAAM,eAAc,EACpB,MAAMiD,EAAMD,EAAM,MAAM,GAAG,EAC3B,GAAI,CACH,MAAM1C,EAAKyC,EAAU,QAAQ,2BAA2B,EAClDG,EAAmB5C,GACtBA,EAAG,QAAQ,gBAAkB,yBAE1B6C,EAASJ,EAAU,QAAQ,SAC3BK,EAAS,MACd,MAAM,MAAMD,EAAQ,CACnB,OAAQ,OACR,QAAS,CACR,eAAgB,gCAChB,EACD,KAAM,KAAK,UAAU,CACpB,aAAcF,EACd,eAAgBC,EAChB,mBACChC,EAAwCgC,CAAc,CAC5D,CAAK,CACL,CAAI,GACA,OAGFG,EAAkBD,CAAM,EACxBA,EAAO,YAAc,GAErB,IAAIpD,EAAQ,IAAI,YAAY,eAAgB,CAAE,OAAQoD,CAAM,CAAE,EAC9D,cAAO,cAAcpD,CAAK,EACnBoD,CACP,OAAQE,EAAI,CACZ,eAAQ,MAAM,kDAAmDA,CAAE,EAC5D,IACP,CACF,CAQO,SAASC,EAAuBvD,EAAO,CAC7CA,EAAM,eAAc,EACpB,IAAIwD,EAAsB,IAAI,YAAY,wBAAwB,EAClE,SAAS,cAAcA,CAAmB,CAC3C"}