1const LOW_INVENTORY_STORAGE_KEY="BAO-low-inventory-message-displayed";class ThemeGtm extends window.BAO.CustomElement(){connectedCallback(){super.connectedCallback(),this.setupAddToCartTracking(),this.setupRemoveFromCartTracking(),this.trackCrossDomainRedirect404(),this.setupNostoRecsInteractionTracking(),this.setupLowInventoryMessageTracking(),this.setupEmptyCartRecsRenderTracking(),this.setupCollectionRecsViewTracking()}disconnectedCallback(){super.disconnectedCallback(),this.lowInventoryObserver?.disconnect(),this.emptyCartRecsObserver?.disconnect(),this.collectionRecsObserver?.disconnect()}setupListeners(){super.setupListeners(),this.handleSizeGuideClick=this.handleSizeGuideClick.bind(this),this.externalEls["size-guide-trigger"]?.elements?.forEach(trigger=>{this.listeners.add(trigger,"click",this.handleSizeGuideClick)}),this.handleProductCardClick=this.handleProductCardClick.bind(this),this.listeners.add(document,"click",this.handleProductCardClick),this.handleDesktopNavClick=this.handleDesktopNavClick.bind(this),this.listeners.add(document,"click",this.handleDesktopNavClick),this.handleDrawerNavClick=this.handleDrawerNavClick.bind(this),this.listeners.add(document,"click",this.handleDrawerNavClick),this.handleDrawerChanged=this.handleDrawerChanged.bind(this),this.listeners.add(document,"drawer-changed",this.handleDrawerChanged),this.handleEmptyCartRecsClick=this.handleEmptyCartRecsClick.bind(this),this.listeners.add(document,"click",this.handleEmptyCartRecsClick),this.handleCollectionRecsClick=this.handleCollectionRecsClick.bind(this),this.listeners.add(document,"click",this.handleCollectionRecsClick)}setupAddToCartTracking(){this.handleAfterAddFromForm=this.handleAfterAddFromForm.bind(this),window.BAO.eventBus.addEventListener(window.BAO.EVENTS.PUSH_CART.AFTER_ADD_FROM_FORM,this.handleAfterAddFromForm)}setupRemoveFromCartTracking(){this.handleBeforeRemoveFromCart=this.handleBeforeRemoveFromCart.bind(this),this.handleAfterRemoveFromCart=this.handleAfterRemoveFromCart.bind(this),window.BAO.eventBus.addEventListener(window.BAO.EVENTS.PUSH_CART.BEFORE_UPDATE_REMOVE_ITEM,this.handleBeforeRemoveFromCart),window.BAO.eventBus.addEventListener(window.BAO.EVENTS.PUSH_CART.AFTER_UPDATE_REMOVE_ITEM,this.handleAfterRemoveFromCart)}handleAfterAddFromForm(event){const{form,state}=event.detail;if(!form||!state)return;const items=Array.isArray(state)?state:[state],eventContext=sessionStorage.getItem("BAO-add-to-cart-event-context"),isPreOrder=form.classList.contains("x-pd-atc-form--preorder"),eventAction=isPreOrder?"Pre-order":"Buy";window.dataLayer=window.dataLayer||[],items.forEach(item=>{const titleSplit=item.title.split(" - "),productTitle=item.untranslated_product_title||titleSplit[0],variantTitle=item.untranslated_variant_title||titleSplit[1],productPrice=item.original_line_price||item.price;window.dataLayer.push({event:"add_to_cart_form",target_context:form.dataset.gtmTargetContext,event_context:eventContext||"",event_action:eventAction,item_title:productTitle,item_variant:variantTitle,item_discount:parseInt(item.total_discount)||0,item_value:productPrice/100}),isPreOrder&&window.dataLayer.push({event:"pre_order",target_context:form.dataset.gtmTargetContext,event_context:eventContext||"",item_title:productTitle,item_variant:variantTitle,item_value:productPrice/100})})}handleBeforeRemoveFromCart(event){const{key}=event.detail;key&&(this.removedCartItemPromise=fetch(`${window.routes.cartUrl}.js`).then(response=>response.json()).then(cart=>cart.items.find(item=>item.key===key)).catch(()=>null))}async handleAfterRemoveFromCart(){const item=await this.removedCartItemPromise;if(this.removedCartItemPromise=null,!item)return;const titleSplit=item.title.split(" - "),variantTitle=item.untranslated_variant_title||titleSplit[1]||"",price=typeof item.presentment_price=="number"?item.presentment_price:(item.final_price||item.price||0)/100;window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"remove_from_cart",ecommerce:{currency:this.dataset.currency,value:price,items:[{item_id:`${item.product_id}`,item_name:`${item.title}`,item_brand:`${item.vendor}`,item_variant:`${variantTitle}`,price,quantity:item.quantity}]}})}setupLowInventoryMessageTracking(){this.pushCartDrawer=document.getElementById("push-cart"),this.pushCartDrawer&&(this.lowInventoryReported=new Set(this.getReportedLowInventoryProducts()),this.lowInventoryObserver=new MutationObserver(()=>this.checkLowInventoryMessage()),this.lowInventoryObserver.observe(this.pushCartDrawer,{attributes:!0,attributeFilter:["open"],childList:!0,subtree:!0}))}getReportedLowInventoryProducts(){try{return JSON.parse(sessionStorage.getItem(LOW_INVENTORY_STORAGE_KEY))||[]}catch{return[]}}checkLowInventoryMessage(){if(!this.pushCartDrawer.hasAttribute("open"))return;const message=this.pushCartDrawer.querySelector("[data-gtm-low-inventory-message]"),productId=message?.dataset.productId;
1!productId||this.lowInventoryReported.has(productId)||(this.lowInventoryReported.add(productId),sessionStorage.setItem(LOW_INVENTORY_STORAGE_KEY,JSON.stringify([...this.lowInventoryReported])),window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"low_inventory_message_displayed",item_product_id:productId,item_title:message.dataset.productTitle}))}setupEmptyCartRecsRenderTracking(){const pushCart=this.pushCart;pushCart&&(this.emptyCartRecsObserver=new MutationObserver(mutations=>{window.drawers?.activeDrawerKey!=="cart"||!mutations.some(mutation=>[...mutation.addedNodes].some(node=>node.nodeType===Node.ELEMENT_NODE&&(node.matches("[data-gtm-empty-cart-recs]")||node.querySelector("[data-gtm-empty-cart-recs]"))))||this.trackEmptyCartRecsView("last item removed")}),this.emptyCartRecsObserver.observe(pushCart,{childList:!0,subtree:!0}))}handleDrawerChanged(){const cartIsOpen=window.drawers?.activeDrawerKey==="cart",cartWasOpen=this.cartDrawerOpen;this.cartDrawerOpen=cartIsOpen,!(!cartIsOpen||cartWasOpen)&&this.pushCart?.querySelector("[data-gtm-empty-cart-recs]")&&this.trackEmptyCartRecsView("drawer opened")}trackEmptyCartRecsView(eventContext){this.pushCart?.loading||(this.emptyCartRecsContext=eventContext,window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"empty_cart_recs_view",event_context:eventContext}))}handleEmptyCartRecsClick(event){const slide=event.target.closest('[data-gtm-empty-cart-recs] [data-drawer-carousel-el="slide"]');slide&&(window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"empty_cart_recs_click",event_context:this.emptyCartRecsContext||"drawer open",target_text:slide.dataset.gtmTargetText,target_url:slide.dataset.gtmTargetUrl}))}trackCrossDomainRedirect404(){if(document.body.dataset.pageType!=="404")return;const redirectOrigin=new URL(window.location.href).searchParams.get("redirect_origin");redirectOrigin&&(window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"cross_domain_redirect_404",event_context:redirectOrigin,target_url:window.location.href}))}setupCollectionRecsViewTracking(){const recs=document.querySelector("[data-gtm-collection-recs]");recs&&(this.collectionRecsObserver=new IntersectionObserver(entries=>{entries.some(entry=>entry.isIntersecting)&&(this.collectionRecsObserver.disconnect(),window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"recommended_collections_view"}))},{threshold:.5}),this.collectionRecsObserver.observe(recs))}handleCollectionRecsClick(event){const link=event.target.closest("[data-gtm-collection-recs] [data-gtm-target-url]");link&&(window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"recommended_collections_click",target_text:link.dataset.gtmTargetText,target_url:link.dataset.gtmTargetUrl}))}setupNostoRecsInteractionTracking(){this.handleNostoRecsClick=this.handleNostoRecsClick.bind(this),this.handleNostoPointerDown=this.handleNostoPointerDown.bind(this),this.handleNostoPointerUp=this.handleNostoPointerUp.bind(this),this.listeners.add(document,"click",this.handleNostoRecsClick),this.listeners.add(document,"pointerdown",this.handleNostoPointerDown),this.listeners.add(document,"pointerup",this.handleNostoPointerUp)}handleNostoPointerDown(event){const nostoElement=event.target.closest(".nosto_element");nostoElement&&(this.nostoPointerStart={nostoElement,x:event.clientX,y:event.clientY})}handleNostoPointerUp(event){if(!this.nostoPointerStart)return;const{nostoElement,x,y}=this.nostoPointerStart;this.nostoPointerStart=null;const distanceX=Math.abs(event.clientX-x),distanceY=Math.abs(event.clientY-y);distanceX<30||distanceX<distanceY||window.dataLayer.push({event:"nosto_recs_interaction",target_context:this.getNostoTargetContext(nostoElement),event_action:"Drag"})}handleNostoRecsClick(event){const nostoElement=event.target.closest(".nosto_element");if(!nostoElement)return;const targetContext=this.getNostoTargetContext(nostoElement),eventAction=this.getNostoEventAction(event.target);eventAction&&window.dataLayer.push({event:"nosto_recs_interaction",target_context:targetContext,event_action:eventAction})}get pushCart(){return document.querySelector("#push-cart push-cart")}getNostoTargetContext(nostoElement){return nostoElement.dataset.gtmTargetContext||nostoElement.id||""}getNostoEventAction(target){return target.closest('[data-product-carou
1sel-el="previous"]')||target.closest('[data-product-carousel-el="next"]')?"Arrow click":target.closest('[data-product-card-el="wishlistButton"]')||target.closest("[data-wishlist-button]")?"Wishlist click":target.closest('[data-quick-add-external-el="trigger"]')||target.closest('product-card-form button[type="submit"]')?"Quick buy":target.closest("product-card")||target.closest('article a[href*="/products/"]')?"Product card click":null}handleSizeGuideClick(){window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"pdp_size_guide_trigger"})}handleProductCardClick(event){const card=event.target.closest('[data-theme-gtm-external-el="product-card"]');if(!card||event.target.closest(".prd-Card_WishlistButton")||event.target.closest(".prd-Card_QuickBuyButton")||event.target.closest(".prd-Card_Colours"))return;const itemListName=card.closest("[data-gtm-section]")?.dataset.gtmSection||"";window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"select_item",ecommerce:{item_list_name:itemListName,items:[{item_id:card.dataset.productId,item_name:card.dataset.productTitle,price:Number(card.dataset.productPrice)}]}})}handleDesktopNavClick(event){const target=event.target.closest('[data-gtm-target-context="top-nav"] [data-gtm-nav-link], [data-gtm-target-context="megamenu"] [data-gtm-nav-link]');if(!target)return;const targetContext=target.closest("[data-gtm-target-context]"),targetElement=target.closest("[data-gtm-target-element]");window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"nav_link_click_desktop",target_text:target.dataset.gtmTargetText||target.innerText.trim(),target_context:targetContext?.dataset.gtmTargetContext,target_element:targetElement?.dataset.gtmTargetElement||"link"})}handleDrawerNavClick(event){const target=event.target.closest('dialog[is="site-drawer"][key="menu"] [data-gtm-nav-link]');if(!target)return;const targetLevel=target.closest("[data-gtm-target-level]"),targetContext=target.closest("[data-gtm-target-context]"),targetElement=target.closest("[data-gtm-target-element]");window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"nav_link_click_drawer",target_text:target.dataset.gtmTargetText||target.innerText.trim(),target_level:targetLevel?.dataset.gtmTargetLevel,target_context:targetContext?.dataset.gtmTargetContext,target_element:targetElement?.dataset.gtmTargetElement||"link"})}}customElements.get("theme-gtm")||customElements.define("theme-gtm",ThemeGtm); 2//# sourceMappingURL=/cdn/shop/t/1735/assets/theme-gtm.js.map?v=39704912602514760221790870297
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.