1customElements.get("product-form")||customElements.define("product-form",class extends HTMLElement{constructor(){super(),this.form=this.querySelector("form"),this.form.querySelector("[name=id]").disabled=!1,this.stickyWidget=this.querySelector(".product-form__buttons"),this.footer=document.querySelector("footer.footer"),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.optionsToggle=this.querySelector(".js-options-toggle"),this.lookbookProductInfos=document.querySelectorAll(".lookbook-inner__slider .swiper-slide"),document.querySelector("cart-drawer")&&this.submitButton.setAttribute("aria-haspopup","dialog"),window.addEventListener("scroll",this.updateFooterMargin.bind(this)),window.addEventListener("load",this.updateFooterMargin.bind(this)),window.addEventListener("resize",this.updateFooterMargin.bind(this)),this.expandOptions()}expandOptions(){if(this.optionsToggle!=null){const textOpen=this.optionsToggle.dataset.open,textClose=this.optionsToggle.dataset.close;this.optionsToggle.addEventListener("click",event=>{event.preventDefault();const productItem=this.closest(".product-item--add");if(productItem!=null){const productVariants=productItem.querySelector(".product-item__variants"),productItemInfo=productItem.querySelector(".lookbook_product_info .product-item__info"),productSizes=productItem.querySelectorAll(".product-form__input--size .product-form__input-inner input");if(this.lookbookProductInfos&&this.lookbookProductInfos.forEach(function(lookbookProductInfo){lookbookProductInfo.querySelector(".lookbook_product_info .product-item__info").classList.remove("open"),lookbookProductInfo.querySelector(".lookbook_product_info .js-options-toggle").classList.remove("hidden"),document.querySelector("body").classList.remove("overflow_hidden")}),productSizes.length>1)productVariants!=null&&(productVariants.classList.toggle("open"),productItemInfo&&(productItemInfo.classList.add("open"),window.matchMedia("(max-width: 989px)").matches?(this.optionsToggle.classList.remove("hidden"),document.querySelector(".lookbook-inner__slider .product_info_mobile.open .error_message").innerHTML="select size"):this.optionsToggle.classList.add("hidden")),productVariants.classList.contains("open")?this.optionsToggle.textContent=textOpen:this.optionsToggle.textContent=textClose);else if(productSizes.length==1){const productSizeFirst=productItem.querySelector(".product-form__input--size .product-form__input-inner input");productSizeFirst.checked=!0,this.closest(".product-item--add")&&setTimeout(()=>{this.triggerSingleVariantAddToCart()},1e3)}}})}}async 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");const productElements=this.querySelectorAll(".product-entry"),products=[];for(const productElement of productElements){const id=productElement.querySelector("[name=id]").value;let quantity=1,properties={};productElement.querySelector("[data-cart-quantity]")&&(quantity=parseInt(productElement.querySelector("[data-cart-quantity]").value,10));const propertyInputs=productElement.querySelectorAll(".property");for(const propertyInput of propertyInputs){const propName=propertyInput.dataset.propertyName,propValue=propertyInput.value;properties[propName]=propValue}products.push({id,quantity:quantity||0,properties})}await Promise.all(products.map(product=>window.theme.addToCart(product))).then(results=>{let hasError=!1;for(const result of results)if(result.error){this.handleErrorMessage(result.error),hasError=!0;break}if(results.some(item=>!item.error)){const closeBtn=document.querySelector(".mini-cart-close-icon");closeBtn&&closeBtn.click()}if(!hasError){const quickAddModal=this.closest("quick-add-modal");quickAddModal&&quickAddModal.hide(!0)}}).finally(()=>{this.submitButton.closest(".modal-addons")?(this.submitButton.classList.remove("loading"),this.submitButton.classList.add("checkmark")):(this.submitButton.classList.remove("loading"),this.submitButton.removeAttribute("aria-disabled"))})}handleErrorMessage(errorMessage=!1){if(this.errorMessageWrapper=this.errorMessageWrapper||this.querySelector(".product-form__error-message-wrapper"),!this.errorMessageWrapper)return;this.errorMessage=this.errorMessage||this.errorMessageWrapper.querySelector(".product-form__error-message"),this.errorMessageWrapper.toggleAttribute("hidden",!errorMessage);let parentElem=this.closest("product-info"),sizesElem=parentElem.querySelector("variant-radios fieldset.product-form__input--size");function isElementInViewport(el){const rect=el.getBoundingClientRect();return rect.top>=0&&rect.left>=0&&rect.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&rect.right<=(window.innerWidth||document.documentElement.clientWidth)}if(errorMessage)if(errorMessage=="Invalid item ID"){if(parentElem.classList.remove("variantIsSelected"),this.errorMessage.textContent="Please select a size",!sizesElem)return;sizesElem.classList.add("selectInputOption"),sizesElem.classList.add("no-size-is-selected");const offsetPosition=sizesElem.getBoundingClientRect().top+window.scrollY-100;isElementInViewport(sizesElem)||window.scrollTo({top:offsetPosition,behavior:"smooth"})}else parentElem.classList.add("variantIsSelected"),this.errorMessage.textContent=errorMessage;else parentElem.classList.add("variantIsSelected"),sizesElem?.classList.remove("selectInputOption"),sizesElem?.classList.remove("no-size-is-selected")}calculateStickyWidget(){return this.stickyWidget!=null?this.stickyWidget.offsetHeight:0}updateFooterMargin(){requestAnimationFrame(()=>{const currentWidgetHeight=this.calculateStickyWidget();this.footer.style.marginBottom=`${currentWidgetHeight}px`})}triggerSingleVariantAddToCart(){const addToCartButton=this.closest(".product-item--add").querySelector('button[name="add"]');addToCartButton!=null&&setTimeout(function(){addToCartButton.click()},10)}});class CompleteLookSizeHandler{constructor(){this.init()}init(){this.bindEvents(),this.updateAllButtonTexts()}bindEvents(){document.addEventListener("variant-change",event=>{setTimeout(()=>this.updateAllButtonTexts(),50)}),document.addEventListener("click",event=>{this.isSizeOptionEvent(event)&&setTimeout(()=>this.updateAllButtonTexts(),100)}),document.addEventListener("change",event=>{this.isSizeChangeEvent(event)&&setTimeout(()=>this.updateAllButtonTexts(),50)})}isSizeOptionEvent(event){return event.target.closest(".product-form__input--size")||event.target.closest('[data-option-name*="Size"]')||event.target.closest('[data-option-name*="size"]')||event.target.closest('fieldset[data-option-name="size"]')}isSizeChangeEvent(event){return event.target.name&&event.target.name.includes("Size")||event.target.closest('fieldset[data-option-name="size"]')}updateAllButtonTexts(){document.querySelectorAll(".product-form__submit").forEach((button,index)=>{button.classList.contains("no_size_option")&&this.updateButtonText(button,index)})}updateButtonText(button,index){const form=button.closest("form"),productItem=button.closest(".product-item");if(!form||!productItem)return;const sizeSelected=productItem.querySelectorAll('input[name*="Size"]:checked').length>0,buttonSpan=button.querySelector("span");buttonSpan&&(sizeSelected?(buttonSpan.textContent="Add to Bag",button.classList.remove("no_size_option"),button.classList.add("bg-color")):(buttonSpan.textContent="Select a Size",button.classList.add("no_size_option"),button.classList.remove("bg-color")))}}document.addEventListener("DOMContentLoaded",()=>{new CompleteLookSizeHandler}); 2//# sourceMappingURL=/cdn/shop/t/1106/assets/product-form.js.map?v=133976964707892755571790351885
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.