PageSourceSearch

https://www.ankerherz.de/cdn/shop/t/145/assets/sc-bundles.js?v=133110588630142920241779087953

js ankerherz.de collected 2026-10-03 20:49:41 UTC 7,856 bytes, 2 lines download raw bytes

1class ScBundles extends HTMLElement{connectedCallback(){this.form=document.getElementById(this.getAttribute("form-id")),this.inputOwner=`sc-bundles-${Math.random().toString(36).slice(2)}`,this.swiperInitAttempts=0,this.selectedByGroup=new Map,this.swipers=[],this._handleClick=this._handleClick.bind(this),this._handleKeydown=this._handleKeydown.bind(this),this._handleChange=this._handleChange.bind(this),this._handleSubmit=this._handleSubmit.bind(this),this.addEventListener("click",this._handleClick),this.addEventListener("keydown",this._handleKeydown),this.addEventListener("change",this._handleChange),this.form&&this.form.addEventListener("submit",this._handleSubmit,!0),this._initSwipers(),this._syncSelectedCount()}disconnectedCallback(){this.removeEventListener("click",this._handleClick),this.removeEventListener("keydown",this._handleKeydown),this.removeEventListener("change",this._handleChange),this.form&&(this.form.removeEventListener("submit",this._handleSubmit,!0),this._removeBundleInputs()),this.swipers.forEach(swiper=>swiper.destroy(!0,!0)),this.swipers=[]}_initSwipers(){if(typeof window.Swiper>"u"){this.swiperInitAttempts<120&&(this.swiperInitAttempts+=1,window.requestAnimationFrame(()=>{this.isConnected&&this._initSwipers()}));return}this.querySelectorAll("[data-bundle-swiper]").forEach(swiperElement=>{if(swiperElement.swiper){this.swipers.push(swiperElement.swiper);return}const group=swiperElement.closest("[data-bundle-group]"),prevButton=group?.querySelector("[data-bundle-group-arr-prev]"),nextButton=group?.querySelector("[data-bundle-group-arr-next]"),slideGap=this._getCssNumber(swiperElement.parentElement,"--bundle-slide-gap",12),syncSwiperState=()=>this._syncSwiperState(swiper,group,prevButton,nextButton),swiper=new Swiper(swiperElement,{slidesPerView:"auto",spaceBetween:slideGap,watchOverflow:!0,watchSlidesProgress:!0,grabCursor:!0,navigation:{prevEl:prevButton||null,nextEl:nextButton||null,disabledClass:"is-disabled"}});swiper.on("resize",syncSwiperState),swiper.on("update",syncSwiperState),swiper.on("observerUpdate",syncSwiperState),swiper.on("slidesLengthChange",syncSwiperState),window.requestAnimationFrame(syncSwiperState),this.swipers.push(swiper)})}_syncSwiperState(swiper,group,prevButton,nextButton){if(!swiper||!group)return;const isLocked=this._areAllSlidesFullyVisible(swiper);isLocked&&swiper.activeIndex!==0&&swiper.slideTo(0,0,!1),group.classList.toggle("is-slider-locked",isLocked),swiper.el.classList.toggle("is-slider-locked",isLocked),swiper.allowTouchMove=!isLocked,[prevButton,nextButton].forEach(button=>{button&&(button.hidden=isLocked,button.setAttribute("aria-hidden",isLocked?"true":"false"),button.tabIndex=isLocked?-1:0)})}_areAllSlidesFullyVisible(swiper){const slides=Array.from(swiper.slides||[]);if(slides.length<=1)return!0;const containerWidth=swiper.el.getBoundingClientRect().width,spaceBetween=Number(swiper.params.spaceBetween)||0;return slides.reduce((width,slide)=>width+slide.getBoundingClientRect().width,0)+spaceBetween*(slides.length-1)<=containerWidth+1}_getCssNumber(element,propertyName,fallback){if(!element)return fallback;const value=window.getComputedStyle(element).getPropertyValue(propertyName),parsedValue=parseFloat(value);return Number.isNaN(parsedValue)?fallback:parsedValue}_handleClick(event){if(event.target.closest("[data-bundle-product-link]")||event.target.closest("[data-bundle-variant-select]"))return;const slide=event.target.closest("[data-bundle-slide]");if(!slide||!this.contains(slide))return;const swiperElement=slide.closest("[data-bundle-swiper]");swiperElement?.swiper&&swiperElement.swiper.allowClick===!1||this._toggleSlide(slide)}_handleKeydown(event){if(event.key!=="Enter"&&event.key!==" ")return;const slide=event.target.closest("[data-bundle-slide]");!slide||!this.contains(slide)||(event.preventDefault(),this._toggleSlide(slide))}_handleChange(event){const variantSelect=event.target.closest("[data-bundle-variant-select]");if(!variantSelect||!this.contains(variantSelect))return;const slide=variantSelect.closest("[data-bundle-slide]");slide&&(slide.dataset.variantId=variantSelect.value,this._syncSlidePrice(variantSelect),slide.classList.contains("is-selected")?this._syncBundleInputs():this._selectSlide(slide))}_handleSubmit(){this._syncBundleInputs()}_toggleSlide(slide){if(slide.classList.contains("is-selected")){this._deselectSlide(slide);return}this._selectSlide(slide)}
1_selectSlide(slide){const groupIndex=slide.dataset.bundleGroupIndex;if(!groupIndex||!slide.dataset.variantId)return;const selectedSlide=this.selectedByGroup.get(groupIndex);selectedSlide&&selectedSlide!==slide&&this._setSlideSelected(selectedSlide,!1),this.selectedByGroup.set(groupIndex,slide),this._setSlideSelected(slide,!0),this._syncGroupState(groupIndex),this._syncSelectedCount(),this._syncBundleInputs()}_deselectSlide(slide){const groupIndex=slide.dataset.bundleGroupIndex;groupIndex&&(this.selectedByGroup.delete(groupIndex),this._setSlideSelected(slide,!1),this._syncGroupState(groupIndex),this._syncSelectedCount(),this._syncBundleInputs())}_setSlideSelected(slide,isSelected){slide.classList.toggle("is-selected",isSelected),slide.setAttribute("aria-pressed",isSelected?"true":"false")}_syncSlidePrice(variantSelect){const selectedOption=variantSelect.selectedOptions?.[0],productItem=variantSelect.closest("[data-bundle-product-item]"),priceElement=productItem?.querySelector("[data-bundle-price]"),comparePriceElement=productItem?.querySelector("[data-bundle-compare-price]");if(!selectedOption||!priceElement)return;const price=selectedOption.getAttribute("data-price")||"",compareAtPrice=selectedOption.getAttribute("data-compare-at-price")||"",discountLabel=selectedOption.getAttribute("data-discount-label")||"",url=selectedOption.getAttribute("data-url")||"",linkElement=productItem?.querySelector("[data-bundle-product-link]"),discountLabelElement=productItem?.querySelector("[data-bundle-discount-label]");priceElement.lastChild.textContent=price,priceElement.classList.toggle("price--highlight",compareAtPrice!==""),comparePriceElement&&(comparePriceElement.textContent=compareAtPrice,comparePriceElement.hidden=compareAtPrice===""),discountLabelElement&&(discountLabelElement.innerHTML=discountLabel,discountLabelElement.hidden=discountLabel===""),linkElement&&url&&(linkElement.href=url)}_syncGroupState(groupIndex){const group=this.querySelector(`[data-bundle-group][data-bundle-group-index="${groupIndex}"]`);group&&group.classList.toggle("has-selected-product",this.selectedByGroup.has(groupIndex))}_syncSelectedCount(){const selectedCountElement=this.querySelector("[data-bundles-selected]");selectedCountElement&&(selectedCountElement.textContent=String(this.selectedByGroup.size))}_syncBundleInputs(){this.form&&(this._removeBundleInputs(),this._getSelectedSlides().forEach((slide,index)=>{const itemIndex=index+1,idInput=this._createHiddenInput(`items[${itemIndex}][id]`,slide.dataset.variantId),quantityInput=this._createHiddenInput(`items[${itemIndex}][quantity]`,"1");this.form.append(idInput,quantityInput)}))}_removeBundleInputs(){this.form&&this.form.querySelectorAll("[data-sc-bundle-input]").forEach(input=>{input.getAttribute("data-sc-bundle-owner")===this.inputOwner&&input.remove()})}_getSelectedSlides(){return Array.from(this.selectedByGroup.entries()).sort(([groupA],[groupB])=>Number(groupA)-Number(groupB)).map(([,slide])=>slide).filter(slide=>slide?.dataset.variantId)}_createHiddenInput(name,value){const input=document.createElement("input");return input.type="hidden",input.name=name,input.value=value,input.setAttribute("data-sc-bundle-input",""),input.setAttribute("data-sc-bundle-owner",this.inputOwner),input}}customElements.get("sc-bundles")||customElements.define("sc-bundles",ScBundles);
2//# sourceMappingURL=/cdn/shop/t/145/assets/sc-bundles.js.map?v=133110588630142920241779087953

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.