swiper
Version:
Most modern mobile touch slider and framework with hardware accelerated transitions
2 lines • 9.3 kB
JavaScript
import{c as classesToSelector}from"../shared/classes-to-selector.min.mjs";import{c as createElementIfNotDefined}from"../shared/create-element-if-not-defined.min.mjs";import{s as makeElementsArray,j as elementParents,w as setInnerHTML,i as elementOuterSize,b as elementIndex}from"../shared/utils.min.mjs";const isVirtualEnabled=e=>!!e.virtual&&!!e.params.virtual?.enabled,isFreeModeEnabled=e=>!!e.params.freeMode?.enabled,Pagination=({swiper:e,extendParams:s,on:a,emit:l})=>{const t="swiper-pagination";let n;s({pagination:{el:null,bulletElement:"span",clickable:!1,hideOnClick:!1,renderBullet:null,renderProgressbar:null,renderFraction:null,renderCustom:null,progressbarOpposite:!1,type:"bullets",dynamicBullets:!1,dynamicMainBullets:1,formatFractionCurrent:e=>e,formatFractionTotal:e=>e,bulletClass:`${t}-bullet`,bulletActiveClass:`${t}-bullet-active`,modifierClass:`${t}-`,currentClass:`${t}-current`,totalClass:`${t}-total`,hiddenClass:`${t}-hidden`,progressbarFillClass:`${t}-progressbar-fill`,progressbarOppositeClass:`${t}-progressbar-opposite`,clickableClass:`${t}-clickable`,lockClass:`${t}-lock`,horizontalClass:`${t}-horizontal`,verticalClass:`${t}-vertical`,paginationDisabledClass:`${t}-disabled`}}),e.pagination={el:null,bullets:[]};let i=0;function r(){return e.params.pagination}function o(){return!r().el||!e.pagination.el||Array.isArray(e.pagination.el)&&0===e.pagination.el.length}function c(e,s){const{bulletActiveClass:a}=r();if(!e)return;let l=e[("prev"===s?"previous":"next")+"ElementSibling"];l&&(l.classList.add(`${a}-${s}`),l=l[("prev"===s?"previous":"next")+"ElementSibling"],l&&l.classList.add(`${a}-${s}-${s}`))}function p(s){const a=s.target.closest(classesToSelector(r().bulletClass));if(!a)return;s.preventDefault();const l=(elementIndex(a)??0)*(e.params.slidesPerGroup??1);if(e.params.loop){if(e.realIndex===l)return;const s=(t=e.realIndex,n=l,i=e.slides.length,(n%=i)===1+(t%=i)?"next":n===t-1?"previous":void 0);"next"===s?e.slideNext():"previous"===s?e.slidePrev():e.slideToLoop(l)}else e.slideTo(l);var t,n,i}function d(){const s=e.rtl,a=r();if(o())return;const t=makeElementsArray(e.pagination.el);let p,d;const u=isVirtualEnabled(e)?e.virtual.slides.length:e.slides.length,m=e.params.loop?Math.ceil(u/(e.params.slidesPerGroup??1)):e.snapGrid.length;if(e.params.loop?(d=e.previousRealIndex||0,p=(e.params.slidesPerGroup??1)>1?Math.floor(e.realIndex/(e.params.slidesPerGroup??1)):e.realIndex):void 0!==e.snapIndex?(p=e.snapIndex,d=e.previousSnapIndex):(d=e.previousIndex||0,p=e.activeIndex||0),"bullets"===a.type&&e.pagination.bullets&&e.pagination.bullets.length>0){const l=e.pagination.bullets;let r=0,o=0,u=0;if(a.dynamicBullets){n=elementOuterSize(l[0],e.isHorizontal()?"width":"height");const s=e.isHorizontal()?"width":"height";t.forEach(e=>{e.style[s]=(n??0)*(a.dynamicMainBullets+4)+"px"}),a.dynamicMainBullets>1&&void 0!==d&&(i+=p-(d||0),i>a.dynamicMainBullets-1?i=a.dynamicMainBullets-1:i<0&&(i=0)),r=Math.max(p-i,0),o=r+(Math.min(l.length,a.dynamicMainBullets)-1),u=(o+r)/2}if(l.forEach(e=>{const s=["","-next","-next-next","-prev","-prev-prev","-main"].map(e=>`${a.bulletActiveClass}${e}`).flatMap(e=>"string"==typeof e&&e.includes(" ")?e.split(" "):[e]);e.classList.remove(...s)}),t.length>1)l.forEach(s=>{const l=elementIndex(s);l===p?s.classList.add(...a.bulletActiveClass.split(" ")):e.isElement&&s.setAttribute("part","bullet"),a.dynamicBullets&&void 0!==l&&(l>=r&&l<=o&&s.classList.add(...`${a.bulletActiveClass}-main`.split(" ")),l===r&&c(s,"prev"),l===o&&c(s,"next"))});else{const s=l[p];if(s&&s.classList.add(...a.bulletActiveClass.split(" ")),e.isElement&&l.forEach((e,s)=>{e.setAttribute("part",s===p?"bullet-active":"bullet")}),a.dynamicBullets){const e=l[r],s=l[o];for(let e=r;e<=o;e+=1)l[e]&&l[e].classList.add(...`${a.bulletActiveClass}-main`.split(" "));c(e,"prev"),c(s,"next")}}if(a.dynamicBullets){const t=Math.min(l.length,a.dynamicMainBullets+4),i=((n??0)*t-(n??0))/2-u*(n??0),r=s?"right":"left",o=e.isHorizontal()?r:"top";l.forEach(e=>{e.style[o]=`${i}px`})}}t.forEach((s,t)=>{if("fraction"===a.type&&(s.querySelectorAll(classesToSelector(a.currentClass)).forEach(e=>{e.textContent=String(a.formatFractionCurrent(p+1))}),s.querySelectorAll(classesToSelector(a.totalClass)).forEach(e=>{e.textContent=String(a.formatFractionTotal(m))})),"progressbar"===a.type){let l;l=a.progressbarOpposite?e.isHorizontal()?"vertical":"horizontal":e.isHorizontal()?"horizontal":"vertical";const t=(p+1)/m;let n=1,i=1;"horizontal"===l?n=t:i=t,s.querySelectorAll(classesToSelector(a.progressbarFillClass)).forEach(s=>{s.style.transform=`translate3d(0,0,0) scaleX(${n}) scaleY(${i})`,s.style.transitionDuration=`${e.params.speed}ms`})}"custom"===a.type&&a.renderCustom?(setInnerHTML(s,a.renderCustom(e,p+1,m)),0===t&&l("paginationRender",s)):(0===t&&l("paginationRender",s),l("paginationUpdate",s)),e.params.watchOverflow&&e.enabled&&s.classList[e.isLocked?"add":"remove"](a.lockClass)})}function u(){const s=r();if(o())return;const a=e.params.grid,t=isVirtualEnabled(e)?e.virtual.slides.length:e.grid&&a?.rows&&a.rows>1?e.slides.length/Math.ceil(a.rows):e.slides.length,n=makeElementsArray(e.pagination.el);let i="";if("bullets"===s.type){let a=e.params.loop?Math.ceil(t/(e.params.slidesPerGroup??1)):e.snapGrid.length;e.params.freeMode&&isFreeModeEnabled(e)&&a>t&&(a=t);for(let l=0;l<a;l+=1)s.renderBullet?i+=s.renderBullet.call(e,l,s.bulletClass):i+=`<${s.bulletElement} ${e.isElement?'part="bullet"':""} class="${s.bulletClass}"></${s.bulletElement}>`}"fraction"===s.type&&(i=s.renderFraction?s.renderFraction.call(e,s.currentClass,s.totalClass):`<span class="${s.currentClass}"></span> / <span class="${s.totalClass}"></span>`),"progressbar"===s.type&&(i=s.renderProgressbar?s.renderProgressbar.call(e,s.progressbarFillClass):`<span class="${s.progressbarFillClass}"></span>`),e.pagination.bullets=[],n.forEach(a=>{"custom"!==s.type&&setInnerHTML(a,i||""),"bullets"===s.type&&e.pagination.bullets.push(...Array.from(a.querySelectorAll(classesToSelector(s.bulletClass))))}),"custom"!==s.type&&l("paginationRender",n[0])}function m(){e.params.pagination=createElementIfNotDefined(e,e.originalParams.pagination,e.params.pagination,{el:"swiper-pagination"});const s=r();if(!s.el)return;let a;if("string"==typeof s.el&&e.isElement&&(a=e.el.querySelector(s.el)),a||"string"!=typeof s.el||(a=[...document.querySelectorAll(s.el)]),a||(a=s.el),!a||Array.isArray(a)&&0===a.length)return;if(e.params.uniqueNavElements&&"string"==typeof s.el&&Array.isArray(a)&&a.length>1&&(a=[...e.el.querySelectorAll(s.el)],a.length>1)){const s=a.find(s=>elementParents(s,".swiper")[0]===e.el);s&&(a=s)}Array.isArray(a)&&1===a.length&&(a=a[0]),Object.assign(e.pagination,{el:a});makeElementsArray(a).forEach(a=>{"bullets"===s.type&&s.clickable&&a.classList.add(...(s.clickableClass||"").split(" ")),a.classList.add(s.modifierClass+s.type),a.classList.add(e.isHorizontal()?s.horizontalClass:s.verticalClass),"bullets"===s.type&&s.dynamicBullets&&(a.classList.add(`${s.modifierClass}${s.type}-dynamic`),i=0,s.dynamicMainBullets<1&&(s.dynamicMainBullets=1)),"progressbar"===s.type&&s.progressbarOpposite&&a.classList.add(s.progressbarOppositeClass),s.clickable&&a.addEventListener("click",p),e.enabled||a.classList.add(s.lockClass)})}function g(){const s=r();if(o())return;const a=e.pagination.el;if(a){makeElementsArray(a).forEach(a=>{a.classList.remove(s.hiddenClass),a.classList.remove(s.modifierClass+s.type),a.classList.remove(e.isHorizontal()?s.horizontalClass:s.verticalClass),s.clickable&&(a.classList.remove(...(s.clickableClass||"").split(" ")),a.removeEventListener("click",p))})}e.pagination.bullets&&e.pagination.bullets.forEach(e=>e.classList.remove(...s.bulletActiveClass.split(" ")))}a("changeDirection",()=>{if(!e.pagination||!e.pagination.el)return;const s=r();makeElementsArray(e.pagination.el).forEach(a=>{a.classList.remove(s.horizontalClass,s.verticalClass),a.classList.add(e.isHorizontal()?s.horizontalClass:s.verticalClass)})}),a("init",()=>{!1===r().enabled?b():(m(),u(),d())}),a("activeIndexChange",()=>{void 0===e.snapIndex&&d()}),a("snapIndexChange",()=>{d()}),a("snapGridLengthChange",()=>{u(),d()}),a("destroy",()=>{g()}),a("enable disable",()=>{const{el:s}=e.pagination;if(s){const a=r();makeElementsArray(s).forEach(s=>s.classList[e.enabled?"remove":"add"](a.lockClass))}}),a("lock unlock",()=>{d()}),a("click",(s,a)=>{const t=a.target,n=makeElementsArray(e.pagination.el),i=r();if(i.el&&i.hideOnClick&&n&&n.length>0&&!t.classList.contains(i.bulletClass)){if(e.navigation&&(e.navigation.nextEl&&t===e.navigation.nextEl||e.navigation.prevEl&&t===e.navigation.prevEl))return;const s=n[0].classList.contains(i.hiddenClass);l(!0===s?"paginationShow":"paginationHide"),n.forEach(e=>e.classList.toggle(i.hiddenClass))}});const b=()=>{const s=r();e.el.classList.add(s.paginationDisabledClass);const{el:a}=e.pagination;if(a){makeElementsArray(a).forEach(e=>e.classList.add(s.paginationDisabledClass))}g()};Object.assign(e.pagination,{enable:()=>{const s=r();e.el.classList.remove(s.paginationDisabledClass);const{el:a}=e.pagination;if(a){makeElementsArray(a).forEach(e=>e.classList.remove(s.paginationDisabledClass))}m(),u(),d()},disable:b,render:u,update:d,init:m,destroy:g})};export{Pagination as default};
//# sourceMappingURL=pagination.min.mjs.map