1(function(){if(customElements.get("product-form"))return;class ProductForm extends HTMLElement{constructor(){super(),this.initialized=!1,this.initializeWhenReady()}initializeWhenReady(){if(this.hasRequiredElements()){this.initializeForm();return}const observer=new MutationObserver((mutations,obs)=>{this.hasRequiredElements()&&(obs.disconnect(),this.initializeForm())});observer.observe(this,{childList:!0,subtree:!0}),setTimeout(()=>{observer.disconnect(),!this.initialized&&this.hasRequiredElements()&&this.initializeForm()},5e3)}hasRequiredElements(){const form=this.querySelector("form");return!!(form&&form.querySelector("[name=id]")&&this.querySelector('[type="submit"]'))}initializeForm(){this.form=this.querySelector("form");const idInput=this.form.querySelector("[name=id]");idInput&&(idInput.disabled=!1),this.form.addEventListener("submit",this.onSubmitHandler.bind(this)),this.cart=document.querySelector("cart-notification")||document.querySelector("cart-drawer"),this.submitButton=this.querySelector('[type="submit"]'),document.querySelector("cart-drawer")&&this.submitButton&&this.submitButton.setAttribute("aria-haspopup","dialog"),this.hideErrors=this.dataset.hideErrors==="true";const sectionEl=this.closest("[data-section]");this.sectionId=sectionEl?sectionEl.dataset.section:null,this.initialized=!0}getAddOnItems(){if(!this.sectionId||typeof window.getSelectedAddOnsForSection!="function")return[];try{return window.getSelectedAddOnsForSection(this.sectionId)||[]}catch{return[]}}validateQuantity(){const quantityInput=this.form.querySelector("[name=quantity]");if(!quantityInput)return!0;const value=parseInt(quantityInput.value,10),min=quantityInput.min?parseInt(quantityInput.min,10):null,max=quantityInput.max?parseInt(quantityInput.max,10):null,step=quantityInput.step?parseInt(quantityInput.step,10):1;let message="";return Number.isNaN(value)?message=window.accessibilityStrings?.quantityError||"Please enter a valid quantity.":min!==null&&value<min?message=(window.accessibilityStrings?.quantityMinimumError||"Minimum quantity is [quantity].").replace("[quantity]",min):max!==null&&value>max?message=(window.accessibilityStrings?.quantityMaximumError||"Maximum quantity is [quantity].").replace("[quantity]",max):step>1&&value%step!==0&&(message=(window.accessibilityStrings?.quantityStepError||"Quantity must be in increments of [quantity].").replace("[quantity]",step)),message?(this.clearQuantityErrorState(),quantityInput.setAttribute("aria-invalid","true"),this.handleErrorMessage(message,quantityInput),quantityInput.focus(),!1):(this.clearQuantityErrorState(),!0)}clearQuantityErrorState(){const quantityInput=this.form.querySelector("[name=quantity]");quantityInput&&(quantityInput.removeAttribute("aria-invalid"),quantityInput.removeAttribute("aria-describedby"))}onSubmitHandler(event){if(event.preventDefault(),this.submitButton.getAttribute("aria-disabled")==="true"||(this.handleErrorMessage(),this.clearQuantityErrorState(),!this.validateQuantity()))return;this.submitButton.setAttribute("aria-disabled","true"),this.submitButton.classList.add("loading");const spinner=this.querySelector(".loading-overlay__spinner");spinner&&spinner.classList.remove("hidden");const addOnItems=this.getAddOnItems();addOnItems.length?this.submitWithAddOns(addOnItems):this.submitWithoutAddOns()}submitWithoutAddOns(){const config=fetchConfig("javascript");config.headers["X-Requested-With"]="XMLHttpRequest",delete config.headers["Content-Type"];const formData=new FormData(this.form);this.cart&&(formData.append("sections",this.cart.getSectionsToRender().map(section=>section.id)),formData.append("sections_url",window.location.pathname),this.cart.setActiveElement(document.activeElement)),config.body=formData,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.description,message:response.message}),this.handleErrorMessage(response.description);const soldOutMessage=this.submitButton.querySelector(".sold-out-message");if(!soldOutMessage)return;this.submitButton.setAttribute("aria-disabled","true"),this.submitButton.querySelector("span").classList.add("hidden"),soldOutMessage.classList.remove("hidden"),this.error=!0;return}if(!this.cart){window.location=window.routes.cart_url;return}this.error||publish(PUB_SUB_EVENTS.cartUpdate,{source:"product-form",productVariantId:formData.get("id")}),this.error=!1;const quickAddModal=this.closest("quick-add-modal");quickAddModal?(document.body.addEventListener("modalClosed",()=>{setTimeout(()=>{this.cart.renderContents(response)})},{once:!0}),quickAddModal.hide(!0)):this.cart.renderContents(response)}).catch(()=>{this.error=!0,this.handleErrorMessage(window.accessibilityStrings?.networkError||"Something went wrong. Please try again.")}).finally(()=>{this.finalizeSubmit()})}submitWithAddOns(addOnItems){const config=fetchConfig("javascript");delete config.headers.Accepts;const mainVariantId=parseInt(this.form.querySelector("[name=id]").value,10),quantityInput=this.form.querySelector("[name=quantity]"),mainQuantity=quantityInput&&parseInt(quantityInput.value,10)||1,items=[{id:mainVariantId,quantity:mainQuantity}].concat(addOnItems),payload={sections:this.cart?this.cart.getSectionsToRender().map(section=>section.id).join():void 0,sections_url:window.location.pathname,items};config.body=JSON.stringify(payload),fetch(`${routes.cart_add_url}.js`,config).then(response=>response.json()).then(response=>{if(response.status){this.handleErrorMessage(response.description);const soldOutMessage=this.submitButton.querySelector(".sold-out-message");if(!soldOutMessage)return;this.submitButton.setAttribute("aria-disabled","true"),this.submitButton.querySelector("span").classList.add("hidden"),soldOutMessage.classList.remove("hidden"),this.error=!0;return}if(!this.cart){window.location=window.routes.cart_url;return}this.error=this.error||!1;const quickAddModal=this.closest("quick-add-modal");quickAddModal?(document.body.addEventListener("modalClosed",()=>{setTimeout(()=>{this.cart.renderContents(response)})},{once:!0}),quickAddModal.hide(!0)):this.cart.renderContents(response)}).catch(()=>{this.error=!0,this.handleErrorMessage(window.accessibilityStrings?.networkError||"Something went wrong. Please try again.")}).finally(()=>{this.finalizeSubmit()})}finalizeSubmit(){this.submitButton.classList.remove("loading"),this.cart&&this.cart.classList.contains("is-empty")&&this.cart.classList.remove("is-empty"),this.error||this.submitButton.removeAttribute("aria-disabled");const spinner=this.querySelector(".loading-overlay__spinner");spinner&&spinner.classList.add("hidden")}handleErrorMessage(message=!1,describedByTarget=null){!this.initialized||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.id||(this.errorMessageWrapper.id=`ProductForm-error-${this.sectionId||"default"}`),this.errorMessageWrapper.toggleAttribute("hidden",!message),this.submitButton&&this.submitButton.removeAttribute("aria-describedby"),message?(this.errorMessage.textContent=message,this.errorMessageWrapper.setAttribute("tabindex","-1"),describedByTarget?describedByTarget.setAttribute("aria-describedby",this.errorMessageWrapper.id):this.submitButton&&(this.submitButton.setAttribute("aria-describedby",this.errorMessageWrapper.id),this.errorMessageWrapper.focu
1s())):(this.errorMessage.textContent="",this.errorMessageWrapper.removeAttribute("tabindex"))))}}customElements.define("product-form",ProductForm)})(); 2//# sourceMappingURL=/cdn/shop/t/199/assets/product-form.js.map?v=175419987885601198131787597193
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.