1const{getElement,getElements}=window.BAO.Utils,selectors={addToCart:"[data-product-add-to-cart]",addToCartText:"[data-product-add-to-cart-text]",fixedAddToCart:"[data-product-fixed-add-to-cart]",fixedMakeSelection:"[data-product-fixed-make-selection]",fixedPrice:"[data-product-fixed-price]",form:"[data-product-form]",orderDeadline:".prd-OrderDeadline",price:"[data-product-price]",productATCPanel:"[data-product-atc-panel]",productBISPanel:"[data-product-bis-panel]",productBISForm:'[data-product-bis-el="form"]',productBISSuccess:'[data-product-bis-el="success"]',productStockMessage:"[data-product-stock]",sku:"[data-product-sku]"};class Variant{constructor(data,element){this.data=data,this.element=element}render(){this.setAvailability(),this.setPrice(),this.updateInput(),this.updateStockMessage()}async setPrice(){await window.BAO.sectionRenderer.fetch("product-price",`${this.url.toString()}§ion_id=product-price`).then(res=>{const sectionHTML=window.BAO.sectionRenderer.getInnerHtml(res["product-price"]);getElements(selectors.price).forEach(el=>{el.innerHTML=sectionHTML})}),await window.BAO.sectionRenderer.fetch("product-price-fixed",`${this.url.toString()}§ion_id=product-price-fixed`).then(res=>{const sectionHTML=window.BAO.sectionRenderer.getInnerHtml(res["product-price-fixed"]);getElements(selectors.fixedPrice).forEach(el=>{el.innerHTML=sectionHTML})})}setAvailability(){getElements(selectors.addToCart).forEach(el=>el.disabled=!this.data.available),getElements(selectors.orderDeadline).forEach(el=>el.setAttribute("aria-hidden",!this.data.available));const hasSellingPlan=this.data?.selling_plan_allocations?.length>0;getElements(selectors.addToCartText).forEach(el=>{const addToCartText=hasSellingPlan?window.theme.strings.preOrder:window.theme.strings.addToCart,buttonText=this.data.available?addToCartText:window.theme.strings.soldOut;el.textContent=buttonText,el.setAttribute("data-text",buttonText)}),getElements(selectors.productATCPanel).forEach(el=>el.setAttribute("aria-hidden",!this.data.available)),getElements(selectors.productBISPanel).forEach(el=>el.setAttribute("aria-hidden",this.data.available)),getElements(selectors.productBISForm).forEach(el=>{el.setAttribute("data-variant-id",this.data.id),el.setAttribute("aria-hidden",!1)}),getElements(selectors.productBISSuccess).forEach(el=>el.setAttribute("aria-hidden",!0)),getElements(selectors.fixedAddToCart).forEach(el=>el.setAttribute("aria-hidden",!1)),getElements(selectors.fixedMakeSelection).forEach(el=>el.setAttribute("aria-hidden",!0))}updateInput(){getElements('form[action*="/cart/add"] [name="id"]').forEach(input=>{input.value=this.id,input.dispatchEvent(new Event("change",{bubbles:!0}))})}async updateStockMessage(){const stockElement=getElement(selectors.productStockMessage);stockElement?.dataset?.hasSellingPlan||await window.BAO.sectionRenderer.fetch("product-stock-message",`${this.url.toString()}§ion_id=product-stock-message`).then(res=>{const sectionHTML=window.BAO.sectionRenderer.getInnerHtml(res["product-stock-message"]);stockElement.innerHTML=sectionHTML})}updateIndicator(name,value){const sizeOptionEl=this.element.els.option.elements.find(el=>el.dataset.name.toLowerCase()==="size"),sizeOptionTextEl=sizeOptionEl.querySelector('[data-variant-radios-el="option-text"]');if(sizeOptionEl&&sizeOptionTextEl&&(sizeOptionTextEl.innerText=window.theme.strings.size,sizeOptionEl.classList.remove("prd-DetailVariants_Row-required")),!this.element.els["variant-indicator"]?.exists)return;const indicator=this.element.els["variant-indicator"].elements.find(el=>el.dataset.name===name);indicator&&(name.toLowerCase()==="size"?indicator.textContent=`: ${window.sizeStrings[value.toLowerCase()]?window.sizeStrings[value.toLowerCase()]:value}`:indicator.textContent=`: ${value}`)}setUrl(){window.history.replaceState({path:this.url.toString()},"",this.url.toString())}setShareUrl(){const shareButtons=getElements("share-button");shareButtons.length!==0&&shareButtons.forEach(shareButton=>{shareButton.updateUrl(this.url.toString())})}get id(){return this.data.id}get url(){const params=new URLSearchParams(window.location.search);params.set("variant",this.id.toString());const url=new URL(window.location.href);return url.search=params.toString(),url}}export class VariantOptions extends window.BAO.CustomElement(){static get requiredElements(){return["data","option","option-choice"]}constructor(){super(),this.collectedVariants=[new Variant(this.defaultVariant,this)]}setupListeners(){super.setupListeners(),this.onVariantChange=this.onVariantChange.bind(this),this.listeners.add(this,"change",this.onVariantChange),window.addEventListener("variant:reload",e=>{this.getVariant().render()})}onVariantChange(e){const variant=this.getVariant();if(variant.render(),variant.updateIndicator(e.target.name,e.target.dataset.value),!this.currentVariant){this.resetPage(variant);return}variant.setUrl(),variant.setShareUrl();
1const customEvent=new CustomEvent("variant:changed");window.dispatchEvent(customEvent)}resetPage(variant){window.history.replaceState({path:window.location.pathname},"",window.location.pathname)}createVariant(data){const variant=new Variant(data,this);return this.collectedVariants.push(variant),variant}getVariant(){if(!this.currentVariant)return this.collectedVariants[0];const existingVariant=this.collectedVariants.find(variant=>variant.id===this?.currentVariant?.id);return existingVariant||this.createVariant(this.currentVariant)}get selectedOptions(){return this.throwError("selectedOptions needs to be implemented on this class"),[]}get defaultVariant(){return this.data[0]}get currentVariant(){return this.data.find(variant=>variant.options.every((option,index)=>this.selectedOptions[index].value===option))}get data(){return JSON.parse(this.els.data.element.innerText)}}export class VariantRadios extends VariantOptions{get selectedOptions(){return this.els.option.elements.map(el=>{const{name}=el.dataset,choice=getElements(this.els["option-choice"].selector,{context:el}).find(el2=>el2.checked)?.value;return{label:name,value:choice}})}}export class VariantSelects extends VariantOptions{get selectedOptions(){return this.els.option.elements.map(el=>{const{name}=el.dataset;return{label:name,value:el.querySelector("select").value}})}}customElements.get("variant-radios")||customElements.define("variant-radios",VariantRadios),customElements.get("variant-selects")||customElements.define("variant-selects",VariantSelects); 2//# sourceMappingURL=/cdn/shop/t/475/assets/variants.js.map?v=135472589717652537951789644282
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.