import { g as getDocument, a as getWindow } from '../shared/ssr-window.esm.mjs'; import { e as elementChildren } from '../shared/utils.mjs'; function HashNavigation(_ref) { let { swiper, extendParams, emit, on } = _ref; let initialized = false; const document = getDocument(); const window = getWindow(); extendParams({ hashNavigation: { enabled: false, replaceState: false, watchState: false, getSlideIndex(_s, hash) { if (swiper.virtual && swiper.params.virtual.enabled) { const slideWithHash = swiper.slides.filter(slideEl => slideEl.getAttribute('data-hash') === hash)[0]; if (!slideWithHash) return 0; const index = parseInt(slideWithHash.getAttribute('data-swiper-slide-index'), 10); return index; } return swiper.getSlideIndex(elementChildren(swiper.slidesEl, `.${swiper.params.slideClass}[data-hash="${hash}"], swiper-slide[data-hash="${hash}"]`)[0]); } } }); const onHashChange = () => { emit('hashChange'); const newHash = document.location.hash.replace('#', ''); const activeSlideEl = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index="${swiper.activeIndex}"]`) : swiper.slides[swiper.activeIndex]; const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute('data-hash') : ''; if (newHash !== activeSlideHash) { const newIndex = swiper.params.hashNavigation.getSlideIndex(swiper, newHash); if (typeof newIndex === 'undefined' || Number.isNaN(newIndex)) return; swiper.slideTo(newIndex); } }; const setHash = () => { if (!initialized || !swiper.params.hashNavigation.enabled) return; const activeSlideEl = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index="${swiper.activeIndex}"]`) : swiper.slides[swiper.activeIndex]; const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute('data-hash') || activeSlideEl.getAttribute('data-history') : ''; if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) { window.history.replaceState(null, null, `#${activeSlideHash}` || ''); emit('hashSet'); } else { document.location.hash = activeSlideHash || ''; emit('hashSet'); } }; const init = () => { if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return; initialized = true; const hash = document.location.hash.replace('#', ''); if (hash) { const speed = 0; const index = swiper.params.hashNavigation.getSlideIndex(swiper, hash); swiper.slideTo(index || 0, speed, swiper.params.runCallbacksOnInit, true); } if (swiper.params.hashNavigation.watchState) { window.addEventListener('hashchange', onHashChange); } }; const destroy = () => { if (swiper.params.hashNavigation.watchState) { window.removeEventListener('hashchange', onHashChange); } }; on('init', () => { if (swiper.params.hashNavigation.enabled) { init(); } }); on('destroy', () => { if (swiper.params.hashNavigation.enabled) { destroy(); } }); on('transitionEnd _freeModeNoMomentumRelease', () => { if (initialized) { setHash(); } }); on('slideChange', () => { if (initialized && swiper.params.cssMode) { setHash(); } }); } export { HashNavigation as default };