PageSourceSearch

https://swyfthome.com/cdn/shop/t/646/assets/product-upsells.js?v=21424504561111895461764668967

js swyfthome.com collected 2026-09-25 15:24:46 UTC 9,159 bytes, 2 lines download raw bytes

1if(!customElements.get("product-upsells")){class ProductUpsells extends HTMLElement{connectedCallback(){if(this.initialized){this.setupInputs();return}this.initialized=!0,this.productUpsellsId=this.dataset.productUpsells,this.sectionId=this.dataset.sectionId,this.blockId=this.dataset.blockId,this.parentProductId=this.dataset.parentProductId||null,this.parentVariantId=this.dataset.parentVariantId||null,this.analyticsViewEvent=this.dataset.analyticsViewEvent||null,this.analyticsAddEvent=this.dataset.analyticsAddEvent||null,this.cart=document.querySelector("cart-notification")||document.querySelector("cart-drawer"),this.isProcessing=!1,this.pendingQueue=[],this.viewTracked=!1,this.boundOnInputChange=this.onInputChange.bind(this),this.onCartUpdateHandler=this.onCartUpdate.bind(this),this.onCartErrorHandler=this.onCartError.bind(this),this.onVariantChangeHandler=this.onVariantChange.bind(this),typeof subscribe=="function"&&typeof PUB_SUB_EVENTS<"u"&&(this.cartUpdateUnsubscribe=subscribe(PUB_SUB_EVENTS.cartUpdate,this.onCartUpdateHandler),this.cartErrorUnsubscribe=subscribe(PUB_SUB_EVENTS.cartError,this.onCartErrorHandler),this.variantChangeUnsubscribe=subscribe(PUB_SUB_EVENTS.variantChange,this.onVariantChangeHandler)),this.setupInputs(),this.queueViewTracking()}disconnectedCallback(){this.cartUpdateUnsubscribe?.(),this.cartErrorUnsubscribe?.(),this.variantChangeUnsubscribe?.(),this.intersectionObserver?.disconnect()}setupInputs(){this.inputs=Array.from(this.querySelectorAll("input.product-upsells__checkbox[data-variant-id]")),this.inputs.forEach(input=>{input.removeEventListener("change",this.boundOnInputChange),input.addEventListener("change",this.boundOnInputChange),this.syncInputState(input)})}syncInputState(input){const item=input.closest(".product-upsells__item");if(!item)return;const isSelected=input.checked&&!input.disabled;item.classList.remove("product-upsells__item--selected"),isSelected&&item.classList.add("product-upsells__item--selected");const action=item.querySelector(".product-upsells__action");action&&(action.tagName==="LABEL"?(action.setAttribute("aria-pressed",isSelected?"true":"false"),action.classList.toggle("product-upsells__action--disabled",input.disabled)):action.removeAttribute("aria-pressed"),action.setAttribute("aria-disabled",input.disabled?"true":"false"))}onInputChange(event){const input=event.target;input instanceof HTMLInputElement&&this.syncInputState(input)}onCartUpdate(payload){if(!payload||payload.source!=="product-form")return;const variantId=payload.productVariantId?String(payload.productVariantId):"";if(!variantId||this.parentVariantId&&variantId!==this.parentVariantId||!this.inputs||!this.inputs.length)return;const selectedInputs=this.inputs.filter(input=>input.checked&&!input.disabled);if(selectedInputs.length){if(this.isProcessing){this.pendingQueue.push(...selectedInputs.map(input=>this.mapInputToItem(input)));return}this.pendingQueue=selectedInputs.map(input=>this.mapInputToItem(input)),this.startProcessing()}}mapInputToItem(input){return{variantId:input.dataset.variantId,quantity:parseInt(input.dataset.quantity||"1",10)||1,productId:input.dataset.productId||null,productHandle:input.dataset.productHandle||null,productTitle:input.dataset.productTitle||"",variantTitle:input.dataset.variantTitle||"",price:parseInt(input.dataset.price||"0",10)||0,compareAtPrice:parseInt(input.dataset.compareAtPrice||"0",10)||0}}startProcessing(){this.pendingQueue.length&&(this.isProcessing=!0,this.classList.add("product-upsells--processing"),this.toggleInputsDisabled(!0),this.processNext())}processNext(){if(!this.pendingQueue.length){this.finishProcessing({clearSelection:!0}
1);return}const nextItem=this.pendingQueue.shift();this.addVariantToCart(nextItem).then(()=>{this.emitAddAnalytics(nextItem),this.processNext()}).catch(error=>{console.error("[product-upsells] Failed to add upsell",error),this.finishProcessing({clearSelection:!1})})}addVariantToCart(item){const config=fetchConfig?.("javascript")||{method:"POST",headers:{}};config.headers=config.headers||{},config.headers["X-Requested-With"]="XMLHttpRequest",delete config.headers["Content-Type"];const formData=new FormData;if(formData.append("id",item.variantId),formData.append("quantity",item.quantity),formData.append("properties[_upsell_parent_product_id]",this.parentProductId||""),formData.append("properties[_upsell_parent_variant_id]",this.parentVariantId||""),formData.append("properties[_upsell_block_id]",this.blockId||""),this.cart&&typeof this.cart.getSectionsToRender=="function"){const sections=this.cart.getSectionsToRender();Array.isArray(sections)&&sections.length&&formData.append("sections",sections.map(section=>section.id)),formData.append("sections_url",window.location.pathname),typeof this.cart.setActiveElement=="function"&&this.cart.setActiveElement(document.activeElement)}return config.body=formData,fetch(`${routes.cart_add_url}`,config).then(response=>response.json()).then(response=>{if(response.status)throw publish?.(PUB_SUB_EVENTS.cartError,{source:"product-upsells",productVariantId:item.variantId,errors:response.errors||response.description,message:response.message}),new Error(response.description||"Upsell add failed");this.cart&&typeof this.cart.renderContents=="function"&&(this.cart.renderContents(response),this.cart.classList?.remove?.("is-empty")),publish?.(PUB_SUB_EVENTS.cartUpdate,{source:"product-upsells",productVariantId:item.variantId,cartData:{items:[response]},context:{parentVariantId:this.parentVariantId,parentProductId:this.parentProductId}})})}onCartError(payload){!payload||payload.source!=="product-form"||this.finishProcessing({clearSelection:!1})}finishProcessing({clearSelection}){this.isProcessing=!1,this.classList.remove("product-upsells--processing"),this.pendingQueue=[],this.toggleInputsDisabled(!1,{clearSelection})}toggleInputsDisabled(disabled,{clearSelection=!1}={}){this.inputs?.forEach(input=>{const isAvailable=input.dataset.available!=="false";input.disabled=disabled||!isAvailable,clearSelection&&(input.checked=!1),this.syncInputState(input)})}onVariantChange(payload){const variant=payload?.data?.variant,html=payload?.data?.html;if(variant?.id&&(this.parentVariantId=String(variant.id),this.dataset.parentVariantId=this.parentVariantId),!html||!this.productUpsellsId)return;
1const nextRoot=html.querySelector(`[data-product-upsells="${this.productUpsellsId}"]`);if(!nextRoot){this.innerHTML="",this.dataset.hasUpsells="false",this.setAttribute("hidden","hidden"),this.finishProcessing({clearSelection:!0});return}const currentContainer=this.querySelector("[data-upsells-container]"),nextContainer=nextRoot.querySelector("[data-upsells-container]");Array.from(nextRoot.attributes).forEach(attr=>{attr.name.startsWith("data-")&&this.setAttribute(attr.name,attr.value)}),nextRoot.hasAttribute("hidden")?this.setAttribute("hidden","hidden"):this.removeAttribute("hidden"),currentContainer&&nextContainer?currentContainer.innerHTML=nextContainer.innerHTML:this.innerHTML=nextRoot.innerHTML,this.analyticsViewEvent=this.dataset.analyticsViewEvent||this.analyticsViewEvent,this.analyticsAddEvent=this.dataset.analyticsAddEvent||this.analyticsAddEvent,this.parentProductId=this.dataset.parentProductId||this.parentProductId,this.parentVariantId=this.dataset.parentVariantId||this.parentVariantId,this.setupInputs(),this.finishProcessing({clearSelection:!0}
1),this.queueViewTracking(!0)}queueViewTracking(force=!1){if(this.dataset.hasUpsells!=="true"){this.viewTracked=!1,this.intersectionObserver?.disconnect();return}if(!(this.viewTracked&&!force)){if(!("IntersectionObserver"in window)){this.trackView();return}this.intersectionObserver?.disconnect(),this.intersectionObserver=new IntersectionObserver(entries=>{entries.forEach(entry=>{entry.isIntersecting&&(this.trackView(),this.intersectionObserver?.disconnect())})},{rootMargin:"0px 0px -20%"}),this.intersectionObserver.observe(this)}}trackView(){this.viewTracked||this.dataset.hasUpsells!=="true"||(this.viewTracked=!0,this.analyticsViewEvent&&(window.Shopify?.analytics?.publish?Shopify.analytics.publish(this.analyticsViewEvent,{parent_product_id:this.parentProductId,parent_variant_id:this.parentVariantId,upsell_block_id:this.blockId}):window.dataLayer&&typeof window.dataLayer.push=="function"&&window.dataLayer.push({event:this.analyticsViewEvent,parent_product_id:this.parentProductId,parent_variant_id:this.parentVariantId,upsell_block_id:this.blockId})))}emitAddAnalytics(item){if(!this.analyticsAddEvent)return;const payload={parent_product_id:this.parentProductId,parent_variant_id:this.parentVariantId,upsell_block_id:this.blockId,upsell_product_id:item.productId,upsell_product_handle:item.productHandle,upsell_variant_id:item.variantId,price:item.price,compare_at_price:item.compareAtPrice};window.Shopify?.analytics?.publish?Shopify.analytics.publish(this.analyticsAddEvent,payload):window.dataLayer&&typeof window.dataLayer.push=="function"&&window.dataLayer.push({event:this.analyticsAddEvent,...payload})}}customElements.define("product-upsells",ProductUpsells)}
2//# sourceMappingURL=/cdn/shop/t/646/assets/product-upsells.js.map?v=21424504561111895461764668967

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.