PageSourceSearch

https://invizi.com.au/cdn/shop/t/305/assets/quick-add.js?v=61932933850763177971783324640

js invizi.com.au collected 2026-10-10 00:56:33 UTC 10,745 bytes, 2 lines download raw bytes

1import{morph}from"@theme/morph";import{Component}from"@theme/component";import{CartAddPendingEvent,ThemeEvents}from"@theme/events";import{DialogComponent,DialogCloseEvent}from"@theme/dialog";import{refreshFreeShippingVisibility}from"@theme/free-shipping-visibility";import{mediaQueryLarge,getIOSVersion}from"@theme/utilities";import"@theme/variant-picker";const QUICK_ADD_SEE_MORE_THRESHOLD_PX=100;export class QuickAddComponent extends Component{#abortController=null;#cachedContent=new Map;#cartUpdateAbortController=new AbortController;get productPageUrl(){const productCard=this.closest("product-card"),hotspotProduct=this.closest("product-hotspot-component"),productLink=productCard?.getProductCardLink()||hotspotProduct?.getHotspotProductLink();if(!productLink?.href)return"";const url=new URL(productLink.href),selectedVariantId=this.#getSelectedVariantId();return selectedVariantId&&url.searchParams.set("variant",selectedVariantId),url.toString()}#getSelectedVariantId(){const{selectedVariantId:resolvedCartonId}=this.dataset;if(resolvedCartonId)return resolvedCartonId;const swatchVariantId=this.closest("product-card")?.getSelectedVariantId();if(swatchVariantId)return swatchVariantId;const variantInput=this.querySelector('input[name="id"]:not([disabled])');return variantInput instanceof HTMLInputElement&&variantInput.value?variantInput.value:null}connectedCallback(){super.connectedCallback(),mediaQueryLarge.addEventListener("change",this.#closeQuickAddModal),document.addEventListener(ThemeEvents.cartUpdate,this.#handleCartUpdate,{signal:this.#cartUpdateAbortController.signal}),document.addEventListener(ThemeEvents.variantSelected,this.#updateQuickAddButtonState.bind(this))}disconnectedCallback(){super.disconnectedCallback(),mediaQueryLarge.removeEventListener("change",this.#closeQuickAddModal),this.#abortController?.abort(),this.#cartUpdateAbortController.abort(),document.removeEventListener(ThemeEvents.variantSelected,this.#updateQuickAddButtonState.bind(this))}#handleCartUpdate=()=>{this.#cachedContent.clear()};#updateVariantPicker(newHtml){const modalContent=document.getElementById("quick-add-modal-content");if(!modalContent)return;modalContent.querySelector("variant-picker").updateVariantPicker(newHtml)}handleClick=async event=>{event.preventDefault();const dialogComponent=this.#getQuickAddDialog();dialogComponent&&(this.#stayVisibleUntilDialogCloses(dialogComponent),dialogComponent.showDialog(),dialogComponent.setLoadingState(!0));try{const currentUrl=this.productPageUrl;if(!currentUrl)return;let productInformationContent=this.#cachedContent.get(currentUrl);if(!productInformationContent){const html=await this.fetchProductPage(currentUrl);if(html){const productInformationElement=html.querySelector('[data-testid="product-information"]');productInformationElement&&(productInformationContent=productInformationElement.cloneNode(!0),this.#cachedContent.set(currentUrl,productInformationContent))}}if(productInformationContent){const freshContent=productInformationContent.cloneNode(!0);
1await this.updateQuickAddModal(freshContent,currentUrl),this.#updateVariantPicker(productInformationContent),dialogComponent?.setQuickAddProductUrl(currentUrl)}else dialogComponent?.setQuickAddProductUrl("")}finally{dialogComponent?.setLoadingState(!1)}};#stayVisibleUntilDialogCloses(dialogComponent){this.toggleAttribute("stay-visible",!0),dialogComponent.addEventListener(DialogCloseEvent.eventName,()=>this.toggleAttribute("stay-visible",!1),{once:!0})}#getQuickAddDialog(){const dialogComponent=document.getElementById("quick-add-dialog");return dialogComponent instanceof QuickAddDialog?dialogComponent:null}#openQuickAddModal=()=>{const dialogComponent=this.#getQuickAddDialog();dialogComponent&&(this.#stayVisibleUntilDialogCloses(dialogComponent),dialogComponent.showDialog())};#closeQuickAddModal=()=>{const dialogComponent=this.#getQuickAddDialog();dialogComponent&&dialogComponent.closeDialog()};async fetchProductPage(productPageUrl){if(!productPageUrl)return null;this.#abortController?.abort(),this.#abortController=new AbortController;try{const response=await fetch(productPageUrl,{signal:this.#abortController.signal});if(!response.ok)throw new Error(`Failed to fetch product page: HTTP error ${response.status}`);const responseText=await response.text();return new DOMParser().parseFromString(responseText,"text/html")}catch(error){if(error.name==="AbortError")return null;throw error}finally{this.#abortController=null}}async updateQuickAddModal(productInformationContent,fetchedUrl){const modalContent=document.getElementById("quick-add-modal-content");!productInformationContent||!modalContent||(morph(modalContent,productInformationContent),this.#syncVariantSelection(modalContent,fetchedUrl),await refreshFreeShippingVisibility(modalContent),this.#notifyDynamicContent(modalContent))}#notifyDynamicContent(scope){document.dispatchEvent(new CustomEvent("theme:dynamic-content",{bubbles:!0,detail:{scope}}))}#updateQuickAddButtonState(event){if(!this.dataset.productOptionsCount||!(event.target instanceof HTMLElement)||event.target.closest("product-card")!==this.closest("product-card"))return;const quickAddButton=this.dataset.productOptionsCount==="1"?"add":"choose";this.setAttribute("data-quick-add-button",quickAddButton)}#syncVariantSelection(modalContent,fetchedUrl){const selectedVariantId=this.#getSelectedVariantId();if(!selectedVariantId)return;if(fetchedUrl)try{if(new URL(fetchedUrl,window.location.origin).searchParams.get("variant")===selectedVariantId&&modalContent.querySelector(`input[type="radio"][data-variant-id="${selectedVariantId}"]:checked`))return}catch{}const modalInputs=modalContent.querySelectorAll('input[type="radio"][data-variant-id]');for(const input of modalInputs)if(input instanceof HTMLInputElement&&input.dataset.variantId===selectedVariantId&&!input.checked){input.checked=!0,input.dispatchEvent(new Event("change",{bubbles:!0}));break}}}customElements.get("quick-add-component")||customElements.define("quick-add-component",QuickAddComponent);class QuickAddDialog extends DialogComponent{#abortController=new AbortController;#seeMoreScrollTarget=null;#seeMoreResizeObserver=null;connectedCallback(){super.connectedCallback(),this.addEventListener(CartAddPendingEvent.eventName,this.handleCartAddPending,{signal:this.#abortController.signal}),this.addEventListener(ThemeEvents.cartUpdate,this.handleCartUpdate,{signal:this.#abortController.signal}),this.addEventListener(ThemeEvents.variantUpdate,this.#updateProductTitleLink),this.addEventListener(DialogCloseEvent.eventName,this.#handleDialogClose),this.addEventListener(DialogCloseEvent.eventName,this.#hideSeeMoreOnClose),this.#bindSeeMoreScroll()}disconnectedCallback(){super.disconnectedCallback(),this.#unbindSeeMoreScroll(),this.#abortController.abort(),this.removeEventListener(DialogCloseEvent.eventName,this.#handleDialogClose),this.removeEventListener(DialogCloseEvent.eventName,this.#hideSeeMoreOnClose)}#bindSeeMoreScroll(){const content=this.querySelector("#quick-add-modal-content");content instanceof HTMLElement&&(this.#seeMoreScrollTarget=content,content.addEventListener("scroll",this.#onSeeMoreScrollTargetScroll,{passive:!0}),this.#seeMoreResizeObserver=new ResizeObserver(()=>this.#updateSeeMoreVisibility()),this.#seeMoreResizeObserver.observe(content))}#unbindSeeMoreScroll(){this.#seeMoreResizeObserver?.disconnect(),this.#seeMoreResizeObserver=null,this.#seeMoreScrollTarget?.removeEventListener("scroll",this.#onSeeMoreScrollTargetScroll),this.#seeMoreScrollTarget=null}#onSeeMoreScrollTargetScroll=()=>{this.#updateSeeMoreVisibility()};#hideSeeMoreOnClose=()=>{const link=this.querySelector("#quick-add-see-more");link instanceof HTMLAnchorElement&&(link.classList.remove("quick-add-modal__see-more--visible"),link.setAttribute("aria-hidden","true"),link.tabIndex=-1)};setQuickAddProductUrl(productUrl){const link=this.querySelector("#quick-add-see-more");if(link instanceof HTMLAnchorElement){if(!productUrl){link.hidden=!0,link.removeAttribute("href"),link.classList.remove("quick-add-modal__see-more--visible"),link.setAttribute("aria-hidden","true"),link.tabIndex=-1;return}link.hidden=!1,link.href=productUrl,link.setAttribute("aria-hidden","true"),link.classList.remove("quick-add-modal__see-more--visible"),link.tabIndex=-1,requestAnimationFrame(()=>this.#updateSeeMoreVisibility())}}#updateSeeMoreVisibility(){const link=this.querySelector("#quick-add-see-more"),content=this.querySelector("#quick-add-modal-content"),{dialog}=this.refs;if(!(link instanceof HTMLAnchorElement)||!content||!dialog?.open||link.hidden)return;const href=link.getAttribute("href");if(!href||href==="#"){link.classList.remove("quick-add-modal__see-more--visible"),link.setAttribute("aria-hidden","true"),link.tabIndex=-1;return}const{scrollTop,clientHeight,scrollHeight}=content,nearBottom=scrollHeight<=clientHeight+QUICK_ADD_SEE_MORE_THRESHOLD_PX||scrollTop+clientHeight>=scrollHeight-QUICK_ADD_SEE_MORE_THRESHOLD_PX;link.classList.toggle("quick-add-modal__see-more--visible",nearBottom),link.setAttribute("aria-hidden",nearBottom?"false":"true"),link.tabIndex=nearBottom?0:-1}handleCartAddPending=()=>{this.closeDialog()};handleCartUpdate=event=>{event.detail.data.didError||this.closeDialog()};#updateProductTitleLink=event=>{const anchorElement=event.detail.data.html?.querySelector(".view-product-title a"),viewMoreDetailsLink=this.querySelector(".view-product-title a"),mobileProductTitle=this.querySelector(".product-header a"),seeMoreLink=this.querySelector("#quick-add-see-more");anchorElement&&(viewMoreDetailsLink&&(viewMoreDetailsLink.href=anchorElement.href),mobileProductTitle&&(mobileProductTitle.href=anchorElement.href),seeMoreLink&&(seeMoreLink.href=anchorElement.href,this.#updateSeeMoreVisibility()))};#handleDialogClose=()=>{const iosVersion=getIOSVersion();!iosVersion||iosVersion.major>=17||iosVersion.major===16&&iosVersion.minor>=4||requestAnimationFrame(()=>{const grid=document.querySelector("#ResultsList [product-grid-view]");if(grid){const currentWidth=grid.getBoundingClientRect().width;grid.style.width=`${currentWidth-1}px`,requestAnimationFrame(()=>{grid.style.width=""})}})};setLoadingState(isLoading){this.toggleAttribute("loading-data",isLoading),this.classList.toggle("is-loading",isLoading);const seeMore=this.querySelector("#quick-add-see-more");seeMore instanceof HTMLAnchorElement&&(isLoading?(seeMore.classList.remove("quick-add-modal__see-more--visible"),seeMore.setAttribute("aria-hidden","true"),seeMore.tabIndex=-1):this.#updateSeeMoreVisibility())}}customElements.get("quick-add-dialog")||customElements.define("quick-add-dialog",QuickAddDialog);
2//# sourceMappingURL=/cdn/shop/t/305/assets/quick-add.js.map?v=61932933850763177971783324640

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.