PageSourceSearch

https://www.dotandkey.com/cdn/shop/t/2264/assets/product-form.js?v=143006224567380094841789369139

js dotandkey.com collected 2026-10-01 00:53:42 UTC 6,352 bytes, 2 lines download raw bytes

1class ProductForm extends HTMLElement{connectedCallback(){this.form=this.querySelector("[data-product-form]"),this.form&&(this.variantInput=this.form.querySelector('input[name="id"]'),this.variantInput&&(this.variantInput.disabled=!1),this.submitButton=this.form.querySelector('[type="submit"]'),this.submitButton&&this.submitButton.setAttribute("aria-haspopup","dialog"),this.cartDrawer=document.querySelector("cart-drawer"),this.errorContainer=this.querySelector("[data-form-error]"),this.form.addEventListener("submit",evt=>this._onSubmitHandler(evt)),this._initVariantSubscriber())}disconnectedCallback(){this.unsubscribeVariant?.()}_initVariantSubscriber(){typeof subscribe>"u"||this.hasAttribute("data-skip-variant-sync")||(this.unsubscribeVariant=subscribe(PUB_SUB_EVENTS.variantChange,data=>{if(data.productId!==this.dataset.productId)return;const variantInput=this.form.querySelector('input[name="id"]'),buttonText=this.submitButton?.querySelector("[data-button-text]");if(data.variant){variantInput&&(variantInput.value=data.variant.id);const tagCappedBogo=this.hasAttribute("data-tag-capped-bogo");if(this.toggleAttribute("data-capped-bogo",tagCappedBogo||!!data.variant.bogo_capped_at_1),this.submitButton&&buttonText){const productAtcTitle=this.dataset.productAtcTitle?.trim()??"",resolvedAtcTitle=(data.variant.atc_title?.trim()||productAtcTitle).trim(),isSoldOutWorded=["sold out","sold-out","soldout"].includes(resolvedAtcTitle.toLowerCase());productAtcTitle&&data.variant.inventory_policy==="continue"&&!isSoldOutWorded?(this.submitButton.disabled=!1,buttonText.textContent=resolvedAtcTitle):data.variant.available?(this.submitButton.disabled=!1,buttonText.textContent=window.theme?.strings?.addToCart??"Add to cart"):(this.submitButton.disabled=!0,buttonText.textContent=window.theme?.strings?.soldOut??"Sold out")}}else this.submitButton&&buttonText&&(this.submitButton.disabled=!0,buttonText.textContent=window.theme?.strings?.unavailable??"Unavailable")}))}async _onSubmitHandler(evt){if(evt.preventDefault(),this.submitButton?.disabled)return;if(await this._isCappedBogoBlocked()){this._showCappedBogoPopup();return}if(await this._isTypeCappedBlocked()){const productType=(this.dataset.productType||"").trim().toLowerCase(),maxQty=Number(window.CappedBogoConfig?.cappedTypes?.[productType])||4;this._showTypeCappedPopup(maxQty);return}this._setButtonLoading(!0),this._hideError(),this.cartDrawer?.openCart();const formData=new FormData(this.form),sectionId=this.cartDrawer?.dataset?.sectionId??"cart-drawer";formData.set("sections",sectionId),formData.set("sections_url",window.location.pathname),formData.set("properties[is_app]","true");try{const response=await CartAPI.add(formData);this.hasAttribute("data-capped-bogo")&&window.CappedBogoGuard?.markCapped({productId:Number(this.dataset.productId),variantId:Number(this.form?.querySelector('input[name="id"]')?.value),tagCap:this.hasAttribute("data-tag-capped-bogo")}),publish(PUB_SUB_EVENTS.cartUpdate,{source:"product-form",productId:this.dataset.productId}),this.cartDrawer?.renderContents(response)}catch(error){const message=error?.description??error?.message??"Something went wrong.";this._showError(message),this._setSoldOut(),publish(PUB_SUB_EVENTS.cartError,{source:"product-form",error})}finally{this._setButtonLoading(!1)}}_setButtonLoading(isLoading){if(!this.submitButton)return;this.submitButton.disabled=isLoading;const btnText=this.submitButton.querySelector("[data-button-text]"),btnLoader=this.submitButton.querySelector("[data-button-loader]");btnText&&btnText.classList.toggle("invisible",isLoading),btnLoader&&(btnLoader.classList.toggle("hidden",!isLoading),btnLoader.classList.toggle("flex",isLoading));const screenOverlay=document.querySelector("[data-atc-screen-overlay]");screenOverlay&&(screenOverlay.style.display=isLoading?"flex":"none")}_setSoldOut(){if(!this.submitButton)return;this.submitButton.disabled=!0;const btnText=this.submitButton.querySelector("[data-button-text]");btnText&&(btnText.textContent=window.theme?.strings?.soldOut??"Sold Out")}_showError(message){this.errorContainer&&(this.errorContainer.textContent=message,this.errorContainer.hidden=!1)}_hideError(){this.errorContainer&&(this.errorContainer.textContent="",this.errorContainer.hidden=!0)}async _isCappedBogoBlocked(){if(!this.hasAttribute("data-capped-bogo")||typeof CartAPI>"u")return!1;const productId=Number(this.dataset.productId);if(!productId)return!1;try{const cart=await CartAPI.get();if(this.hasAttribute("data-tag-capped-bogo"))return cart.items.some(item=>item.product_id===productId&&item.quantity>=1);const variantId=Number(this.form?.querySelector('input[name="id"]')?.value);return variantId?cart.items.some(item=>item.variant_id===variantId&&item.quantity>=1):!1}catch{return!1}}_showCappedBogoPopup(){ProductForm._wireCappedBogoPopup(),document.querySelector(".popup-for-capped-bogo")?.classList.add("is-open"),document.body.classList.add("overflow-hidden")}async _isTypeCappedBlocked(){const productType=(this.dataset.productType||"").trim().toLowerCase();if(!productType)return!1;const cappedTypes=window.CappedBogoConfig?.cappedTypes;if(!cappedTypes||!Object.prototype.hasOwnProperty.call(cappedTypes,productType)||typeof CartAPI>"u")return!1;const maxQty=Number(cappedTypes[productType])||4,requestedQty=Number(this.form?.querySelector('input[name="quantity"]')?.value)||1;try{return(await CartAPI.get()).items.filter(item=>String(item.product_type||"").trim().toLowerCase()===productType).reduce((sum,item)=>sum+item.quantity,0)+requestedQty>maxQty}catch{return!1}}_showTypeCappedPopup(maxQty){const message=`You can only add ${maxQty} of this product to your cart`;if(window.CappedBogoGuard?.showPopup){window.CappedBogoGuard.showPopup(message);return}this._showCappedBogoPopup()}static _wireCappedBogoPopup(){ProductForm._cappedBogoPopupWired||(ProductForm._cappedBogoPopupWired=!0,document.addEventListener("click",event=>{event.target.closest(".popup-for-capped-bogo")&&event.target.closest(".popup-close, .popup-button")&&(document.querySelector(".popup-for-capped-bogo")?.classList.remove("is-open"),document.body.classList.remove("overflow-hidden"))}))}}customElements.get("product-form")||customElements.define("product-form",ProductForm);
2//# sourceMappingURL=/cdn/shop/t/2264/assets/product-form.js.map?v=143006224567380094841789369139

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.