1customElements.get("product-form")||customElements.define("product-form",class extends HTMLElement{constructor(){super(),this.form=this.querySelector("form"),this.form.querySelector("[name=id]").disabled=!1,this.form.addEventListener("submit",this.onSubmitHandler.bind(this)),this.submitButton=this.querySelector('[type="submit"]'),this.stickyButton=document.querySelector("sticky-bar .js-product-add"),this.hideErrors=this.dataset.hideErrors==="true"}onSubmitHandler(evt){if(evt.preventDefault(),this.submitButton.getAttribute("disabled")==="true")return;this.handleErrorMessage(),this.submitButton.setAttribute("disabled",!0),this.submitButton.classList.add("loading"),this.stickyButton&&(this.stickyButton.setAttribute("disabled",!0),this.stickyButton.classList.add("loading"));const config=fetchConfig("javascript");config.headers["X-Requested-With"]="XMLHttpRequest",delete config.headers["Content-Type"];const formData2=new FormData(this.form);this.cart&&(formData2.append("sections",this.cart.getSectionsToRender().map(section=>section.id)),formData2.append("sections_url",window.location.pathname)),config.body=formData2;const giftItems=this.addFreeProducts(),itemsToAdd=[],additions=document.querySelectorAll(".js-product-addition");additions.length&&additions.forEach(addition=>{addition.checked&&itemsToAdd.push({id:addition.value,quantity:1})}),giftItems&&giftItems.forEach(gift=>{itemsToAdd.push({id:gift,quantity:1,properties:{_free_product:!0}})}),itemsToAdd.length?fetch(`${routes.cart_add_url}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({items:itemsToAdd})}).then(()=>{this.addMainProduct(config)}):this.addMainProduct(config)}addFreeProducts(){const giftsInput=this.querySelector(".js-gifts");return giftsInput?giftsInput.value.split(",").map(gift=>gift):void 0}addMainProduct(config){fetch(`${routes.cart_add_url}`,config).then(response=>response.json()).then(response=>{if(response.status){publish(PUB_SUB_EVENTS.cartError,{source:"product-form",productVariantId:formData.get("id"),errors:response.errors||response.description,message:response.message}),this.handleErrorMessage(response.description);const soldOutMessage=this.submitButton.querySelector(".sold-out-message");if(!soldOutMessage)return;this.submitButton.setAttribute("disabled",!0),this.submitButton.querySelector("span").classList.add("hidden"),soldOutMessage.classList.remove("hidden"),this.error=!0;return}this.error||publish(PUB_SUB_EVENTS.cartAdd),this.submitButton.classList.remove("loading"),this.submitButton.removeAttribute("disabled"),this.stickyButton&&(this.stickyButton.classList.remove("loading"),this.stickyButton.removeAttribute("disabled")),this.error=!1}).catch(e=>{console.error(e)}).finally(()=>{this.submitButton.classList.remove("loading"),this.stickyButton&&this.stickyButton.classList.remove("loading"),this.error||(this.submitButton.removeAttribute("disabled"),this.stickyButton&&this.stickyButton.removeAttribute("disabled"))})}handleErrorMessage(errorMessage=!1){this.hideErrors||(this.errorMessageWrapper=this.errorMessageWrapper||this.querySelector(".product-form__error-message-wrapper"),this.errorMessageWrapper&&(this.errorMessage=this.errorMessage||this.errorMessageWrapper.querySelector(".product-form__error-message"),this.errorMessageWrapper.toggleAttribute("hidden",!errorMessage),errorMessage&&(this.errorMessage.textContent=errorMessage)))}});class VariantSelects extends HTMLElement{constructor(){super(),this.addEventListener("change",this.onVariantChange)}onVariantChange(){this.updateOptions(),this.updateMasterId(),this.toggleAddButton(!0,null,!1),this.updatePickupAvailability(),this.removeErrorMessage(),this.updateVariantStatuses(),this.currentVariant?(this.updateURL(),this.updateVariantInput(),this.renderProductInfo(),this.updateShareUrl()):(this.toggleAddButton(!0,null,!0),this.setUnavailable())}updateOptions(){this.options=Array.from(this.querySelectorAll("select"),select=>select.value)}updateMasterId(){this.currentVariant=this.getVariantData().find(variant=>!variant.options.map((option,index)=>this.options[index]===option).includes(!1))}updateURL(){if(!this.currentVariant||this.dataset.updateUrl==="false")return;window.history.replaceState({},"",`${this.dataset.url}?variant=${this.currentVariant.id}`);let discountDifference=this.currentVariant.compare_at_price-this.currentVariant.price,percentageDiscount=Math.floor(discountDifference/this.currentVariant.compare_at_price*100);
1const variantChangeEvent=new CustomEvent("variant:change",{detail:{price:this.currentVariant.price,compare_at_price:this.currentVariant.compare_at_price,percentage_discount:percentageDiscount}});document.dispatchEvent(variantChangeEvent)}updateShareUrl(){const shareButton=document.getElementById(`Share-${this.dataset.section}`);!shareButton||!shareButton.updateUrl||shareButton.updateUrl(`${window.shopUrl}${this.dataset.url}?variant=${this.currentVariant.id}`)}updateVariantInput(){document.querySelectorAll(`#product-form-${this.dataset.section}, #product-form-installment-${this.dataset.section}`).forEach(productForm=>{const input=productForm.querySelector('input[name="id"]');input&&(input.value=this.currentVariant.id,input.dispatchEvent(new Event("change",{bubbles:!0})))})}updateVariantStatuses(){const selectedOptionOneVariants=this.variantData.filter(variant=>this.querySelector(":checked").value===variant.option1),inputWrappers=[...this.querySelectorAll(".product-form__input")];inputWrappers.forEach((option,index)=>{if(index===0)return;const optionInputs=[...option.querySelectorAll('input[type="radio"], option')],previousOptionSelected=inputWrappers[index-1].querySelector(":checked").value,availableOptionInputsValue=selectedOptionOneVariants.filter(variant=>variant.available&&variant[`option${index}`]===previousOptionSelected).map(variantOption=>variantOption[`option${index+1}`]);this.setInputAvailability(optionInputs,availableOptionInputsValue)})}setInputAvailability(listOfOptions,listOfAvailableOptions){listOfOptions.forEach(input=>{listOfAvailableOptions.includes(input.getAttribute("value"))?input.innerText=input.getAttribute("value"):input.innerText=window.variantStrings.unavailable_with_option.replace("[value]",input.getAttribute("value"))})}updatePickupAvailability(){const pickUpAvailability=document.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");productForm&&productForm.handleErrorMessage()}renderProductInfo(){const requestedVariantId=this.currentVariant.id,sectionId=this.dataset.originalSection?this.dataset.originalSection:this.dataset.section;fetch(`${this.dataset.url}?variant=${requestedVariantId}§ion_id=${this.dataset.originalSection?this.dataset.originalSection:this.dataset.section}`).then(response=>response.text()).then(responseText=>{if(this.currentVariant.id!==requestedVariantId)return;const html=new DOMParser().parseFromString(responseText,"text/html"),backgroundSource=html.getElementById(`MainProduct-${this.dataset.originalSection?this.dataset.originalSection:this.dataset.section}`),backgroundDestination=document.getElementById(`MainProduct-${this.dataset.section}`),destination=document.querySelectorAll(".js-product-price"),source=html.getElementById(`price-${this.dataset.originalSection?this.dataset.originalSection:this.dataset.section}`),skuSource=html.getElementById(`Sku-${this.dataset.originalSection?this.dataset.originalSection:this.dataset.section}`),skuDestination=document.getElementById(`Sku-${this.dataset.section}`),inventorySource=html.getElementById(`Inventory-${this.dataset.originalSection?this.dataset.originalSection:this.dataset.section}`),inventoryDestination=document.getElementById(`Inventory-${this.dataset.section}`),labelSource=html.getElementById(`ProductLabel-${this.dataset.originalSection?this.dataset.originalSection:this.dataset.section}`),labelDestination=document.querySelectorAll(".js-product-tag"),volumePricingSource=html.getElementById(`Volume-${this.dataset.originalSection?this.dataset.originalSection:this.dataset.section}`),pricePerItemDestination=document.getElementById(`Price-Per-Item-${this.dataset.section}`),pricePerItemSource=html.getElementById(`Price-Per-Item-${this.dataset.originalSection?this.dataset.originalSection:this.dataset.section}`),volumePricingDestination=document.getElementById(`Volume-${this.dataset.section}`),qtyRules=document.getElementById(`Quantity-Rules-${this.dataset.section}`),volumeNote=document.getElementById(`Volume-Note-${this.dataset.section}`),variantMediaDestination=document.getElementById(`product-media-section-${this.dataset.section}`),variantMediaSource=html.getElementById(`product-media-section-${this.dataset.section}`),preorderMessageSource=html.querySelector(".product-form__message"),preorderMessageDestination=document.querySelector(".product-form__message");if(volumeNote&&volumeNote.classList.remove("hidden"),volumePricingDestination&&volumePricingDestination.classList.remove("hidden"),qtyRules&&qtyRules.classList.remove("hidden"),source&&destination.length&&destination.forEach(el=>{el.innerHTML=source.innerHTML}),inventorySource&&inventoryDestination&&(inventoryDestination.innerHTML=inventorySource.innerHTML),labelSource&&labelDestination.length&&labelDestination.forEach(destination2=>{destination2.innerHTML=labelSource.innerHTML}),skuSource&&skuDestination&&(skuDestination.innerHTML=skuSource.innerHTML,skuDestination.classList.toggle("hidden",skuSource.classList.contains("hidden"))),preorderMessageSource&&preorderMessageDestination)preorderMessageDestination.innerHTML=preorderMessageSource.innerHTML,preorderMessageDestination.classList.remove("hidden");else if(preorderMessageDestination)preorderMessageDestination.classList.add("hidden");else if(preorderMessageSource){const newNode=document.createElement("div");newNode.classList.add("product-form__message"),newNode.innerHTML=preorderMessageSource.innerHTML,document.querySelector(".product__form-container form").insertBefore(newNode,document.querySelector(".product-form__actions"))}volumePricingSource&&volumePricingDestination&&(volumePricingDestination.innerHTML=volumePricingSource.innerHTML),pricePerItemSource&&pricePerItemDestination&&(pricePerItemDestination.innerHTML=pricePerItemSource.innerHTML,pricePerItemDestination.classList.toggle("hidden",pricePerItemSource.classList.contains("hidden")));const price=document.getElementById(`price-${this.dataset.section}`);price&&price.classList.remove("hidden"),inventoryDestination&&inventoryDestination.classList.toggle("hidden",inventorySource.innerText==="");const maxQuantityUpdated=html.querySelector(".product-form__buttons .quantity__input"),quantityInput=document.querySelector(".product-form__buttons .quantity__input");maxQuantityUpdated&&quantityInput&&(quantityInput.max=maxQuantityUpdated.max);const addButtonUpdated=html.querySelector(".product-form__submit"),addButtonText=addButtonUpdated?addButtonUpdated.querySelector("span:not(.loader)")?.innerHTML:null;this.toggleAddButton(addButtonUpdated?addButtonUpdated.hasAttribute("disabled"):!0,addButtonText),variantMediaDestination&&variantMediaSource&&(variantMediaDestination.innerHTML=variantMediaSource.innerHTML),backgroundSource&&backgroundDestination&&(backgroundDestination.style.background=backgroundSource.style.background),enableZoomOnHover(2),publish(PUB_SUB_EVENTS.variantChange,{data:{sectionId,html,variant:this.currentVariant}})})}toggleAddButton(disable=!0,text,modifyClass=!0){const formId=`product-form-${this.dataset.section}`,addButtons=document.querySelectorAll(`[name="add"][form="${formId}"], #${formId} [name="add"]`);addButtons.length&&addButtons.forEach(addButton=>{const addButtonText=addButton.querySelector("span:not(.loader)");addButtonText&&(disable?(addButton.setAttribute("disabled","disabled"),text&&(addButtonText.textContent=text)):(addButton.removeAttribute("disabled"),text?addButtonText.innerHTML=text:addButtonText.textContent=window.variantStrings.addToBag))})}setUnavailable(){const formId=`product-form-${this.dataset.section}`,addButtons=document.querySelectorAll(`[name="add"][form="${formId}"], #${formId} [name="add"]`),price=document.getElementById(`price-${this.dataset.section}`),inventory=document.getElementById(`Inventory-${this.dataset.section}`),sku=document.getElementById(`Sku-${this.dataset.section}`),pricePerItem=document.getElementById(`Price-Per-Item-${this.dataset.section}`),volumeNote=document.getElementById(`Volume-Note-${this.dataset.section}`),volumeTable=document.getElementById(`Volume-${this.dataset.section}`),qtyRules=document.getElementById(`Quantity-Rules-${this.dataset.section}`);addButtons.forEach(addButton=>{const addButtonText=addButton.querySelector("span:not(.loader)");addButtonText&&(addButtonText.textContent=window.variantStrings.unavailable,addButton.setAttribute("disabled","disabled"))}),price&&price.classList.add("hidden"),inventory&&inventory.classList.add("hidden"),sku&&sku.classList.add("hidden"),pricePerItem&&pricePerItem.classList.add("hidden"),volumeNote&&volumeNote.classList.add("hidden"),volumeTable&&volumeTable.classList.add("hidden"),qtyRules&&qtyRules.classList.add("hidden")}getVariantData(){return this.variantData=this.variantData||JSON.parse(this.querySelector('[type="application/json"]').textContent),this.variantData}}customElements.define("variant-selects",VariantSelects);class VariantRadios extends VariantSelects{constructor(){super()}setInputAvailability(listOfOptions,listOfAvailableOptions){listOfOptions.forEach(input=>{listOfAvailableOptions.includes(input.getAttribute("value"))?input.classList.remove("disabled"):input.classList.add("disabled")})}updateOptions(){const fieldsets=Array.from(this.querySelectorAll("fieldset"));this.options=fieldsets.map(fieldset=>Array.from(fieldset.querySelectorAll("input")).find(radio=>radio.checked).value)}}customElements.define("variant-radios",VariantRadios); 2//# sourceMappingURL=/cdn/shop/t/481/assets/product-form.js.map?v=181217124343760919071790091149
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.