1const trackingEvents={ADD_IMPRESSIONS:"productImpressions",PRODUCT_CLICK:"productClick",PRODUCT_DETAIL:"productDetail",ADD_TO_CART:"addToCart",REMOVE_FROM_CART:"removeFromCart",VIEW_CART:"viewCart",CHECKOUT:"checkout",CHECKOUT_OPTION:"checkoutOption",PURCHASE:"purchase",TRANSACTION_COMPLETED:"transactionComplete"},ga4TrackingEvents={ADD_IMPRESSIONS:"view_item_list",PRODUCT_CLICK:"select_item",PRODUCT_DETAIL:"view_item",ADD_TO_CART:"add_to_cart",REMOVE_FROM_CART:"remove_from_cart",VIEW_CART:"view_cart",CHECKOUT:"begin_checkout",ADD_PAYMENT_INFO:"add_payment_info",PURCHASE:"purchase"};window.TrackingHelper=class t{constructor(t,e,a=null){e&&e.status?(this.trackingSettings=e,this.isTagManager=!0):t&&t.status?(this.trackingSettings=t,this.isAnalytics=!0,this.isGA4=t.isGA4):this.isDataLayerOnly=!0,this.trackingDetails=a,this.trackingSettings&&(this.isEnhancedTracking=this.trackingSettings.isGA4||this.trackingSettings.enhancedTracking&&this.trackingSettings.enhancedTracking.status)}setTrackingDetails(t){this.trackingDetails=t}getTrackingDetails(){return this.trackingDetails}track(t,e){this.trackingDetails&&(this.isTagManager?this._trackGtm(t,e):this.isAnalytics?this._trackGa(t,e):this.processTrackingGA4(t,e,!0))}_trackGtm(t,e){let a;if(window.dataLayer=window.dataLayer||[],this.isEnhancedTracking&&t)a=this.processEnhancedTrackingGTM(t,e);else{const{transactionData:e,lineItemData:i}=this.trackingDetails;e&&i&&(a=[{event:t,transactionId:e.id,transactionAffiliation:e.affiliation,transactionTotal:e.revenue,transactionTax:e.tax,transactionShipping:e.shipping,transactionProducts:i}])}a&&a.length&&window.dataLayer.push(...a)}_trackGa(t,e){this.isGA4&&this.processTrackingGA4(t,e)}_createECommerceForEnhanced(e){const{products:a}=e;if(!a?.length||!this.trackingSettings?.isGA4)return null;const i=a.map(t.convertProductToGA4Item);return{items:i,value:i.reduce(((t,{price:e,quantity:a})=>t+(e||0)*(a||1)),0),currency:Frontend.currencyCode}}processEnhancedTrackingGTM(e,a){const i=this.trackingSettings&&this.trackingSettings.isGA4,r=[];let n=e,c=this.trackingDetails.eventsToFire&&this.trackingDetails.eventsToFire.find((({event:t})=>e===t));if(e===trackingEvents.PURCHASE&&(c=this.trackingDetails),c||e===trackingEvents.PRODUCT_CLICK){let s;switch(e){case trackingEvents.ADD_IMPRESSIONS:s=t._trackProductImpressions(c),s&&i&&(n=ga4TrackingEvents.ADD_IMPRESSIONS,s=this._createECommerceForEnhanced(c));break;case trackingEvents.PRODUCT_CLICK:s=this._createProductClick(a),s&&i&&(n=ga4TrackingEvents.PRODUCT_CLICK,s={items:s.click.products.map(t.convertProductToGA4Item)});break;case trackingEvents.PRODUCT_DETAIL:s=t._createProductDetailView(c),s&&i&&(n=ga4TrackingEvents.PRODUCT_DETAIL,s=this._createECommerceForEnhanced(c));break;case trackingEvents.VIEW_CART:s=t._createViewCart(c),s&&i&&(n=ga4TrackingEvents.VIEW_CART,s=this._createECommerceForEnhanced(c));break;case trackingEvents.ADD_TO_CART:s=t._createAddToCart(c),s&&i&&(n=ga4TrackingEvents.ADD_TO_CART,s=this._createECommerceForEnhanced(c));break;case trackingEvents.REMOVE_FROM_CART:s=t._createRemoveFromCart(c),s&&i&&(n=ga4TrackingEvents.REMOVE_FROM_CART,s=this._createECommerceForEnhanced(c));break;case trackingEvents.CHECKOUT:if(s=t._createCheckout(c),s&&i){const{products:t,actionField:e}=s.checkout;t&&(n=ga4TrackingEvents.CHECKOUT,s=this._createECommerceForEnhanced(c),e&&e.option&&r.push({event:ga4TrackingEvents.ADD_PAYMENT_INFO,ecommerce:{...s,payment_type:e.option}}))}break;case trackingEvents.PURCHASE:if(s=t._createPurchase(c),s&&i){const{products:e,actionField:a}=s.purchase;n=ga4TrackingEvents.PURCHASE,s={transaction_id:a.id,value:a.revenue,currency:a.currency,items:e.map(t.convertProductToGA4Item).map((t=>(t&&a.affiliation&&(t.affiliation=a.affiliation),t)))},a.tax&&(s.tax=a.tax),a.shipping&&(s.shipping=a.shipping)}break;default:return null}if(s)return r.push({event:n,ecommerce:s}),r}return null}processTrackingGA4(e,a,i=!1){let r=this.trackingDetails.eventsToFire&&this.trackingDetails.eventsToFire.find((({event:t})=>e===t));if(e===trackingEvents.PURCHASE&&(r=this.trackingDetails),r||e===trackingEvents.PRODUCT_CLICK){let n;switch(e){case trackingEvents.ADD_IMPRESSIONS:if(n=t._trackProductImpressions(r),n){const e={items:n.impressions.map(t.convertProductToGA4Item)};t.toDataLayer(i,"event",ga4TrackingEvents.ADD_IMPRESSIONS,e)}break;case trackingEvents.PRODUCT_CLICK:if(n=this._createProductClick(a),n){const e={items:n.click.products.map(t.convertProductToGA4Item)};t.toDataLayer(i,"event",ga4TrackingEvents.PRODUCT_CLICK,e)}break;case trackingEvents.PRODUCT_DETAIL:if(n=t._createProductDetailVie
1w(r),n){const e={items:n.detail.products.map(t.convertProductToGA4Item)};t.toDataLayer(i,"event",ga4TrackingEvents.PRODUCT_DETAIL,e)}break;case trackingEvents.ADD_TO_CART:if(n=t._createAddToCart(r),n){const e=n.add.products.map(t.convertProductToGA4Item),a={currency:Frontend.currencyCode,value:e.reduce(((t,{price:e,quantity:a})=>t+(e||0)*(a||1)),0),items:e};t.toDataLayer(i,"event",ga4TrackingEvents.ADD_TO_CART,a)}break;case trackingEvents.REMOVE_FROM_CART:if(n=t._createRemoveFromCart(r),n){const e={items:n.remove.products.map(t.convertProductToGA4Item)};t.toDataLayer(i,"event",ga4TrackingEvents.REMOVE_FROM_CART,e)}break;case trackingEvents.VIEW_CART:if(n=t._createViewCart(r),n){const e={items:n.view.products.map(t.convertProductToGA4Item)};t.toDataLayer(i,"event",ga4TrackingEvents.VIEW_CART,e)}break;case trackingEvents.CHECKOUT:if(n=t._createCheckout(r),n){const{products:e,actionField:a}=n.checkout,r=e&&e.map(t.convertProductToGA4Item);if(e){const e={items:r};if(t.toDataLayer(i,"event",ga4TrackingEvents.CHECKOUT,e),a&&a.option){const e={items:r,payment_type:a.option};t.toDataLayer(i,"event",ga4TrackingEvents.ADD_PAYMENT_INFO,e)}}}break;case trackingEvents.PURCHASE:if(n=t._createPurchase(r),n){const{products:e,actionField:a}=n.purchase,r={transaction_id:a.id,value:a.revenue,currency:a.currency,items:e.map(t.convertProductToGA4Item).map((t=>(t&&a.affiliation&&(t.affiliation=a.affiliation),t)))};a.tax&&(r.tax=a.tax),a.shipping&&(r.shipping=a.shipping),t.toDataLayer(i,"event",ga4TrackingEvents.PURCHASE,r)}break;default:return null}}return null}static convertProductToGA4Item(t,e){const a={item_id:t.id,item_name:t.name||"UNKNOWN",item_category:t.category||"UNKNOWN_CATEGORY",price:t.price,quantity:t.quantity,index:void 0!==t.position?t.position:e};return void 0===a.price&&delete a.price,void 0===a.quantity&&delete a.quantity,t.list&&(a.item_list_id=t.list.split(" ").join("_"),a.item_list_name=t.list),a}static _trackProductImpressions(t){return t.products&&t.products.length?{impressions:t.products}:null}static toDataLayer(t,...e){if(window.dataLayer||(window.dataLayer=[]),t){const[,t,a]=e;t&&a&&window.dataLayer.push({event:t,ecommerce:a})}else Frontend.waitForWindowObject("gtag",(()=>{gtag(...e)}))}_createProductClick(t){const{eventsToFire:e}=this.trackingDetails,a=e.find((({event:t})=>t===trackingEvents.ADD_IMPRESSIONS));if(a){const{products:e}=a,i=e&&e.find((({id:e})=>Number(e)===Number(t)));if(i){const t={click:{products:[i]}};return i.list&&(t.click.actionField={list:i.list}),t}}return null}static _createProductDetailView(t){if(t.products&&t.products.length){const e={detail
1:{products:t.products}};return t.actionField&&(e.detail.actionField=t.actionField),e}return null}static _createAddToCart(t){return t.products&&t.products.length?{add:{products:t.products}}:null}static _createRemoveFromCart(t){return t.products&&t.products.length?{remove:{products:t.products}}:null}static _createViewCart(t){return t.products&&t.products.length?{view:{products:t.products}}:null}static _createCheckout(t){if(t.actionField){const e=Array.isArray(t.products)?t.products:void 0,a={checkout:{actionField:t.actionField}};return e&&e.length&&(a.checkout.products=e),a}return null}static _createCheckoutOption(t){return{checkout_option:{actionField:t.actionField}}}static _createPurchase(t){return t.transactionData&&t.lineItemData&&t.lineItemData.length?{purchase:{actionField:t.transactionData,products:t.lineItemData}}:null}static getTrackingEvents(){return trackingEvents}};
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.