{"version":3,"file":"ga4-tracker.js","sources":["../../../../src/assets/scripts/ga4-tracker.entry.js"],"sourcesContent":["window.GA4 = window.GA4 || {};\nwindow.GA4.analyticsGa4 = window.GA4.analyticsGa4 || {};\n\n(function (analyticsModules) {\n const PageViewTracker = {\n isInitialized: false,\n init: function () {\n this.pushPageview();\n this.pushHashChange();\n },\n\n pushPageview: function () {\n const baseData = window.GA4.analyticsGa4.core.getBaseObject();\n\n if (window.dataLayer) {\n var data = {\n event: 'virtualPageview',\n page_location: window.location.href,\n ...baseData,\n };\n if (!baseData.page_title) {\n data.page_title = document.title;\n }\n window.GA4.analyticsGa4.core.sendData(data);\n }\n },\n\n pushHashChange: function () {\n window.addEventListener('hashchange', this.pushPageview);\n },\n };\n\n const FilterTracker = {\n pushFilter: function (mainFilter, subFilter, filterOptions) {\n const baseData = window.GA4.analyticsGa4.core.getBaseObject();\n\n if (window.dataLayer) {\n var data = {\n event: 'filterEvent',\n main_filter: mainFilter,\n };\n\n if (subFilter) {\n data.sub_filter = subFilter;\n }\n\n if (filterOptions) {\n data.filter_options = filterOptions;\n }\n\n data = { ...data, ...baseData };\n\n window.GA4.analyticsGa4.core.sendData(data);\n }\n },\n };\n\n const SearchTracker = {\n pushSearch: function (searchTerm, numberOfResults, numberOFSuggestions, mainFilter, subFilter) {\n const baseData = window.GA4.analyticsGa4.core.getBaseObject();\n\n if (window.dataLayer) {\n var data = {\n event: 'site_search',\n search_term: searchTerm,\n search_results: numberOfResults,\n };\n\n if (numberOFSuggestions) data.search_result_suggestions = numberOFSuggestions;\n if (mainFilter) data.main_filter = mainFilter;\n if (subFilter) data.sub_filter = subFilter;\n\n data = { ...data, ...baseData };\n\n window.GA4.analyticsGa4.core.sendData(data);\n }\n },\n };\n\n const roundNumber = (num, numberDecimalDigit = 2) => {\n if (typeof num !== 'number') {\n return '';\n }\n\n return +(Math.round(num + ('e+' + numberDecimalDigit)) + ('e-' + numberDecimalDigit));\n };\n\n const roundNumberCb = (item) => ({ ...item, price: roundNumber(item.price) });\n\n const getBlockId = (el) => {\n let closest = el.closest('[data-id]');\n\n if (!closest) {\n return;\n }\n\n let blockId = closest.getAttribute('data-id');\n\n return blockId;\n };\n\n const CTATracker = {\n init: function () {\n let mainEl = document.querySelector('main');\n if (!mainEl) return;\n let links = mainEl.querySelectorAll('a');\n let buttons = mainEl.querySelectorAll('[class*=\"arjo-a-button\"]');\n\n const extFileDownload = ['doc', 'docm', 'docx', 'pdf', 'pptm', 'pptx', 'psd', 'pst', 'rar', 'xls', 'xlm', 'xlsm', 'xlsx', 'xlt', 'zip'];\n\n [].forEach.call(links, (link) => {\n link.addEventListener('mousedown', (e) => {\n if (e.button === 2) return;\n if (link.classList.contains('arjo-a-button')) return;\n\n let type = link.getAttribute('data-tracking-type'),\n placement = link.getAttribute('data-tracking-placement'),\n linkText = link.innerText,\n className = link.getAttribute('class'),\n ctaName = link.id || className,\n campaignId = link.getAttribute('data-tracking-campaign'),\n fileName = link.href.split('#').shift().split('?').shift().split('/').pop(),\n dataFileName = link.getAttribute('data-file-name');\n\n if (className?.includes('arjo-a-link--download-item')) {\n return;\n }\n\n if (extFileDownload.some((ext) => fileName.toLocaleLowerCase().endsWith(`.${ext}`))) {\n window.GA4.analyticsGa4.DownloadTracker.pushDownload({ fileName: fileName, name: className, linkText: linkText });\n return;\n }\n\n if (dataFileName) {\n window.GA4.analyticsGa4.DownloadTracker.pushDownload({ fileName: dataFileName, name: className, linkText: linkText });\n return;\n }\n\n if (!type) {\n if (link.classList.contains('arjo-a-link--btn')) {\n type = 'Button';\n } else {\n type = 'Clickable link';\n }\n }\n\n let blockId = getBlockId(link);\n\n window.GA4.analyticsGa4.CTATracker.pushCTA(type, placement ?? 'CTA block', linkText, ctaName, campaignId, blockId);\n });\n });\n\n [].forEach.call(buttons, (button) => {\n button.addEventListener('mousedown', (e) => {\n if (e.button === 2) return;\n\n let type = 'Button',\n placement = button.getAttribute('data-tracking-placement'),\n linkText = button.innerText,\n ctaName = button.name || button.id || button.getAttribute('class'),\n campaignId = button.getAttribute('data-tracking-campaign');\n\n let blockId = getBlockId(button);\n\n window.GA4.analyticsGa4.CTATracker.pushCTA(type, placement ?? 'CTA block', linkText, ctaName, campaignId, blockId);\n });\n });\n },\n pushCTA: function (ctaType, placement, linkText, ctaName, campaignId, blockId) {\n const baseData = window.GA4.analyticsGa4.core.getBaseObject();\n\n if (window.dataLayer) {\n var data = {\n event: 'ctaEvent',\n type: ctaType,\n placement: placement,\n link_text: linkText,\n name: ctaName,\n ...baseData,\n campaign_id: campaignId,\n };\n\n if (blockId) {\n data.block_id = blockId;\n }\n\n if (ctaType === 'Clickable link' && window.GA4.analyticsGa4.core.checkDuplicate(data)) {\n return;\n }\n window.GA4.analyticsGa4.core.sendData(data);\n }\n },\n };\n\n const DownloadTracker = {\n pushDownload: function ({ isOverlay, linkText, name, fileName }) {\n const baseData = window.GA4.analyticsGa4.core.getBaseObject();\n\n if (window.dataLayer) {\n var data = {\n event: 'downloads',\n type: 'download',\n placement: isOverlay ? 'CTA Overlay' : 'CTA Block',\n link_text: linkText,\n name: name,\n asset_title: fileName,\n ...baseData,\n };\n\n window.GA4.analyticsGa4.core.sendData(data);\n }\n },\n };\n\n const AuthTracker = {\n pushAuth: function (type, portal) {\n const baseData = window.GA4.analyticsGa4.core.getBaseObject();\n\n if (window.dataLayer) {\n var data = {\n event: 'formSubmit',\n type: type,\n portal: portal,\n ...baseData,\n };\n\n window.GA4.analyticsGa4.core.sendData(data);\n }\n },\n };\n\n const ViewModelTracker = {\n pushViewModel: function ({ type, name }) {\n const baseData = window.GA4.analyticsGa4.core.getBaseObject();\n\n if (window.dataLayer) {\n var data = {\n event: 'view-model',\n type: type,\n ...baseData,\n };\n\n if (name) data.name = name;\n\n window.GA4.analyticsGa4.core.sendData(data);\n }\n },\n };\n\n const EshopTracker = {\n pushAddToCart: function ({ currency = '', items = [], value }) {\n const baseData = window.GA4.analyticsGa4.core.getBaseObject();\n\n if (window.dataLayer) {\n const totalPrice = value ?? items.reduce((prev, curr) => prev + curr.price * curr.quantity, 0);\n\n const ecommerce = {\n currency: currency,\n value: totalPrice ? roundNumber(totalPrice) : 0,\n items: items.map(roundNumberCb),\n };\n\n var data = {\n event: 'add_to_cart',\n ...baseData,\n ecommerce: ecommerce,\n };\n\n window.GA4.analyticsGa4.core.sendData({ ecommerce: null });\n window.GA4.analyticsGa4.core.sendData(data);\n }\n },\n pushRemoveFromCart: function ({ currency = '', items = [], value }) {\n const baseData = window.GA4.analyticsGa4.core.getBaseObject();\n\n if (window.dataLayer) {\n const totalPrice = value ?? items.reduce((prev, curr) => prev + curr.price * curr.quantity, 0);\n\n const ecommerce = {\n currency: currency,\n value: totalPrice ? roundNumber(totalPrice) : 0,\n items: items.map(roundNumberCb),\n };\n\n var data = {\n event: 'remove_from_cart',\n ...baseData,\n ecommerce: ecommerce,\n };\n\n window.GA4.analyticsGa4.core.sendData({ ecommerce: null });\n window.GA4.analyticsGa4.core.sendData(data);\n }\n },\n pushCheckout: function ({ currency, coupon = '', items = [], value }) {\n const baseData = window.GA4.analyticsGa4.core.getBaseObject();\n\n if (window.dataLayer) {\n const totalPrice = value ?? items.reduce((prev, curr) => prev + curr.price * curr.quantity, 0);\n\n const ecommerce = {\n currency: currency,\n value: totalPrice ? roundNumber(totalPrice) : 0,\n coupon: coupon,\n items: items.map(roundNumberCb),\n };\n\n var data = {\n event: 'begin_checkout',\n ...baseData,\n ecommerce: ecommerce,\n };\n\n window.GA4.analyticsGa4.core.sendData({ ecommerce: null });\n window.GA4.analyticsGa4.core.sendData(data);\n }\n },\n pushOrder: function ({ transaction_id, tax = 0, shipping = 0, currency, coupon = '', items = [], value }) {\n const baseData = window.GA4.analyticsGa4.core.getBaseObject();\n\n if (window.dataLayer) {\n const totalPrice = value ?? items.reduce((prev, curr) => prev + curr.price * curr.quantity, 0);\n\n const ecommerce = {\n currency: currency,\n transaction_id: transaction_id,\n tax: roundNumber(tax),\n shipping: shipping,\n coupon: coupon,\n value: totalPrice ? roundNumber(totalPrice) : 0,\n items: items.map(roundNumberCb),\n };\n\n var data = {\n event: 'purchase',\n ...baseData,\n ecommerce: ecommerce,\n };\n\n window.GA4.analyticsGa4.core.sendData({ ecommerce: null });\n window.GA4.analyticsGa4.core.sendData(data);\n }\n },\n };\n\n const SlingTracker = {\n trackExpandCollapseFilter(mainFilter, filterName, isCollapsed) {\n const baseData = window.GA4.analyticsGa4.core.getBaseObject();\n\n if (window.dataLayer) {\n const data = {\n event: 'sling_selector_event',\n sling_action: isCollapsed ? 'collapse' : 'expand',\n filter_event: filterName,\n main_filter: mainFilter,\n ...baseData,\n };\n\n window.GA4.analyticsGa4.core.sendData(data);\n }\n },\n trackFilterChange(mainFilter, collectionName, filterOptions) {\n const baseData = window.GA4.analyticsGa4.core.getBaseObject();\n\n if (window.dataLayer) {\n const data = {\n event: 'sling_selector_event',\n sling_action: 'filter',\n sub_filter: `${collectionName}`,\n main_filter: mainFilter,\n filter_options: filterOptions,\n ...baseData,\n };\n\n window.GA4.analyticsGa4.core.sendData(data);\n }\n },\n trackProductClick(mainFilter, productName, collectionName, filterOptions) {\n const baseData = window.GA4.analyticsGa4.core.getBaseObject();\n\n if (window.dataLayer) {\n const data = {\n event: 'sling_selector_event',\n sling_action: 'product_click',\n product_name: productName,\n sub_filter: collectionName,\n main_filter: mainFilter,\n filter_options: filterOptions,\n ...baseData,\n };\n\n window.GA4.analyticsGa4.core.sendData(data);\n }\n },\n\n trackAssetClick(mainFilter, assetName, assetUrl, collectionName, filterOptions) {\n const baseData = window.GA4.analyticsGa4.core.getBaseObject();\n\n if (window.dataLayer) {\n const data = {\n event: 'sling_selector_event',\n sling_action: 'asset_click',\n asset_name: assetName,\n assert_url: assetUrl,\n sub_filter: collectionName,\n main_filter: mainFilter,\n filter_options: filterOptions,\n ...baseData,\n };\n\n window.GA4.analyticsGa4.core.sendData(data);\n }\n },\n\n trackVideoClick(mainFilter, videoId, collectionName, filterOptions) {\n const baseData = window.GA4.analyticsGa4.core.getBaseObject();\n\n if (window.dataLayer) {\n const data = {\n event: 'sling_selector_event',\n sling_action: 'video_click',\n video_id: videoId,\n sub_filter: collectionName,\n main_filter: mainFilter,\n filter_options: filterOptions,\n ...baseData,\n };\n\n window.GA4.analyticsGa4.core.sendData(data);\n }\n },\n };\n\n analyticsModules.PageViewTracker = PageViewTracker;\n analyticsModules.FilterTracker = FilterTracker;\n analyticsModules.SearchTracker = SearchTracker;\n analyticsModules.CTATracker = CTATracker;\n analyticsModules.DownloadTracker = DownloadTracker;\n analyticsModules.AuthTracker = AuthTracker;\n analyticsModules.ViewModelTracker = ViewModelTracker;\n analyticsModules.EshopTracker = EshopTracker;\n analyticsModules.SlingTracker = SlingTracker;\n\n let interval;\n interval = setInterval(() => {\n if (!analyticsModules.PageViewTracker.isInitialized && typeof window.dataLayer !== 'undefined') {\n PageViewTracker.init();\n CTATracker.init();\n analyticsModules.PageViewTracker.isInitialized = true;\n clearInterval(interval);\n }\n }, 200);\n})(window.GA4.analyticsGa4);\n"],"names":["analyticsModules","PageViewTracker","baseData","data","FilterTracker","mainFilter","subFilter","filterOptions","SearchTracker","searchTerm","numberOfResults","numberOFSuggestions","roundNumber","num","numberDecimalDigit","roundNumberCb","item","getBlockId","el","closest","CTATracker","mainEl","links","buttons","extFileDownload","link","e","type","placement","linkText","className","ctaName","campaignId","fileName","dataFileName","ext","blockId","button","ctaType","DownloadTracker","isOverlay","name","AuthTracker","portal","ViewModelTracker","EshopTracker","currency","items","value","totalPrice","prev","curr","ecommerce","coupon","transaction_id","tax","shipping","SlingTracker","filterName","isCollapsed","collectionName","productName","assetName","assetUrl","videoId","interval"],"mappings":"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"}