loop.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import { template as _$template } from "solid-js/web";
  2. import { effect as _$effect } from "solid-js/web";
  3. const _tmpl$ = /*#__PURE__*/_$template(`<div></div>`, 2);
  4. import { calcLoopedSlides } from '../shared/calc-looped-slides.js';
  5. function renderLoop(swiper, slides, swiperParams) {
  6. const modifiedSlides = slides.map((child, index) => {
  7. const node = child.cloneNode(true);
  8. node.swiper = swiper;
  9. node['data-swiper-slide-index'] = index;
  10. return node;
  11. });
  12. function duplicateSlide(child, index, position) {
  13. const node = child.cloneNode(true);
  14. node.key = `${child.key}-duplicate-${index}-${position}`;
  15. node.className = `${child.className || ''} ${swiperParams.slideDuplicateClass}`;
  16. return node;
  17. }
  18. if (swiperParams.loopFillGroupWithBlank) {
  19. const blankSlidesNum = swiperParams.slidesPerGroup - modifiedSlides.length % swiperParams.slidesPerGroup;
  20. if (blankSlidesNum !== swiperParams.slidesPerGroup) {
  21. for (let i = 0; i < blankSlidesNum; i += 1) {
  22. const blankSlide = // eslint-disable-next-line react/react-in-jsx-scope
  23. (() => {
  24. const _el$ = _tmpl$.cloneNode(true);
  25. _$effect(() => _el$.className = `${swiperParams.slideClass} ${swiperParams.slideBlankClass}`);
  26. return _el$;
  27. })();
  28. modifiedSlides.push(blankSlide);
  29. }
  30. }
  31. }
  32. if (swiperParams.slidesPerView === 'auto' && !swiperParams.loopedSlides) {
  33. swiperParams.loopedSlides = modifiedSlides.length;
  34. }
  35. const loopedSlides = calcLoopedSlides(modifiedSlides, swiperParams);
  36. const prependSlides = [];
  37. const appendSlides = [];
  38. for (let i = 0; i < loopedSlides; i += 1) {
  39. const index = i - Math.floor(i / modifiedSlides.length) * modifiedSlides.length;
  40. appendSlides.push(duplicateSlide(modifiedSlides[index], i, 'append'));
  41. prependSlides.unshift(duplicateSlide(modifiedSlides[modifiedSlides.length - index - 1], i, 'prepend'));
  42. }
  43. if (swiper) {
  44. swiper.loopedSlides = loopedSlides;
  45. }
  46. return [...prependSlides, ...modifiedSlides, ...appendSlides];
  47. }
  48. export { calcLoopedSlides, renderLoop };