1if(!customElements.get("product-form")){class ProductForm extends HTMLElement{constructor(){super(),this.hasChildNodes()&&this.init()}init(){this.form=this.querySelector(".js-product-form"),this.form&&(this.form.querySelector('[name="id"]').disabled=!1,this.cartDrawer=document.querySelector("cart-drawer"),this.submitBtn=this.querySelector('[name="add"]'),this.productSection=this.closest(".js-product"),this.productSection&&(this.productSection.addEventListener("on:variant:change",this.handleVariantChange.bind(this)),this.form.querySelector('[name="id"]').addEventListener("change",this.applyFreeInkQuantityLimit.bind(this)),this.applyFreeInkQuantityLimit()),theme.settings.afterAtc!=="no-js"&&this.form.addEventListener("submit",this.handleSubmit.bind(this)),this.initFreeInkButtonState())}applyFreeInkQuantityLimit(){const variantId=Number(this.form.querySelector('[name="id"]')?.value||0),limit=Number(window.freeInkVariantLimits&&window.freeInkVariantLimits[variantId]||0),quantityInput=this.form.querySelector('[name="quantity"]'),plusButton=this.form.querySelector('.qty-input__btn[name="plus"]');quantityInput&&(limit?(quantityInput.max=String(limit),Number(quantityInput.value||1)>limit&&(quantityInput.value=String(limit),quantityInput.dispatchEvent(new Event("change",{bubbles:!0}))),plusButton&&(plusButton.disabled=Number(quantityInput.value||1)>=limit)):(quantityInput.removeAttribute("max"),plusButton&&(plusButton.disabled=!1)))}handleVariantChange(){this.applyFreeInkQuantityLimit()}async initFreeInkButtonState(){const freeInkVariantId=Number(this.submitBtn?.dataset.freeInkVariantId||0),freeInkLimit=Number(this.submitBtn?.dataset.freeInkLimit||0);if(!(!freeInkVariantId||!freeInkLimit))try{const cartResponse=await fetch(`${theme.routes.cart}.js`);if(!cartResponse.ok)throw new Error(cartResponse.status);(await cartResponse.json()).items.filter(item=>Number(item.id||item.variant_id)===freeInkVariantId).reduce((quantity,item)=>quantity+item.quantity,0)>=freeInkLimit&&(this.submitBtn.disabled=!0,this.submitBtn.setAttribute("aria-disabled","true"),this.submitBtn.textContent=this.getFreeInkDisabledText(this.submitBtn))}catch(error){console.log(error)}}async handleSubmit(evt){if(evt.target.id==="product-signup_form"||(evt.preventDefault(),this.submitBtn.getAttribute("aria-disabled")==="true"))return;theme.settings.vibrateOnATC&&window.navigator.vibrate&&window.navigator.vibrate(100),this.errorMsg=null,this.setErrorMsgState(),this.submitBtn.setAttribute("aria-disabled","true"),this.submitBtn.classList.add("is-loading");const formData=new FormData(this.form);let sections="cart-icon-bubble";this.cartDrawer&&(sections+=`,${this.cartDrawer.closest(".shopify-section").id.replace("shopify-section-","")}`),formData.append("sections_url",window.location.pathname),formData.append("sections",sections);const fetchRequestOpts={method:"POST",headers:{Accept:"application/javascript","X-Requested-With":"XMLHttpRequest"},body:formData};try{const oldCartResponse=await fetch(`${theme.routes.cart}.js`);if(!oldCartResponse.ok)throw new Error(oldCartResponse.status);const oldCartData=await oldCartResponse.json(),buttonFreeInkVariantId=Number(this.submitBtn.dataset.freeInkVariantId||0),addVariantId=buttonFreeInkVariantId||Number(formData.get("id")||0),requestedQuantity=Number(formData.get("quantity")||1),freeInkLimit=Number(this.submitBtn.dataset.freeInkLimit||window.freeInkVariantLimits&&window.freeInkVariantLimits[addVariantId]||0);if(addVariantId&&freeInkLimit&&oldCartData.items.filter(item=>Number(item.id||item.variant_id)===addVariantId).reduce((quantity,item)=>quantity+item.quantity,0)+requestedQuantity>freeInkLimit){this.submitBtn.disabled=!0,this.submitBtn.setAttribute("aria-disabled","true"),this.submitBtn.textContent=this.getFreeInkDisabledText(this.submitBtn);return}const response=await fetch(theme.routes.cartAdd,fetchRequestOpts),data=await response.json();let error=typeof data.description=="string"?data.description:data.message;if(data.errors&&typeof data.errors=="object"&&(error=Object.entries(data.errors).map(item=>item[1].join(", "))),data.status&&this.setErrorMsgState(error),!response.ok)throw new Error(response.status);if(theme.settings.afterAtc==="page")setTimeout(()=>{window.location.href=theme.routes.cart},300);else{ProductForm.updateCartIcon(data);const quickAddDrawer=this.closest("quick-add-drawer");quickAddDrawer&&quickAddDrawer.addedToCart(),setTimeout(()=>{if(this.cartDrawer)this.cartDrawer.renderContents(data,!quickAddDrawer&&theme.settings.afterAtc==="drawer");else if(window.location.pathname===theme.routes.cart){const cartItems=document.querySelector("cart-items");cartItems&&(cartItems.dataset.empty==="true"?window.location.reload():cartItems.refresh())}},700)}const newCartResponse=await fetch(`${theme.routes.cart}.js`);if(!newCartResponse.ok)throw new Error(newCartResponse.status);const newCartData=await newCartResponse.json(),itemInOldCart=oldCartData.items.filter(item=>item.variant_id===data.variant_id)[0];itemInOldCart?this.dispatchEvent(new CustomEvent("on:line-item:change",{bubbles:!0,detail:{cart:newCartData,variantId:data.variant_id,oldQuantity:itemInOldCart.quantity,newQuantity:itemInOldCart.quantity===data.quantity?itemInOldCart.quantity:data.quantity}})):this.dispatchEvent(new CustomEvent("on:cart:add",{bubbles:!0,detail:{cart:newCartData,variantId:data.variant_id}}));const addedVariantId=Number(data.variant_id||addVariantId),addedFreeInkLimit=Number(this.submitBtn.dataset.freeInkLimit||window.freeInkVariantLimits&&window.freeInkVariantLimits[addedVariantId]||0);addedFreeInkLimit&&newCartData.items.filter(item=>Number(item.id||item.variant_id)===addedVariantId).reduce((quantity,item)=>quantity+item.quantity,0)>=addedFreeInkLimit&&(document.querySelectorAll(`[data-free-ink-variant-id="${addedVariantId}"]`).forEach(button=>{button.disabled=!0,button.setAttribute("aria-disabled","true"),button.textContent=this.getFreeInkDisabledText(button)}),(buttonFreeInkVariantId===addedVariantId||window.freeInkVariantLimits&&window.freeInkVariantLimits[addedVariantId])&&(this.submitBtn.disabled=!0,this.submitBtn.setAttribute("aria-disabled","true"),this.submitBtn.textContent=this.getFreeInkDisabledText(this.submitBtn)))}catch(error){console.log(error),this.dispatchEvent(new CustomEvent("on:cart:error",{bubbles:!0,detail:{error:this.errorMsg?.textContent}})),this.cartDrawer&&this.cartDrawer.refresh(!0)}finally{this.submitBtn.classList.add("is-success"),this.submitBtn.disabled||this.submitBtn.removeAttribute("aria-disabled"),setTimeout(()=>{this.submitBtn.classList.remove("is-loading"),this.submitBtn.classList.remove("is-success")},1400)}}static updateCartIcon(response){const cartIconBubble=document.getElementById("cart-icon-bubble");cartIconBubble&&(cartIconBubble.innerHTML=response.sections["cart-icon-bubble"])}setErrorMsgState(error=!1){this.errorMsg=this.errorMsg||this.querySelector(".js-form-error"),this.errorMsg&&(this.errorMsg.hidden=!error,error&&(this.errorMsg.innerHTML="",(Array.isArray(error)?error:[error]).forEac
1h((err,index)=>{index>0&&this.errorMsg.insertAdjacentHTML("beforeend","<br>"),this.errorMsg.insertAdjacentText("beforeend",err)})))}}customElements.define("product-form",ProductForm)} 2//# sourceMappingURL=/cdn/shop/t/8/assets/product-form.js.map?v=118965512544178752311791427179
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.