PageSourceSearch

https://www.soniaroselli.com/cdn/shop/t/201/assets/product-bundle.js?v=64065332883259432831782713469

js soniaroselli.com collected 2026-10-03 21:27:46 UTC 16,173 bytes, 2 lines download raw bytes

1window.Eurus.loadedScript.has("product-bundle.js")||(window.Eurus.loadedScript.add("product-bundle.js"),requestAnimationFrame(()=>{document.addEventListener("alpine:init",()=>{Alpine.data("xProductBundle",(sectionId,minimumItems,shopCurrency,discountType,discountValue,applyDiscountOncePerOrder,enableQty)=>({products:"",productsBundle:[],loading:!1,addToCartButton:"",totalPrice:0,errorMessage:!1,totalDiscount:0,amountPrice:0,initBundle(el){this.addToCartButton=el.querySelector(".button-atc"),this.handleProductsBundle();const saved=sessionStorage.getItem("bundle-"+sectionId);saved&&(this.productsBundle=JSON.parse(saved),this.updateBundleContent(this.productsBundle),setTimeout(()=>{document.dispatchEvent(new CustomEvent(`eurus:product-bundle:productsCard-cached-${sectionId}`,{detail:{productsList:this.productsBundle}}))},500))},handleProductsBundle(){this.$watch("productsBundle",()=>{document.dispatchEvent(new CustomEvent(`eurus:product-bundle:productsList-changed-${sectionId}`,{detail:{productsBundle:this.productsBundle}})),sessionStorage.setItem("bundle-"+sectionId,JSON.stringify(this.productsBundle))})},_getSelectedValueId(el){return el.querySelector("select option[selected][value], fieldset input:checked")?.dataset.optionValueId},_getCurrentVariantEl(el){return el.querySelector(`script[type="application/json"][data-option-value-id='${this._getSelectedValueId(el)}']`)?.textContent},_getCurrentVariable(el){return JSON.parse(this._getCurrentVariantEl(el))},addToBundle(el,productId,productUrl,hasVariant,name_edt){let productsBundle=JSON.parse(JSON.stringify(this.productsBundle));const productName=el.closest(".x-product-bundle-data").querySelector(".product-name").textContent,currentVariant=hasVariant?this._getCurrentVariable(el.closest(".x-product-bundle-data")):JSON.parse(el.closest(".x-product-bundle-data").querySelector(`script[type='application/json'][data-id='${productId}']`).textContent),price=!hasVariant&&JSON.parse(el.closest(".x-product-bundle-data").querySelector(".current-price")?.textContent),featured_image=currentVariant.featured_image?currentVariant.featured_image.src:el.closest(".x-product-bundle-data").querySelector(".featured-image").textContent,edtElement=el.closest(".x-product-bundle-data").querySelector(`.hidden.cart-edt-properties-${productId}`);let shippingMessage="";edtElement&&(shippingMessage=edtElement.value.replace("time_to_cut_off",Alpine.store("xEstimateDelivery").noti));const preorderElement=el.closest(".x-product-bundle-data").querySelector(".hidden.preorder-edt-properties");let preorderMessage="";preorderElement&&(preorderMessage=preorderElement.value);const properties={...name_edt&&shippingMessage&&{[name_edt]:shippingMessage},...preorderMessage&&{Preorder:preorderMessage}};let variantId=hasVariant?currentVariant:currentVariant.id,newProductsBundle=[],newItem=hasVariant?{...currentVariant,title:currentVariant.title.replaceAll("\\",""),product_id:productId,product_name:productName,productUrl:`${productUrl}?variant=${currentVariant.id}`,featured_image,quantity:1,properties}:{id:variantId,product_id:productId,product_name:productName,productUrl,featured_image,quantity:1,price,properties};newProductsBundle=[...productsBundle,newItem],this.productsBundle=newProductsBundle,this.errorMessage=!1,this.updateBundleContent(newProductsBundle);let bundleContentContainer=document.getElementById(`bundle-content-container-${sectionId}`);requestAnimationFrame(()=>{let splide=bundleContentContainer.splide;if(splide){splide.refresh();let lastIndex=splide.Components.Controller.getEnd();splide.go(lastIndex)}})},getItemIndex(el,productId,hasVariant){let productsBundle=JSON.parse(JSON.stringify(this.productsBundle));const currentVariant=hasVariant?this._getCurrentVariable(el.closest(".x-product-bundle-data")):JSON.parse(el.closest(".x-product-bundle-data").querySelector(`script[type='application/json'][data-id='${productId}']`).textContent),variantId=typeof currentVariant=="object"?currentVariant.id:currentVariant;return productsBundle.findIndex(item=>item.id===variantId)},updateProductQty(el,productId,hasVariant,qty){let productsBundle=JSON.parse(JSON.stringify(this.productsBundle));const index=this.getItemIndex(el,productId,hasVariant);if(productsBundle[index]){if(Number(qty)===0){this.removeBundle(el,index);return}productsBundle[index].quantity=Number(qty),this.productsBundle=productsBundle,this.updateBundleContent(productsBundle),this.scrollToItem(el,index)}},minusProductQty(el,productId,hasVariant,qty){let productsBundle=JSON.parse(JSON.stringify(this.productsBundle));const index=this.getItemIndex(el,productId,hasVariant);if(productsBundle[index]){if(productsBundle[index].quantity===1){this.removeBundle(el,index);return}productsBundle[index].quantity-=qty,this.productsBundle=productsBundle,this.updateBundleContent(productsBundle),this.scrollToItem(el,index)}},plusProductQty(el,productId,hasVariant,qty){let productsBundle=JSON.parse(JSON.stringify(this.productsBundle));const index=this.getItemIndex(el,productId,hasVariant);productsBundle[index]&&(productsBundle[index].quantity+=qty,this.productsBundle=productsBundle,this.updateBundleContent(productsBundle),this.scrollToItem(el,index))},async handleAddToCart(el){this.loading=!0,await Alpine.store("xCartHelper").waitForCartUpdate(),window.updatingCart=!0,setTimeout(()=>{let items=JSON.parse(JSON.stringify(this.productsBundle));items=items.reduce((data,product)=>
1(data[product.id]?data[product.id].quantity+=product.quantity:data[product.id]=product,data),{}),fetch(window.Shopify.routes.root+"cart/add.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({items,sections:Alpine.store("xCartHelper").getSectionsToRender().map(section=>section.id)})}).then(response=>response.json()).then(response=>{if(document.dispatchEvent(new CustomEvent(`eurus:product-bundle:products-changed-${sectionId}`,{detail:{productsBundle:Object.values(items),el:el.closest(".product-bundler-wrapper")}})),response.status=="422"){document.dispatchEvent(new CustomEvent("eurus:product:add-failed",{detail:{errorMessage:response.description}}));const errorMessage=el.closest(".bundler-sticky").querySelector(".cart-warning");this.errorMessage=!0,errorMessage&&(errorMessage.textContent=response.description);return}this.errorMessage=!1,Alpine.store("xCartHelper").reRenderSections(response.sections),document.dispatchEvent(new CustomEvent("eurus:product:added",{detail:{product:response.items}})),Alpine.store("xQuickView")&&Alpine.store("xQuickView").show&&(Alpine.store("xQuickView").show=!1),Alpine.store("xPopup").close(),Alpine.store("xCartNoti")&&Alpine.store("xCartNoti").enable?Alpine.store("xCartNoti").setItem(response):(Alpine.store("xMiniCart").openCart(),document.dispatchEvent(new CustomEvent("eurus:cart:redirect"))),Alpine.store("xCartHelper").currentItemCount=parseInt(document.getElementById("cart-icon-bubble").innerHTML),document.dispatchEvent(new CustomEvent("eurus:cart:items-changed"))}).catch(error=>{document.dispatchEvent(new CustomEvent("eurus:product:add-failed",{detail:{errorMessage:error}})),console.error("Error:",error)}).finally(()=>{window.updatingCart=!1,this.loading=!1,this.productsBundle=[],this.totalPrice=0,this.addToCartButton.setAttribute("disabled","disabled")})},0)},updateBundleContent(productsBundle){let total=productsBundle.reduce((total2,item)=>total2+item.price*item.quantity,0),totalQty=productsBundle.reduce((totalQty2,item)=>totalQty2+item.quantity,0);if(totalQty>=minimumItems){this.addToCartButton.removeAttribute("disabled");let discount=0,totalDiscount=0;if(Number.isNaN(discountValue))this.amountPrice=0,this.totalDiscount=0;else if(discount=Number(discountValue),discountType=="percentage"&&Number.isInteger(discount)&&discount>0&&discount<100&&(totalDiscount=Math.ceil(total-total*discount/100)),discountType=="amount"&&discount>0&&(discount=Number.parseFloat(discountValue).toFixed(2),applyDiscountOncePerOrder?totalDiscount=total-discount*Shopify.currency.rate*100:totalDiscount=total-totalQty*discount*Shopify.currency.rate*100),totalDiscount>0){let amount=total-totalDiscount;this.amountPrice=Alpine.store("xHelper").formatMoney(amount,shopCurrency),this.totalDiscount=Alpine.store("xHelper").formatMoney(totalDiscount,shopCurrency)}else this.amountPrice=Alpine.store("xHelper").formatMoney(0,shopCurrency),this.totalDiscount=Alpine.store("xHelper").formatMoney(total,shopCurrency)}else this.totalDiscount=0,this.addToCartButton.setAttribute("disabled","disabled");this.totalPrice=Alpine.store("xHelper").formatMoney(total,shopCurrency),document.dispatchEvent(new CustomEvent(`eurus:product-bundle:productsList-changed-${sectionId}`,{detail:{productsBundle:this.productsBundle}}))},scrollToItem(el,index){const container=document.getElementById(`bundle-content-container-${sectionId}`),splide=container?.splide;splide&&!splide?.state.is(Splide.STATES.DESTROYED)?splide.go(index):container?.querySelectorAll(".bundler-product")?.[index]?.scrollIntoView({behavior:"smooth",container:"nearest"})},removeBundle(el,indexItem){let item=this.productsBundle[indexItem],newProductsBundle=this.productsBundle.filter((item2,index)=>index!=indexItem);this.productsBundle=newProductsBundle,this.updateBundleContent(newProductsBundle);let bundleContentContainer=document.getElementById(`bundle-content-container-${sectionId}`);requestAnimationFrame(()=>{let splide=bundleContentContainer.splide;if(splide){splide.refresh();let lastIndex=splide.Components.Controller.getEnd();splide.go(lastIndex)}}),document.dispatchEvent(new CustomEvent(`eurus:product-bundle:remove-item-${sectionId}`,{detail:{item,el}}))},displayDiscountValueLabel(){let discount=0;
1if(!Number.isNaN(discountValue))return discount=Number(discountValue),discount>0&&(discount=Number.parseFloat(discountValue).toFixed(2)*Shopify.currency.rate*100),Alpine.store("xHelper").formatMoney(discount,shopCurrency)}})),Alpine.data("xProductItemBundle",(el,sectionId,addToBundle,unavailableText,soldoutText,addedText,handleSectionId,productUrl,productId,hasVariant,productOnlyAddedOnce,enableQty,isByob)=>({qty:0,showQty:!1,productsList:[],dataVariant:[],currentVariant:"",isSelect:!1,productId,productUrl,checkProductQty(){if(!enableQty)return;const item=hasVariant?this.productsList?.find(({id})=>id===this.currentVariant?.id):this.productsList?.find(({product_id})=>product_id===this.productId);this.qty=item?Number(item.quantity):0,this.showQty=!!item},initEvent(){if(document.addEventListener(`eurus:card-product-bundle:productsList-changed-${handleSectionId}`,e=>{this.productsList=e.detail.productsList,this.checkProductQty()}),isByob&&document.addEventListener(`eurus:byob:data-Loaded-${handleSectionId}`,e=>{this.productsList=e.detail.productsBundle,this.checkProductQty()}),hasVariant&&document.addEventListener(`eurus:product-card-variant-select:updated:${sectionId}:${productUrl}`,e=>{this.currentVariant=e.detail.currentVariant,this.renderAddToBundleButton(),this.checkVariantSelected(),this.checkProductQty(),this.currentVariant&&this.currentVariant.id&&(this.productUrl=productUrl+`/?variant=${this.currentVariant.id}`)}),document.addEventListener(`eurus:product-bundle:productsCard-cached-${handleSectionId}`,e=>{if(!productOnlyAddedOnce)return;const buttonATB=document.getElementById("x-atc-button-"+sectionId);if(!buttonATB||!(hasVariant?e.detail.productsList.find(({id})=>id===this.currentVariant?.id):e.detail.productsList.find(({product_id})=>product_id===this.productId)))return;buttonATB.setAttribute("disabled","disabled");const addButtonText=buttonATB.querySelector(".x-atc-text");addButtonText&&(addButtonText.textContent=addedText),hasVariant?this.dataVariant=JSON.parse(JSON.stringify(this.dataVariant)).map(variant=>variant.id==this.currentVariant?.id?{id:variant.id,disable:!0}:{id:variant.id,disable:variant.disable}):document.getElementById("bundle-product-"+this.productId)?.classList.add("cursor-pointer","pointer-events-none","opacity-70")}),document.addEventListener(`eurus:product-bundle:products-changed-${handleSectionId}`,e=>{e.detail.productsBundle.map(item=>{if(hasVariant&&item.product_id==this.productId&&this.currentVariant.available){let buttonATC=document.getElementById("x-atc-button-"+sectionId);buttonATC&&buttonATC.removeAttribute("disabled")}else if(item.product_id==this.productId){let buttonATC=document.getElementById("x-atc-button-"+sectionId);buttonATC&&buttonATC.removeAttribute("disabled")}}),productOnlyAddedOnce&&this.setUnSelectVariant()}),document.addEventListener(`eurus:product-bundle:remove-item-${handleSectionId}`,e=>{if(this.isSelect&&e.detail.item.product_id==this.productId&&hasVariant){if(this.currentVariant&&this.currentVariant.available){let buttonATC=document.getElementById("x-atc-button-"+sectionId);if(buttonATC){buttonATC.removeAttribute("disabled");const addButtonText=buttonATC.querySelector(".x-atc-text");addButtonText&&(addButtonText.textContent=addToBundle)}}this.setUnSelectVariant(e.detail.item)}else if(e.detail.item.product_id==this.productId){let buttonATC=document.getElementById("x-atc-button-"+sectionId);if(buttonATC){buttonATC.removeAttribute("disabled");const addButtonText=buttonATC.querySelector(".x-atc-text");addButtonText&&(addButtonText.textContent=addToBundle)}productOnlyAddedOnce&&document.getElementById("bundle-product-"+e.detail.item.product_id)?.classList.remove("cursor-pointer","pointer-events-none","opacity-70")}}),hasVariant){const checkedInput=el.querySelector("fieldset input:checked"),selectEl=el.querySelector("select"),optionValueId=checkedInput?.dataset.optionValueId??selectEl?.selectedOptions[0]?.dataset.optionValueId;if(optionValueId){const variantObj=el.querySelector(`script[type="application/json"][data-option-value-id="${optionValueId}"]`);variantObj&&(this.currentVariant=JSON.parse(variantObj.textContent))}}},setVariantSelected(el2){this.currentVariant&&this.dataVariant.findIndex(item=>item.id==this.currentVariant.id&&item.disable)!=-1&&el2.closest(".bundle-product").querySelector(".x-atb-button").setAttribute("disabled","disabled")},setDisableSelectProduct(el2){if(productOnlyAddedOnce){let newVariants=JSON.parse(JSON.stringify(this.dataVariant)).map(item=>item.id==this.currentVariant.id?{id:item.id,disable:!0}:{id:item.id,disable:item.disable});this.dataVariant=newVariants;let buttonATB=el2.closest(".bundle-product").querySelector(".x-atb-button");buttonATB.setAttribute("disabled","disabled");const addButtonText=buttonATB.querySelector(".x-atc-text");addButtonText&&(addButtonText.textContent=addedText)}},setUnSelectVariant(product){let newVariants="";product?newVariants=JSON.parse(JSON.stringify(this.dataVariant)).map(item=>item.id==product.id?{id:item.id,disable:!1}:{id:item.id,disable:item.disable}):newVariants=JSON.parse(JSON.stringify(this.dataVariant)).map(item=>({id:item.id,disable:!1})),this.dataVariant=newVariants},renderAddToBundleButton(){const buttonATB=document.getElementById("x-atc-button-"+sectionId);if(!buttonATB)return;const addButtonText=buttonATB.querySelector(".x-atc-text");addButtonText&&(this.currentVariant?(this.productsList.find(({id})=>id===this.currentVariant.id)&&buttonATB&&setTimeout(()=>{buttonATB.setAttribute("disabled","disabled"),this.currentVariant.available?addButtonText.textContent=productOnlyAddedOnce?addedText:addToBundle:addButtonText.textContent=soldoutText},100),this.currentVariant.available?(buttonATB.removeAttribute("disabled"),addButtonText.textContent=addToBundle):addButtonText.textContent=soldoutText):addButtonText.textContent=unavailableText)},checkVariantSelected(){[...document.querySelectorAll(`#variant-update-${sectionId} fieldset`)].findIndex(item=>!item.querySelector("input:checked"))=="-1"&&(this.isSelect=!0)}})),Alpine.data("xProductList",handleSectionId=>({productsList:[],init(){document.addEventListener(`eurus:product-bundle:productsList-changed-${handleSectionId}`,e=>{this.productsList=e.detail.productsBundle,document.dispatchEvent(new CustomEvent(`eurus:card-product-bundle:productsList-changed-${handleSectionId}`,{detail:{productsList:this.productsList}}))})}}))})}));
2//# sourceMappingURL=/cdn/shop/t/201/assets/product-bundle.js.map?v=64065332883259432831782713469

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.