PageSourceSearch

https://www.dfranklincreation.com/cdn/shop/t/149/assets/sticky-atc-bar.js?v=178526008674226591631790249048

js dfranklincreation.com collected 2026-10-01 11:59:08 UTC 8,314 bytes, 2 lines download raw bytes

1customElements.get("sticky-atc-bar")||customElements.define("sticky-atc-bar",class extends HTMLElement{constructor(){super(),document.body.classList.add("sticky-atc-bar-enabled"),this.selectors={variantIdSelect:'[name="id"]'}}get quantityInput(){return this.querySelector("quantity-input input")}get quantity(){return this.querySelector("quantity-input")}get sectionId(){return this.dataset.originalSection||this.dataset.section}get productId(){return this.getAttribute("data-product-id")}get select(){return this.querySelector("select")}get productForm(){return this.querySelector('form[is="product-form"]')}get selectSizeText(){return this.dataset.selectSizeText||"Select size"}get requireSizeSelection(){return this.dataset.requireSizeSelection==="true"}connectedCallback(){this.productFormActions=document.querySelector(".main-product-form"),this.mainProductInfo=document.querySelector("product-info"),this.container=this.closest(".sticky-atc-bar"),this.variantData=this.getVariantData(),this.init(),this.updateStickySizeLabels(),this.observeSizeSystem(),document.addEventListener("change",event=>{const radio=event.target.closest('.product_variant_option_inner input[type="radio"][data-variant-id]');if(!radio||!radio.checked||!this.select)return;const variantId=radio.dataset.variantId;variantId&&(this.select.value=variantId,this.select.dispatchEvent(new Event("change",{bubbles:!0})))}),this.select.addEventListener("change",()=>{const selectedVariantId=this.querySelector(this.selectors.variantIdSelect).value;if(!selectedVariantId){this.currentVariant=null,this.updateButton(!0,this.selectSizeText);return}if(this.currentVariant=this.variantData.find(variant=>variant.id===Number(selectedVariantId)),!this.currentVariant){this.updateButton(!0,this.selectSizeText);return}this.mainVariantSelects=this.mainProductInfo&&this.mainProductInfo.querySelector("variant-selects");let syncedWithMainForm=!1;if(this.mainVariantSelects){let changeTarget=null;Array.from(this.mainVariantSelects.querySelectorAll("select, fieldset")).forEach((element,index)=>{const variantOptionVal=this.currentVariant.options[index];switch(element.tagName){case"SELECT":element.value=variantOptionVal,changeTarget=element;break;case"FIELDSET":{const matchedRadio=Array.from(element.querySelectorAll("input")).find(radio=>radio.value===variantOptionVal);matchedRadio&&(matchedRadio.checked=!0,changeTarget=matchedRadio);break}}}),changeTarget&&(syncedWithMainForm=!0,changeTarget.dispatchEvent(new Event("change",{bubbles:!0})))}this.updatePrice(),this.updateButton(!this.currentVariant.available,FoxTheme.variantStrings.soldOut),syncedWithMainForm||this.updateQuantityInput()})}updateQuantityInput(){if(!this.currentVariant)return;const quantityWrapper=this.querySelector(`#QuantitySticky-${this.sectionId}`),currentQtyInput=quantityWrapper&&quantityWrapper.querySelector('input[name="quantity"]');if(!quantityWrapper||!currentQtyInput)return;const previousQty=parseInt(currentQtyInput.value,10)||1;fetch(`${this.getAttribute("data-url")}?variant=${this.currentVariant.id}&section_id=${this.sectionId}`).then(response=>response.text()).then(responseText=>{const updatedQtyInput=new DOMParser().parseFromString(responseText,"text/html").querySelector(`#QuantitySticky-${this.sectionId} input[name="quantity"]`);if(!updatedQtyInput)return;["data-cart-quantity","data-min","data-max","data-quantity-variant-id","step","min","max"].forEach(attribute=>{const value=updatedQtyInput.getAttribute(attribute);value!==null?currentQtyInput.setAttribute(attribute,value):currentQtyInput.removeAttribute(attribute)});const min=parseInt(currentQtyInput.getAttribute("data-min")||currentQtyInput.min||"1",10),maxAttr=currentQtyInput.getAttribute("data-max")||currentQtyInput.max,max=maxAttr?parseInt(maxAttr,10):null;let nextValue=Math.max(previousQty,min);
1max!==null&&(nextValue=Math.min(nextValue,max)),currentQtyInput.value=nextValue,currentQtyInput.dispatchEvent(new Event("change",{bubbles:!0}))}).catch(error=>{console.error(error)})}updateStickySizeLabels(){if(!this.select)return;const system=(document.documentElement.getAttribute("data-size-system")||"EU").toUpperCase(),key={EU:"sizeEu",UK:"sizeUk",US:"sizeUs"}[system]||"sizeEu";Array.from(this.select.options).forEach(option=>{if(!option.value)return;const label=option.dataset[key]||option.dataset.sizeEu||option.textContent;option.textContent=label})}observeSizeSystem(){const root=document.documentElement;this.sizeSystemObserver=new MutationObserver(()=>{this.updateStickySizeLabels()}),this.sizeSystemObserver.observe(root,{attributes:!0,attributeFilter:["data-size-system"]})}getVariantData(){return this.variantData=this.variantData||JSON.parse(this.container.querySelector('[type="application/json"]').textContent),this.variantData}init(){if(!this.productFormActions){this.container.classList.add("sticky-atc-bar--show");return}const mql=window.matchMedia(FoxTheme.config.mediaQueryMobile);mql.onchange=this.checkDevice.bind(this),this.checkDevice();const rootMargin="-80px 0px 0px 0px";this.observer=new IntersectionObserver(entries=>{entries.forEach(entry=>{const method=entry.intersectionRatio!==1?"add":"remove";this.container.classList[method]("sticky-atc-bar--show")})},{threshold:1,rootMargin}),this.setObserveTarget(),this.syncWithMainProductForm()}setObserveTarget(){this.observer.observe(this.productFormActions),this.observeTarget=this.productFormActions}checkDevice(e){document.documentElement.style.setProperty("--sticky-atc-bar-height",this.clientHeight+"px")}updateButton(disable=!0,text,modifyClass=!0){const productForm=this.productForm;if(!productForm)return;const addButton=productForm.querySelector('[name="add"]');if(!addButton)return;const addButtonText=addButton.querySelector("span");disable?(addButton.setAttribute("disabled","disabled"),text&&(addButtonText.textContent=text)):(addButton.removeAttribute("disabled"),addButtonText.textContent=FoxTheme.variantStrings.addToCart)}updatePrice(){const classes={onSale:"f-price--on-sale",soldOut:"f-price--sold-out"},selectors={priceWrapper:".f-price",salePrice:".f-price-item--sale",compareAtPrice:[".f-price-item--regular"],unitPriceWrapper:".f-price__unit-wrapper"},moneyFormat=FoxTheme.settings.moneyFormat,{priceWrapper,salePrice,unitPriceWrapper,compareAtPrice}=FoxTheme.utils.queryDomNodes(selectors,this),unitPrice=unitPriceWrapper.querySelector(".f-price__unit"),{compare_at_price,price,unit_price_measurement}=this.currentVariant;if(compare_at_price&&compare_at_price>price?priceWrapper.classList.add(classes.onSale):priceWrapper.classList.remove(classes.onSale),this.currentVariant.available?priceWrapper.classList.remove(classes.soldOut):priceWrapper.classList.add(classes.soldOut),salePrice&&(salePrice.innerHTML=FoxTheme.Currency.formatMoney(price,moneyFormat)),compareAtPrice&&compareAtPrice.length&&compare_at_price>price?compareAtPrice.forEach(item=>item.innerHTML=FoxTheme.Currency.formatMoney(compare_at_price,moneyFormat)):compareAtPrice.forEach(item=>item.innerHTML=FoxTheme.Currency.formatMoney(price,moneyFormat)),unit_price_measurement&&unitPrice){unitPriceWrapper.classList.remove("hidden");const unitPriceContent=`<span>${FoxTheme.Currency.formatMoney(this.currentVariant.unit_price,moneyFormat)}</span>/<span data-unit-price-base-unit>${FoxTheme.Currency.getBaseUnit(this.currentVariant)}</span>`;unitPrice.innerHTML=unitPriceContent}else unitPriceWrapper.classList.add("hidden")}syncWithMainProductForm(){const syncStickyFromVariant=variant=>{if(!this.select)return;if(!variant){this.requireSizeSelection&&(this.select.value="",this.updateButton(!0,this.selectSizeText));return}this.currentVariant=variant;const variantId=String(variant.id);Array.from(this.select.options).forEach(option=>{option.selected=option.value===variantId}),this.select.value=variantId,this.updateStickySizeLabels(),this.updatePrice(),this.updateButton(!variant.available,FoxTheme.variantStrings.soldOut),this.updateQuantityInput()};document.addEventListener("variant:changed",event=>{const variant=event.detail?.variant;syncStickyFromVariant(variant)}),FoxTheme.pubsub.subscribe(FoxTheme.pubsub.PUB_SUB_EVENTS.variantChange,event=>{const variant=event?.data?.variant;syncStickyFromVariant(variant)})}});
2//# sourceMappingURL=/cdn/shop/t/149/assets/sticky-atc-bar.js.map?v=178526008674226591631790249048

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.