(function(){ const zoovuId = 'a9siHhCZcQn3ZIlJfn7abL7t99nnMwqHLhs27K5GUwU='; const domainId = '5017a5e0-f09d-46fe-9541-74aa13f99524'; const variables = [{"id":"a5881501-614d-4226-82ce-58fbb39eb40e","name":"Add to cart target url","type":"FUNCTION","valueType":"TEXT","function":function(event){return window.location.href.replace(window.location.origin, '')}},{"id":"17288887-bfdf-49b1-95b1-b30404e6aee6","name":"Clickout Label - add product from PLP","type":"CONSTANT","valueType":"TEXT","value":"Clickout, add product from PLP search result"},{"id":"39bbfe16-720b-4d45-ba8a-79c874321c6e","name":"Clickout Label - category click","type":"CONSTANT","valueType":"TEXT","value":"Clickout, category"},{"id":"2d131731-66b0-43db-832b-5831cf4218d6","name":"Clickout Label - go to PDP","type":"CONSTANT","valueType":"TEXT","value":"Go to PDP - search clickout"},{"id":"ab9498b9-e561-4e3d-836d-32f44cb55c58","name":"Currency","type":"CONSTANT","valueType":"TEXT","value":"USD"},{"id":"51fce128-5c88-4763-a805-ab3d50a47612","name":"Default quantity","type":"CONSTANT","valueType":"INTEGER","value":"1"},{"id":"6986b552-b31d-4484-a281-3800b6b64c16","name":"Empty Array","type":"FUNCTION","valueType":"LIST","function":function(event){return []}},{"id":"862f679b-0606-4d95-ab95-e97b1b53faaf","name":"Empty Result Popup Label","type":"CONSTANT","valueType":"TEXT","value":"Empty search result popup"},{"id":"d58d779b-056c-4d5b-bb86-5d83a99cfdc9","name":"Empty search result page label","type":"CONSTANT","valueType":"TEXT","value":"Empty search result page"},{"id":"ad6080ea-719b-4732-952f-ef4f1ce45e02","name":"Event target","type":"FUNCTION","valueType":"EVENT","function":function(event){return event.target}},{"id":"1e327f21-f8ab-4ffc-afbd-61bb59ee3728","name":"Event target - parent element","type":"FUNCTION","valueType":"EVENT","function":function(event){return event.target.parentElement;}},{"id":"208cb3d2-e90c-4c00-9c47-f6f4144859db","name":"IsAddToListButton","type":"FUNCTION","valueType":"BOOLEAN","function":function(event){const isAddToListButton = (event.target.className === 'btn-add STBTN button button--sm' || event.target.className === 'btn-add grey big button STBTN') ? event.target.attributes.value.textContent === 'Add To List' : false return isAddToListButton}},{"id":"209362c9-3047-40a3-83f8-d661b9791a5b","name":"IsCategorySearchResultLink","type":"FUNCTION","valueType":"BOOLEAN","function":function(event){return event.target.localName === "a" && event.target.parentElement.className === "TA-li" }},{"id":"c840913c-1a0b-4fa0-984f-ee20505d82e3","name":"IsEmptyPage","type":"FUNCTION","valueType":"BOOLEAN","function":function(event){return document.querySelector(".brand.SearchResultsNotFound") !== null}},{"id":"023b7c33-27d4-48de-970f-58c9b24306b8","name":"IsEmptyResultPopup","type":"FUNCTION","valueType":"BOOLEAN","function":function(event){return document.querySelector(".typeAheadResults") === null}},{"id":"b6f7939a-3839-4a99-8510-7344b4d3d409","name":"IsPDPPage","type":"FUNCTION","valueType":"BOOLEAN","function":function(event){return window.location.href.includes('/product/')}},{"id":"48d25357-b1b7-4109-85fa-b38ad625f680","name":"IsQuickView","type":"FUNCTION","valueType":"BOOLEAN","function":function(event){return event.target.parentElement.parentElement.parentElement.id === 'tab-overview'}},{"id":"0cbf922b-3b2e-40eb-9882-e81de975f079","name":"IsSearchBarEmpty","type":"FUNCTION","valueType":"BOOLEAN","function":function(event){return event.target.value === ""}},{"id":"718fda17-7370-4de6-9ba1-16a7072c8d86","name":"IsSearchInputFilled","type":"FUNCTION","valueType":"BOOLEAN","function":function(event){return document.querySelector("#search-query").value !== ""}},{"id":"a1ed6dcd-963c-445f-adbd-a9468a153c00","name":"IsSearchResultPage","type":"FUNCTION","valueType":"BOOLEAN","function":function(event){console.log("HELOOOOOOOOOOOOOOOOOOO", window.location.href.includes("search/search_results") || document.querySelector("#search-query").value !== "") return window.location.href.includes("search/search_results") || document.querySelector("#search-query").value !== ""}},{"id":"c6a419fa-26f9-47be-b65b-30ff29213142","name":"IsTrashButtonFromCart","type":"FUNCTION","valueType":"BOOLEAN","function":function(event){const trashButtonForm = event.target.closest('form')?.getAttribute('action') return trashButtonForm === '/cart/cartremove' }},{"id":"efbb7ae9-c2bd-4a3c-bcc1-b16c1fbacc4b","name":"Label - Input Quantity Update","type":"CONSTANT","valueType":"TEXT","value":"Update cart - Input Quantity update"},{"id":"c4a17945-595a-4999-9814-d647e1fe0f28","name":"Locale","type":"CONSTANT","valueType":"TEXT","value":"en-US"},{"id":"6c77635c-e95a-4eca-8086-f6be1b1193e8","name":"Named referral: Search","type":"CONSTANT","valueType":"TEXT","value":"Search"},{"id":"a160c59c-225e-4a2d-8804-e20ab4c405e1","name":"Negative Quantity","type":"CONSTANT","valueType":"INTEGER","value":"-1"},{"id":"eb685af8-9053-4387-9b69-6ec4f1ed5396","name":"Ordered products list","type":"FUNCTION","valueType":"LIST","function":function(event){function extractPriceFromWebsite(initialPrice) { const parsedPrice = initialPrice .replace(/\.$/, '') .replace(/([^.',\s\d])*/g, '') .replace(/([.',\s](?=\d{3}))/g, '') .replace(/([.',](?=\d{2}))/g, '.'); return Number(parsedPrice); } function extractProductData() { const products = []; const rows = document.querySelectorAll('table.text-charcoal.checkout-table tbody tr'); rows.forEach(row => { const product = {}; const nameElement = row.querySelector('td strong'); if (nameElement) { product.name = nameElement.textContent.trim(); } const quantityElement = row.querySelector('td.text-right'); if (quantityElement) { product.quantity = parseInt(quantityElement.textContent.trim(), 10); } const priceElement = row.querySelectorAll('td.text-right')[1]; // The second "text-right" is for the price if (priceElement) { product.price = extractPriceFromWebsite(priceElement.textContent.trim()) } const skuElement = row.querySelector('td div'); if (skuElement) { product.sku = skuElement.textContent.trim().replace('SKU: ', '').trim(); } product.unit = "unit"; if (product.name && product.sku && !isNaN(product.quantity) && !isNaN(product.price)) { products.push(product); } }); return products; } const productList = extractProductData(); return productList;}},{"id":"75cf8fd1-fafe-44be-9806-23ff3017c9c1","name":"Page URL","type":"FUNCTION","valueType":"TEXT","function":function(event){return window.location.href;}},{"id":"85d0a46a-ebfa-4084-a225-d050d2d8d7af","name":"PDP link target URL","type":"FUNCTION","valueType":"TEXT","function":function(event){return event.target.href}},{"id":"0d872be2-fcdb-4b28-9116-89c268ce779b","name":"Price from Cart Tile","type":"FUNCTION","valueType":"DECIMAL","function":function(event){function extractPriceFromWebsite(initialPrice) { const parsedPrice = initialPrice .replace(/\.$/, '') .replace(/([^.',\s\d])*/g, '') .replace(/([.',\s](?=\d{3}))/g, '') .replace(/([.',](?=\d{2}))/g, '.'); return Number(parsedPrice); } const priceElement = event.target.closest(".cart-item").querySelector('.text-red').innerText return extractPriceFromWebsite(priceElement) }},{"id":"9b349d5a-c04a-4802-9f24-cb50b3dc773e","name":"Price from PDP","type":"FUNCTION","valueType":"DECIMAL","function":function(event){function extractPriceFromWebsite(initialPrice) { const parsedPrice = initialPrice .replace(/\.$/, '') .replace(/([^.',\s\d])*/g, '') .replace(/([.',\s](?=\d{3}))/g, '') .replace(/([.',](?=\d{2}))/g, '.'); return Number(parsedPrice); } const priceElement = document.querySelector('#pricing').getAttribute('content') return extractPriceFromWebsite(priceElement) }},{"id":"17c4fea8-190e-4bfc-9d96-b0fea5a43546","name":"Price from quick view","type":"FUNCTION","valueType":"DECIMAL","function":function(event){function extractPriceFromWebsite(initialPrice) { const parsedPrice = initialPrice .replace(/\.$/, '') .replace(/([^.',\s\d])*/g, '') .replace(/([.',\s](?=\d{3}))/g, '') .replace(/([.',](?=\d{2}))/g, '.'); return Number(parsedPrice); } const priceString = event.target.parentElement.parentElement.parentElement.querySelector("span#pricing").innerText.replace(/[^\d]/g, '') return extractPriceFromWebsite(`${priceString.slice(0, priceString.length - 2)}.${priceString.slice(priceString.length - 2)}`);}},{"id":"e2774223-5b41-4371-955a-3552ceb6b7cf","name":"Price from Recommendations","type":"FUNCTION","valueType":"DECIMAL","function":function(event){function extractPriceFromWebsite(initialPrice) { const parsedPrice = initialPrice .replace(/\.$/, '') .replace(/([^.',\s\d])*/g, '') .replace(/([.',\s](?=\d{3}))/g, '') .replace(/([.',](?=\d{2}))/g, '.'); return Number(parsedPrice); } const priceString = event.target.parentElement.parentElement.parentElement.querySelector('.sp').textContent const regex = /\$[\d,]+(\.\d{2})?/; const extarctedPrice = priceString.match(regex); return extractPriceFromWebsite(extarctedPrice[0])}},{"id":"1faee253-9b78-4104-bbbb-36d263dc6b77","name":"Price from Result Page","type":"FUNCTION","valueType":"DECIMAL","function":function(event){function extractPriceFromWebsite(initialPrice) { const parsedPrice = initialPrice .replace(/\.$/, '') .replace(/([^.',\s\d])*/g, '') .replace(/([.',\s](?=\d{3}))/g, '') .replace(/([.',](?=\d{2}))/g, '.'); return Number(parsedPrice); } if (event.target.closest(".details") !== null) { const priceString = event.target.closest(".details").querySelector('.price span[itemprop="price"]').textContent.match(/\$([0-9,]+\.\d{2})/) console.log(priceString) return extractPriceFromWebsite(priceString[1]) } else { const priceElement =event.target.parentElement.parentElement.parentElement.querySelector("p a") ?? event.target.parentElement.parentElement.parentElement.querySelector('[class^="ProductLink_"]') const priceString = priceElement.getAttribute("data-price") console.log(priceString) return extractPriceFromWebsite(priceString) } }},{"id":"784edfb2-ca0c-42f5-ae54-e1cc5f1070a7","name":"Product image target URL","type":"FUNCTION","valueType":"TEXT","function":function(event){return event.target.parentElement.href}},{"id":"a6bdbf42-fc80-41f0-b1f6-d768a8f71c57","name":"Quantity from Cart Tile","type":"FUNCTION","valueType":"INTEGER","function":function(event){ const quantity = event.target.closest(".cart-item").querySelector('.qty-input input[type="number"]').value return Number(quantity)}},{"id":"54a23c2b-0f61-43f5-af9b-361397ffe8f6","name":"Search result category clickout - target url","type":"FUNCTION","valueType":"TEXT","function":function(event){return event.target.href}},{"id":"e8a19539-1005-4d51-a160-4a21079e9524","name":"SKU from Cart Tile","type":"FUNCTION","valueType":"TEXT","function":function(event){const skuString = event.target.closest(".cart-item").querySelector('.text-charcoal').innerText return skuString.match(/SKU:\s*(\d+)/)[1];}},{"id":"91fab559-07e7-44d3-a12f-8af1bb09e4d4","name":"SKU from PDP","type":"FUNCTION","valueType":"TEXT","function":function(event){return document.querySelector('.sku').lastChild.textContent.trim()}},{"id":"167559fa-56ed-453e-ba48-eb87855fd244","name":"SKU from quick view","type":"FUNCTION","valueType":"TEXT","function":function(event){return event.target.parentElement.parentElement.parentElement.querySelector("form input[name='sku']").value}},{"id":"cf8095c0-fb4b-4de6-8f17-fe8eaa991e74","name":"SKU from Recommendations","type":"FUNCTION","valueType":"TEXT","function":function(event){const targetButton = event.target; const skuText = targetButton.querySelector('.hide-text').textContent; const skuMatch = skuText.match(/SKU (\d+)/); return skuMatch[1]}},{"id":"ad5264dc-fd0b-4ece-a1c8-442b9ef61fa1","name":"SKU from result page item","type":"FUNCTION","valueType":"TEXT","function":function(event){if (event.target.closest(".details") !== null) { return event.target.closest(".details").querySelector('.sku').textContent.match(/SKU:\s*(\d+)/)[1]; } else { const skuElement = event.target.parentElement.parentElement.querySelector('input[class^="sku"]') ?? event.target.parentElement.parentElement.querySelector('input[name="sku"]') console.log(skuElement) return skuElement.value; }}},{"id":"14fe6b24-537e-4f7d-8849-026bf2eac017","name":"transactionId","type":"FUNCTION","valueType":"TEXT","function":function(event){return document.querySelectorAll('.text-charcoal')[1].textContent}},{"id":"eddeaa57-276b-49da-b06b-f3323296f7f6","name":"True","type":"CONSTANT","valueType":"BOOLEAN","value":"true"},{"id":"01131809-5b9c-4137-85b4-47c366be1306","name":"Update cart quantity input","type":"FUNCTION","valueType":"INTEGER","function":function(event){return Number(event.target.value)}}]; const script = {"rows":[{"id":"38e5ae65-3547-4a6c-8578-0a96aa7ae49b","rowType":"EVENT","trigger":{"id":"1dfb9cc8-6c4e-49b7-802a-1f3e44ddb47b","name":"Clickout - category","type":"CLICK","groups":[{"id":"d588c6e1-265c-4d7d-a8c7-906bc047bda0","rows":[{"valueType":"BOOLEAN","id":"97300491-6593-47a3-8fa0-85c3eb57a780","variableId":"209362c9-3047-40a3-83f8-d661b9791a5b","value":"true","operator":"EQUALS"}]}]},"action":{"type":"CLICKOUT"},"fields":[{"id":"3d66053d-2f1c-46dc-a9ac-c514e9222ab7","variableId":"6c77635c-e95a-4eca-8086-f6be1b1193e8","fieldName":"namedReferral"},{"id":"f5cfcb41-af83-489c-ba4c-5b46e21c60d2","variableId":"c4a17945-595a-4999-9814-d647e1fe0f28","fieldName":"locale"},{"id":"777a9c91-073d-4819-a87f-b8a6a136f77a","variableId":"39bbfe16-720b-4d45-ba8a-79c874321c6e","fieldName":"eventLabel"},{"id":"7427f0f4-8ccc-481b-88e2-71ce5b18420b","variableId":"54a23c2b-0f61-43f5-af9b-361397ffe8f6","fieldName":"targetUrl"}]},{"id":"bcd94914-15b8-45cb-8ae2-dac70bad664a","rowType":"EVENT","trigger":{"id":"2cec9c3f-7ae2-468d-888d-943d7e57d6c4","name":"Empty Result Popup","type":"INPUT","groups":[{"id":"7ae963ee-f77f-4183-91b8-87c7964c9af0","rows":[{"valueType":"EVENT","id":"ffa1b276-423e-4102-b91f-fd10b59cdd37","variableId":"ad6080ea-719b-4732-952f-ef4f1ce45e02","value":"search-query","operator":"MATCHES_ID"},{"valueType":"BOOLEAN","id":"0c7d6ab0-9ef5-4f84-89e5-aee26a605238","variableId":"023b7c33-27d4-48de-970f-58c9b24306b8","value":"true","operator":"EQUALS"},{"valueType":"BOOLEAN","id":"af1c0f7b-d54c-4813-8464-95957412cd2f","variableId":"0cbf922b-3b2e-40eb-9882-e81de975f079","value":"false","operator":"EQUALS"}]}]},"action":{"type":"SEARCH_RESULT"},"fields":[{"id":"25bbd7d2-6aad-4dbd-ad40-a3b4599abeb4","variableId":"eddeaa57-276b-49da-b06b-f3323296f7f6","fieldName":"isEmpty"},{"id":"8fadbf52-9fb2-44f8-b30e-f70489f04c6c","variableId":"c4a17945-595a-4999-9814-d647e1fe0f28","fieldName":"locale"},{"id":"e2fd6283-7025-4240-bcce-fb88c6407239","variableId":"6986b552-b31d-4484-a281-3800b6b64c16","fieldName":"skus"},{"id":"8b0f7bda-27c6-44ca-9636-ff723cdcb6f5","variableId":"862f679b-0606-4d95-ab95-e97b1b53faaf","fieldName":"eventLabel"}]},{"id":"67a10f99-8560-4b02-bf43-70f995b93324","rowType":"EVENT","trigger":{"id":"9f18a3ba-35a5-4050-8e71-6332c74b14ff","name":"Empty result page loaded","type":"PAGE_LOAD","groups":[{"id":"3e9593a1-195f-4daa-8057-1c570ea48292","rows":[{"valueType":"BOOLEAN","id":"6a189585-b68e-4b0b-b527-56e1eb95d601","variableId":"c840913c-1a0b-4fa0-984f-ee20505d82e3","value":"true","operator":"EQUALS"},{"valueType":"TEXT","id":"08bc7702-afbe-4120-8efc-c3a1538c68f8","variableId":"75cf8fd1-fafe-44be-9806-23ff3017c9c1","value":"search/search_results","operator":"CONTAINS"}]}]},"action":{"type":"SEARCH_RESULT"},"fields":[{"id":"8bd3237a-42db-47d9-992f-2d3fcdede15d","variableId":"eddeaa57-276b-49da-b06b-f3323296f7f6","fieldName":"isEmpty"},{"id":"c16cb8b2-d332-4666-b75f-324f964da8df","variableId":"c4a17945-595a-4999-9814-d647e1fe0f28","fieldName":"locale"},{"id":"57cf6c33-0b60-40da-ae11-5a87953959a0","variableId":"6986b552-b31d-4484-a281-3800b6b64c16","fieldName":"skus"},{"id":"989e436f-2f8a-4af7-a78d-90a159d64376","variableId":"d58d779b-056c-4d5b-bb86-5d83a99cfdc9","fieldName":"eventLabel"}]},{"id":"0745117b-e17c-403d-a6c7-de31e6d9788e","rowType":"EVENT","trigger":{"id":"fc913613-b2b5-4d0f-95e0-439d2ce85b47","name":"Search Bar","type":"INPUT","groups":[{"id":"5abbdf87-646b-4e10-a70a-2e55fc99a414","rows":[{"valueType":"EVENT","id":"be0cb502-87a1-4cef-9b21-33caa57be282","variableId":"ad6080ea-719b-4732-952f-ef4f1ce45e02","value":"search-query","operator":"MATCHES_ID"},{"valueType":"BOOLEAN","id":"d2dec22e-ace8-416e-b233-ba60ba8f483e","variableId":"0cbf922b-3b2e-40eb-9882-e81de975f079","value":"false","operator":"EQUALS"}]}]},"action":{"type":"SEARCH"},"fields":[{"id":"45add66e-1d1c-4248-af43-9938d966e1b8","variableId":"c4a17945-595a-4999-9814-d647e1fe0f28","fieldName":"locale"}]},{"id":"5c997135-363f-4c8d-a276-1f08ffe0acc7","rowType":"EVENT","trigger":{"id":"33a6c06e-53bc-4966-98ca-8f3e9fc8eb5a","name":"Remove from cart TrashButton","type":"CLICK","groups":[{"id":"93eec90d-9634-470e-922f-cd1fed9a1ccd","rows":[{"valueType":"BOOLEAN","id":"cd32bb6e-0c91-445e-a4e5-f2e57655b77f","variableId":"c6a419fa-26f9-47be-b65b-30ff29213142","value":"true","operator":"EQUALS"}]}]},"action":{"type":"REMOVE_FROM_CART"},"fields":[{"id":"4d29017a-a730-43e9-9733-220aa442fb85","variableId":"c4a17945-595a-4999-9814-d647e1fe0f28","fieldName":"locale"},{"id":"e9698e74-d3b5-44c8-a403-d2b7a52b5d57","variableId":"ab9498b9-e561-4e3d-836d-32f44cb55c58","fieldName":"currencyCode"},{"id":"03957325-e350-42fd-9946-35945d489454","variableId":"a6bdbf42-fc80-41f0-b1f6-d768a8f71c57","fieldName":"quantity"},{"id":"473f6522-2fa9-498a-9f74-77812ed04a1c","variableId":"e8a19539-1005-4d51-a160-4a21079e9524","fieldName":"sku"},{"id":"7e8156f5-ca9c-49b4-b6a6-f089084111e6","variableId":"0d872be2-fcdb-4b28-9116-89c268ce779b","fieldName":"price"}]},{"id":"475fe228-17bf-414c-96ad-9af5bb636408","rowType":"EVENT","trigger":{"id":"48cb61fa-a13f-45fd-85ce-0d974bf16cd8","name":"Quantity update Input","type":"INPUT","groups":[{"id":"380e2674-b602-4aec-9f24-831d593546e2","rows":[{"valueType":"EVENT","id":"294a7108-e510-4329-b323-a719cf858d5c","variableId":"1e327f21-f8ab-4ffc-afbd-61bb59ee3728","value":"qty-input","operator":"MATCHES_CLASS"}]}]},"action":{"type":"UPDATE_CART"},"fields":[{"id":"a569c4e3-3b5e-44d7-8324-bccec5941b4b","variableId":"c4a17945-595a-4999-9814-d647e1fe0f28","fieldName":"locale"},{"id":"046dbb7b-2607-4789-879f-86a2293008ea","variableId":"ab9498b9-e561-4e3d-836d-32f44cb55c58","fieldName":"currencyCode"},{"id":"04eee58e-f870-48f5-8f2f-4cfeb4e434f1","variableId":"e8a19539-1005-4d51-a160-4a21079e9524","fieldName":"sku"},{"id":"94a270b2-1a42-4238-91e5-b7caca397d07","variableId":"0d872be2-fcdb-4b28-9116-89c268ce779b","fieldName":"price"},{"id":"992697df-d3bf-4dc7-a78d-70a5a056299e","variableId":"efbb7ae9-c2bd-4a3c-bcc1-b16c1fbacc4b","fieldName":"eventLabel"},{"id":"7be1c626-928a-419b-ae7d-d8a5e8e8c5c5","variableId":"01131809-5b9c-4137-85b4-47c366be1306","fieldName":"quantity"}]},{"id":"f8f8ee96-223b-4b30-b837-49eab6fbb110","rowType":"EVENT","trigger":{"id":"b49f5f19-2fde-48fc-9dfa-cf37dbed7ffb","name":"Product image link","type":"CLICK","groups":[{"id":"7dbf371b-9dcf-49ce-bacd-d28374a3820e","rows":[{"valueType":"EVENT","id":"b48c2ce4-1f77-4372-ab63-3503efac2e6d","variableId":"ad6080ea-719b-4732-952f-ef4f1ce45e02","value":"SearchResultProductImage","operator":"MATCHES_CLASS"},{"valueType":"BOOLEAN","id":"caa1800e-35d3-4225-82d0-7bf42fe9b0ff","variableId":"a1ed6dcd-963c-445f-adbd-a9468a153c00","value":"true","operator":"EQUALS"},{"valueType":"BOOLEAN","id":"d0ccaa52-efbe-4056-83f8-97f0b4b4667f","variableId":"718fda17-7370-4de6-9ba1-16a7072c8d86","value":"true","operator":"EQUALS"}]}]},"action":{"type":"CLICKOUT"},"fields":[{"id":"dd7dafc2-bcdd-4f9e-b9de-d545bf077e26","variableId":"6c77635c-e95a-4eca-8086-f6be1b1193e8","fieldName":"namedReferral"},{"id":"e4291ec2-633b-4e62-8f46-ce5c8efbc224","variableId":"c4a17945-595a-4999-9814-d647e1fe0f28","fieldName":"locale"},{"id":"0d756cde-884a-414a-ac25-6055782e889f","variableId":"2d131731-66b0-43db-832b-5831cf4218d6","fieldName":"eventLabel"},{"id":"5464eff5-d7e8-4f2b-b1a3-7c1dd6371209","variableId":"784edfb2-ca0c-42f5-ae54-e1cc5f1070a7","fieldName":"targetUrl"}]},{"id":"de7347f0-7e28-4f83-b02a-6a7e8df56fd3","rowType":"EVENT","trigger":{"id":"a7ef627b-2e12-43d1-800c-658a212250a3","name":"PDP link","type":"CLICK","groups":[{"id":"893b3f76-3574-4ea9-8ed5-66eb691f64d1","rows":[{"valueType":"EVENT","id":"dad6da1f-9c11-4e0d-928f-cc5fe636d738","variableId":"ad6080ea-719b-4732-952f-ef4f1ce45e02","value":"hypProductH2_","operator":"CONTAINS_ID"},{"valueType":"BOOLEAN","id":"151cadf3-867c-4fd0-b77d-31822dd646e3","variableId":"a1ed6dcd-963c-445f-adbd-a9468a153c00","value":"true","operator":"EQUALS"},{"valueType":"BOOLEAN","id":"bddb9316-2871-4e7a-accc-d2d05c423192","variableId":"718fda17-7370-4de6-9ba1-16a7072c8d86","value":"true","operator":"EQUALS"}]}]},"action":{"type":"CLICKOUT"},"fields":[{"id":"b5fa9498-9595-4fa4-ad6a-45d4bc841f65","variableId":"6c77635c-e95a-4eca-8086-f6be1b1193e8","fieldName":"namedReferral"},{"id":"8ab2079b-1bc9-4afc-9e51-72fb2fec72ce","variableId":"c4a17945-595a-4999-9814-d647e1fe0f28","fieldName":"locale"},{"id":"55637007-8cf1-46fb-9837-3ee303f7a752","variableId":"2d131731-66b0-43db-832b-5831cf4218d6","fieldName":"eventLabel"},{"id":"3291ecae-4854-42e9-b272-f0b60dc4bc47","variableId":"85d0a46a-ebfa-4084-a225-d050d2d8d7af","fieldName":"targetUrl"}]},{"id":"fdc7cebf-ae5d-4895-aa81-09f2eeef2f30","rowType":"EVENT","trigger":{"id":"e32bca4f-bbae-4c6a-be9c-b3adeb652299","name":"Add to cart from result page / quick view CLICKOUT","type":"CLICK","groups":[{"id":"a9b6bdbb-efe7-43c0-9fcd-020bef7d6a61","rows":[{"valueType":"EVENT","id":"9873787f-793d-46ec-9b25-2ff4c9fc456f","variableId":"ad6080ea-719b-4732-952f-ef4f1ce45e02","value":"btn-add STBTN","operator":"MATCHES_CLASS"},{"valueType":"BOOLEAN","id":"323a958f-e58b-486e-a276-cc4f4e85176f","variableId":"a1ed6dcd-963c-445f-adbd-a9468a153c00","value":"true","operator":"EQUALS"},{"valueType":"BOOLEAN","id":"e72f5cc1-1d91-402d-bdbd-6fe15fe4e244","variableId":"718fda17-7370-4de6-9ba1-16a7072c8d86","value":"true","operator":"EQUALS"}]}]},"action":{"type":"CLICKOUT"},"fields":[{"id":"511ca62b-bd74-410a-a0b0-d5517f3824c3","variableId":"6c77635c-e95a-4eca-8086-f6be1b1193e8","fieldName":"namedReferral"},{"id":"3ee31a79-7933-491b-ba1e-53e829b0fadb","variableId":"c4a17945-595a-4999-9814-d647e1fe0f28","fieldName":"locale"},{"id":"9b7c9733-7e09-4805-afd7-a69d8ad16755","variableId":"17288887-bfdf-49b1-95b1-b30404e6aee6","fieldName":"eventLabel"},{"id":"475488fd-f0a3-405d-b9a1-b24594945810","variableId":"a5881501-614d-4226-82ce-58fbb39eb40e","fieldName":"targetUrl"}]},{"id":"22327963-f18f-4eb5-8215-7098996c8e29","rowType":"CUSTOM_ACTION","trigger":{"id":"39697d0a-ceca-48fd-a8b0-6832e524aceb","name":"Accept cookies","type":"CLICK","groups":[{"id":"9e942c52-dc02-41f3-a24b-72e9e401a870","rows":[{"valueType":"EVENT","id":"d696a1a0-4f44-4c09-873b-944159841881","variableId":"ad6080ea-719b-4732-952f-ef4f1ce45e02","value":"strAcceptMsg","operator":"MATCHES_CLASS"}]}]},"action":{"type":"CUSTOM","code":function(event){enableTracking()}},"fields":[]},{"id":"959605a1-6a83-483a-af68-e75f30bfaed0","rowType":"EVENT","trigger":{"id":"18dda43c-511b-4e3c-b6c2-2259eee46ff1","name":"Remove from cart MinusButton","type":"CLICK","groups":[{"id":"91f49b89-ca4b-4541-aa2b-94b5eeecdb94","rows":[{"valueType":"EVENT","id":"660dca4c-6e5b-48c7-8018-db5c0bace346","variableId":"ad6080ea-719b-4732-952f-ef4f1ce45e02","value":"qty-input__sub","operator":"MATCHES_CLASS"}]}]},"action":{"type":"UPDATE_CART"},"fields":[{"id":"89854dd4-adbc-48c4-a9ec-2b2e0bcafed0","variableId":"c4a17945-595a-4999-9814-d647e1fe0f28","fieldName":"locale"},{"id":"177d2d9b-b0e1-4d6b-9c61-c3c46fec5c55","variableId":"ab9498b9-e561-4e3d-836d-32f44cb55c58","fieldName":"currencyCode"},{"id":"ad8a172f-a2f5-4622-b171-eea41e849254","variableId":"a160c59c-225e-4a2d-8804-e20ab4c405e1","fieldName":"quantity"},{"id":"8c863e6c-962b-4c51-90b8-e33671c72c27","variableId":"e8a19539-1005-4d51-a160-4a21079e9524","fieldName":"sku"},{"id":"676c7128-e12e-4126-a4f1-373d4fdc5876","variableId":"0d872be2-fcdb-4b28-9116-89c268ce779b","fieldName":"price"}]},{"id":"241cf814-6230-4f90-83f3-f44a59f83a87","rowType":"EVENT","trigger":{"id":"74c6cb3c-538f-45c6-a1df-3bf35a4c7f4f","name":"Add to cart from PlusButton","type":"CLICK","groups":[{"id":"21e09430-d153-4f4b-a19b-94ff665087b5","rows":[{"valueType":"EVENT","id":"a799c432-3a2d-486c-8e06-f2b04bbef93d","variableId":"ad6080ea-719b-4732-952f-ef4f1ce45e02","value":"qty-input__add","operator":"MATCHES_CLASS"}]}]},"action":{"type":"UPDATE_CART"},"fields":[{"id":"01d631f2-4308-4c78-a163-2f57792900ef","variableId":"c4a17945-595a-4999-9814-d647e1fe0f28","fieldName":"locale"},{"id":"25065a8c-f014-4458-8b82-236ff60fc662","variableId":"ab9498b9-e561-4e3d-836d-32f44cb55c58","fieldName":"currencyCode"},{"id":"4f9506a5-74a6-4a49-adef-4313fce45568","variableId":"51fce128-5c88-4763-a805-ab3d50a47612","fieldName":"quantity"},{"id":"892c4823-8fa8-4ed7-836c-13c9b8a51c87","variableId":"e8a19539-1005-4d51-a160-4a21079e9524","fieldName":"sku"},{"id":"b353518d-0fdd-4bb4-8e98-61f5a1e9ed96","variableId":"0d872be2-fcdb-4b28-9116-89c268ce779b","fieldName":"price"}]},{"id":"5222dd94-2dbe-4045-ad8e-5f4e058e09dc","rowType":"EVENT","trigger":{"id":"ed1f4fcc-a2e7-4b83-9fd6-2f806929ea1a","name":"Add to cart from quick view","type":"CLICK","groups":[{"id":"4311a5af-a828-47cb-9f7a-9477891dfa0c","rows":[{"valueType":"EVENT","id":"fe4c5f51-b225-4492-918d-1ff78f1392bf","variableId":"ad6080ea-719b-4732-952f-ef4f1ce45e02","value":"btn-add STBTN","operator":"MATCHES_CLASS"},{"valueType":"BOOLEAN","id":"ef822856-2b30-4ffd-b569-cd38075233ed","variableId":"48d25357-b1b7-4109-85fa-b38ad625f680","value":"true","operator":"EQUALS"}]}]},"action":{"type":"ADD_TO_CART"},"fields":[{"id":"4ec92540-af4c-4dd7-9595-412e4f63a8f3","variableId":"c4a17945-595a-4999-9814-d647e1fe0f28","fieldName":"locale"},{"id":"94648830-4005-4db8-a604-c450bfeb8681","variableId":"ab9498b9-e561-4e3d-836d-32f44cb55c58","fieldName":"currencyCode"},{"id":"0219e1af-95f2-4247-9cfd-7455a203d681","variableId":"51fce128-5c88-4763-a805-ab3d50a47612","fieldName":"quantity"},{"id":"1714aa8d-ca46-43d8-8486-453d0f991737","variableId":"167559fa-56ed-453e-ba48-eb87855fd244","fieldName":"sku"},{"id":"bd88d5d9-deff-40e4-a2f4-9e310167b74d","variableId":"17c4fea8-190e-4bfc-9d96-b0fea5a43546","fieldName":"price"}]},{"id":"662323d2-2f3a-4727-a0d0-2e0c507bb209","rowType":"EVENT","trigger":{"id":"85e71312-1960-4224-b834-a85fab4cd7b6","name":"Add to cart from search result page / Top Picks products","type":"CLICK","groups":[{"id":"aec2464a-622b-4f18-ba18-4c2b9f3519dd","rows":[{"valueType":"EVENT","id":"86d3da42-683a-4028-857a-720f5df0b93e","variableId":"ad6080ea-719b-4732-952f-ef4f1ce45e02","value":"btn-add STBTN","operator":"MATCHES_CLASS"},{"valueType":"BOOLEAN","id":"c8382938-eb05-4682-8fd6-07e00bd32298","variableId":"48d25357-b1b7-4109-85fa-b38ad625f680","value":"false","operator":"EQUALS"}]}]},"action":{"type":"ADD_TO_CART"},"fields":[{"id":"02c17920-c757-4dd0-8b75-9f8937b10da6","variableId":"c4a17945-595a-4999-9814-d647e1fe0f28","fieldName":"locale"},{"id":"30c08b5c-5e84-4576-842a-74cdaf582967","variableId":"ab9498b9-e561-4e3d-836d-32f44cb55c58","fieldName":"currencyCode"},{"id":"5c9feb5e-3161-4034-aaf8-c70161ec2f16","variableId":"51fce128-5c88-4763-a805-ab3d50a47612","fieldName":"quantity"},{"id":"4cea8abc-b960-4b31-8950-abb4d1841626","variableId":"1faee253-9b78-4104-bbbb-36d263dc6b77","fieldName":"price"},{"id":"a9b095dd-ae9f-4b45-b06b-bc7c95ba815c","variableId":"ad5264dc-fd0b-4ece-a1c8-442b9ef61fa1","fieldName":"sku"}]},{"id":"64b76b49-33d7-4584-a34a-1a60a944f6c2","rowType":"EVENT","trigger":{"id":"54fd42c5-48ee-4012-a662-4d529c2b2d30","name":"Add to cart from Recommendations","type":"CLICK","groups":[{"id":"90d076c6-ed14-4c69-952c-bb4d8a636aa7","rows":[{"valueType":"EVENT","id":"e18cd766-f7e4-4203-8f90-cdbd90ce3cdf","variableId":"ad6080ea-719b-4732-952f-ef4f1ce45e02","value":"btn-add STBTN button button--sm","operator":"MATCHES_CLASS"},{"valueType":"BOOLEAN","id":"affdeb51-4c3c-42a2-928d-389fc33e252b","variableId":"208cb3d2-e90c-4c00-9c47-f6f4144859db","value":"false","operator":"EQUALS"}]}]},"action":{"type":"ADD_TO_CART"},"fields":[{"id":"0166d976-804a-477b-9bf6-60226f3dda6f","variableId":"c4a17945-595a-4999-9814-d647e1fe0f28","fieldName":"locale"},{"id":"8916cc9b-abd4-40b7-818d-5b22e176cc7d","variableId":"ab9498b9-e561-4e3d-836d-32f44cb55c58","fieldName":"currencyCode"},{"id":"3b20a154-d3e2-49c1-a3a8-4f5567831fb7","variableId":"51fce128-5c88-4763-a805-ab3d50a47612","fieldName":"quantity"},{"id":"86c271d7-d27b-448b-9d17-2ff00da5f3fc","variableId":"cf8095c0-fb4b-4de6-8f17-fe8eaa991e74","fieldName":"sku"},{"id":"535a758d-9f63-4af6-9620-19748e823f94","variableId":"e2774223-5b41-4371-955a-3552ceb6b7cf","fieldName":"price"}]},{"id":"5e24e1b5-28c7-4961-aa7e-a74c1540ca24","rowType":"EVENT","trigger":{"id":"06716232-5cfc-4bdd-b12a-727bb535b7ff","name":"Add to cart from PDP","type":"CLICK","groups":[{"id":"c5496f1b-0582-4300-89e0-ea7740793c95","rows":[{"valueType":"EVENT","id":"ab319007-a3da-4f87-80bf-7320f328e514","variableId":"ad6080ea-719b-4732-952f-ef4f1ce45e02","value":"btn-add grey big button STBTN","operator":"MATCHES_CLASS"},{"valueType":"BOOLEAN","id":"24692790-4c09-4553-b852-ca57b4339bda","variableId":"208cb3d2-e90c-4c00-9c47-f6f4144859db","value":"false","operator":"EQUALS"}]},{"id":"7b9fd9ed-a23f-44b3-b27d-3699cd62d2ba","rows":[{"valueType":"EVENT","id":"3af41617-c604-4de9-900f-33d6b5f43e8a","variableId":"ad6080ea-719b-4732-952f-ef4f1ce45e02","value":"btn-add grey big button BUY-NOW button bg-dark-blue","operator":"MATCHES_CLASS"}]}]},"action":{"type":"ADD_TO_CART"},"fields":[{"id":"ac7a085b-8898-4466-ab77-f0ad53e850b1","variableId":"c4a17945-595a-4999-9814-d647e1fe0f28","fieldName":"locale"},{"id":"c274daf4-ae02-4ae7-81a6-486782e55ac9","variableId":"91fab559-07e7-44d3-a12f-8af1bb09e4d4","fieldName":"sku"},{"id":"43ef3b28-d5b7-44fe-b142-f22958e44e18","variableId":"ab9498b9-e561-4e3d-836d-32f44cb55c58","fieldName":"currencyCode"},{"id":"164d80ce-83b3-44b9-b7f5-267f8b21ecbb","variableId":"51fce128-5c88-4763-a805-ab3d50a47612","fieldName":"quantity"},{"id":"1026cb75-6516-4239-8db5-e63429398380","variableId":"9b349d5a-c04a-4802-9f24-cb50b3dc773e","fieldName":"price"}]},{"id":"7f21bdb4-6ff6-40d6-9575-7393da155ce7","rowType":"EVENT","trigger":{"id":"dd99ce9b-0a0f-41a0-9e95-33d2cb4074d8","name":"PDP page load","type":"PAGE_LOAD","groups":[{"id":"29667947-bc75-4cee-b5ad-91e17923eb8f","rows":[{"valueType":"TEXT","id":"b8a64742-445e-48b1-9847-d260e41ed073","variableId":"75cf8fd1-fafe-44be-9806-23ff3017c9c1","value":"/product/","operator":"CONTAINS"}]}]},"action":{"type":"PDP_VISITED"},"fields":[{"id":"521a15e0-985f-4905-b6e4-28cef4762495","variableId":"c4a17945-595a-4999-9814-d647e1fe0f28","fieldName":"locale"},{"id":"6809efd3-6c7d-4c68-ba28-b94c74587257","variableId":"91fab559-07e7-44d3-a12f-8af1bb09e4d4","fieldName":"sku"},{"id":"899c5ae5-ce02-47a7-bfe9-a5a8afbbc716","variableId":"ab9498b9-e561-4e3d-836d-32f44cb55c58","fieldName":"currencyCode"},{"id":"8f4d0c76-8f83-4fdf-a87b-c56fbf2f15d5","variableId":"9b349d5a-c04a-4802-9f24-cb50b3dc773e","fieldName":"price"}]},{"id":"ac97d198-12bc-47a5-8caf-bd3b63d843c0","rowType":"EVENT","trigger":{"id":"716ec754-5e1b-46ea-b926-1c69e7bcd015","name":"Page Load [Proper one]","type":"PAGE_LOAD","groups":[{"id":"871620c8-d29b-4b5c-8200-9726127d5f97","rows":[{"valueType":"BOOLEAN","id":"fedf4423-070f-4f89-b710-9ae0d4aea88e","variableId":"b6f7939a-3839-4a99-8510-7344b4d3d409","value":"false","operator":"EQUALS"}]}]},"action":{"type":"PAGE_VISITED"},"fields":[{"id":"a6f65f32-d426-4b15-be7c-118bdc04f169","variableId":"c4a17945-595a-4999-9814-d647e1fe0f28","fieldName":"locale"}]}]}; const advancedCode = function(){const cookiesPrivacy = document.cookie.match(/MicrocenterPrivacy=([^;]+)/); if (cookiesPrivacy !== null && cookiesPrivacy[1] === 'Accepted'){ enableTracking() } else { disableTracking() }}; const url = 'https://queue-propagator.zoovu.com/fact'; const currentEnvironment = 'orca'; const currentAccountId = 250000757; // ------------------------- API ------------------------- let trackingEnabled = true; function disableTracking() { trackingEnabled = false; } function enableTracking() { trackingEnabled = true; } function getNumericPriceFromString(stringPrice) { const parsedPrice = stringPrice .replace(/\.$/, '') .replace(/([^.',\s\d])*/g, '') .replace(/([.',\s](?=\d{3}))/g, '') .replace(/([.',](?=\d{2}))/g, '.'); return Number(parsedPrice); } // ------------------------- helpers ------------------------- const eventTypes = Object.freeze({ PAGE_VISITED: "PAGE_VISITED", ADD_TO_CART: "ADD_TO_CART", REMOVE_FROM_CART: "REMOVE_FROM_CART", PDP_VISITED: "PDP_VISITED", PURCHASED: "PURCHASED", UPDATE_CART: "UPDATE_CART", DECLINE_TRACKING: "DECLINE_TRACKING", SEARCH: "SEARCH", SEARCH_RESULT: "SEARCH_RESULT", CLICKOUT: "CLICKOUT" }); const actionTypes = Object.freeze({ ...eventTypes, CUSTOM: 'CUSTOM' }) const triggerTypes = Object.freeze({ CLICK: 'CLICK', INPUT: 'INPUT', PAGE_LOAD: 'PAGE_LOAD' }); const variableTypes = Object.freeze({ FUNCTION: 'FUNCTION', CONSTANT: 'CONSTANT' }); const matchers = Object.freeze({ EQUALS: (a, b) => a === b, CONTAINS: (a, b) => a.indexOf(b) >= 0, GREATER_THAN: (a, b) => a > b, LESS_THAN: (a, b) => a < b, GREATER_THAN_OR_EQUAL: (a, b) => a >= b, LESS_THAN_OR_EQUAL: (a, b) => a <= b, MATCHES_CSS_SELECTOR: (target, test) => target.matches(test), MATCHES_ID: (target, test) => target.id === test, CONTAINS_ID: (target, test) => target.id.includes(test), DOES_NOT_CONTAIN_ID: (target, test) => !target.id.includes(test), MATCHES_CLASS: (target, test) => target.className === test, CONTAINS_CLASS: (target, test) => target.className.includes(test), DOES_NOT_CONTAIN_CLASS: (target, test) => !target.className.includes(test), }); function cast(type, value) { switch (type) { case 'BOOLEAN': return value === true || value === 'true'; case 'TEXT': return value; case 'DECIMAL': return typeof value === 'string' ? parseFloat(value) : value; case 'INTEGER': return typeof value === 'string' ? parseInt(value) : value; default: return value; } } function debounce(fn, delay) { let timer = null; return function () { const context = this, args = arguments; clearTimeout(timer); timer = setTimeout(function () { fn.apply(context, args); }, delay); }; } function getOrganization() { return zoovuId; } function getDomainId() { return domainId; } function getTimezone() { return Intl.DateTimeFormat().resolvedOptions().timeZone; } function getReferrer() { const referrer = document.referrer; if (/^(https?|android-app):\/\//i.test(referrer)) { return referrer; } else { return undefined; } } function getPath() { return window.location.href.replace(window.location.origin, ''); } function getCookieValue(cookieName) { const cookies = document.cookie.split('; '); for (let i = 0; i < cookies.length; i++) { const cookie = cookies[i].split('='); if (cookie[0] === cookieName) { return cookie[1]; } } return null; } function generateUuid() { return self.crypto.randomUUID(); } function addZoovuCidToCookies() { const uuid = generateUuid(); const zoovuCid = `zoovu-cid=${uuid}; path=/`; document.cookie = zoovuCid; return uuid; } function getCID() { return getCookieValue(`zoovu-cid`) !== null ? getCookieValue(`zoovu-cid`) : addZoovuCidToCookies(); } function getEnvironment() { return currentEnvironment; } function getAccountId() { return currentAccountId; } function getPropertyTypeError(propertyName, expectedType, currentType) { return `TYPE MISMATCH: ${propertyName}: should be ${expectedType} but is ${currentType}` } function typeCheckValue(value, variableType, propertyName) { if (value === undefined || value === null) { return `${propertyName}: value is not defined.` } switch (variableType) { case "TEXT": return typeof value === 'string' ? null : getPropertyTypeError(propertyName, 'string', typeof value); case "INTEGER": case "DECIMAL": return typeof value === 'number' ? null : getPropertyTypeError(propertyName, 'number', typeof value); case "BOOLEAN": return typeof value === 'boolean' ? null : getPropertyTypeError(propertyName, 'boolean', typeof value); case 'LIST': return Array.isArray(value) ? null : getPropertyTypeError(propertyName, 'list', typeof value); case 'EVENT': return null; default: return "Not supported variable type: " + variableType; } } function ensureRequiredFieldsPresent(fields, eventType) { return Object.entries(fields).every(([key, value]) => { if (!value) { throw Error(`REQUIRED PROPERTY MISSING FOR ${eventType}: ${key} not provided. Event won't be sent.`) } return true; }); } function getBaseEventBody(eventType) { return { origin: 'CLIENT', queryParams: {}, organization: getOrganization(), domainId: getDomainId(), path: getPath(), referrer: getReferrer(), cid: getCID(), timezone: getTimezone(), // dynamic eventType: eventType ?? '', eventLabel: '', }; } function getEventExecutable(actionType) { switch (actionType) { case actionTypes.PAGE_VISITED: return sendPageVisitedEvent; case actionTypes.ADD_TO_CART: return sendAddToCartEvent; case actionTypes.CLICKOUT: return sendClickoutEvent; case actionTypes.REMOVE_FROM_CART: return sendRemoveFromCartEvent; case actionTypes.PDP_VISITED: return sendPdpVisitedEvent; case actionTypes.PURCHASED: return sendPurchaseEvent; case actionTypes.DECLINE_TRACKING: return sendDeclineTrackingEvent; case actionTypes.UPDATE_CART: return sendUpdateCartEvent; case actionTypes.SEARCH: return sendSearchEvent; case actionTypes.SEARCH_RESULT: return sendSearchResultEvent; } } function getVariableValueById(variableId, event, fieldName) { const foundVariable = variables.find(v => v.id === variableId); let variableValue = null; if (foundVariable) { if (foundVariable.type === variableTypes.CONSTANT) { variableValue = cast(foundVariable.valueType, foundVariable.value); } else if (foundVariable.type === variableTypes.FUNCTION && typeof foundVariable.function === 'function') { variableValue = foundVariable.function(event); } const errorMessage = typeCheckValue(variableValue, foundVariable.valueType, fieldName ? fieldName : foundVariable.name); if (errorMessage) { throw new Error(errorMessage) } else { return variableValue; } } else { throw new Error(`No variable with ID ${variableId}`) } } function evaluateSingleTriggerRow(row, event) { const target = getVariableValueById(row.variableId, event); const matcher = matchers[row.operator]; const value = cast(row.valueType, row.value); if (matcher && typeof matcher === 'function') { return matcher(target, value); } return false; } function preparePayloadFromFields(fields, event) { const payload = {}; fields.forEach(f => { payload[f.fieldName] = getVariableValueById(f.variableId, event, f.fieldName) }) return payload; } function evaluateTriggerConditions(trigger, event) { // OR between groups return trigger.groups.some(group => // AND between rows group.rows.every(row => evaluateSingleTriggerRow(row, event))) } function runAction(action, fields, event) { if (action.type === actionTypes.CUSTOM && typeof action.code === 'function') { action.code(event); } else { const sendEventFunction = getEventExecutable(action.type); if (sendEventFunction && typeof sendEventFunction === 'function') { const payload = preparePayloadFromFields(fields, event) sendEventFunction(payload); } } } function evaluateSingleRule(rule, event) { if (evaluateTriggerConditions(rule.trigger, event)) { runAction(rule.action, rule.fields, event); } } function evaluateRules(rules, event) { try { rules.forEach(rule => { evaluateSingleRule(rule, event) }); } catch (error) { console.debug(error) } } function observeAndReactOnPageChange(callback) { let oldHref; if (oldHref === undefined) { callback(); oldHref = document.location.href; } const body = document.querySelector('body'); const observer = new MutationObserver(() => { if (oldHref !== document.location.href) { oldHref = document.location.href; callback(); } }); observer.observe(body, { childList: true, subtree: true }); } function executeAdvancedCode() { if (typeof advancedCode === 'function') { advancedCode(); } } // ------------------------- events ------------------------- async function sendEvent(body) { if (trackingEnabled) { await fetch(url, { method: 'POST', mode: 'cors', cache: 'no-cache', credentials: 'same-origin', headers: { 'Content-Type': 'application/json', }, redirect: 'follow', referrerPolicy: 'no-referrer', body: JSON.stringify(body), }); } else { console.debug("Tracking disabled - no permission to track"); } } async function sendSSTRPurchaseEvent(body) { if (trackingEnabled) { const purchaseUrl = 'https://ev-co.zoovu.com/v1/CollectSalesEvent'; await fetch(purchaseUrl, { method: 'POST', mode: 'cors', cache: 'no-cache', headers: { 'Content-Type': 'application/json', }, redirect: 'follow', referrerPolicy: 'no-referrer', body: JSON.stringify(body), }); } else { console.debug("Tracking disabled - no permission to track"); } } function sendFactEventBase(eventType, eventSpecificBody) { const body = { ...getBaseEventBody(eventType), // event label + custom per-event fields ...eventSpecificBody, }; sendEvent(body); }; function sendPageVisitedEvent({ locale, category, eventLabel = 'Page visit' }) { const body = { locale, eventLabel, // optional category, }; if (ensureRequiredFieldsPresent({ locale }, eventTypes.PAGE_VISITED)) { sendFactEventBase(eventTypes.PAGE_VISITED, body); } }; function sendPdpVisitedEvent({ locale, sku, quantity = 1, currencyCode, eventLabel = "Product details page visit", price, category }) { const body = { locale, sku, eventLabel, // optional category, price, currencyCode, quantity, }; if (ensureRequiredFieldsPresent({ locale, sku }, eventTypes.PDP_VISITED)) { sendFactEventBase(eventTypes.PDP_VISITED, body); } }; function sendAddToCartEvent({ locale, sku, quantity = 1, currencyCode, eventLabel = "Add to cart", price, category }) { const body = { locale, sku, eventLabel, // optional category, price, currencyCode, quantity, }; if (ensureRequiredFieldsPresent({ locale, sku }, eventTypes.ADD_TO_CART)) { sendFactEventBase(eventTypes.ADD_TO_CART, body); } }; function sendRemoveFromCartEvent({ locale, sku, quantity = 1, currencyCode, eventLabel = "Remove from cart", price, category }) { const body = { locale, sku, eventLabel, // optional category, price, currencyCode, quantity, }; if (ensureRequiredFieldsPresent({ locale, sku }, eventTypes.REMOVE_FROM_CART)) { sendFactEventBase(eventTypes.REMOVE_FROM_CART, body); } }; function sendUpdateCartEvent({ locale, sku, quantity = 1, currencyCode, eventLabel = "Update cart", price, category }) { const body = { locale, sku, eventLabel, // optional category, price, currencyCode, quantity, }; if (ensureRequiredFieldsPresent({ locale, sku }, eventTypes.UPDATE_CART)) { sendFactEventBase(eventTypes.UPDATE_CART, body); } }; function sendDeclineTrackingEvent({ locale, eventLabel = "No permission to track", category }) { const body = { locale, eventLabel, // optional category }; if (ensureRequiredFieldsPresent({ locale }, eventTypes.DECLINE_TRACKING)) { sendFactEventBase(eventTypes.DECLINE_TRACKING, body); disableTracking(); } }; function sendSearchEvent({ locale, eventLabel = "Search phrase typed", category }) { const body = { locale, eventLabel, // optional category, }; if (ensureRequiredFieldsPresent({ locale }, eventTypes.SEARCH)) { sendFactEventBase(eventTypes.SEARCH, body); } }; function sendSearchResultEvent({ locale, isEmpty = false, eventLabel = "Search results", skus, category }) { const body = { locale, isEmpty, skus, eventLabel, // optional category }; if (ensureRequiredFieldsPresent({ locale, skus }, eventTypes.SEARCH_RESULT)) { sendFactEventBase(eventTypes.SEARCH_RESULT, body); } }; function sendClickoutEvent({ locale, targetUrl, namedReferral, eventLabel = "Clickout", category }) { const body = { locale, targetUrl, namedReferral, eventLabel, // optional category }; if (ensureRequiredFieldsPresent({ locale, targetUrl, namedReferral }, eventTypes.CLICKOUT)) { sendFactEventBase(eventTypes.CLICKOUT, body); } }; function sendPurchaseEvent({ currencyCode, transactionId, products }) { const sstrBody = { transactionId, products, currency: currencyCode, browserTimestamp: Date.now(), env: getEnvironment(), accountId: getAccountId(), clientId: getCID(), }; if (ensureRequiredFieldsPresent({ products, currencyCode, }, eventTypes.PURCHASED)) { sendSSTRPurchaseEvent(sstrBody); } }; // ------------------------- core ------------------------- function reactOnLoad() { const pageLoadRules = script.rows.filter(row => row.trigger.type === triggerTypes.PAGE_LOAD); window.addEventListener("load", (event) => { observeAndReactOnPageChange(() => evaluateRules(pageLoadRules, event)) }, { capture: true }); } function reactOnClick() { const clickRules = script.rows.filter(row => row.trigger.type === triggerTypes.CLICK); // click via mouse document.querySelector('body').addEventListener('mousedown', (event) => { evaluateRules(clickRules, event); }, { capture: true }); // click via enter button document.querySelector('body').addEventListener('keydown', (event) => { if (event.code === "Enter" || event.code === "NumpadEnter") { evaluateRules(clickRules, event); } }, { capture: true }); } function reactOnInput() { const inputRules = script.rows.filter(row => row.trigger.type === triggerTypes.INPUT); document.querySelector('body').addEventListener('input', debounce(function(event) { evaluateRules(inputRules, event); }, 1500), { capture: true }); } function track() { try { executeAdvancedCode(); reactOnLoad(); reactOnClick(); reactOnInput(); } catch (error) { console.debug("Tracking disabled", error); } } // RUN SCRIPT AFTER PAGE LOAD if (document.readyState === "loading" || document.readyState === "interactive") { // Loading hasn't finished yet document.addEventListener("readystatechange", (event) => { if (event.target.readyState === "complete") { track(); } }); } else { track(); } })();