UNPKG

@fancyapps/ui

Version:

Robust JavaScript UI Component Library

3 lines (2 loc) 1.92 kB
/*! License details at fancyapps.com/license */ import{isPlainObject as t}from"../utils/isPlainObject.js";import{stringToHtml as e}from"../utils/strToHtml.js";import{addClass as n}from"../utils/addClass.js";import{removeClass as o}from"../utils/removeClass.js";const i={dotTpl:'<button class="f-carousel__dot" data-carousel-go-to="%i" aria-label="{{GOTO}}"></button>',dynamicFrom:11,dynamicPadd:4,maxCount:1/0,minCount:2},s="f-carousel__dots",a="has-dots",r=()=>{let r,l,c=!1,d=4,u=0,m=d;function f(){if(!r)return;const o=r.getOptions().Dots,f=t(o)?Object.assign(Object.assign({},i),o):i;d=f.dynamicPadd,u=0,m=d;const g=r.getContainer(),y=r.getViewport(),C=r.getPages().length;if(!1===o||!g||!y||C<f.minCount||C>f.maxCount)return void h();l||(l=Array.from(g.querySelectorAll("."+s)).filter(t=>!y.contains(t)).pop()),l||(l=document.createElement("div"),n(l,s),y.insertAdjacentElement("afterend",l));const j=c,{dynamicFrom:v}=f;c=!!(v&&C>=v&&C>=d+4),j!==c&&h(),function(t){if(!r||!l)return;const n=r.getPages().length;if(n!==l.childElementCount){const o=[],i=t.dotTpl||"%d";for(let t=0;t<n;t++){const n=e(r.localize(i,[["%d",t+1]]).replace(/%i/g,t+""));n&&o.push(n)}l.replaceChildren(...o)}}(f),p(),l.classList.toggle("is-dynamic",c),l.style.display="",n(g,a)}function g(){p()}function p(){if(!r||!l||!c)return;const t=r.getPageIndex(),e=r.getPages().length;t<u&&(u=t,m=Math.min(u+d,e)),t>m&&(m=t,u=Math.max(m-d,0));const i=e=>e===t?"active":e>=u&&e<=m?"padd":e===u-1||e===m+1?"small":e===u-2||e===m+2?"micro":"hidden",s=[...l.childNodes];for(const t of s){const e=parseInt(t.dataset.carouselGoTo||"0",10);o(t,"active padd small micro hidden"),n(t,i(e))}}function h(){l&&(l.replaceChildren(),l.style.display="none"),o(null==r?void 0:r.getContainer(),a)}return{init:function(t){r=t,r.on("refresh",f),r.on("change",g)},destroy:function(){h(),null==r||r.off("refresh",f),null==r||r.off("change",g),r=void 0}}};export{r as Dots};