{"version":3,"file":"js/scripts_libraries__modules_tracking_index_js.js?_t=68a8f8aaac7258958ad1","mappings":";;;;;;;;;;;;AAAA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAGA;AAAA;AACA;AAEA;AAAA;AAGA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;ACrEA;AAEA;AAAA;AAEA;AAEA;AAAA;AACA;AAGA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AACA;AACA;AAKA;AAAA;AAEA;AApCA;AA+BA;AAnCA;;;;;;;;;;;;;;;;;ACAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAGA;AAAA;AACA;AAGA;AACA;AAAA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA","sources":["webpack://@mlssoccer/netcore/./scripts/libraries/_modules/tracking/index.js","webpack://@mlssoccer/netcore/./scripts/libraries/_modules/tracking/service.js","webpack://@mlssoccer/netcore/./scripts/libraries/utils.js"],"sourcesContent":["import GoogleTagManagerService from './service';\nimport { trackBlockClick, trackBlockImpression, trackEvent } from \"./helpers\";\n\nGoogleTagManagerService.registerInstance('[data-tracking-block-impression]', (elements) => {\n const blockImpressionsList = [];\n\n elements.forEach((element) => {\n if (element.dataset.impressionTracked) return;\n\n const data = JSON.parse(element.dataset.trackingBlockImpression);\n\n const bucketName = element.closest('[data-bucket-name]')?.dataset.bucketName;\n const blockType = element.closest('[data-block-type]')?.dataset.blockType;\n\n let blockImpressionsIndex = blockImpressionsList.findIndex(bi => bi.bucketName === bucketName && bi.blockType === blockType);\n if (blockImpressionsIndex < 0 && blockImpressionsList.length == 0) {\n blockImpressionsIndex = 0;\n blockImpressionsList.push({\n bucketName,\n blockType,\n impressions: [],\n });\n }\n\n if (blockImpressionsIndex < 0 && blockImpressionsList.length != 0) {\n blockImpressionsIndex = blockImpressionsList.length;\n blockImpressionsList.push({\n bucketName,\n blockType,\n impressions: [],\n });\n }\n\n blockImpressionsList[blockImpressionsIndex].impressions.push({\n ...data,\n });\n element.dataset.impressionTracked = true;\n });\n\n if (!blockImpressionsList.length) return;\n\n blockImpressionsList.forEach(({ bucketName, blockType, impressions }) => impressions.length && trackBlockImpression(bucketName, blockType, impressions));\n});\n\nGoogleTagManagerService.registerInstance('[data-tracking-block-click]', (elements) => {\n elements.forEach((element) => {\n const data = JSON.parse(element.dataset.trackingBlockClick);\n\n const bucketName = element.closest('[data-bucket-name]')?.dataset.bucketName;\n const blockType = element.closest('[data-block-type]')?.dataset.blockType;\n const layoutName = element.closest('[data-layout-name]')?.dataset.layoutName;\n const blockLayout = element.closest('[data-block-layout]')?.dataset.blockLayout;\n const blockStyle = element.closest('[data-block-style]')?.dataset.blockStyle;\n\n const impressionBlock = element.closest('[data-tracking-block-impression]');\n const promotion = impressionBlock?.dataset.trackingBlockImpression && JSON.parse(impressionBlock.dataset.trackingBlockImpression);\n\n element.addEventListener('click', () => {\n trackBlockClick(bucketName, blockType, layoutName, blockLayout, blockStyle, data, promotion);\n });\n });\n});\n\nGoogleTagManagerService.registerInstance('[data-tracking-click]', (elements) => {\n elements.forEach((element) => {\n element.addEventListener('click', () => {\n const eventName = element.dataset.clickEventName;\n const data = JSON.parse(element.dataset.trackingClick);\n trackEvent(eventName, data);\n });\n });\n});\n","/* eslint-disable bam/no-react-unbound */\n\nimport { domIsReady, watchAddedNodes } from \"../../utils\";\n\nexport default class GoogleTagManagerService {\n constructor(selector, trackingMethod) {\n this.callback = trackingMethod;\n\n this.init(selector);\n }\n\n async init(selector) {\n await domIsReady();\n watchAddedNodes((nodes) => {\n this.generateObserver(nodes);\n }, selector);\n }\n\n /**\n * Process nodes\n */\n generateObserver(nodes) {\n this.observer && this.observer.disconnect();\n\n this.observer = new IntersectionObserver((inttersectedEls) => {\n const elements = inttersectedEls.filter((e) => e.isIntersecting).map((e) => e.target);\n elements.forEach((e) => this.observer.unobserve(e));\n this.callback(elements);\n });\n\n nodes.forEach((node) => {\n this.observer.observe(node);\n });\n }\n\n static instances = [];\n\n static registerInstance(selector, trackingMethod) {\n this.instances.push(new GoogleTagManagerService(selector, trackingMethod));\n }\n}\n","export function Warn(...args) {\n window.console && window.console.warn(...args);\n}\n\nexport const watchAddedNodes = async (callback, querySelector, immediate = true) => {\n const throttle = await import('./_utilities/throttle');\n if (!callback || typeof callback !== 'function') throw new Error('callback must be a function');\n if (!querySelector) throw new Error('querySelector must have a value');\n\n if (immediate) {\n const initialElements = Array.from(document.querySelectorAll(querySelector));\n callback(initialElements);\n }\n\n const observer = new MutationObserver((mutationsList) => {\n let elements = [];\n const debouncedClbk = throttle.debounce(\n () => {\n callback(elements);\n },\n 250,\n false\n );\n for (const mutation of mutationsList) {\n if (mutation.type === 'childList') {\n const nodes = Array.from(mutation.addedNodes).filter((node) => node.nodeType === 1);\n const selfNodes = nodes.filter(\n (node) => !querySelector || node.matches(querySelector)\n );\n const innerNodes = nodes\n .filter(\n (node) => querySelector && node.querySelector(querySelector))\n .map((node) => Array.from(node.querySelectorAll(querySelector)))\n .reduce((a, b) => a.concat(b), []);\n elements = [...elements, ...selfNodes, ...innerNodes];\n }\n }\n\n if (elements && elements.length) {\n debouncedClbk();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true,\n });\n return observer;\n};\n\nexport const domIsReady = () => new Promise((resolve) => {\n if (document.readyState === 'complete' || document.readyState === 'interactive') {\n // resolve if we are after pageload\n resolve();\n }\n if (!document.attachEvent || typeof document.attachEvent === 'undefined') {\n document.addEventListener('DOMContentLoaded', () => { resolve(); });\n document.addEventListener('readystatechange', () => {\n if (document.readyState === 'complete' || document.readyState === 'interactive') {\n resolve();\n }\n });\n } else {\n document.attachEvent('onreadystatechange', () => {\n if (document.readyState === 'complete' || document.readyState === 'interactive') {\n resolve();\n }\n });\n }\n});\n"],"names":[],"sourceRoot":""}