UNPKG

swiper

Version:

Most modern mobile touch slider and framework with hardware accelerated transitions

2 lines 2.19 kB
import{a as getWindow}from"../shared/ssr-window.esm.min.mjs";function History({swiper:e,extendParams:t,on:a}){t({history:{enabled:!1,root:"",replaceState:!1,key:"slides",keepQuery:!1}});let s=!1,r={};const i=e=>e.toString().replace(/\s+/g,"-").replace(/[^\w-]+/g,"").replace(/--+/g,"-").replace(/^-+/,"").replace(/-+$/,""),o=e=>{const t=getWindow();let a;a=e?new URL(e):t.location;const s=a.pathname.slice(1).split("/").filter(e=>""!==e),r=s.length;return{key:s[r-2],value:s[r-1]}},l=(t,a)=>{const r=getWindow();if(!s||!e.params.history.enabled)return;let o;o=e.params.url?new URL(e.params.url):r.location;const l=e.virtual&&e.params.virtual.enabled?e.slidesEl.querySelector(`[data-swiper-slide-index="${a}"]`):e.slides[a];let n=i(l.getAttribute("data-history"));if(e.params.history.root.length>0){let a=e.params.history.root;"/"===a[a.length-1]&&(a=a.slice(0,a.length-1)),n=`${a}/${t?`${t}/`:""}${n}`}else o.pathname.includes(t)||(n=`${t?`${t}/`:""}${n}`);e.params.history.keepQuery&&(n+=o.search);const p=r.history.state;p&&p.value===n||(e.params.history.replaceState?r.history.replaceState({value:n},null,n):r.history.pushState({value:n},null,n))},n=(t,a,s)=>{if(a)for(let r=0,o=e.slides.length;r<o;r+=1){const o=e.slides[r];if(i(o.getAttribute("data-history"))===a){const a=e.getSlideIndex(o);e.slideTo(a,t,s)}}else e.slideTo(0,t,s)},p=()=>{r=o(e.params.url),n(e.params.speed,r.value,!1)};a("init",()=>{e.params.history.enabled&&(()=>{const t=getWindow();if(e.params.history){if(!t.history||!t.history.pushState)return e.params.history.enabled=!1,void(e.params.hashNavigation.enabled=!0);s=!0,r=o(e.params.url),r.key||r.value?(n(0,r.value,e.params.runCallbacksOnInit),e.params.history.replaceState||t.addEventListener("popstate",p)):e.params.history.replaceState||t.addEventListener("popstate",p)}})()}),a("destroy",()=>{e.params.history.enabled&&(()=>{const t=getWindow();e.params.history.replaceState||t.removeEventListener("popstate",p)})()}),a("transitionEnd _freeModeNoMomentumRelease",()=>{s&&l(e.params.history.key,e.activeIndex)}),a("slideChange",()=>{s&&e.params.cssMode&&l(e.params.history.key,e.activeIndex)})}export{History as default}; //# sourceMappingURL=history.min.mjs.map