UNPKG

@fancyapps/ui

Version:

Robust JavaScript UI Component Library

3 lines (2 loc) 2.03 kB
/*! License details at fancyapps.com/license */ import{isPlainObject as t}from"../utils/isPlainObject.js";import{stringToHtml as n}from"../utils/strToHtml.js";import{addClass as e}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",l="has-dots",a=()=>{let a,r,c=!1,d=4,u=0,f=d;function m(n){const e=null==a?void 0:a.getOptions().Dots;return(t(e)?Object.assign(Object.assign({},i),e):i)[n]}function g(){var t,o;if(!a)return;d=m("dynamicPadd"),u=0,f=d;const i=a.getContainer(),g=a.getPages().length;if(!1===a.getOptions().Dots||!i||g<m("minCount")||g>m("maxCount"))return void v();r||(r=(null===(t=a.getContainer())||void 0===t?void 0:t.querySelector("."+s))||void 0),r||(r=document.createElement("div"),e(r,s),null===(o=a.getViewport())||void 0===o||o.insertAdjacentElement("afterend",r));const p=c,C=m("dynamicFrom");c=!!(C&&g>=C&&g>=d+4),p!==c&&v(),function(){if(!a||!r)return;const t=a.getPages().length;if(t!==r.childElementCount){const e=[];for(let o=0;o<t;o++){const t=m("dotTpl")||"%d",i=n(a.localize(t,[["%d",o+1]]).replace(/\%i/g,o+""));i&&e.push(i)}r.replaceChildren(...e)}}(),h(),r.classList.toggle("is-dynamic",c),r.style.display="",e(i,l)}function p(){h()}function h(){if(!a||!r||!c)return;const t=a.getPageIndex(),n=a.getPages().length;t<u&&(u=t,f=u+d,f>n&&(f=n)),t>f&&(f=t,u=f-d,u<0&&(u=0));const i=n=>n===t?"active":n>=u&&n<=f?"padd":n===u-1||n===f+1?"small":n===u-2||n===f+2?"micro":"hidden",s=[...r.childNodes];for(const t of s){const n=parseInt(t.dataset.carouselGoTo||"0",10);o(t,"active padd small micro hidden"),e(t,i(n))}}function v(){r&&(r.replaceChildren(),r.style.display="none"),o(null==a?void 0:a.getContainer(),l)}return{init:function(t){a=t,a.on("refresh",g),a.on("change",p)},destroy:function(){v(),null==a||a.off("refresh",g),null==a||a.off("change",p),a=void 0}}};export{a as Dots};