function byClass(t,i=document){return i.getElementsByClassName(t)}function query(t,i=document){return i.querySelector(t)}function queryAll(t,i=document){return i.querySelectorAll(t)}function forEachHTML(t,i,e){for(let s=0,n=t.length;s{t.classList.add(i)}))}void 0===t.length?e(t,...i):forEachHTML(t,(t=>{e(t,...i)}))}function addEvent(t,i,e,s){t.addEventListener(i,e,s)}function removeEvent(t,i,e,s){t.removeEventListener(i,e,s)}function getAttr(t,i){return t.getAttribute(i)}function setAttr(t,i,e){t.setAttribute(i,e)}function remAttr(t,i){t.removeAttribute(i)}const defOpts={css3easing:"linear",delayBeforeStart:1e3,direction:"left",duplicated:!1,duration:5e3,gap:20,pauseOnHover:!1,recalcResize:!1,speed:0,startVisible:!1};let instances=0;class marquee{constructor(t,i){if(void 0===t)throw new Error("el cannot be undefined");if("string"==typeof t)throw new Error("el cannot be just a selector");if(null===t)throw new Error("el cannot be null");i={...defOpts,...i},this.el=t,this._loopCount=3;for(const e in defOpts){let s=getAttr(t,`data-${defOpts[e]}`);null!==s&&""!==s&&("true"!==s&&"false"!==s||(s=Boolean(s)),i[e]=s)}i.speed&&(i.duration=parseInt(t.clientWidth)/i.speed*1e3),i.gap=i.duplicated?parseInt(i.gap):0,t.innerHTML=`
${t.innerHTML}
`;const e=byClass("js-marquee",t)[0];e.style.marginRight=`${i.gap}px`,e.style.willChange="transform",e.style.float="left",i.duplicated&&t.appendChild(e.cloneNode(!0)),t.innerHTML=`
${t.innerHTML}
`;const s=byClass("js-marquee-wrapper",t)[0],n="up"===i.direction||"down"===i.direction;this._marqWrap=s,this._vertical=n,this._duration=i.duration,this._opts=i,this._calcSizes();const a=`marqueeAnimation-${Math.floor(1e7*Math.random())}`,r=this._animationStr(a,i.duration/1e3,i.delayBeforeStart/1e3,"infinite");this._animName=a,this._animStr=r,i.duplicated?(n?i.startVisible?this._marqWrap.style.transform="translateY(0px)":this._marqWrap.style.transform=`translateY(${"up"===i.direction?this._contHeight:-1*(2*this._elHeight-i.gap)}px)`:i.startVisible?this._marqWrap.style.transform="translateX(0px)":this._marqWrap.style.transform=`translateX(${"left"===i.direction?this._contWidth:-1*(2*this._elWidth-i.gap)}px)`,i.startVisible||(this._loopCount=1)):i.startVisible?this._loopCount=2:n?this._repositionVert():this._repositionHor(),addEvent(this.el,"pause",this.pause.bind(this)),addEvent(this.el,"resume",this.resume.bind(this)),i.pauseOnHover&&(addEvent(this.el,"mouseover",this.pause.bind(this)),addEvent(this.el,"mouseout",this.resume.bind(this))),this._animEnd=()=>{this._animate(n),this.el.dispatchEvent(new CustomEvent("finished"))},this._instance=instances,instances++,this._animate(n),i.recalcResize&&addEvent(window,"resize",this._recalcResize.bind(this))}_animationStr(t="",i=0,e=0,s=""){return`${t} ${i}s ${e}s ${s} ${this._opts.css3easing}`}_animate(t=!1){const i=this._opts;if(i.duplicated){if(1===this._loopCount){let e=i.duration;e=t?"up"===i.direction?e+this._contHeight/(this._elHeight/e):2*e:"left"===i.direction?e+this._contWidth/(this._elWidth/e):2*e,this._animStr=this._animationStr(this._animName,e/1e3,i.delayBeforeStart/1e3)}else 2===this._loopCount&&(this._animName=`${this._animName}0`,this._animStr=this._animationStr(this._animName,i.duration/1e3,0,"infinite"));this._loopCount++}let e="";t?i.duplicated?(this._loopCount>2&&(this._marqWrap.style.transform=`translateY(${"up"===i.direction?0:-1*this._elHeight}px)`),e=`translateY(${"up"===i.direction?-1*this._elHeight:0}px)`):i.startVisible?2===this._loopCount?(this._animStr=this._animationStr(this._animName,i.duration/1e3,i.delayBeforeStart/1e3),e=`translateY(${"up"===i.direction?-1*this._elHeight:this._contHeight}px)`,this._loopCount++):3===this._loopCount&&(this._animName=`${this._animName}0`,this._animStr=this._animationStr(this._animName,this._completeDuration/1e3,0,"infinite"),this._repositionVert()):(this._repositionVert(),e=`translateY(${"up"===i.direction?-1*this._marqWrap.clientHeight:this._contHeight}px)`):i.duplicated?(this._loopCount>2&&(this._marqWrap.style.transform=`translateX(${"left"===i.direction?0:-1*this._elWidth}px)`),e=`translateX(${"left"===i.direction?-1*this._elWidth:0}px)`):i.startVisible?2===this._loopCount?(this._animStr=this._animationStr(this._animName,i.duration/1e3,i.delayBeforeStart/1e3),e=`translateX(${"left"===i.direction?-1*this._elWidth:this._contWidth}px)`,this._loopCount++):3===this._loopCount&&(this._animName=`${this._animName}0`,this._animStr=this._animationStr(this._animName,i.duration/1e3,0,"infinite"),this._repositionHor()):(this._repositionHor(),e=`translateX(${"left"===i.direction?-1*this._elWidth:this._contWidth}px)`),this.el.dispatchEvent(new CustomEvent("beforeStarting")),this._marqWrap.style.animation=this._animStr;const s=`@keyframes ${this._animName} {\n 100% {\n transform: ${e};\n }\n }`,n=queryAll("style",this._marqWrap);if(n.length)n[n.length-1].innerHTML=s;else if(byClass(`marq-wrap-style-${this._instance}`).length)byClass(`marq-wrap-style-${this._instance}`)[0].innerHTML=s;else{const t=document.createElement("style");addClass(t,`marq-wrap-style-${this._instance}`),t.innerHTML=s,query("head").appendChild(t)}addEvent(this._marqWrap,"animationiteration",this._animIter.bind(this),{once:!0}),addEvent(this._marqWrap,"animationend",this._animEnd.bind(this),{once:!0}),this._status="running",setAttr(this.el,"data-runningStatus","resumed")}_animIter(){this.el.dispatchEvent(new CustomEvent("finished"))}_repositionVert(){this._marqWrap.style.transform=`translateY(${"up"===this._opts.direction?this._contHeight:-1*this._elHeight}px)`}_repositionHor(){this._marqWrap.style.transform=`translateX(${"left"===this._opts.direction?this._contWidth:-1*this._elWidth}px)`}_calcSizes(){const t=this.el,i=this._opts;if(this._vertical){const e=t.clientHeight;this._contHeight=e,remAttr(this._marqWrap,"style"),t.style.clientHeight=`${e}px`;const s=byClass("js-marquee",t),n=s.length-1;forEachHTML(s,((t,e)=>{t.style.float="none",t.style.marginRight="0px",i.duplicated&&e===n?t.style.marginBottom="0px":t.style.marginBottom=`${i.gap}px`}));const a=parseInt(s[0].clientHeight+i.gap);this._elHeight=a,i.startVisible&&!i.duplicated?(this._completeDuration=(a+e)/parseInt(e)*this._duration,i.duration=a/parseInt(e)*this._duration):i.duration=a/parseInt(e)/parseInt(e)*this._duration}else{const e=parseInt(byClass("js-marquee",t)[0].clientWidth+i.gap),s=t.clientWidth;this._contWidth=s,this._elWidth=e,i.startVisible&&!i.duplicated?(this._completeDuration=(e+s)/parseInt(s)*this._duration,i.duration=e/parseInt(s)*this._duration):i.duration=(e+parseInt(s))/parseInt(s)*this._duration}i.duplicated&&(i.duration=i.duration/2)}_recalcResize(){this._calcSizes(),this._loopCount=2,this._animEnd()}pause(){this._marqWrap.style.animationPlayState="paused",this._status="paused",setAttr(this.el,"data-runningStatus","paused"),this.el.dispatchEvent(new CustomEvent("paused"))}resume(){this._marqWrap.style.animationPlayState="running",this._status="running",setAttr(this.el,"data-runningStatus","resumed"),this.el.dispatchEvent(new CustomEvent("resumed"))}toggle(){"paused"===this._status?this.resume():"running"===this._status&&this.pause()}destroy(){removeEvent(this.el,"pause",this.pause.bind(this)),removeEvent(this.el,"resume",this.resume.bind(this)),this._opts.pauseOnHover&&(removeEvent(this.el,"mouseover",this.pause.bind(this)),removeEvent(this.el,"mouseout",this.resume.bind(this))),removeEvent(this._marqWrap,"animationiteration",this._animIter.bind(this),{once:!0}),removeEvent(this._marqWrap,"animationend",this._animEnd.bind(this),{once:!0}),this._opts.recalcResize&&removeEvent(window,"resize",this._recalcResize.bind(this))}refresh(){this._recalcResize()}}