1if(!customElements.get("variant-picker")){const{getVariantFromOptionArray}=window.FoxTheme.ProductHelper;class VariantPicker extends HTMLElement{constructor(){super(),this.selectors={container:"[data-variant-picker]",variantIdInput:'input[name="id"]',pickerFields:["[data-picker-field]"],optionNodes:[".variant-picker__option"],productSku:"[data-product-sku]",productAvailability:"[data-product-availability]",shareUrlInput:"[data-share-url]"},this.container=this.closest(this.selectors.container),this.domNodes=queryDomNodes(this.selectors,this.container),this.setupData(),this.initOptionSwatches(),this.addEventListener("change",this.onVariantChange)}async setupData(){this.productId=this.container.dataset.productId,this.sectionId=this.container.dataset.section,this.productUrl=this.container.dataset.productUrl,this.productHandle=this.container.dataset.productHandle,this.section=this.container.closest(`[data-section-id="${this.sectionId}"]`),this.variantData=this.getVariantData(),this.productData=await this.getProductJson(this.productUrl);const selectedVariantId=this.section&&this.section.querySelector(this.selectors.variantIdInput).value;this.currentVariant=this.variantData.find(variant=>variant.id===Number(selectedVariantId)),this.currentVariant&&this.hideSoldOutAndUnavailableOptions()}
1onVariantChange(){this.getSelectedOptions(),this.getSelectedVariant(),this.updateButton(!0,"",!1),this.updatePickupAvailability(),this.removeErrorMessage(),this.currentVariant?(this.updateMedia(),this.updateBrowserHistory(),this.updateVariantInput(),this.updateProductMeta(),this.updatePrice(),this.updateShareUrl(),this.updateButton(!this.currentVariant.available,window.FoxThemeStrings.soldOut),this.hideSoldOutAndUnavailableOptions()):(this.updateButton(!0,"",!0),this.setUnavailable()),window.FoxThemeEvents.emit(`${this.productId}__VARIANT_CHANGE`,this.currentVariant,this)}getProductJson(productUrl){return fetch(productUrl+".js").then(function(response){return response.json()})}getSelectedVariant(){let variant=getVariantFromOptionArray(this.productData,this.options),options=[...this.options];variant||(options.pop(),variant=getVariantFromOptionArray(this.productData,options),variant||(options.pop(),variant=getVariantFromOptionArray(this.productData,options)),variant&&variant.options&&(this.options=[...variant.options]),this.updateSelectedOptions()),this.currentVariant=variant}getSelectedOptions(){const pickerFields=Array.from(this.querySelectorAll("[data-picker-field]"));this.options=pickerFields.map(field=>field.dataset.pickerField==="radio"?Array.from(field.querySelectorAll("input")).find(radio=>radio.checked).value:field.querySelector("select")&&field.querySelector("select").value)}updateSelectedOptions(){this.domNodes.pickerFields.forEach((field,index)=>{if(field.dataset.selectedValue!==this.options[index]){const selectedOption=field.querySelector(`input[value="${this.options[index]}"]`);selectedOption&&(selectedOption.checked=!0,field.updateSelectedValue())}})}updateMedia(){if(!this.currentVariant||!this.currentVariant.featured_media)return;const mediaGallery=this.section.querySelector("media-gallery");mediaGallery&&mediaGallery.setActiveMedia(this.currentVariant.featured_media.id)}updateBrowserHistory(){!this.currentVariant||this.dataset.updateUrl==="false"||window.history.replaceState({},"",`${this.productUrl}?variant=${this.currentVariant.id}`)}updateShareUrl(){const url=`${window.location.origin}${this.productUrl}?variant=${this.currentVariant.id}`,shareUrlInput=document.querySelectorAll(this.selectors.shareUrlInput);shareUrlInput&&shareUrlInput.forEach(input=>input.setAttribute("value",url))}updateVariantInput(){document.querySelectorAll(`#product-form-${this.sectionId}, #product-form-installment`).forEach(productForm=>{const variantIdInput=productForm.querySelector(this.selectors.variantIdInput);variantIdInput.value=this.currentVariant.id,variantIdInput.dispatchEvent(new Event("change",{bubbles:!0}))})}updatePickupAvailability(){const pickUpAvailability=this.section&&this.section.querySelector("pickup-availability");pickUpAvailability&&(this.currentVariant&&this.currentVariant.available?pickUpAvailability.fetchAvailability(this.currentVariant.id):(pickUpAvailability.removeAttribute("available"),pickUpAvailability.innerHTML=""))}removeErrorMessage(){const section=this.closest("section");if(!section)return;const productForm=section.querySelector("product-form")}updatePrice(){const classes={onSale:"f-price--on-sale",soldOut:"f-price--sold-out"},selectors={priceWrapper:".f-price",salePrice:".f-price-item--sale",compareAtPrice:[".f-price-item--regular"],unitPrice:".f-price__unit",saleBadge:".f-price__badge-sale",saleAmount:"[data-sale-value]"},money_format=window.FoxThemeSettings.money_format,{priceWrapper,salePrice,unitPrice,compareAtPrice,saleBadge,saleAmount}=queryDomNodes(selectors,this.section),{compare_at_price,price,unit_price_measurement}=this.currentVariant,onSale=compare_at_price&&compare_at_price>price,soldOut=!this.currentVariant.available;if(onSale?priceWrapper.classList.add(classes.onSale):priceWrapper.classList.remove(classes.onSale),soldOut?priceWrapper.classList.add(classes.soldOut):priceWrapper.classList.remove(classes.soldOut),priceWrapper&&priceWrapper.classList.remove("visibility-hidden"),salePrice&&(salePrice.innerHTML=formatMoney(price,money_format)),compareAtPrice&&compareAtPrice.length&&compare_at_price>price?compareAtPrice.forEach(item=>item.innerHTML=formatMoney(compare_at_price,money_format)):compareAtPrice.forEach(item=>item.innerHTML=formatMoney(price,money_format)),saleBadge&&compare_at_price>price){const type=saleBadge.dataset.type;if(type==="text")return;let value;if(type==="percentage"){const saving=(compare_at_price-price)*100/compare_at_price;value=Math.round(saving)+"%"}type==="fixed_amount"&&(value=formatMoney(compare_at_price-price,money_format)),saleAmount.textContent=value}if(unit_price_measurement&&unitPrice){unitPrice.classList.remove("f-hidden");const unitPriceContent=`<span>${formatMoney(this.currentVariant.unit_price,money_format)}</span>/<span data-unit-price-base-unit>${this._getBaseUnit()}</span>`;unitPrice.innerHTML=unitPriceContent}else unitPrice.classList.add("f-hidden")}_getBaseUnit(){return this.currentVariant.unit_price_measurement.reference_value===1?this.currentVariant.unit_price_measurement.reference_unit:this.currentVariant.unit_price_measurement.reference_value+this.currentVariant.unit_price_measurement.reference_unit}updateButton(disable=!0,text,modifyClass=!0){const productForm=d
1ocument.getElementById(`product-form-${this.sectionId}`);if(!productForm)return;const addButton=productForm.querySelector('[name="add"]'),addButtonText=productForm.querySelector('[name="add"] > span:not(.f-icon)');addButton&&(disable?(addButton.setAttribute("disabled","disabled"),text&&(addButtonText.textContent=text)):(addButton.removeAttribute("disabled"),addButtonText.textContent=window.FoxThemeStrings.addToCart))}updateProductMeta(){const{available,sku,noSku}=this.currentVariant,{inStock,outOfStock}=window.FoxThemeStrings,productAvailability=this.section&&this.section.querySelector(this.selectors.productAvailability),productSku=this.section&&this.section.querySelector(this.selectors.productSku);productSku&&(sku?productSku.textContent=sku:productSku.textContent=noSku),productAvailability&&(available?(productAvailability.textContent=inStock,productAvailability.classList.remove("out-of-stock")):(productAvailability.textContent=outOfStock,productAvailability.classList.add("out-of-stock")))}setUnavailable(){const button=document.getElementById(`product-form-${this.sectionId}`),addButton=button.querySelector('[name="add"]'),addButtonText=button.querySelector('[name="add"] > span:not(.f-icon)'),priceWrapper=this.section.querySelector(".f-price");addButton&&(addButtonText.textContent=window.FoxThemeStrings.unavailable,priceWrapper&&priceWrapper.classList.add("visibility-hidden"))}hideSoldOutAndUnavailableOptions(){const classes={soldOut:"variant-picker__option--soldout",unavailable:"variant-picker__option--unavailable"},variant=this.currentVariant,{optionNodes}=this.domNodes,{productData,productData:{variants,options:{length:maxOptions}}}=this;optionNodes.forEach(optNode=>{const{optionPosition,value}=optNode.dataset,optPos=Number(optionPosition),isSelectOption=optNode.tagName==="OPTION";let matchVariants=[];if(optPos===maxOptions){const optionsArray=Array.from(variant.options);optionsArray[maxOptions-1]=value,matchVariants.push(getVariantFromOptionArray(productData,optionsArray))}else matchVariants=variants.filter(v=>v.options[optPos-1]===value&&v.options[optPos-2]===variant[`option${optPos-1}`]);if(matchVariants=matchVariants.filter(Boolean),matchVariants.length){optNode.classList.remove(classes.unavailable),isSelectOption&&optNode.removeAttribute("disabled");const method=matchVariants.every(v=>v.available===!1)?"add":"remove";optNode.classList[method](classes.soldOut)}else optNode.classList.add(classes.unavailable),isSelectOption&&optNode.setAttribute("disabled","true")})}getVariantData(){return this.variantData=this.variantData||JSON.parse(this.container.querySelector('[type="application/json"]').textContent),this.variantData}initOptionSwatches(){const{colorSwatches=[]}=window.FoxThemeSettings;this.domNodes.optionNodes.forEach(optNode=>{let variantImage;const{optionPosition,value,fallbackValue,optionType,hasCustomImage}=optNode.dataset;if(optionType==="color"){const variant=this.variantData.find(v=>v[`option${optionPosition}`]&&v[`option${optionPosition}`].toLowerCase()===value.toLowerCase()),check=colorSwatches.find(c=>c.key.toLowerCase()===value.toLowerCase()),customColor=check?check.value:"";return variant&&optionType==="color"&&hasCustomImage!=="true"&&(variantImage=variant.featured_image?variant.featured_image.src:"",variantImage&&!customColor&&(optNode.querySelector("label").style=`background-image: url(${getSizedImageUrl(variantImage,"60x")}) !important;`)),customColor&&optNode.style.setProperty("--option-color",`${customColor}`),!customColor&&!variantImage&&optNode.style.setProperty("--option-color",`${fallbackValue}`),!1}})}}customElements.define("variant-picker",VariantPicker)}if(!customElements.get("variant-button")){class VariantButton extends HTMLElement{constructor(){super(),this.selectedSpan=this.querySelector(".selected-value"),this.addEventListener("change",this.updateSelectedValue)}updateSelectedValue(){this.value=Array.from(this.querySelectorAll("input")).find(radio=>radio.checked).value,this.setAttribute("data-selected-value",this.value),this.selectedSpan&&(this.selectedSpan.textContent=this.value)}}if(customElements.define("variant-button",VariantButton),!customElements.get("variant-select")){class VariantSelect extends VariantButton{constructor(){super()}updateSelectedValue(){this.value=this.querySelector("select").value,this.setAttribute("data-selected-value",this.value),this.selectedSpan&&(this.selectedSpan.textContent=this.value)}}customElements.define("variant-select",VariantSelect)}
1if(!customElements.get("variant-image")){class VariantImage extends VariantButton{constructor(){super()}}customElements.define("variant-image",VariantImage)}if(!customElements.get("variant-color")){class VariantColor extends VariantButton{constructor(){super()}}customElements.define("variant-color",VariantColor)}} 2//# sourceMappingURL=/cdn/shop/t/3/assets/variants-picker.js.map?v=164379945347276210201708274622
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.