1if(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"),this.enable_giftwrapping=document.querySelector("#enable_giftwrap"),this.giftwrap_form=document.querySelector(".product__gift-form"),this.enable_giftwrapping.addEventListener("change",this.addGiftWrapping.bind(this)),document.querySelector("#input_receiver").addEventListener("input",this.updateProps.bind(this)),document.querySelector("#input_from").addEventListener("input",this.updateProps.bind(this)),document.querySelector("#input_message").addEventListener("input",this.updateProps.bind(this)),document.querySelector("cart-drawer")&&this.submitButton.setAttribute("aria-haspopup","dialog"),this.hideErrors=this.dataset.hideErrors==="true",document.querySelector(".product-info__gift").addEventListener("click",e=>{e.preventDefault();const _fullDescription=document.querySelector(".product-info__buttons"),_scrollOffset=90,elementTop=_fullDescription.getBoundingClientRect().top+window.pageYOffset,scrollToPosition=Math.max(elementTop-_scrollOffset,0);window.scrollTo({top:scrollToPosition,behavior:"smooth"})})}addGiftWrapping(e){this.enable_giftwrapping.checked==!0?(this.giftwrap_form.classList.remove("hidden"),document.querySelector("#input_receiver").required=!0,document.querySelector("#input_from").required=!0,document.querySelector("#input_message").required=!0,this.form.insertAdjacentHTML("beforeend",` 2 <div class="product__gift-properties hidden"> 3 <input type="text" name="properties[Receiver Name]" id="receiver_name" placeholder="John Doe"> 4 <input type="text" name="properties[From Name]" id="from_name" placeholder="John Doe"> 5 <textarea name="properties[Message]" id="message" placeholder="Message"></textarea> 6 </div> 7 `)):(this.giftwrap_form.classList.add("hidden"),document.querySelector("#input_receiver").required=!1,document.querySelector("#input_from").required=!1,document.querySelector("#input_message").required=!1,this.form.querySelector(".product__gift-properties").remove(),this.form.querySelector(".gift-item").remove())}updateProps(e){e.target.id=="input_receiver"&&(document.querySelector('input[name="properties[Receiver Name]"').value=e.target.value),e.target.id=="input_from"&&(document.querySelector('input[name="properties[From Name]"').value=e.target.value),e.target.id=="input_message"&&(document.querySelector('textarea[name="properties[Message]"').value=e.target.value)}getID(items){return items[0].id}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");const config=fetchConfig("javascript");config.headers["X-Requested-With"]="XMLHttpRequest",delete config.headers["Content-Type"],this.enable_giftwrapping.checked==!0&&document.getElementsByName("id[]")[0].insertAdjacentHTML("afterend",` 8 <input 9 type="hidden" 10 name="id[]" 11 class="gift-item" 12 value="${this.enable_giftwrapping.dataset.id}" 13 > 14 `);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.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){window.location=window.routes.cart_url;return}this.error||publish(PUB_SUB_EVENTS.cartUpdate,{source:"product-form",productVariantId:formData.get("id"),cartData:response}),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(e=>{console.error(e)}).finally(()=>{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){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(".product-variant-id")}}),window.matchMedia("(max-width: 649px)").matches){const stickyTarget=document.querySelector(".product-info__sticky"),buttonTarget=document.querySelector(".product-info__buttons");let hasBeenVisible=!1;stickyTarget&&buttonTarget&&new IntersectionObserver(entries=>{if(entries[0].isIntersecting){hasBeenVisible=!0,stickyTarget.classList.remove("active"),document.querySelector("#gorgias-chat-container")?.classList.remove("hidden");return}hasBeenVisible&&(stickyTarget.classList.add("active"),document.querySelector("#gorgias-chat-container").classList.add("hidden"))},{threshold:.01}).observe(buttonTarget)} 15//# sourceMappingURL=/cdn/shop/t/9/assets/product-form.js.map?v=72008811680049089461784537529
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.