infinity-forge
Version:
230 lines • 10.6 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = loopFix;
//@ts-nocheck
var utils_1 = require("../../shared/utils.js");
function loopFix(_a) {
var _b = _a === void 0 ? {} : _a, slideRealIndex = _b.slideRealIndex, _c = _b.slideTo, slideTo = _c === void 0 ? true : _c, direction = _b.direction, setTranslate = _b.setTranslate, activeSlideIndex = _b.activeSlideIndex, byController = _b.byController, byMousewheel = _b.byMousewheel;
var swiper = this;
if (!swiper.params.loop)
return;
swiper.emit('beforeLoopFix');
var slides = swiper.slides, allowSlidePrev = swiper.allowSlidePrev, allowSlideNext = swiper.allowSlideNext, slidesEl = swiper.slidesEl, params = swiper.params;
var centeredSlides = params.centeredSlides;
swiper.allowSlidePrev = true;
swiper.allowSlideNext = true;
if (swiper.virtual && params.virtual.enabled) {
if (slideTo) {
if (!params.centeredSlides && swiper.snapIndex === 0) {
swiper.slideTo(swiper.virtual.slides.length, 0, false, true);
}
else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {
swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);
}
else if (swiper.snapIndex === swiper.snapGrid.length - 1) {
swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);
}
}
swiper.allowSlidePrev = allowSlidePrev;
swiper.allowSlideNext = allowSlideNext;
swiper.emit('loopFix');
return;
}
var slidesPerView = params.slidesPerView;
if (slidesPerView === 'auto') {
slidesPerView = swiper.slidesPerViewDynamic();
}
else {
slidesPerView = Math.ceil(parseFloat(params.slidesPerView, 10));
if (centeredSlides && slidesPerView % 2 === 0) {
slidesPerView = slidesPerView + 1;
}
}
var slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup;
var loopedSlides = slidesPerGroup;
if (loopedSlides % slidesPerGroup !== 0) {
loopedSlides += slidesPerGroup - (loopedSlides % slidesPerGroup);
}
loopedSlides += params.loopAdditionalSlides;
swiper.loopedSlides = loopedSlides;
var gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;
if (slides.length < slidesPerView + loopedSlides) {
(0, utils_1.showWarning)('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled and not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters');
}
else if (gridEnabled && params.grid.fill === 'row') {
(0, utils_1.showWarning)('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`');
}
var prependSlidesIndexes = [];
var appendSlidesIndexes = [];
var activeIndex = swiper.activeIndex;
if (typeof activeSlideIndex === 'undefined') {
activeSlideIndex = swiper.getSlideIndex(slides.filter(function (el) { return el.classList.contains(params.slideActiveClass); })[0]);
}
else {
activeIndex = activeSlideIndex;
}
var isNext = direction === 'next' || !direction;
var isPrev = direction === 'prev' || !direction;
var slidesPrepended = 0;
var slidesAppended = 0;
var cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length;
var activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex;
var activeColIndexWithShift = activeColIndex +
(centeredSlides && typeof setTranslate === 'undefined' ? -slidesPerView / 2 + 0.5 : 0);
// prepend last slides before start
if (activeColIndexWithShift < loopedSlides) {
slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup);
for (var i = 0; i < loopedSlides - activeColIndexWithShift; i += 1) {
var index = i - Math.floor(i / cols) * cols;
if (gridEnabled) {
var colIndexToPrepend = cols - index - 1;
for (var i_1 = slides.length - 1; i_1 >= 0; i_1 -= 1) {
if (slides[i_1].column === colIndexToPrepend)
prependSlidesIndexes.push(i_1);
}
// slides.forEach((slide, slideIndex) => {
// if (slide.column === colIndexToPrepend) prependSlidesIndexes.push(slideIndex);
// });
}
else {
prependSlidesIndexes.push(cols - index - 1);
}
}
}
else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) {
slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup);
var _loop_1 = function (i) {
var index = i - Math.floor(i / cols) * cols;
if (gridEnabled) {
slides.forEach(function (slide, slideIndex) {
if (slide.column === index)
appendSlidesIndexes.push(slideIndex);
});
}
else {
appendSlidesIndexes.push(index);
}
};
for (var i = 0; i < slidesAppended; i += 1) {
_loop_1(i);
}
}
swiper.__preventObserver__ = true;
requestAnimationFrame(function () {
swiper.__preventObserver__ = false;
});
if (isPrev) {
prependSlidesIndexes.forEach(function (index) {
slides[index].swiperLoopMoveDOM = true;
slidesEl.prepend(slides[index]);
slides[index].swiperLoopMoveDOM = false;
});
}
if (isNext) {
appendSlidesIndexes.forEach(function (index) {
slides[index].swiperLoopMoveDOM = true;
slidesEl.append(slides[index]);
slides[index].swiperLoopMoveDOM = false;
});
}
swiper.recalcSlides();
if (params.slidesPerView === 'auto') {
swiper.updateSlides();
}
else if (gridEnabled &&
((prependSlidesIndexes.length > 0 && isPrev) || (appendSlidesIndexes.length > 0 && isNext))) {
swiper.slides.forEach(function (slide, slideIndex) {
swiper.grid.updateSlide(slideIndex, slide, swiper.slides);
});
}
if (params.watchSlidesProgress) {
swiper.updateSlidesOffset();
}
if (slideTo) {
if (prependSlidesIndexes.length > 0 && isPrev) {
if (typeof slideRealIndex === 'undefined') {
var currentSlideTranslate = swiper.slidesGrid[activeIndex];
var newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];
var diff = newSlideTranslate - currentSlideTranslate;
if (byMousewheel) {
swiper.setTranslate(swiper.translate - diff);
}
else {
swiper.slideTo(activeIndex + Math.ceil(slidesPrepended), 0, false, true);
if (setTranslate) {
swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;
swiper.touchEventsData.currentTranslate =
swiper.touchEventsData.currentTranslate - diff;
}
}
}
else {
if (setTranslate) {
var shift = gridEnabled
? prependSlidesIndexes.length / params.grid.rows
: prependSlidesIndexes.length;
swiper.slideTo(swiper.activeIndex + shift, 0, false, true);
swiper.touchEventsData.currentTranslate = swiper.translate;
}
}
}
else if (appendSlidesIndexes.length > 0 && isNext) {
if (typeof slideRealIndex === 'undefined') {
var currentSlideTranslate = swiper.slidesGrid[activeIndex];
var newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];
var diff = newSlideTranslate - currentSlideTranslate;
if (byMousewheel) {
swiper.setTranslate(swiper.translate - diff);
}
else {
swiper.slideTo(activeIndex - slidesAppended, 0, false, true);
if (setTranslate) {
swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;
swiper.touchEventsData.currentTranslate =
swiper.touchEventsData.currentTranslate - diff;
}
}
}
else {
var shift = gridEnabled
? appendSlidesIndexes.length / params.grid.rows
: appendSlidesIndexes.length;
swiper.slideTo(swiper.activeIndex - shift, 0, false, true);
}
}
}
swiper.allowSlidePrev = allowSlidePrev;
swiper.allowSlideNext = allowSlideNext;
if (swiper.controller && swiper.controller.control && !byController) {
var loopParams_1 = {
slideRealIndex: slideRealIndex,
direction: direction,
setTranslate: setTranslate,
activeSlideIndex: activeSlideIndex,
byController: true,
};
if (Array.isArray(swiper.controller.control)) {
swiper.controller.control.forEach(function (c) {
if (!c.destroyed && c.params.loop)
c.loopFix(__assign(__assign({}, loopParams_1), { slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false }));
});
}
else if (swiper.controller.control instanceof swiper.constructor &&
swiper.controller.control.params.loop) {
swiper.controller.control.loopFix(__assign(__assign({}, loopParams_1), { slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false }));
}
}
swiper.emit('loopFix');
}
//# sourceMappingURL=loopFix.js.map