PageSourceSearch

https://mysuparfum.com/cdn/shop/t/6/assets/product-item-variants.min.js?v=46042872920668339601781697328

js mysuparfum.com collected 2026-10-08 12:38:27 UTC 6,130 bytes, 1 lines download raw bytes

1class ProductItemVariants{constructor(){this.init()}init(){this.initVariantSelectors(),this.setupMutationObserver(),this.initSearchPopupPriceUpdates()}initVariantSelectors(){document.querySelectorAll(".bls__product-item").forEach(t=>{const e=t.querySelector(".bls__product-variants-container");e&&this.setupVariantContainer(e,t)})}setupVariantContainer(t,e=null){if(e||(e=t.closest(".bls__product-item")),!e)return;t.querySelectorAll(".bls__product-variant-item").forEach(r=>{r.removeEventListener("click",this.handleVariantClick),r.addEventListener("click",r=>this.handleVariantClick(r,t,e))})}handleVariantClick(t,e,r){t.preventDefault();const a=t.currentTarget;this.selectVariant(a,e,r)}selectVariant(t,e,r){e.querySelectorAll(".bls__product-variant-item").forEach(t=>t.classList.remove("active")),t.classList.add("active");const a={id:t.dataset.variantId,title:t.dataset.variantTitle,price:parseInt(t.dataset.variantPrice)||0,compare_at_price:parseInt(t.dataset.variantComparePrice)||0,available:"true"===t.dataset.variantAvailable,image:t.dataset.variantImage,productId:t.dataset.productId||r.dataset.productId,productUrl:t.dataset.productUrl||r.dataset.productUrl,productCollectionIds:JSON.parse(t.dataset.productCollectionIds||r.dataset.productCollectionIds||"[]")};this.updateProductCard(r,a),this.dispatchVariantChangeEvent(a)}updateProductCard(t,e){t&&(t.setAttribute("data-regios-dopp-generic-variant-id",e.id),t.setAttribute("data-regios-dopp-regular-price",e.price),this.updateProductURL(t,e),this.updateProductImage(t,e),this.updateProductPrice(t,e),this.updateAddToCartButton(t,e))}updateProductURL(t,e){if(t.classList.contains("bls__product-item--sample"))return;const r=e.productUrl;if(!r)return;const a=t.querySelector(".bls__product-img .bls__img-url");a&&(a.href=`${r}?variant=${e.id}`);const i=t.querySelector(".bls__product-name a");i&&(i.href=`${r}?variant=${e.id}`)}updateProductImage(t,e){if(!e.image)return;t.querySelectorAll(".bls__product-img img, .bls__product-grid img").forEach(t=>{const r=new Image;r.onload=()=>{t.src=e.image,t.srcset=e.image},r.src=e.image})}async updateProductPrice(t,e){try{if(window.RegiosDOPP&&window.RegiosDOPP.api&&window.RegiosDOPP.api.v0){const{salePrice:r,regularPrice:a}=await window.RegiosDOPP.api.v0.calculateDiscountedPrices({productId:parseInt(e.productId),variantId:parseInt(e.id),regularPriceInCents:e.price,collectionIds:e.productCollectionIds});if(null!=r?.amount&&!isNaN(r?.amount))return void this.updatePriceDisplay(t,r?.amount,a?.amount||r?.amount)}}catch(t){console.error("Error calculating Regios pricing:",t)}}updatePriceDisplay(t,e,r){const a=t.querySelector(".bls__price");if(!a)return;const i=this.formatPrice(e),c=a.querySelector(".price__regular .price");c&&(c.innerHTML=i),a.classList.remove("price--sold-out","price--on-sale"),c&&c.classList.remove("special-price");const s=this.formatPrice(r);if(r>e){let t=a.querySelector(".regios-dopp-generic-price-item--regular");if(!t)return;t.classList.remove("d-none"),t.innerHTML=s,a.classList.add("price--on-sale"),c&&c.classList.add("special-price")}else{let t=a.querySelector(".regios-dopp-generic-price-item--regular");t&&t.classList.add("d-none")}}formatPrice(t){if("undefined"!=typeof Shopify&&Shopify.formatMoney){const e=window.cartStrings?.money_format||"{{amount}}";return Shopify.formatMoney(100*t,e)}return new Intl.NumberFormat(document.documentElement.lang||"en",{style:"currency",currency:window.Shopify?.currency?.active||"USD",minimumFractionDigits:2}).format(t/100)}updateAddToCartButton(t,e){const r=t.querySelector(".bls__product-addtocart-js");r&&(r.dataset.productVariantId=e.id)}dispatchVariantChangeEvent(t){window.dispatchEvent(new CustomEvent("product-item:variant-change",{detail:t}))}setupMutationObserver(){new MutationObserver(t=>{t.forEach(t=>{t.addedNodes.forEach(t=>{if(t.nodeType===Node.ELEMENT_NODE){t.querySelectorAll(".bls__product-item").forEach(t=>{const e=t.querySelector(".bls__product-variants-container");e&&this.setupVariantContainer(e,t)})}})})}).observe(document.body,{childList:!0,subtree:!0})}initSearchPopupPriceUpdates(){const t=document.querySelector("#predictive-search");t&&(this.currentSearchQuery="",this.searchProcessingTimeout=null,this.searchObserver=new MutationObserver(t=>{this.searchProcessingTimeout&&clearTimeout(this.searchProcessingTimeout),this.searchProcessingTimeout=setTimeout(()=>{this.processSearchResults()},100)}),this.searchObserver.observe(t,{childList:!0,subtree:!0,attributes:!1,characterData:!1}))}processSearchResults(){const t=document.querySelector('input[name="q"]'),e=t?t.value.trim():"";if(!e)return void(this.currentSearchQuery="");if(this.currentSearchQuery===e)return;this.currentSearchQuery=e;const r=document.querySelectorAll("#search-results-list .bls__product-item, #predictive-search .bls__product-item");0!==r.length&&r.forEach((t,e)=>{const r=t.dataset.productId||t.dataset.regiosDoppGenericProductId||`search-product-${e}`,a=t.querySelector(".bls__product-variants-container");if(!a){const e={id:t.dataset.regiosDoppGenericVariantId||t.dataset.variantId,title:"",price:parseInt(t.dataset.regiosDoppRegularPrice||t.dataset.price)||0,compare_at_price:parseInt(t.dataset.compareAtPrice)||0,available:!0,image:t.dataset.image||"",productId:r,productUrl:t.dataset.productUrl||"",productC
1ollectionIds:[]};return void this.updateProductCard(t,e)}const i=a.querySelector(".bls__product-variant-item");if(!i)return;const c={id:i.dataset.variantId,title:i.dataset.variantTitle||"",price:parseInt(i.dataset.variantPrice)||0,compare_at_price:parseInt(i.dataset.variantComparePrice)||0,available:"true"===i.dataset.variantAvailable,image:i.dataset.variantImage||"",productId:i.dataset.productId||t.dataset.productId||r,productUrl:i.dataset.productUrl||t.dataset.productUrl||"",productCollectionIds:JSON.parse(i.dataset.productCollectionIds||t.dataset.productCollectionIds||"[]")};this.updateProductCard(t,c),this.setupVariantContainer(a,t)})}}"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{new ProductItemVariants}):new ProductItemVariants,window.ProductItemVariants=ProductItemVariants;

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.