1customElements.get("product-form")||customElements.define("product-form",class extends HTMLElement{constructor(){super(),this.form=this.querySelector("form"),this.variantIdInput&&(this.variantIdInput.disabled=!1),this.form.addEventListener("submit",this.onSubmitHandler.bind(this)),this.cart=document.querySelector("cart-notification")||document.querySelector("cart-drawer"),this.hideErrors=this.dataset.hideErrors==="true"}get submitButton(){return this.querySelector('[type="submit"]')}get submitButtonText(){return this.submitButton?.querySelector("span")}onSubmitHandler(evt){if(evt.preventDefault(),!this.submitButton||this.submitButton.getAttribute("aria-disabled")==="true")return;if(this.handleErrorMessage(),!this.variantIdInput?.value){console.log("[ATC:submit] blocked submit: missing variant id",{sectionId:this.dataset.sectionId,variantIdValue:this.variantIdInput?.value||null}),this.handleErrorMessage(window.variantStrings.unavailable);return}console.log("[ATC:submit] submitting add-to-cart",{sectionId:this.dataset.sectionId,variantIdValue:this.variantIdInput?.value}),this.submitButton.setAttribute("aria-disabled",!0),this.submitButton.classList.add("loading"),this.querySelector(".loading__spinner")?.classList.remove("hidden");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;const setUpsellHandle=!!formData.get("selling_plan")?null:this.dataset.setUpsellHandle,setUpsellPanelPromise=setUpsellHandle?this.fetchSetUpsellPanel(setUpsellHandle):null;fetch(`${routes.cart_add_url}`,config).then(response=>response.json()).then(response=>{if(response.status){console.log("[ATC:submit] cart add failed",{variantId:formData.get("id"),status:response.status,description:response.description,errors:response.errors}),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("aria-disabled",!0),this.submitButtonText?.classList.add("hidden"),soldOutMessage.classList.remove("hidden"),this.error=!0;return}else if(!this.cart){console.log("[ATC:submit] cart add success, redirecting to cart",{variantId:formData.get("id")}),window.location=window.routes.cart_url;return}if(console.log("[ATC:submit] cart add success",{variantId:formData.get("id")}),!this.error){const upsellContext=this.dataset.upsellContext;upsellContext&&window.S8Analytics?.trackUpsellAddToCart({context:upsellContext,listId:this.dataset.upsellListId,listName:this.dataset.upsellListName,items:[{item_id:response.id??response.variant_id,item_name:response.product_title,price:response.price,quantity:response.quantity}]})}this.error=!1;const quickAddModal=this.closest("quick-add-modal"),showCartAfterAdd=()=>{if(setUpsellPanelPromise){setUpsellPanelPromise.then(panelFragment=>{if(panelFragment){document.dispatchEvent(new CustomEvent("cart-set-upsell:show",{detail:{panel:panelFragment,addToCartResponse:response}}));return}response.sections?this.cart.renderContents(response):renderSections()});return}response.sections?this.cart.renderContents(response):renderSections()};quickAddModal?(document.body.addEventListener("modalClosed",()=>{setTimeout(showCartAfterAdd)},{once:!0}),quickAddModal.hide(!0)):showCartAfterAdd()}).catch(e=>{console.error(e)}).finally(()=>{this.submitButton&&(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"),this.querySelector(".loading__spinner")?.classList.add("hidden"))})}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)))}toggleSubmitButton(disable=!0,text){!this.submitButton||!this.submitButtonText||(disable?(this.submitButton.setAttribute("disabled","disabled"),text&&(this.submitButtonText.textContent=text)):(this.submitButton.removeAttribute("disabled"),this.submitButtonLabelTemplate?this.submitButtonText.innerHTML=this.submitButtonLabelTemplate.innerHTML.trim():this.submitButtonText.textContent=window.variantStrings.addToCart))}get variantIdInput(){return this.form.querySelector("[name=id]")}fetchSetUpsellPanel(handle){let rootUrl=window.routes?.root_url||"/";return rootUrl.endsWith("/")||(rootUrl+="/"),fetch(`${rootUrl}products/${handle}?section_id=cart-set-upsell`).then(response=>response.text()).then(html=>new DOMParser().parseFromString(html,"text/html").querySelector("[data-cart-set-upsell-content]")).catch(e=>(console.error(e),null))}});
1function renderSections(){const cartDrawer=document.querySelector("[js-main-cart-drawer]");cartDrawer&&fetch(`${window.location.origin}/?sections=cart-drawer,cart-icon-bubble`).then(res=>res.json()).then(data=>{if(data["cart-drawer"]){const newContent=new DOMParser().parseFromString(data["cart-drawer"],"text/html").querySelector("[js-main-cart-drawer]");if(newContent){cartDrawer.replaceWith(newContent);const drawer=document.querySelector("cart-drawer");drawer&&typeof drawer.open=="function"&&(drawer.open(),document.dispatchEvent(new CustomEvent("upsell-slider:init")))}}if(data["cart-icon-bubble"]){const newBubble=new DOMParser().parseFromString(data["cart-icon-bubble"],"text/html").querySelector(".shopify-section"),oldBubble=document.querySelector("[js-cart-icon-bubble]");newBubble&&oldBubble&&(oldBubble.innerHTML=newBubble.innerHTML)}}).catch(err=>console.error("Section render error:",err))} 2//# sourceMappingURL=/cdn/shop/t/135/assets/product-form.js.map?v=21944912268231203311789032442
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.