PageSourceSearch

https://shushop.com/cdn/shop/t/210/assets/component-product-form.js?v=32602869593158502741790367598

js shushop.com collected 2026-10-02 08:01:17 UTC 6,083 bytes, 2 lines download raw bytes

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.form.addEventListener("submit",this.onSubmitHandler.bind(this)),this.submitButton=this.querySelector('[type="submit"]'),this.cartNotification=document.getElementById("cart-notification"),this.cartNotificationItem=document.getElementById("cart-notification-item"),this.multi_item_request=!1}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"),this.querySelector(".loading-overlay").classList.remove("hidden");const upsell_ids_nodes=document.querySelectorAll(`[data-form="${this.form.getAttribute("id")}"] .upsell-id`),upsell_quantities_nodes=document.querySelectorAll(`[data-form="${this.form.getAttribute("id")}"] .upsell-quantity`);let upsell_items=[];if(upsell_ids_nodes.length!==0){const upsell_ids=Array.from(upsell_ids_nodes).map(input=>parseInt(input.value)),upsell_quantities=Array.from(upsell_quantities_nodes).map(input=>parseInt(input.value));upsell_items=upsell_ids.map((id,index)=>({id,quantity:upsell_quantities[index]})).filter(item=>item.quantity!==0)}const config={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/javascript"}};config.headers["X-Requested-With"]="XMLHttpRequest",delete config.headers["Content-Type"];const formData=new FormData(this.form);if(upsell_items.length>0){this.multi_item_request=!0;const items=upsell_items,id=parseInt(formData.get("id")),quantity=parseInt(formData.get("quantity"))||1,the_product_item={id,quantity};items.push(the_product_item);const itemsData={items};config.headers["Content-Type"]="application/json",config.body=JSON.stringify(itemsData)}else this.multi_item_request=!1,config.body=formData;try{const res=await fetch(routes.cart_add_url+".js",config),json=await res.json();if(res.status!==200)throw new Error(json.description);if(this.cartNotification){const notificationTemplate=document.importNode(this.cartNotification.content,!0);if(this.multi_item_request){notificationTemplate.querySelector("[data-notification-title]").textContent=window.variantStrings.itemsAdded;let lastElement=json.items.pop();json.items.unshift(lastElement),json.items.forEach(item=>{const singleItem=this.createNotificationItem(item);notificationTemplate.querySelector("[data-items]").appendChild(singleItem)})}else{notificationTemplate.querySelector("[data-notification-title]").textContent=window.variantStrings.itemAdded;const singleItem=this.createNotificationItem(json);notificationTemplate.querySelector("[data-items]").appendChild(singleItem)}document.querySelector(".cart-notification")&&document.querySelector(".cart-notification").remove(),document.querySelector(".site-header").appendChild(notificationTemplate);const the_notification=document.querySelector(".cart-notification");the_notification.querySelector(".notification-close").addEventListener("click",()=>{the_notification.classList.remove("anim-in")}),setTimeout(()=>{the_notification.classList.add("anim-in")},50)}const event=new CustomEvent("ajaxProduct:added");document.dispatchEvent(event)}catch(error){this.handleErrorMessage(error),console.error(error)}this.submitButton.classList.remove("loading"),this.submitButton.removeAttribute("aria-disabled"),this.querySelector(".loading-overlay").classList.add("hidden"),this.resetQuantityInput()}handleErrorMessage(errorMessage=!1){this.errorMessageWrapper=this.errorMessageWrapper||this.querySelector(".product-form__error-message-wrapper")||document.querySelector(`.product-form__error-message-wrapper[form="${this.form.getAttribute("id")}"]`),this.errorMessageWrapper&&(this.errorMessage=this.errorMessage||this.errorMessageWrapper.querySelector(".product-form__error-message"),this.errorMessageWrapper.toggleAttribute("hidden",!errorMessage),errorMessage&&(this.errorMessage.textContent=errorMessage))}
1resetQuantityInput(){const hidden_quantity_input=document.querySelector("[type=hidden][name=quantity]");hidden_quantity_input&&(hidden_quantity_input.value=1)}createNotificationItem(product){const notificationItemTemplate=document.importNode(this.cartNotificationItem.content,!0),filename=product.image.split("/").pop(),lastDotIndex=filename.lastIndexOf("."),newFilename=`${filename.substring(0,lastDotIndex)}_120x${filename.substring(lastDotIndex)}`,url=product.image.replace(filename,newFilename);return notificationItemTemplate.querySelector(".notification-item-image").setAttribute("src",url),notificationItemTemplate.querySelector(".notification-item-image").classList.remove("hide"),notificationItemTemplate.querySelector(".notification-item-title").textContent=product.product_title,product.options_with_values.forEach(item=>{const row=document.createElement("dl"),nameCell=document.createElement("dt"),valueCell=document.createElement("dd");nameCell.textContent=item.name+":",valueCell.textContent=item.value,row.appendChild(nameCell),row.appendChild(valueCell),notificationItemTemplate.querySelector(".notification-item-details").appendChild(row)}),notificationItemTemplate}});class AddMultiplier extends HTMLElement{constructor(){super();const multiplyButton=this.querySelector("button");this.submitEvent=new SubmitEvent("submit",{submitter:multiplyButton}),this.multiplyBy=parseInt(this.querySelector("[name=multiplied-quantity]").value),this.productForm=this.closest("product-form").querySelector("form");const formId=this.productForm.getAttribute("id");this.quantity_input=document.querySelector(`[name=quantity][form=${formId}]`),multiplyButton.addEventListener("click",this.submitProductForm.bind(this))}submitProductForm(){this.quantity_input.value=this.multiplyBy,this.productForm.dispatchEvent(this.submitEvent)}}customElements.define("add-multiplier",AddMultiplier);
2//# sourceMappingURL=/cdn/shop/t/210/assets/component-product-form.js.map?v=32602869593158502741790367598

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.