@fancyapps/ui
Version:
Robust JavaScript UI Component Library
3 lines (2 loc) • 1.87 kB
JavaScript
/*! 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 o}from"../utils/addClass.js";import{removeClass as n}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,m=0,f=d;function u(){if(!r)return;const n=r.getOptions().Dots,u=t(n)?{...i,...n}:i;d=u.dynamicPadd,m=0,f=d;const g=r.getContainer(),y=r.getViewport(),C=r.getPages().length;if(!1===n||!g||!y||C<u.minCount||C>u.maxCount)return void h();l||(l=Array.from(g.querySelectorAll("."+s)).filter(t=>!y.contains(t)).pop()),l||(l=document.createElement("div"),o(l,s),y.insertAdjacentElement("afterend",l));const P=c,{dynamicFrom:j}=u;c=!!(j&&C>=j&&C>=d+4),P!==c&&h(),function(t){if(!r||!l)return;const o=r.getPages().length;if(o!==l.childElementCount){const n=[],i=t.dotTpl||"%d";for(let t=0;t<o;t++){const o=e(r.localize(i,[["%d",t+1]]).replace(/%i/g,t+""));o&&n.push(o)}l.replaceChildren(...n)}}(u),p(),l.classList.toggle("is-dynamic",c),l.style.display="",o(g,a)}function g(){p()}function p(){if(!r||!l||!c)return;const t=r.getPageIndex(),e=r.getPages().length;t<m&&(m=t,f=Math.min(m+d,e)),t>f&&(f=t,m=Math.max(f-d,0));const i=e=>e===t?"active":e>=m&&e<=f?"padd":e===m-1||e===f+1?"small":e===m-2||e===f+2?"micro":"hidden",s=[...l.childNodes];for(const t of s){const e=parseInt(t.dataset.carouselGoTo||"0",10);n(t,"active padd small micro hidden"),o(t,i(e))}}function h(){l&&(l.replaceChildren(),l.style.display="none"),n(r?.getContainer(),a)}return{init:function(t){r=t,r.on("refresh",u),r.on("change",g)},destroy:function(){h(),r?.off("refresh",u),r?.off("change",g),r=void 0}}};export{r as Dots};