PageSourceSearch

https://botmag.net/src/js/itc-slider.js?p=124

js botmag.net collected 2026-10-07 17:22:22 UTC 10,787 bytes, 1 lines download raw bytes

1class ItcSlider{static#t="wrapper";static#s="items";static#e="item";static#i="item-active";static#a="indicator";static#n="indicator-active";static#h="btn-prev";static#o="btn-next";static#r="btn-hide";static#c="transition-none";static#l=20;static#d=[];static checkSupportPassiveEvents(){let t=!1;try{const s=Object.defineProperty({},"passive",{get(){t=!0}});window.addEventListener("testPassiveListener",null,s),window.removeEventListener("testPassiveListener",null,s)}catch(s){t=!1}return t}#p;#u;constructor(t,s={},e="itc-slider-"){this.#u={prefix:e,el:t,elWrapper:t.querySelector(`.${e}${this.constructor.#t}`),elItems:t.querySelector(`.${e}${this.constructor.#s}`),elListItem:t.querySelectorAll(`.${e}${this.constructor.#e}`),btnPrev:t.querySelector(`.${e}${this.constructor.#h}`),btnNext:t.querySelector(`.${e}${this.constructor.#o}`),btnClassHide:e+this.constructor.#r,exOrderMin:0,exOrderMax:0,exItemMin:null,exItemMax:null,exTranslateMin:0,exTranslateMax:0,direction:"next",intervalId:null,isSwiping:!1,swipeX:0,swipeY:0},this.#p={loop:!0,direction:"next",autoplay:!1,interval:5e3,refresh:!0,swipe:!0,...s},this.#m(),this.#v()}static getInstance(t){const s=this.#d.find((s=>s.target===t));return s?s.instance:null}static getOrCreateInstance(t,s={},e="itc-slider-"){const i="string"==typeof t?document.querySelector(t):t,a=this.getInstance(i);if(a)return a;const n=new this(i,s,e);return this.#d.push({target:i,instance:n}),n}static createInstances(){document.querySelectorAll('[data-slider="itc-slider"]').forEach((t=>{const{dataset:s}=t,e={};Object.keys(s).forEach((t=>{if("slider"===t)return;let i=s[t];i=Number.isNaN(Number(i))?i:Number(i),i="true"===i||i,i="false"!==i&&i,e[t]=i})),this.getOrCreateInstance(t,e)}))}slideNext(){this.#u.direction="next",this.#I()}slidePrev(){this.#u.direction="prev",this.#I()}slideTo(t){this.#f(t)}reset(){this.#g()}get autoplay(){return{start:()=>{this.#p.autoplay=!0,this.#x()},stop:()=>{this.#x("stop"),this.#p.autoplay=!1}}}dispose(){this.#E();const t=this.#u.prefix+this.constructor.#c,s=this.#u.prefix+this.constructor.#i;this.#x("stop"),this.#u.elItems.classList.add(t),this.#u.elItems.style.transform="",this.#u.elListItem.forEach((t=>{t.style.transform="",t.classList.remove(s)}));const e=`${this.#u.prefix}${this.constructor.#n}`;document.querySelectorAll(`.${e}`).forEach((t=>{t.classList.remove(e)})),this.#u.elItems.offsetHeight,this.#u.elItems.classList.remove(t);const i=this.constructor.#d.findIndex((t=>t.target===this.#u.el));this.constructor.#d.splice(i,1)}#T(t){if(this.#u.isMoving&&t.preventDefault(),!t.target.closest(".it
1c-slider-btn")&&!t.target.closest(".itc-slider-indicators"))return;const s=this.#u.prefix+this.constructor.#h,e=this.#u.prefix+this.constructor.#o;if(this.#x("stop"),t.target.closest(`.${s}`)||t.target.closest(`.${e}`))this.#u.direction=t.target.closest(`.${s}`)?"prev":"next",this.#I();else if(t.target.dataset.slideTo){const s=parseInt(t.target.dataset.slideTo,10);this.#f(s)}this.#p.loop&&this.#x()}#b(){this.#x("stop")}#M(){this.#x()}#L(){if(this.#p.loop){if(this.#u.isBalancing)return;this.#u.isBalancing=!0,window.requestAnimationFrame((()=>{this.#w(!1)}))}}#y(){this.#p.loop&&(this.#u.isBalancing=!1)}#S(t){t.preventDefault()}#N(){"hidden"===document.visibilityState?this.#x("stop"):"visible"===document.visibilityState&&this.#p.loop&&this.#x()}#_(t){this.#u.isMoving=!1,this.#x("stop");const s=0===t.type.search("touch")?t.touches[0]:t;this.#u.swipeX=s.clientX,this.#u.swipeY=s.clientY,this.#u.isSwiping=!0,this.#u.isTouchMoving=!1}#C(t){if(!this.#u.isSwiping)return;const s=0===t.type.search("touch")?t.changedTouches[0]:t,e=this.#u.elWrapper.getBoundingClientRect();let i=s.clientX<e.left?e.left:s.clientX;i=i>e.right?e.right:i;let a=this.#u.swipeX-i;if(0===a)return void(this.#u.isSwiping=!1);if(!this.#p.loop){const t=1===this.#u.activeItems[0]&&a<=0,s=this.#u.activeItems[this.#u.activeItems.length-1]&&a>=0;(t||s)&&(a=0)}const n=a/this.#u.width*100,h=this.#u.prefix+this.constructor.#c;if(this.#u.elItems.classList.remove(h),n>this.constructor.#l){this.#u.direction="next";let t=0;for(;t<=Math.floor(Math.abs(n)-this.constructor.#l)/100;)this.#I(),t+=1}else if(n<-this.constructor.#l){this.#u.direction="prev";let t=0;for(;t<=Math.floor(Math.abs(n)-this.constructor.#l)/100;)this.#I(),t+=1}else this.#u.direction="none",this.#I();this.#u.isSwiping=!1,this.#p.loop&&this.#x(),this.#u.isBalancing=!1}#O(t){if(!this.#u.isSwiping)return;this.#u.isMoving=!0;const s=0===t.type.search("touch")?t.changedTouches[0]:t;let e=this.#u.swipeX-s.clientX;const i=this.#u.swipeY-s.clientY,a=(this.#u.prevPosX?this.#u.prevPosX:s.clientX)>s.clientX?"next":"prev";if(this.#u.prevPosX=s.clientX,!this.#u.isTouchMoving){if(Math.abs(i)>Math.abs(e)||0===Math.abs(e))return void(this.#u.isSwiping=!1);this.#u.isTouchMoving=!0}if(t.preventDefault(),!this.#p.loop){const t=1===this.#u.activeItems[0]&&e<=0,s=this.#u.activeItems[this.#u.activeItems.length-1]&&e>=0;(t||s)&&(e/=4)}const n=this.#u.prefix+this.constructor.#c;this.#u.elItems.classList.add(n);const h=this.#u.translate-e;this.#u.elItems.style.transform=`translate3D(${h}px, 0px, 0.1px)`,this.#p.loop&&(this.#u.direction=e>0?"next":"prev",this.#u.direction=a,window.requestAnimationFrame((()=>{this.#w(!0)})))}#v(){this.#u.events={click:[this.#u.el,this.#T.bind(this),!0],mouseenter:[this.#u.el,this.#b.bind(this),!0],mouseleave:[this.#u.el,this.#M.bind(this),!0],transitionstart:[this.#u.elItems,this.#L.bind(this),this.#p.loop],transitionend:[this.#u.elItems,this.#y.bind(this),this.#p.loop],touchstart:[this.#u.el,this.#_.bind(this),this.#p.swipe],mousedown:[this.#u.el,this.#_.bind(this),this.#p.swipe],touchend:[document,this.#C.bind(this),this.#p.swipe],mouseup:[document,this.#C.bind(this),this.#p.swipe],touchmove:[this.#u.el,this.#O.bind(this),this.#p.swipe],mousemove:[this.#u.el,this.#O.bind(this),this.#p.swipe],dragstart:[this.#u.el,this.#S.bind(this),!0],visibilitychange:[document,this.#N.bind(this),!0]},Object.keys(this.#u.events).forEach((t=>{if(this.#u.events[t][2]){const s=this.#u.events[t][0],e=this.#u.events[t][1];if("touchstart"===t||"touchmove"===t){const i=!!this.constructor.checkSupportPassiveEvents()&&{passive:!1};s.addEventListener(t,e,i)}else s.addEventListener(t,e)}}));new ResizeObserver((t=>{window.requestAnimationFrame(this.#g.bind(this))})).observe(this.#u.elWrapper)}#E(){Object.keys(this.#u.events).forEach((t=>{if(this.#u.events[t][2]){const s=this.#u.events[t][0],e=this.#u.events[t][1];s.removeEventListener(t,e)}}))}#x(t){if(this.#p.autoplay)return"stop"===t?(clearInterval(this.#u.intervalId),void(this.#u.intervalId=null)):void(null===this.#u.intervalId&&(this.#u.intervalId=setInterval((()=>{this.#u.direction="prev"===this.#p.direction?"prev":"next",this.#I()}),this.#p.interval)))}#w(t=!1){if(!this.#u.isBalancing&&!t)return;const s=this.#u.elWrapper.getBoundingClientRect(),e=s.width/this.#u.countActiveItems/2,i=this.#u.elListItem.length;if("next"===this.#u.direction){if(this.#u.exItemMin.getBoundingClientRect().right<s.left-e){const t=this.#u.els.find((t=>t.el===this.#u.exItemMin));t.order=this.#u.exOrderMin+i;const s=this.#u.exTranslateMin+i*this.#u.width;t.translate=s,this.#u.exItemMin.style.transform=`translate3D(${s}px, 0px, 0.1px)`,this.#A()}}else{if(this.#u.exItemMax.getBoundingClientRect().left>s.right+e){const t=this.#u.els.find((t=>t.el===this.#u.exItemMax));t.order=this.#u.exOrderMax-i;const s=this.#u.exTranslateMax-i*this.#u.width;t.translate=s,this.#u.exItemMax.style.transform=`translate3D(${s}px, 0px, 0.1px)`,this.#A()}}t||window.requestAnimationFrame((()=>{this.#w(!1)}))}#P(){const t=this.#u.prefix+this.constructor.#i;
1this.#u.activeItems.forEach(((s,e)=>{s?this.#u.elListItem[e].classList.add(t):this.#u.elListItem[e].classList.remove(t);const i=this.#u.el.querySelectorAll(`.${this.#u.prefix}${this.constructor.#a}`);i.length&&s?i[e].classList.add(`${this.#u.prefix}${this.constructor.#n}`):i.length&&!s&&i[e].classList.remove(`${this.#u.prefix}${this.constructor.#n}`)}))}#I(){if("none"===this.#u.direction){const t=this.#u.translate;return void(this.#u.elItems.style.transform=`translate3D(${t}px, 0px, 0.1px)`)}const t="next"===this.#u.direction?-this.#u.width:this.#u.width,s=this.#u.translate+t;if(!this.#p.loop){const t=this.#u.width*(this.#u.elListItem.length-this.#u.countActiveItems);if(s<-t||s>0)return;this.#u.btnPrev&&(this.#u.btnPrev.classList.remove(this.#u.btnClassHide),this.#u.btnNext.classList.remove(this.#u.btnClassHide)),this.#u.btnPrev&&s===-t?this.#u.btnNext.classList.add(this.#u.btnClassHide):this.#u.btnPrev&&0===s&&this.#u.btnPrev.classList.add(this.#u.btnClassHide)}"next"===this.#u.direction?this.#u.activeItems=[...this.#u.activeItems.slice(-1),...this.#u.activeItems.slice(0,-1)]:this.#u.activeItems=[...this.#u.activeItems.slice(1),...this.#u.activeItems.slice(0,1)],this.#P(),this.#u.translate=s,this.#u.elItems.style.transform=`translate3D(${s}px, 0px, 0.1px)`}#f(t){const s=this.#u.activeItems.reduce(((s,e,i)=>{const a=e?t-i:s;return Math.abs(a)<Math.abs(s)?a:s}),this.#u.activeItems.length);if(0!==s){this.#u.direction=s>0?"next":"prev";for(let t=0;t<Math.abs(s);t++)this.#I()}}#m(){this.#u.els=[],this.#u.translate=0,this.#u.activeItems=[],this.#u.isBalancing=!1;const t=parseFloat(getComputedStyle(this.#u.elItems).gap)||0;this.#u.width=this.#u.elListItem[0].getBoundingClientRect().width+t;const s=this.#u.elWrapper.getBoundingClientRect().width;if(this.#u.countActiveItems=Math.round(s/this.#u.width),this.#u.elListItem.forEach(((t,s)=>{t.style.transform="",this.#u.activeItems.push(s<this.#u.countActiveItems?1:0),this.#u.els.push({el:t,index:s,order:s,translate:0})})),this.#p.loop){const t=this.#u.elListItem.length-1,s=-(t+1)*this.#u.width;this.#u.elListItem[t].style.transform=`translate3D(${s}px, 0px, 0.1px)`,this.#u.els[t].order=-1,this.#u.els[t].translate=s,this.#A()}else this.#u.btnPrev&&this.#u.btnPrev.classList.add(this.#u.btnClassHide);this.#P(),this.#x()}#g(){const t=this.#u.prefix+this.constructor.#c,s=parseFloat(getComputedStyle(this.#u.elItems).gap)||0,e=this.#u.elListItem[0].getBoundingClientRect().width+s,i=this.#u.elWrapper.getBoundingClientRect().width,a=Math.round(i/e);e===this.#u.width&&a===this.#u.countActiveItems||(this.#x("stop"),this.#u.elItems.classList.add(t),this.#u.elItems.style.transform="translate3D(0px, 0px, 0.1px)",this.#m(),window.requestAnimationFrame((()=>{this.#u.elItems.classList.remove(t)})))}#A(){const t=this.#u.els.map((t=>t.el)),s=this.#u.els.map((t=>t.order));this.#u.exOrderMin=Math.min(...s),this.#u.exOrderMax=Math.max(...s);const e=s.indexOf(this.#u.exOrderMin),i=s.indexOf(this.#u.exOrderMax);this.#u.exItemMin=t[e],this.#u.exItemMax=t[i],this.#u.exTranslateMin=this.#u.els[e].translate,this.#u.exTranslateMax=this.#u.els[i].translate}}ItcSlider.createInstances();

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.