1(()=>{"use strict";class e{scrollResizeTriggerDelay=150;impressionBatchSize=20;allDesignsData=[];allProductData=[];scrollResizeTimer;impressionDesignIdsLogged=[];impressionProductIdsLogged=[];hasLoggedClick=!1;dataLayerRef;productNameCard;pageName;impressionImagesSelector;clickSelector;constructor(e,t,i,s,o){this.dataLayerRef=e,this.productNameCard=t,this.pageName=i,this.impressionImagesSelector=s,this.clickSelector=o}init=async()=>{const e=await fetch(`/get_product_action_logger_data?url=${encodeURIComponent(this.pageName)}`),t=await e.json();this.allDesignsData=t.designs??[],this.allProductData=t.products??[],this.logImpressions(),this.bindEvents()};bindEvents=()=>{const e=()=>{void 0!==this.scrollResizeTimer&&clearTimeout(this.scrollResizeTimer),this.scrollResizeTimer=setTimeout((()=>this.logImpressions()),this.scrollResizeTriggerDelay)};window.addEventListener("resize",e),window.addEventListener("scroll",e),document.addEventListener("click",(e=>{const t=e.target;if(!(t instanceof Element))return;const i=t.closest(this.clickSelector);i instanceof Element&&this.logClick(i)}))};isInViewport=e=>{const t=e.getBoundingClientRect();return t.bottom>0&&t.top<window.innerHeight};imagesToLogAsImpressions=()=>{const e=[];return Array.from(document.querySelectorAll(this.impressionImagesSelector)).filter((t=>{const i=this.designId(t),s=this.productId(t);if(!(null!==i&&this.designData(i)||null!==s&&this.productData(s)))return!1;let o=!1,a=!1;return null!==i?(a=e.includes(i),o=this.impressionDesignIdsLogged.includes(i)):null!==s&&(a=e.includes(s),o=this.impressionProductIdsLogged.includes(s)),!(!this.isInViewport(t)||a||o||(null!==i?e.push(i):null!==s&&e.push(s),0))}))};logImpressions=()=>{const e=this.imagesToLogAsImpressions();for(;e.length>0;){const t=[];e.splice(0,this.impressionBatchSize).forEach((e=>{const i=this.designId(e),s=this.productId(e),o=null!==i?this.designData(i):void 0,a=null!==s?this.productData(s):void 0;null!==i&&o?(t.push({item_name:"singlesided"===o.card_format?"poster":this.productNameCard,item_id:o.id,item_category:o.main_category_name,item_category2:this.pageName.split("/").pop(),item_brand:o.designer_brandname,item_list_name:this.pageName,position:o.position}),this.impressionDesignIdsLogged.push(i)):null!==s&&a&&(t.push({item_name:a.title,item_id:a.product_code,item_category:a.category,item_category2:this.pageName.split("/").pop(),item_brand:null,item_list_name:this.pageName}),this.impressionProductIdsLogged.push(s))})),t.length>0&&this.dataLayerRef.push({event:"productImpressions",ecommerce:{currencyCode:"EUR",impressions:t}})}};logClick=e=>{const t=this.designId(e),i=null!==t?this.designData(t):void 0;i&&!this.hasLoggedClick&&(this.dataLayerRef.push({event:"productClick",ecommerce:{click:{actionField:{list:this.pageName,action:"click"},items:[{quantity:1,position:i.position,item_name:this.productNameCard,item_id:i.id,item_category:i.main_category_name,item_category2:this.pageName.split("/").pop(),item_brand:i.designer_brandname,item_list_name:this.pageName}]}}}),this.hasLoggedClick=!0)};designId=e=>{const t=e.closest("[data-design-id]");return t?.getAttribute("data-design-id")??null};productId=e=>{const t=e.closest("[data-product-code]");return t?.getAttribute("data-product-code")??null};designData=e=>this.allDesignsData.find((t=>t.id===e));productData=e=>this.allProductData.find((t=>t.product_code===e))}window.addEventListener("load",(()=>{(async()=>{const t=(()=>{const e=document.getElementById("js-product-action-logger-config");if(!e)return null;const t=e.dataset.productNameCard,i=e.dataset.clickSelector,s=e.dataset.impressionImagesSelector;return t&&i&&s?{productNameCard:t,clickSelector:i,impressionImagesSelector:s}:null})();if(!t||"undefined"==typeof pagename||""===pagename)return;const i=new e(dataLayer,t.productNameCard,pagename,t.impressionImagesSelector,t.clickSelector);await i.init()})()}))})();
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.