1window.CgCarousel = class { 2 constructor(t, i = {}, e = []) { 3 (this.container = document.querySelector(t)), 4 this.container && 5 ((this.slidesSelector = i.slidesSelector || ".js-carousel__slide"), 6 (this.trackSelector = i.trackSelector || ".js-carousel__track"), 7 (this.slides = []), 8 (this.track = this.container.querySelector(this.trackSelector)), 9 (this.slidesLength = 0), 10 (this.currentBreakpoint = void 0), 11 (this.breakpoints = i.breakpoints || {}), 12 (this.hooks = e), 13 (this.initialOptions = { loop: i.loop || !1, autoplay: i.autoplay || !1, autoplaySpeed: i.autoplaySpeed || 3e3, transitionSpeed: i.transitionSpeed || 650, slidesPerView: i.slidesPerView || 1, spacing: i.spacing || 0 }), 14 (this.options = this.initialOptions), 15 (this.animationStart = void 0), 16 (this.animation = void 0), 17 (this.animationCurrentTrans = 0), 18 (this.animationIndex = 0), 19 (window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame), 20 (window.cancelAnimationFrame = window.cancelAnimationFrame || window.mozCancelAnimationFrame), 21 (this.autoplayInterval = void 0), 22 (this.isButtonRightDisabled = !1), 23 (this.isButtonLeftDisabled = !1), 24 (this.currentIndex = 0), 25 (this.maxIndex = 0), 26 (this.isInfinite = !1), 27 (this.isPrevInfinite = !1), 28 (this.swipeStartX = void 0), 29 (this.swipeStartY = void 0), 30 (this.swipeThreshold = 100), 31 (this.swipeRestraint = 100), 32 (this.swipeDir = void 0), 33 this.track && (this.addEventListeners(), this.initCarousel())); 34 } 35 hook(t) { 36 this.hooks[t] && this.hooks[t](this); 37 } 38 isTouchableDevice() { 39 return window.matchMedia("(pointer: coarse)").matches; 40 } 41 handleSwipe() { 42 switch (this.swipeDir) { 43 case "top": 44 case "bottom": 45 default: 46 break; 47 case "left": 48 this.next(); 49 break; 50 case "right": 51 this.prev(); 52 } 53 } 54 onSwipeStart(t) { 55 if (!this.isTouchableDevice() || !t.changedTouches) return; 56 const i = t.changedTouches[0]; 57 (this.swipeStartX = i.pageX), (this.swipeStartY = i.pageY); 58 } 59 setSwipeDirection(t) { 60 const i = t.changedTouches[0], 61 e = i.pageX - this.swipeStartX, 62 s = i.pageY - this.swipeStartY; 63 Math.abs(e) >= this.swipeThreshold && Math.abs(s) <= this.swipeRestraint 64 ? (this.swipeDir = e < 0 ? "left" : "right") 65 : Math.abs(s) >= this.swipeThreshold && Math.abs(e) <= this.swipeRestraint && (this.swipeDir = s < 0 ? "up" : "down"); 66 } 67 onSwipeMove(t) { 68 this.isTouchableDevice() && t.changedTouches && (this.setSwipeDirection(t), ["left", "right"].includes(this.swipeDir) && t.cancelable && t.preventDefault()); 69 } 70 onSwipeEnd(t) { 71 this.isTouchableDevice() && t.changedTouches && (this.setSwipeDirection(t), this.handleSwipe()); 72 } 73 addEventListeners() { 74 window.addEventListener("orientationchange", () => this.onResize()), 75 window.addEventListener("resize", () => this.onResize()), 76 this.container.addEventListener("touchstart", (t) => this.onSwipeStart(t), { passive: !0 }), 77 this.container.addEventListener("touchmove", (t) => this.onSwipeMove(t), !1), 78 this.container.addEventListener("touchend", (t) => this.onSwipeEnd(t), { passive: !0 }); 79 } 80 onResize() { 81 this.checkBreakpoint() && this.buildCarousel(), this.hook("resized"); 82 } 83 setUpAutoplay() { 84 this.options.autoplay && (clearInterval(this.autoplayInterval), (this.autoplayInterval = setInterval(() => this.next(), this.options.autoplaySpeed))); 85 } 86 checkBreakpoint() { 87 if (!this.breakpoints) return; 88 const t = Object.keys(this.breakpoints) 89 .reverse() 90 .find((t) => { 91 const i = `(min-width: ${t}px)`; 92 return window.matchMedia(i).matches; 93 }); 94 if (this.currentBreakpoint === t) return; 95 this.currentBreakpoint = t; 96 const i = t ? this.breakpoints[t] : this.initialOptions; 97 return (this.options = { ...this.initialOptions, ...i }), !0; 98 } 99 setButtonsVisibility() { 100 (this.isButtonLeftDisabled = !this.options.loop && 0 === this.currentIndex), (this.isButtonRightDisabled = !this.options.loop && this.currentIndex === this.maxIndex - 1); 101 } 102 clearCarouselStyles() { 103 ["grid-auto-columns", "gap", "transition", "left"].map((t) => this.track.style.removeProperty(t)); 104 const t = ["grid-column-start", "grid-column-end", "grid-row-start", "grid-row-end", "left"];
105 this.slides.forEach((i) => { 106 t.map((t) => i.style.removeProperty(t)); 107 }); 108 } 109 setCarouselStyles() { 110 if (!this.slides) return; 111 const t = this.options.slidesPerView, 112 i = 100 / t, 113 e = (this.options.spacing * (t - 1)) / t; 114 (this.track.style.gridAutoColumns = `calc(${i}% - ${e}px)`), (this.track.style.gridGap = `${this.options.spacing}px`), (this.track.style.left = 0); 115 } 116 buildCarousel() { 117 (this.maxIndex = Math.ceil(this.slidesLength / this.options.slidesPerView)), this.clearCarouselStyles(), this.setCarouselStyles(), this.setButtonsVisibility(), this.setUpAutoplay(), (this.currentIndex = 0), this.hook("built"); 118 } 119 initCarousel() { 120 (this.slides = this.container.querySelectorAll(this.slidesSelector)), (this.slidesLength = this.slides?.length), this.checkBreakpoint(), this.buildCarousel(), this.hook("created"); 121 } 122 onAnimationEnd() { 123 const t = this.options.spacing * this.animationIndex, 124 i = -100 * this.animationIndex; 125 (this.track.style.left = `calc(${i}% - ${t}px)`), (this.animationCurrentTrans = i), (this.animation = null), this.isInfinite && this.clearInfinite(), this.isPrevInfinite && this.clearPrevInfinite(); 126 } 127 moveAnimateAbort() { 128 this.animation && (window.cancelAnimationFrame(this.animation), this.onAnimationEnd()); 129 } 130 animateLeft(t, i, e, s) { 131 const n = t - this.animationStart, 132 o = ((r = n / s), 1 - Math.pow(1 - r, 5)); 133 var r; 134 const a = (i * o + this.animationCurrentTrans * (1 - o)).toFixed(2); 135 (this.track.style.left = `calc(${a}% - ${e}px)`), 136 n >= s 137 ? this.onAnimationEnd() 138 : (this.animation = window.requestAnimationFrame((t) => { 139 this.animateLeft(t, i, e, s); 140 })); 141 } 142 moveSlide(t, i) { 143 this.moveAnimateAbort(); 144 const e = this.options.spacing * t, 145 s = -100 * t; 146 (this.animation = window.requestAnimationFrame((i) => { 147 t === this.maxIndex && this.setInfinite(), -1 === t && this.setPrevInfinite(), (this.animationStart = i), (this.animationIndex = this.currentIndex), this.animateLeft(i, s, e, this.options.transitionSpeed); 148 })), 149 (this.currentIndex = i), 150 this.setUpAutoplay(), 151 this.setButtonsVisibility(), 152 this.hook("moved"); 153 } 154 setInfinite() { 155 this.isInfinite = !0; 156 const t = this.options.slidesPerView * this.maxIndex; 157 for (let i = 0; i < this.options.slidesPerView; i++) { 158 this.slides[i].style.left = `calc((100% * ${t}) + (${this.options.spacing}px * ${t}))`; 159 } 160 } 161 clearInfinite() { 162 (this.isInfinite = !1), 163 (this.track.style.left = `calc(${-100 * this.currentIndex}% - ${this.options.spacing * this.currentIndex}px)`), 164 this.slides.forEach((t, i) => { 165 i >= this.options.slidesPerView || t.style.removeProperty("left"); 166 }); 167 } 168 next() { 169 const t = this.currentIndex === this.maxIndex - 1 ? 0 : this.currentIndex + 1; 170 (!this.options.loop && t < this.currentIndex) || (t < this.currentIndex ? this.moveSlide(this.currentIndex + 1, t) : this.moveSlide(t, t)); 171 } 172 setPrevInfinite() { 173 this.isPrevInfinite = !0; 174 const t = this.options.slidesPerView * this.maxIndex, 175 i = t - this.options.slidesPerView; 176 for (let e = this.slides.length - 1; e >= 0; e--) { 177 if (e < i) return; 178 this.slides[e].style.left = `calc((-100% * ${t}) - (${this.options.spacing}px * ${t}))`; 179 } 180 } 181 clearPrevInfinite() { 182 (this.isPrevInfinite = !1), 183 (this.track.style.left = `calc(${-100 * this.currentIndex}% - ${this.options.spacing * this.currentIndex}px)`), 184 this.slides.forEach((t, i) => { 185 t.style.removeProperty("left"); 186 }); 187 } 188 prev() { 189 const t = 0 === this.currentIndex ? this.maxIndex - 1 : this.currentIndex - 1; 190 (!this.options.loop && t > this.currentIndex) || (t > this.currentIndex ? this.moveSlide(this.currentIndex - 1, t) : this.moveSlide(t, t)); 191 } 192 moveToSlide(t) { 193 t !== this.currentIndex && this.moveSlide(t, t); 194 } 195 getSlides() { 196 return this.slides; 197 } 198 getCurrentIndex() { 199 return this.currentIndex; 200 } 201 getOptions() { 202 return this.options; 203 } 204 getPageSize() { 205 return this.maxIndex; 206 } 207};
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.