{"version":3,"file":"Widgets.Preload-a5d4bd877e7bf26249da.js","mappings":"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","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\n\nexport function init() {\n if (!window.requestIdleCallback) {\n window.requestIdleCallback =\n window.requestIdleCallback ||\n function (handler) {\n const startTime = Date.now();\n\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) as unknown as number;\n };\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: T[], callback: (added: T[]) => void) => {\n target.push = (...items: T[]) => {\n const res = Array.prototype.push.call(target, ...items);\n callback(items);\n return res;\n };\n};\n","import type { DataLayerItemWidget, WoDataLayerItem } from '../@types/WoDataLayer';\nimport { onArrayPush } from './array';\n\nexport function pushDataLayerItem(item: WoDataLayerItem) {\n window.woDataLayer = window.woDataLayer || [];\n window.woDataLayer.push(item);\n}\n\nexport function pushDataLayerItemWidget(item: DataLayerItemWidget) {\n pushDataLayerItem(item);\n}\n\nfunction getWidgetType() {\n const pathName = window.location.pathname;\n const matches = /^\\/widgets\\/(\\w+)([/|?].+)?/i.exec(pathName);\n return matches ? matches[1] : undefined;\n}\n\nexport function initDataLayer() {\n window.woDataLayer = window.woDataLayer ?? [];\n\n // Set default values, reset unused (not explicitly set) parameters\n onArrayPush(window.woDataLayer, items => {\n for (let index = 0; index < items.length; index++) {\n const item = items[index];\n item['duration'] ??= undefined;\n item['error'] ??= undefined;\n item['widget_type'] ??= undefined;\n item['widget_placement'] ??= undefined;\n\n item['widget_type'] ??= getWidgetType();\n }\n });\n}\n","import '../../Shared/js/polyfills';\n\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';\n\nconst createController = function () {\n return {\n getContainer: function () {\n let container;\n\n if (this.args.containerId === '') {\n container = this.findScript();\n } else {\n container = document.getElementById(this.args.containerId);\n }\n\n if (!container) {\n throw new Error('Container not found!');\n }\n\n return container;\n },\n\n uuid: function () {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n const r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\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\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\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\n // TODO: Use Lodash\n paramsMatch: function (urlParams: unknown[], srcParams: unknown[]) {\n if (urlParams.length !== srcParams.length) 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\n // TODO: Use Lodash\n inArray: function (value: string, array: string[]) {\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\n appendQuery: function (url: string, query: string) {\n if (url.indexOf('?') === -1) {\n return url + '?' + query;\n }\n return url + '&' + query;\n },\n\n addDataAttribute: function (frame: HTMLIFrameElement, name: string) {\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\n onLoad: function () {\n const container = this.getContainer();\n if (!container) {\n return;\n }\n\n const parent = this.getParentContainer(container);\n if (ViewportHelper.isInViewport(parent)) {\n this.loadWidget();\n return;\n }\n\n this.onScrollHandler = this.onScroll.bind(this);\n\n const options = {\n root: null, // viewport\n threshold: 0.1\n };\n\n this.observer = new IntersectionObserver(this.onScrollHandler, options);\n this.observer.observe(parent);\n },\n\n getParentContainer(el: HTMLElement) {\n const parent = el.parentElement;\n if (!parent) {\n return el;\n }\n\n if (parent.clientHeight === 0) {\n return this.getParentContainer(parent);\n }\n\n return parent;\n },\n\n onScroll: function (entries: IntersectionObserverEntry[]) {\n if (this.loadTriggered) {\n return;\n }\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\n loadWidget: function () {\n this.loadTriggered = true;\n\n const container = this.getContainer();\n\n const startTime = Date.now();\n pushDataLayerItemWidget({\n event: 'widget_preload_begin',\n widget_placement: 'iframe'\n });\n\n const location = this.getLocation(container);\n\n console.debug({\n 'wo->_loadWidget': this.args.frameSource,\n location: location\n });\n\n const frame = document.createElement('iframe');\n frame.id = this.uid;\n\n const referrer = `_r=${encodeURIComponent(location)}`;\n frame.src = this.appendQuery(this.args.frameSource, referrer);\n\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\n if (this.args.allowFullscreen) {\n frame.setAttribute('allowfullscreen', '');\n }\n\n this.addDataAttribute(frame, 'query');\n\n const parentNode = container.parentNode;\n parentNode.replaceChild(frame, container);\n\n frame.onload = () => {\n const onMessage = (event: Event) => {\n this.resize(frame, event);\n };\n\n EventHelper.addEventListener([window], 'message', onMessage);\n\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\n getLocation(el: HTMLElement) {\n const defaultLocation = window.top.location.href;\n\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\n const permalink = article.getAttribute(key);\n return permalink || defaultLocation;\n },\n\n resize: function (frame: HTMLIFrameElement, event: Event) {\n const callback = () => this._resize(frame, event);\n requestIdleCallback(callback, { timeout: 500 });\n },\n\n _resize: function (frame: HTMLIFrameElement, event: Event & { data: ResizeEventArgs; source: unknown }) {\n const newSize = `${event.data.height}px`;\n\n if (\n 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 ) {\n console.debug(`Resizing widget: ${frame.style.height}->${newSize}`, new URL(event.data.url));\n frame.style.height = newSize;\n }\n },\n\n init: function (args: ApiParams) {\n this.args = args;\n this.uid = this.uuid();\n\n this.loadTriggered = false;\n this.loadWidgetTaskId = null;\n this.resizeTaskId = null;\n\n pushDataLayerItemWidget({\n event: 'widget_preload_init',\n widget_placement: 'iframe'\n });\n\n this.onLoad();\n }\n };\n};\n\nconst supportedAPI = ['show'];\n\nfunction apiHandler(api: string, params: ApiParams) {\n if (!api) {\n throw Error('API method required');\n }\n\n api = api.toLowerCase();\n if (supportedAPI.indexOf(api) === -1) {\n throw Error(`Method ${api} is not supported`);\n }\n\n console.debug(`Handling API call ${api}`, params);\n\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\n// Based on: https://blog.jenyay.com/building-javascript-widget/\nfunction processQueue(queue: ApiQueueItem[]) {\n console.debug('Processing widget preload queue...');\n\n if (!queue) {\n console.debug('Processing widget preload queue: empty queue. SKIP');\n return;\n }\n\n for (let i = 0; i < queue.length; i++) {\n const queueItem = queue[i];\n if (queueItem.isProcessed) {\n continue;\n }\n\n console.debug(`Processing widget preload queue, item ${i}...: ${queueItem[0]}`, queueItem);\n apiHandler(queueItem[0], queueItem[1]);\n\n // TODO: Consider removing processed items for better performance\n queueItem.isProcessed = true;\n\n console.debug(`Processing widget preload queue, item ${i}... DONE`);\n }\n\n console.debug('Processing widget preload queue... DONE');\n}\n\nfunction main() {\n const queue = window['wo-widget'].pq;\n onArrayPush(queue, added => {\n processQueue(added);\n });\n\n processQueue(queue);\n}\n\nmain();\n","export function isInViewport(el: HTMLElement) {\n if (window.getComputedStyle(el).display === 'none') {\n return false;\n }\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\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","o","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":""}