1let stickyAtcButton=document.querySelector(".product-form__buttons.sticky-container button");customElements.get("product-form")||customElements.define("product-form",class extends HTMLElement{constructor(){super(),this.form=this.querySelector("form"),this.variantIdInput.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"]'),this.submitButtonText=this.submitButton.querySelector("span"),document.querySelector("cart-drawer")&&this.submitButton.setAttribute("aria-haspopup","dialog"),this.hideErrors=this.dataset.hideErrors==="true"}onSubmitHandler(evt){if(evt.preventDefault(),this.submitButton.getAttribute("aria-disabled")==="true")return;this.handleErrorMessage(),this.submitButton.setAttribute("aria-disabled",!0),this.submitButton.classList.add("loading"),this.querySelector(".loading__spinner").classList.remove("hidden"),stickyAtcButton&&(stickyAtcButton.setAttribute("aria-disabled",!0),stickyAtcButton.classList.add("loading"),stickyAtcButton.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,fetch(`${routes.cart_add_url}`,config).then(response=>response.json()).then(async response=>{if(response.status){if(publish(PUB_SUB_EVENTS.cartError,{source:"product-form",productVariantId:formData.get("id"),errors:response.errors||response.description,message:response.message}),this.handleErrorMessage(response.description),console.log(response.status),console.log("testb dhbf"),response.status==422){const cart=await(await fetch("/cart.js")).json(),variantId=Number(formData.get("id")),line=cart.items.findIndex(item=>Number(item.variant_id)===variantId)+1,sections=await(await fetch("/cart?sections=cart-drawer,cart-icon-bubble")).json(),cartDrawer=document.querySelector("cart-drawer");cartDrawer&&cartDrawer.renderContents&&cartDrawer.renderContents({sections,sections_url:window.location.pathname}),line>0&&setTimeout(()=>{const lineItemError=document.getElementById(`Line-item-error-${line}`)||document.getElementById(`CartDrawer-LineItemError-${line}`);if(lineItemError){const errorText=lineItemError.querySelector(".cart-item__error-text");errorText&&(errorText.textContent=response.description||response.message||"Unable to add more of this item.")}},100)}return}else if(!this.cart){window.location=window.routes.cart_url;return}try{window.dataLayer=window.dataLayer||[];const addedVariantId=Number(formData.get("id")),addedQuantity=Number(formData.get("quantity"))||1;addedVariantId&&addedQuantity>0&&fetch("/cart.js").then(cartResponse=>{if(!cartResponse.ok)throw new Error(`Cart request failed: ${cartResponse.status}`);return cartResponse.json()}).then(cart=>{const addedItem=cart.items.find(item=>Number(item.variant_id)===addedVariantId);if(!addedItem){console.warn("[GA4] Unable to find added variant in cart:",addedVariantId);return}const currency=cart.currency||window.Shopify?.currency?.active||"CAD",price=Number(addedItem.final_price||0)/100,value=price*addedQuantity;window.dataLayer.push({ecommerce:null}),window.dataLayer.push({event:"add_to_cart",ecommerce:{currency,value,items:[{item_id:String(addedItem.variant_id),item_name:String(addedItem.product_title||"").trim(),price,quantity:addedQuantity}]}}),console.log("[GA4] add_to_cart pushed:",{event:"add_to_cart",ecommerce:{currency,value,items:[{item_id:String(addedItem.variant_id),item_name:String(addedItem.product_title||"").trim(),price,quantity:addedQuantity}]}})}).catch(error=>{console.error("[GA4] add_to_cart tracking error:",error)})}catch(error){console.error("[GA4] add_to_cart tracking error:",error)}const startMarker=CartPerformance.createStartingMarker("add:wait-for-subscribers");this.error||publish(PUB_SUB_EVENTS.cartUpdate,{source:"product-form",productVariantId:formData.get("id"),cartData:response}).then(()=>{CartPerformance.measureFromMarker("add:wait-for-subscribers",startMarker)}),this.error=!1;const quickAddModal=this.closest("quick-add-modal");quickAddModal?(document.body.addEventListener("modalClosed",()=>{setTimeout(()=>{CartPerformance.measure("add:paint-updated-sections",()=>{this.cart.renderContents(response)})})},{once:!0}),quickAddModal.hide(!0)):CartPerformance.measure("add:paint-updated-sections",()=>{this.cart.renderContents(response)})}).catch(e=>{console.error(e)}).finally(()=>
1{if(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"),stickyAtcButton){stickyAtcButton.removeAttribute("aria-disabled"),stickyAtcButton.classList.remove("loading");const stickySpinner=stickyAtcButton.querySelector(".loading__spinner");stickySpinner&&stickySpinner.classList.add("hidden")}CartPerformance.measureFromEvent("add:user-action",evt)})}handleErrorMessage(errorMessage=!1){this.hideErrors||(this.errorMessageWrapper=this.errorMessageWrapper||this.querySelector(".product-form__error-message-wrapper")||document.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){disable?(this.submitButton.setAttribute("disabled","disabled"),text&&(this.submitButtonText.textContent=text)):(this.submitButton.removeAttribute("disabled"),this.submitButtonText.textContent=window.variantStrings.addToCart)}get variantIdInput(){return this.form.querySelector("[name=id]")}}); 2//# sourceMappingURL=/cdn/shop/t/79/assets/product-form.js.map?v=89841066176668487451790767922
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.