function appendSlide(slides) { const swiper = this; const { params, slidesEl } = swiper; if (params.loop) { swiper.loopDestroy(); } const appendElement = slideEl => { if (typeof slideEl === 'string') { const tempDOM = document.createElement('div'); tempDOM.innerHTML = slideEl; slidesEl.append(tempDOM.children[0]); tempDOM.innerHTML = ''; } else { slidesEl.append(slideEl); } }; if (typeof slides === 'object' && 'length' in slides) { for (let i = 0; i < slides.length; i += 1) { if (slides[i]) appendElement(slides[i]); } } else { appendElement(slides); } swiper.recalcSlides(); if (params.loop) { swiper.loopCreate(); } if (!params.observer || swiper.isElement) { swiper.update(); } } function prependSlide(slides) { const swiper = this; const { params, activeIndex, slidesEl } = swiper; if (params.loop) { swiper.loopDestroy(); } let newActiveIndex = activeIndex + 1; const prependElement = slideEl => { if (typeof slideEl === 'string') { const tempDOM = document.createElement('div'); tempDOM.innerHTML = slideEl; slidesEl.prepend(tempDOM.children[0]); tempDOM.innerHTML = ''; } else { slidesEl.prepend(slideEl); } }; if (typeof slides === 'object' && 'length' in slides) { for (let i = 0; i < slides.length; i += 1) { if (slides[i]) prependElement(slides[i]); } newActiveIndex = activeIndex + slides.length; } else { prependElement(slides); } swiper.recalcSlides(); if (params.loop) { swiper.loopCreate(); } if (!params.observer || swiper.isElement) { swiper.update(); } swiper.slideTo(newActiveIndex, 0, false); } function addSlide(index, slides) { const swiper = this; const { params, activeIndex, slidesEl } = swiper; let activeIndexBuffer = activeIndex; if (params.loop) { activeIndexBuffer -= swiper.loopedSlides; swiper.loopDestroy(); swiper.recalcSlides(); } const baseLength = swiper.slides.length; if (index <= 0) { swiper.prependSlide(slides); return; } if (index >= baseLength) { swiper.appendSlide(slides); return; } let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer; const slidesBuffer = []; for (let i = baseLength - 1; i >= index; i -= 1) { const currentSlide = swiper.slides[i]; currentSlide.remove(); slidesBuffer.unshift(currentSlide); } if (typeof slides === 'object' && 'length' in slides) { for (let i = 0; i < slides.length; i += 1) { if (slides[i]) slidesEl.append(slides[i]); } newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer; } else { slidesEl.append(slides); } for (let i = 0; i < slidesBuffer.length; i += 1) { slidesEl.append(slidesBuffer[i]); } swiper.recalcSlides(); if (params.loop) { swiper.loopCreate(); } if (!params.observer || swiper.isElement) { swiper.update(); } if (params.loop) { swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false); } else { swiper.slideTo(newActiveIndex, 0, false); } } function removeSlide(slidesIndexes) { const swiper = this; const { params, activeIndex } = swiper; let activeIndexBuffer = activeIndex; if (params.loop) { activeIndexBuffer -= swiper.loopedSlides; swiper.loopDestroy(); } let newActiveIndex = activeIndexBuffer; let indexToRemove; if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) { for (let i = 0; i < slidesIndexes.length; i += 1) { indexToRemove = slidesIndexes[i]; if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove(); if (indexToRemove < newActiveIndex) newActiveIndex -= 1; } newActiveIndex = Math.max(newActiveIndex, 0); } else { indexToRemove = slidesIndexes; if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove(); if (indexToRemove < newActiveIndex) newActiveIndex -= 1; newActiveIndex = Math.max(newActiveIndex, 0); } swiper.recalcSlides(); if (params.loop) { swiper.loopCreate(); } if (!params.observer || swiper.isElement) { swiper.update(); } if (params.loop) { swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false); } else { swiper.slideTo(newActiveIndex, 0, false); } } function removeAllSlides() { const swiper = this; const slidesIndexes = []; for (let i = 0; i < swiper.slides.length; i += 1) { slidesIndexes.push(i); } swiper.removeSlide(slidesIndexes); } function Manipulation(_ref) { let { swiper } = _ref; Object.assign(swiper, { appendSlide: appendSlide.bind(swiper), prependSlide: prependSlide.bind(swiper), addSlide: addSlide.bind(swiper), removeSlide: removeSlide.bind(swiper), removeAllSlides: removeAllSlides.bind(swiper) }); } export { Manipulation as default };