{"version":3,"file":"Widgets.Preload-00ebae55e8961d659da2.js","mappings":"oGAAO,SAASA,EAAiBC,EAAUC,EAAQC,IAQ5C,SAA8BC,EAAQH,EAAUC,EAAQC,GAC3D,MAAME,EAAcH,EAAOI,MAAM,KAEjC,IAAK,IAAIC,EAAI,EAAGA,EAAIN,EAASO,OAAQD,IAAK,CACtC,MAAME,EAAUR,EAASM,GAEzB,IAAK,IAAIG,EAAI,EAAGA,EAAIL,EAAYG,OAAQE,IAAK,CACzC,MAAMC,EAAQN,EAAYK,GAGtBD,EAAQT,iBAAiBW,EAAOR,EAIxC,CACJ,CACJ,CAvBIS,CAAqB,EAAOX,EAAUC,EAAQC,EAClD,C,mDCASU,OAAOC,sBACRD,OAAOC,oBACHD,OAAOC,qBACH,SAAUX,GACN,MAAMY,EAAYC,KAAKC,MACvB,OAAOC,YAAW,WACdf,EAAQ,CACJgB,YAAY,EACZC,cAAe,WACX,OAAOC,KAAKC,IAAI,EAAG,IAAQN,KAAKC,MAAQF,GAC5C,GAER,GAAG,EACP,GAEPF,OAAOU,qBACRV,OAAOU,mBACHV,OAAOU,oBACH,SAAUC,GACNC,aAAaD,EACjB,E,wDCtBT,MAAME,EAAc,CAACC,EAAQC,KAChCD,EAAOE,KAAO,IAAIC,KACd,MAAMC,EAAMC,MAAMC,UAAUJ,KAAKK,KAAKP,KAAWG,GAEjD,OADAF,EAASE,GACFC,CAAG,CACb,C,wHCJE,SAASI,EAAkBC,GAC9BvB,OAAOwB,YAAcxB,OAAOwB,aAAe,GAC3CxB,OAAOwB,YAAYR,KAAKO,EAC5B,CACO,SAASE,EAAwBF,GACpCD,EAAkBC,EACtB,CACA,SAASG,IACL,MAAMC,EAAW3B,OAAO4B,SAASC,SAC3BC,EAAU,+BAA+BC,KAAKJ,GACpD,OAAOG,EAAUA,EAAQ,QAAKE,CAClC,CACO,SAASC,IACZ,IAAIC,EACJlC,OAAOwB,YAA4C,QAA7BU,EAAKlC,OAAOwB,mBAAgC,IAAPU,EAAgBA,EAAK,IAEhF,IAAAC,GAAYnC,OAAOwB,aAAaP,IAC5B,IAAIiB,EAAIE,EAAIC,EAAIC,EAAIC,EACpB,IAAK,IAAIC,EAAQ,EAAGA,EAAQvB,EAAMtB,OAAQ6C,IAAS,CAC/C,MAAMjB,EAAON,EAAMuB,GACS,QAA3BN,EAAKX,EAAe,gBAAsB,IAAPW,IAAsBX,EAAe,cAAIS,GACpD,QAAxBI,EAAKb,EAAY,aAAsB,IAAPa,IAAsBb,EAAY,WAAIS,GACxC,QAA9BK,EAAKd,EAAkB,mBAAsB,IAAPc,IAAsBd,EAAkB,iBAAIS,GAC/C,QAAnCM,EAAKf,EAAuB,wBAAsB,IAAPe,IAAsBf,EAAuB,sBAAIS,GAC9D,QAA9BO,EAAKhB,EAAkB,mBAAsB,IAAPgB,IAAsBhB,EAAkB,YAAIG,IACvF,IAER,C,iFCvBA,MAsMMe,EAAe,CAAC,QACtB,SAASC,EAAWC,EAAKC,GACrB,IAAKD,EACD,MAAME,MAAM,uBAGhB,GADAF,EAAMA,EAAIG,eACyB,IAA/BL,EAAaM,QAAQJ,GACrB,MAAME,MAAM,UAAUF,sBAKjB,SADDA,GAhND,CACHK,aAAc,WACV,IAAIC,EAOJ,GALIA,EAD0B,KAA1BC,KAAKC,KAAKC,YACEF,KAAKG,aAGLC,SAASC,eAAeL,KAAKC,KAAKC,cAE7CH,EACD,MAAM,IAAIJ,MAAM,wBAEpB,OAAOI,CACX,EACAO,KAAM,WACF,MAAO,uCAAuCC,QAAQ,SAAS,SAAUC,GACrE,MAAMC,EAAqB,GAAhBnD,KAAKoD,SAAiB,EACjC,OAD8C,MAANF,EAAYC,EAAS,EAAJA,EAAW,GAC3DE,SAAS,GACtB,GACJ,EACAR,WAAY,WACR,MACMS,EADMZ,KAAKC,KAAKY,UAAUN,QAAQ,SAAU,KAC7BhE,MAAM,KACrBuE,EAAcd,KAAKc,YAAYC,KAAKf,MAC1C,IAAK,IAAIxD,EAAI,EAAGA,EAAI4D,SAASY,QAAQvE,OAAQD,IAAK,CAC9C,MACMyE,EADMb,SAASY,QAAQxE,GAAG0E,IAAIX,QAAQ,SAAU,KACjChE,MAAM,KAC3B,GAAIqE,EAASnE,SAAWwE,EAASxE,QAAUmE,EAAS,KAAOK,EAAS,GAAI,CACpE,GAAwB,IAApBL,EAASnE,OACT,OAAO2D,SAASY,QAAQxE,GAE5B,GAAIsE,EAAYF,EAAS,GAAGrE,MAAM,KAAM0E,EAAS,GAAG1E,MAAM,MACtD,OAAO6D,SAASY,QAAQxE,EAEhC,CACJ,CACA,OAAO,IACX,EAEAsE,YAAa,SAAUK,EAAWC,GAC9B,GAAID,EAAU1E,SAAW2E,EAAU3E,OAC/B,OAAO,EACX,MAAM4E,EAAUrB,KAAKqB,QACrB,IAAK,IAAIC,EAAI,EAAGA,EAAIH,EAAU1E,OAAQ6E,IAClC,IAAKD,EAAQF,EAAUG,GAAIF,GACvB,OAAO,EAGf,OAAO,CACX,EAEAC,QAAS,SAAUE,EAAOC,GACtB,IAAK,IAAIF,EAAI,EAAGA,EAAIE,EAAM/E,OAAQ6E,IAC9B,GAAIC,EAAM3B,gBAAkB4B,EAAMF,GAAG1B,cACjC,OAAO,EAGf,OAAO,CACX,EACA6B,YAAa,SAAUC,EAAKC,GACxB,OAA0B,IAAtBD,EAAI7B,QAAQ,KACL6B,EAAM,IAAMC,EAEhBD,EAAM,IAAMC,CACvB,EACAC,iBAAkB,SAAUC,EAAOC,GAC/B,MACMP,EADYvB,KAAKF,eACCiC,aAAa,QAAUD,GAC3CP,IACAM,EAAMX,IAAMlB,KAAKyB,YAAYI,EAAMX,IAAKY,EAAO,IAAME,mBAAmBT,IAEhF,EACAU,OAAQ,WACJ,MAAMlC,EAAYC,KAAKF,eACvB,IAAKC,EACD,OAEJ,MAAMmC,EAASlC,KAAKmC,mBAAmBpC,GACnC,IAA4BmC,GAC5BlC,KAAKoC,cAGTpC,KAAKqC,gBAAkBrC,KAAKsC,SAASvB,KAAKf,MAK1CA,KAAKuC,SAAW,IAAIC,qBAAqBxC,KAAKqC,gBAJ9B,CACZI,KAAM,KACNC,UAAW,KAGf1C,KAAKuC,SAASI,QAAQT,GAC1B,EACA,kBAAAC,CAAmBS,GACf,MAAMV,EAASU,EAAGC,cAClB,OAAKX,EAGuB,IAAxBA,EAAOY,aACA9C,KAAKmC,mBAAmBD,GAE5BA,EALIU,CAMf,EACAN,SAAU,SAAUS,GAChB,IAAI/C,KAAKgD,cAGT,IAAK,IAAIxG,EAAI,EAAGA,EAAIuG,EAAQtG,OAAQD,IAEhC,GADcuG,EAAQvG,GACZyG,eAGN,OAFAjD,KAAKuC,SAASW,kBACdlD,KAAKoC,YAIjB,EACAA,WAAY,WACRpC,KAAKgD,eAAgB,EACrB,MAAMjD,EAAYC,KAAKF,eACjB9C,EAAYC,KAAKC,OACvB,QAAwB,CACpBN,MAAO,uBACPuG,iBAAkB,WAEtB,MAAMzE,EAAWsB,KAAKoD,YAAYrD,GAK5B8B,EAAQzB,SAASiD,cAAc,UACrCxB,EAAMpE,GAAKuC,KAAKsD,IAChB,MAAMC,EAAW,MAAMvB,mBAAmBtD,KAC1CmD,EAAMX,IAAMlB,KAAKyB,YAAYzB,KAAKC,KAAKuD,YAAaD,GACpD1B,EAAM4B,aAAa,QAAS,QAC5B5B,EAAM4B,aAAa,YAAa,MAChC5B,EAAM4B,aAAa,cAAe,KAClC5B,EAAM4B,aAAa,WAAY,YAC/B5B,EAAM4B,aAAa,oBAAqB,QACxC5B,EAAM6B,MAAMC,OAAS3D,KAAKC,KAAK2D,MAAQ,OAAS,QAC5C5D,KAAKC,KAAK4D,iBACVhC,EAAM4B,aAAa,kBAAmB,IAE1CzD,KAAK4B,iBAAiBC,EAAO,SACV9B,EAAU+D,WAClBC,aAAalC,EAAO9B,GAC/B8B,EAAMmC,OAAS,KAIX,KAA6B,CAAClH,QAAS,WAHpBF,IACfoD,KAAKiE,OAAOpC,EAAOjF,EAAM,IAG7B,MAAMsH,EAAUjH,KAAKC,OACrB,QAAwB,CACpBN,MAAO,qBACPuG,iBAAkB,SAClBgB,UAAWD,EAAUlH,GAAa,KACpC,CAEV,EACA,WAAAoG,CAAYR,GACR,MAAMwB,EAAkBtH,OAAOuH,IAAI3F,SAAS4F,KAEtCC,EAAM,yBACNC,EAAU5B,EAAG6B,QAAQ,IAAIF,MAC/B,OAAKC,GAGaA,EAAQzC,aAAawC,IAF5BH,CAIf,EACAH,OAAQ,SAAUpC,EAAOjF,GAErBG,qBADiB,IAAMiD,KAAK0E,QAAQ7C,EAAOjF,IACb,CAAE+H,QAAS,KAC7C,EACAD,QAAS,SAAU7C,EAAOjF,GACtB,MAAMgI,EAAU,GAAGhI,EAAMiI,KAAKlB,WAC1B/G,EAAMiI,MACNjI,EAAMiI,KAAKlB,QACXmB,OAAO5G,UAAU6G,eAAe5G,KAAKvB,EAAMiI,KAAM,aACzB,sBAAxBjI,EAAMiI,KAAKG,UACXpI,EAAMiI,KAAKnD,MAAQG,EAAMX,KACzBtE,EAAMqI,SAAWpD,EAAMqD,eACvBrD,EAAM6B,MAAMC,SAAWiB,IAEvB/C,EAAM6B,MAAMC,OAASiB,EAE7B,EACAO,KAAM,SAAUlF,GACZD,KAAKC,KAAOA,EACZD,KAAKsD,IAAMtD,KAAKM,OAChBN,KAAKgD,eAAgB,EACrBhD,KAAKoF,iBAAmB,KACxBpF,KAAKqF,aAAe,MACpB,QAAwB,CACpBzI,MAAO,sBACPuG,iBAAkB,WAEtBnD,KAAKiC,QACT,GAgBekD,KAAKzF,EAK5B,CAEA,SAAS4F,EAAaC,GAElB,GAAKA,EAIL,IAAK,IAAI/I,EAAI,EAAGA,EAAI+I,EAAM9I,OAAQD,IAAK,CACnC,MAAMgJ,EAAYD,EAAM/I,GACpBgJ,EAAUC,cAIdjG,EAAWgG,EAAU,GAAIA,EAAU,IAEnCA,EAAUC,aAAc,EAE5B,CAEJ,EACA,WACI,MAAMF,EAAQzI,OAAO,aAAa4I,IAClC,IAAAzG,GAAYsG,GAAOI,IACfL,EAAaK,EAAM,IAEvBL,EAAaC,EACjB,CACAK,E,wBCzPO,SAASC,EAAajD,GACzB,GAA4C,SAAxC9F,OAAOgJ,iBAAiBlD,GAAImD,QAC5B,OAAO,EAIX,MAAMC,EAAOpD,EAAGqD,wBACVC,EAAiBpJ,OAAOqJ,aAAe/F,SAASgG,gBAAgBtD,aACtE,OAAOkD,EAAKK,OAAS,GAAKL,EAAK3B,KAAO,GAAK2B,EAAK3B,KAAO6B,CAC3D,C","sources":["webpack://@whistleout/webui/./Areas/Widgets/js/common/utils/EventHelper.js","webpack://@whistleout/webui/./Areas/Shared/js/polyfills/IdleCallback.ts","webpack://@whistleout/webui/./Areas/Shared/js/utils/array.ts","webpack://@whistleout/webui/./Areas/Shared/js/utils/datalayer.ts","webpack://@whistleout/webui/./Areas/Widgets/js/Preload.ts","webpack://@whistleout/webui/./Areas/Widgets/js/common/utils/ViewportHelper.ts"],"sourcesContent":["export function addEventListener(elements, events, handler) {\n _addOrRemoveListener('add', elements, events, handler);\n}\n\nexport function removeEventListener(elements, events, handler) {\n _addOrRemoveListener('remove', elements, events, handler);\n}\n\nexport function _addOrRemoveListener(action, elements, events, handler) {\n const eventsArray = events.split(' ');\n\n for (let i = 0; i < elements.length; i++) {\n const element = elements[i];\n\n for (let j = 0; j < eventsArray.length; j++) {\n const event = eventsArray[j];\n\n if (action === 'add') {\n element.addEventListener(event, handler);\n } else {\n element.removeEventListener(event, handler);\n }\n }\n }\n}\n","// See: https://developer.mozilla.org/en-US/docs/Web/API/Background_Tasks_API#Concepts_and_usage -> Falling back to setTimeout\nexport function init() {\n if (!window.requestIdleCallback) {\n window.requestIdleCallback =\n window.requestIdleCallback ||\n function (handler) {\n const startTime = Date.now();\n return setTimeout(function () {\n handler({\n didTimeout: false,\n timeRemaining: function () {\n return Math.max(0, 50.0 - (Date.now() - startTime));\n }\n });\n }, 1);\n };\n }\n if (!window.cancelIdleCallback) {\n window.cancelIdleCallback =\n window.cancelIdleCallback ||\n function (id) {\n clearTimeout(id);\n };\n }\n}\n","export const onArrayPush = (target, callback) => {\n target.push = (...items) => {\n const res = Array.prototype.push.call(target, ...items);\n callback(items);\n return res;\n };\n};\n","import { onArrayPush } from './array';\nexport function pushDataLayerItem(item) {\n window.woDataLayer = window.woDataLayer || [];\n window.woDataLayer.push(item);\n}\nexport function pushDataLayerItemWidget(item) {\n pushDataLayerItem(item);\n}\nfunction getWidgetType() {\n const pathName = window.location.pathname;\n const matches = /^\\/widgets\\/(\\w+)([/|?].+)?/i.exec(pathName);\n return matches ? matches[1] : undefined;\n}\nexport function initDataLayer() {\n var _a;\n window.woDataLayer = (_a = window.woDataLayer) !== null && _a !== void 0 ? _a : [];\n // Set default values, reset unused (not explicitly set) parameters\n onArrayPush(window.woDataLayer, items => {\n var _a, _b, _c, _d, _e;\n for (let index = 0; index < items.length; index++) {\n const item = items[index];\n (_a = item['duration']) !== null && _a !== void 0 ? _a : (item['duration'] = undefined);\n (_b = item['error']) !== null && _b !== void 0 ? _b : (item['error'] = undefined);\n (_c = item['widget_type']) !== null && _c !== void 0 ? _c : (item['widget_type'] = undefined);\n (_d = item['widget_placement']) !== null && _d !== void 0 ? _d : (item['widget_placement'] = undefined);\n (_e = item['widget_type']) !== null && _e !== void 0 ? _e : (item['widget_type'] = getWidgetType());\n }\n });\n}\n","import '../../Shared/js/polyfills';\nimport { onArrayPush } from '../../Shared/js/utils/array';\nimport { pushDataLayerItemWidget } from '../../Shared/js/utils/datalayer';\nimport * as EventHelper from './common/utils/EventHelper';\nimport * as ViewportHelper from './common/utils/ViewportHelper';\nconst createController = function () {\n return {\n getContainer: function () {\n let container;\n if (this.args.containerId === '') {\n container = this.findScript();\n }\n else {\n container = document.getElementById(this.args.containerId);\n }\n if (!container) {\n throw new Error('Container not found!');\n }\n return container;\n },\n uuid: function () {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n const r = (Math.random() * 16) | 0, v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n },\n findScript: function () {\n const url = this.args.scriptUrl.replace(/&/g, '&');\n const urlParts = url.split('?');\n const paramsMatch = this.paramsMatch.bind(this);\n for (let i = 0; i < document.scripts.length; i++) {\n const src = document.scripts[i].src.replace(/&/g, '&');\n const srcParts = src.split('?');\n if (urlParts.length === srcParts.length && urlParts[0] === srcParts[0]) {\n if (urlParts.length === 1) {\n return document.scripts[i];\n }\n if (paramsMatch(urlParts[1].split('&'), srcParts[1].split('&'))) {\n return document.scripts[i];\n }\n }\n }\n return null;\n },\n // TODO: Use Lodash\n paramsMatch: function (urlParams, srcParams) {\n if (urlParams.length !== srcParams.length)\n return false;\n const inArray = this.inArray;\n for (let x = 0; x < urlParams.length; x++) {\n if (!inArray(urlParams[x], srcParams)) {\n return false;\n }\n }\n return true;\n },\n // TODO: Use Lodash\n inArray: function (value, array) {\n for (let x = 0; x < array.length; x++) {\n if (value.toLowerCase() === array[x].toLowerCase()) {\n return true;\n }\n }\n return false;\n },\n appendQuery: function (url, query) {\n if (url.indexOf('?') === -1) {\n return url + '?' + query;\n }\n return url + '&' + query;\n },\n addDataAttribute: function (frame, name) {\n const container = this.getContainer();\n const value = container.getAttribute('data-' + name);\n if (value) {\n frame.src = this.appendQuery(frame.src, name + '=' + encodeURIComponent(value));\n }\n },\n onLoad: function () {\n const container = this.getContainer();\n if (!container) {\n return;\n }\n const parent = this.getParentContainer(container);\n if (ViewportHelper.isInViewport(parent)) {\n this.loadWidget();\n return;\n }\n this.onScrollHandler = this.onScroll.bind(this);\n const options = {\n root: null, // viewport\n threshold: 0.1\n };\n this.observer = new IntersectionObserver(this.onScrollHandler, options);\n this.observer.observe(parent);\n },\n getParentContainer(el) {\n const parent = el.parentElement;\n if (!parent) {\n return el;\n }\n if (parent.clientHeight === 0) {\n return this.getParentContainer(parent);\n }\n return parent;\n },\n onScroll: function (entries) {\n if (this.loadTriggered) {\n return;\n }\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n if (entry.isIntersecting) {\n this.observer.disconnect();\n this.loadWidget();\n return;\n }\n }\n },\n loadWidget: function () {\n this.loadTriggered = true;\n const container = this.getContainer();\n const startTime = Date.now();\n pushDataLayerItemWidget({\n event: 'widget_preload_begin',\n widget_placement: 'iframe'\n });\n const location = this.getLocation(container);\n console.debug({\n 'wo->_loadWidget': this.args.frameSource,\n location: location\n });\n const frame = document.createElement('iframe');\n frame.id = this.uid;\n const referrer = `_r=${encodeURIComponent(location)}`;\n frame.src = this.appendQuery(this.args.frameSource, referrer);\n frame.setAttribute('width', '100%');\n frame.setAttribute('scrolling', 'no');\n frame.setAttribute('frameborder', '0');\n frame.setAttribute('seamless', 'seamless');\n frame.setAttribute('allowtransparency', 'true');\n frame.style.height = this.args.isCta ? '34px' : '260px';\n if (this.args.allowFullscreen) {\n frame.setAttribute('allowfullscreen', '');\n }\n this.addDataAttribute(frame, 'query');\n const parentNode = container.parentNode;\n parentNode.replaceChild(frame, container);\n frame.onload = () => {\n const onMessage = (event) => {\n this.resize(frame, event);\n };\n EventHelper.addEventListener([window], 'message', onMessage);\n const endTime = Date.now();\n pushDataLayerItemWidget({\n event: 'widget_preload_end',\n widget_placement: 'iframe',\n duration: (endTime - startTime) / 1000\n });\n };\n },\n getLocation(el) {\n const defaultLocation = window.top.location.href;\n // TODO: Support list of attributes for different website implementations\n const key = 'data-article-permalink';\n const article = el.closest(`[${key}]`);\n if (!article) {\n return defaultLocation;\n }\n const permalink = article.getAttribute(key);\n return permalink || defaultLocation;\n },\n resize: function (frame, event) {\n const callback = () => this._resize(frame, event);\n requestIdleCallback(callback, { timeout: 500 });\n },\n _resize: function (frame, event) {\n const newSize = `${event.data.height}px`;\n if (event.data &&\n event.data.height &&\n Object.prototype.hasOwnProperty.call(event.data, 'sentinel') &&\n event.data.sentinel === 'whistleout-widget' &&\n event.data.url === frame.src &&\n event.source === frame.contentWindow &&\n frame.style.height !== newSize) {\n console.debug(`Resizing widget: ${frame.style.height}->${newSize}`, new URL(event.data.url));\n frame.style.height = newSize;\n }\n },\n init: function (args) {\n this.args = args;\n this.uid = this.uuid();\n this.loadTriggered = false;\n this.loadWidgetTaskId = null;\n this.resizeTaskId = null;\n pushDataLayerItemWidget({\n event: 'widget_preload_init',\n widget_placement: 'iframe'\n });\n this.onLoad();\n }\n };\n};\nconst supportedAPI = ['show'];\nfunction apiHandler(api, params) {\n if (!api) {\n throw Error('API method required');\n }\n api = api.toLowerCase();\n if (supportedAPI.indexOf(api) === -1) {\n throw Error(`Method ${api} is not supported`);\n }\n console.debug(`Handling API call ${api}`, params);\n const controller = createController();\n switch (api) {\n case 'show':\n controller.init(params);\n break;\n default:\n console.warn(`No handler defined for ${api}`);\n }\n}\n// Based on: https://blog.jenyay.com/building-javascript-widget/\nfunction processQueue(queue) {\n console.debug('Processing widget preload queue...');\n if (!queue) {\n console.debug('Processing widget preload queue: empty queue. SKIP');\n return;\n }\n for (let i = 0; i < queue.length; i++) {\n const queueItem = queue[i];\n if (queueItem.isProcessed) {\n continue;\n }\n console.debug(`Processing widget preload queue, item ${i}...: ${queueItem[0]}`, queueItem);\n apiHandler(queueItem[0], queueItem[1]);\n // TODO: Consider removing processed items for better performance\n queueItem.isProcessed = true;\n console.debug(`Processing widget preload queue, item ${i}... DONE`);\n }\n console.debug('Processing widget preload queue... DONE');\n}\nfunction main() {\n const queue = window['wo-widget'].pq;\n onArrayPush(queue, added => {\n processQueue(added);\n });\n processQueue(queue);\n}\nmain();\n","export function isInViewport(el) {\n if (window.getComputedStyle(el).display === 'none') {\n return false;\n }\n // See: https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect\n // Based on: https://github.com/Emmaccen/isElementInView/blob/main/view.js\n const rect = el.getBoundingClientRect();\n const viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n return rect.bottom > 0 && rect.top >= 0 && rect.top <= viewportHeight;\n}\n"],"names":["addEventListener","elements","events","handler","action","eventsArray","split","i","length","element","j","event","_addOrRemoveListener","window","requestIdleCallback","startTime","Date","now","setTimeout","didTimeout","timeRemaining","Math","max","cancelIdleCallback","id","clearTimeout","onArrayPush","target","callback","push","items","res","Array","prototype","call","pushDataLayerItem","item","woDataLayer","pushDataLayerItemWidget","getWidgetType","pathName","location","pathname","matches","exec","undefined","initDataLayer","_a","o","_b","_c","_d","_e","index","supportedAPI","apiHandler","api","params","Error","toLowerCase","indexOf","getContainer","container","this","args","containerId","findScript","document","getElementById","uuid","replace","c","r","random","toString","urlParts","scriptUrl","paramsMatch","bind","scripts","srcParts","src","urlParams","srcParams","inArray","x","value","array","appendQuery","url","query","addDataAttribute","frame","name","getAttribute","encodeURIComponent","onLoad","parent","getParentContainer","loadWidget","onScrollHandler","onScroll","observer","IntersectionObserver","root","threshold","observe","el","parentElement","clientHeight","entries","loadTriggered","isIntersecting","disconnect","widget_placement","getLocation","createElement","uid","referrer","frameSource","setAttribute","style","height","isCta","allowFullscreen","parentNode","replaceChild","onload","resize","endTime","duration","defaultLocation","top","href","key","article","closest","_resize","timeout","newSize","data","Object","hasOwnProperty","sentinel","source","contentWindow","init","loadWidgetTaskId","resizeTaskId","processQueue","queue","queueItem","isProcessed","pq","added","main","isInViewport","getComputedStyle","display","rect","getBoundingClientRect","viewportHeight","innerHeight","documentElement","bottom"],"sourceRoot":""}