manipulation.mjs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. import { s as setInnerHTML } from '../shared/utils.mjs';
  2. function appendSlide(slides) {
  3. const swiper = this;
  4. const {
  5. params,
  6. slidesEl
  7. } = swiper;
  8. if (params.loop) {
  9. swiper.loopDestroy();
  10. }
  11. const appendElement = slideEl => {
  12. if (typeof slideEl === 'string') {
  13. const tempDOM = document.createElement('div');
  14. setInnerHTML(tempDOM, slideEl);
  15. slidesEl.append(tempDOM.children[0]);
  16. setInnerHTML(tempDOM, '');
  17. } else {
  18. slidesEl.append(slideEl);
  19. }
  20. };
  21. if (typeof slides === 'object' && 'length' in slides) {
  22. for (let i = 0; i < slides.length; i += 1) {
  23. if (slides[i]) appendElement(slides[i]);
  24. }
  25. } else {
  26. appendElement(slides);
  27. }
  28. swiper.recalcSlides();
  29. if (params.loop) {
  30. swiper.loopCreate();
  31. }
  32. if (!params.observer || swiper.isElement) {
  33. swiper.update();
  34. }
  35. }
  36. function prependSlide(slides) {
  37. const swiper = this;
  38. const {
  39. params,
  40. activeIndex,
  41. slidesEl
  42. } = swiper;
  43. if (params.loop) {
  44. swiper.loopDestroy();
  45. }
  46. let newActiveIndex = activeIndex + 1;
  47. const prependElement = slideEl => {
  48. if (typeof slideEl === 'string') {
  49. const tempDOM = document.createElement('div');
  50. setInnerHTML(tempDOM, slideEl);
  51. slidesEl.prepend(tempDOM.children[0]);
  52. setInnerHTML(tempDOM, '');
  53. } else {
  54. slidesEl.prepend(slideEl);
  55. }
  56. };
  57. if (typeof slides === 'object' && 'length' in slides) {
  58. for (let i = 0; i < slides.length; i += 1) {
  59. if (slides[i]) prependElement(slides[i]);
  60. }
  61. newActiveIndex = activeIndex + slides.length;
  62. } else {
  63. prependElement(slides);
  64. }
  65. swiper.recalcSlides();
  66. if (params.loop) {
  67. swiper.loopCreate();
  68. }
  69. if (!params.observer || swiper.isElement) {
  70. swiper.update();
  71. }
  72. swiper.slideTo(newActiveIndex, 0, false);
  73. }
  74. function addSlide(index, slides) {
  75. const swiper = this;
  76. const {
  77. params,
  78. activeIndex,
  79. slidesEl
  80. } = swiper;
  81. let activeIndexBuffer = activeIndex;
  82. if (params.loop) {
  83. activeIndexBuffer -= swiper.loopedSlides;
  84. swiper.loopDestroy();
  85. swiper.recalcSlides();
  86. }
  87. const baseLength = swiper.slides.length;
  88. if (index <= 0) {
  89. swiper.prependSlide(slides);
  90. return;
  91. }
  92. if (index >= baseLength) {
  93. swiper.appendSlide(slides);
  94. return;
  95. }
  96. let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;
  97. const slidesBuffer = [];
  98. for (let i = baseLength - 1; i >= index; i -= 1) {
  99. const currentSlide = swiper.slides[i];
  100. currentSlide.remove();
  101. slidesBuffer.unshift(currentSlide);
  102. }
  103. if (typeof slides === 'object' && 'length' in slides) {
  104. for (let i = 0; i < slides.length; i += 1) {
  105. if (slides[i]) slidesEl.append(slides[i]);
  106. }
  107. newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;
  108. } else {
  109. slidesEl.append(slides);
  110. }
  111. for (let i = 0; i < slidesBuffer.length; i += 1) {
  112. slidesEl.append(slidesBuffer[i]);
  113. }
  114. swiper.recalcSlides();
  115. if (params.loop) {
  116. swiper.loopCreate();
  117. }
  118. if (!params.observer || swiper.isElement) {
  119. swiper.update();
  120. }
  121. if (params.loop) {
  122. swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
  123. } else {
  124. swiper.slideTo(newActiveIndex, 0, false);
  125. }
  126. }
  127. function removeSlide(slidesIndexes) {
  128. const swiper = this;
  129. const {
  130. params,
  131. activeIndex
  132. } = swiper;
  133. let activeIndexBuffer = activeIndex;
  134. if (params.loop) {
  135. activeIndexBuffer -= swiper.loopedSlides;
  136. swiper.loopDestroy();
  137. }
  138. let newActiveIndex = activeIndexBuffer;
  139. let indexToRemove;
  140. if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {
  141. for (let i = 0; i < slidesIndexes.length; i += 1) {
  142. indexToRemove = slidesIndexes[i];
  143. if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();
  144. if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
  145. }
  146. newActiveIndex = Math.max(newActiveIndex, 0);
  147. } else {
  148. indexToRemove = slidesIndexes;
  149. if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();
  150. if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
  151. newActiveIndex = Math.max(newActiveIndex, 0);
  152. }
  153. swiper.recalcSlides();
  154. if (params.loop) {
  155. swiper.loopCreate();
  156. }
  157. if (!params.observer || swiper.isElement) {
  158. swiper.update();
  159. }
  160. if (params.loop) {
  161. swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
  162. } else {
  163. swiper.slideTo(newActiveIndex, 0, false);
  164. }
  165. }
  166. function removeAllSlides() {
  167. const swiper = this;
  168. const slidesIndexes = [];
  169. for (let i = 0; i < swiper.slides.length; i += 1) {
  170. slidesIndexes.push(i);
  171. }
  172. swiper.removeSlide(slidesIndexes);
  173. }
  174. function Manipulation(_ref) {
  175. let {
  176. swiper
  177. } = _ref;
  178. Object.assign(swiper, {
  179. appendSlide: appendSlide.bind(swiper),
  180. prependSlide: prependSlide.bind(swiper),
  181. addSlide: addSlide.bind(swiper),
  182. removeSlide: removeSlide.bind(swiper),
  183. removeAllSlides: removeAllSlides.bind(swiper)
  184. });
  185. }
  186. export { Manipulation as default };