infinity-forge
Version:
306 lines • 13.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = updateSlides;
var utils_1 = require("../../shared/utils.js");
function updateSlides() {
var swiper = this;
function getDirectionPropertyValue(node, label) {
return parseFloat(node.getPropertyValue(swiper.getDirectionLabel(label)) || 0);
}
var params = swiper.params;
var wrapperEl = swiper.wrapperEl, slidesEl = swiper.slidesEl, swiperSize = swiper.size, rtl = swiper.rtlTranslate, wrongRTL = swiper.wrongRTL;
var isVirtual = swiper.virtual && params.virtual.enabled;
var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;
var slides = (0, utils_1.elementChildren)(slidesEl, ".".concat(swiper.params.slideClass, ", swiper-slide"));
var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;
var snapGrid = [];
var slidesGrid = [];
var slidesSizesGrid = [];
var offsetBefore = params.slidesOffsetBefore;
if (typeof offsetBefore === 'function') {
offsetBefore = params.slidesOffsetBefore.call(swiper);
}
var offsetAfter = params.slidesOffsetAfter;
if (typeof offsetAfter === 'function') {
offsetAfter = params.slidesOffsetAfter.call(swiper);
}
var previousSnapGridLength = swiper.snapGrid.length;
var previousSlidesGridLength = swiper.slidesGrid.length;
var spaceBetween = params.spaceBetween;
var slidePosition = -offsetBefore;
var prevSlideSize = 0;
var index = 0;
if (typeof swiperSize === 'undefined') {
return;
}
if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;
}
else if (typeof spaceBetween === 'string') {
spaceBetween = parseFloat(spaceBetween);
}
swiper.virtualSize = -spaceBetween;
// reset margins
slides.forEach(function (slideEl) {
if (rtl) {
slideEl.style.marginLeft = '';
}
else {
slideEl.style.marginRight = '';
}
slideEl.style.marginBottom = '';
slideEl.style.marginTop = '';
});
// reset cssMode offsets
if (params.centeredSlides && params.cssMode) {
(0, utils_1.setCSSProperty)(wrapperEl, '--swiper-centered-offset-before', '');
(0, utils_1.setCSSProperty)(wrapperEl, '--swiper-centered-offset-after', '');
}
var gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;
if (gridEnabled) {
swiper.grid.initSlides(slides);
}
else if (swiper.grid) {
swiper.grid.unsetSlides();
}
// Calc slides
var slideSize;
var shouldResetSlideSize = params.slidesPerView === 'auto' &&
params.breakpoints &&
Object.keys(params.breakpoints).filter(function (key) {
return typeof params.breakpoints[key].slidesPerView !== 'undefined';
}).length > 0;
for (var i = 0; i < slidesLength; i += 1) {
slideSize = 0;
var slide = void 0;
if (slides[i])
slide = slides[i];
if (gridEnabled) {
swiper.grid.updateSlide(i, slide, slides);
}
if (slides[i] && (0, utils_1.elementStyle)(slide, 'display') === 'none')
continue; // eslint-disable-line
if (params.slidesPerView === 'auto') {
if (shouldResetSlideSize) {
slides[i].style[swiper.getDirectionLabel('width')] = "";
}
var slideStyles = getComputedStyle(slide);
var currentTransform = slide.style.transform;
var currentWebKitTransform = slide.style.webkitTransform;
if (currentTransform) {
slide.style.transform = 'none';
}
if (currentWebKitTransform) {
slide.style.webkitTransform = 'none';
}
if (params.roundLengths) {
slideSize = swiper.isHorizontal()
? (0, utils_1.elementOuterSize)(slide, 'width', true)
: (0, utils_1.elementOuterSize)(slide, 'height', true);
}
else {
// eslint-disable-next-line
var width = getDirectionPropertyValue(slideStyles, 'width');
var paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');
var paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');
var marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');
var marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');
var boxSizing = slideStyles.getPropertyValue('box-sizing');
if (boxSizing && boxSizing === 'border-box') {
slideSize = width + marginLeft + marginRight;
}
else {
var clientWidth = slide.clientWidth, offsetWidth = slide.offsetWidth;
slideSize =
width +
paddingLeft +
paddingRight +
marginLeft +
marginRight +
(offsetWidth - clientWidth);
}
}
if (currentTransform) {
slide.style.transform = currentTransform;
}
if (currentWebKitTransform) {
slide.style.webkitTransform = currentWebKitTransform;
}
if (params.roundLengths)
slideSize = Math.floor(slideSize);
}
else {
slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;
if (params.roundLengths)
slideSize = Math.floor(slideSize);
if (slides[i]) {
slides[i].style[swiper.getDirectionLabel('width')] = "".concat(slideSize, "px");
}
}
if (slides[i]) {
slides[i].swiperSlideSize = slideSize;
}
slidesSizesGrid.push(slideSize);
if (params.centeredSlides) {
slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;
if (prevSlideSize === 0 && i !== 0)
slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
if (i === 0)
slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
if (Math.abs(slidePosition) < 1 / 1000)
slidePosition = 0;
if (params.roundLengths)
slidePosition = Math.floor(slidePosition);
if (index % params.slidesPerGroup === 0)
snapGrid.push(slidePosition);
slidesGrid.push(slidePosition);
}
else {
if (params.roundLengths)
slidePosition = Math.floor(slidePosition);
if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) %
swiper.params.slidesPerGroup ===
0)
snapGrid.push(slidePosition);
slidesGrid.push(slidePosition);
slidePosition = slidePosition + slideSize + spaceBetween;
}
swiper.virtualSize += slideSize + spaceBetween;
prevSlideSize = slideSize;
index += 1;
}
swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;
if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {
wrapperEl.style.width = "".concat(swiper.virtualSize + spaceBetween, "px");
}
if (params.setWrapperSize) {
wrapperEl.style[swiper.getDirectionLabel('width')] = "".concat(swiper.virtualSize + spaceBetween, "px");
}
if (gridEnabled) {
swiper.grid.updateWrapperSize(slideSize, snapGrid);
}
// Remove last grid elements depending on width
if (!params.centeredSlides) {
var newSlidesGrid = [];
for (var i = 0; i < snapGrid.length; i += 1) {
var slidesGridItem = snapGrid[i];
if (params.roundLengths)
slidesGridItem = Math.floor(slidesGridItem);
if (snapGrid[i] <= swiper.virtualSize - swiperSize) {
newSlidesGrid.push(slidesGridItem);
}
}
snapGrid = newSlidesGrid;
if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) >
1) {
snapGrid.push(swiper.virtualSize - swiperSize);
}
}
if (isVirtual && params.loop) {
var size = slidesSizesGrid[0] + spaceBetween;
if (params.slidesPerGroup > 1) {
var groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);
var groupSize = size * params.slidesPerGroup;
for (var i = 0; i < groups; i += 1) {
snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);
}
}
for (var i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {
if (params.slidesPerGroup === 1) {
snapGrid.push(snapGrid[snapGrid.length - 1] + size);
}
slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);
swiper.virtualSize += size;
}
}
if (snapGrid.length === 0)
snapGrid = [0];
if (spaceBetween !== 0) {
var key_1 = swiper.isHorizontal() && rtl ? 'marginLeft' : swiper.getDirectionLabel('marginRight');
slides
.filter(function (_, slideIndex) {
if (!params.cssMode || params.loop)
return true;
if (slideIndex === slides.length - 1) {
return false;
}
return true;
})
.forEach(function (slideEl) {
slideEl.style[key_1] = "".concat(spaceBetween, "px");
});
}
if (params.centeredSlides && params.centeredSlidesBounds) {
var allSlidesSize_1 = 0;
slidesSizesGrid.forEach(function (slideSizeValue) {
allSlidesSize_1 += slideSizeValue + (spaceBetween || 0);
});
allSlidesSize_1 -= spaceBetween;
var maxSnap_1 = allSlidesSize_1 - swiperSize;
snapGrid = snapGrid.map(function (snap) {
if (snap <= 0)
return -offsetBefore;
if (snap > maxSnap_1)
return maxSnap_1 + offsetAfter;
return snap;
});
}
if (params.centerInsufficientSlides) {
var allSlidesSize_2 = 0;
slidesSizesGrid.forEach(function (slideSizeValue) {
allSlidesSize_2 += slideSizeValue + (spaceBetween || 0);
});
allSlidesSize_2 -= spaceBetween;
var offsetSize = (params.slidesOffsetBefore || 0) + (params.slidesOffsetAfter || 0);
if (allSlidesSize_2 + offsetSize < swiperSize) {
var allSlidesOffset_1 = (swiperSize - allSlidesSize_2 - offsetSize) / 2;
snapGrid.forEach(function (snap, snapIndex) {
snapGrid[snapIndex] = snap - allSlidesOffset_1;
});
slidesGrid.forEach(function (snap, snapIndex) {
slidesGrid[snapIndex] = snap + allSlidesOffset_1;
});
}
}
Object.assign(swiper, {
slides: slides,
snapGrid: snapGrid,
slidesGrid: slidesGrid,
slidesSizesGrid: slidesSizesGrid,
});
if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {
(0, utils_1.setCSSProperty)(wrapperEl, '--swiper-centered-offset-before', "".concat(-snapGrid[0], "px"));
(0, utils_1.setCSSProperty)(wrapperEl, '--swiper-centered-offset-after', "".concat(swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2, "px"));
var addToSnapGrid_1 = -swiper.snapGrid[0];
var addToSlidesGrid_1 = -swiper.slidesGrid[0];
swiper.snapGrid = swiper.snapGrid.map(function (v) { return v + addToSnapGrid_1; });
swiper.slidesGrid = swiper.slidesGrid.map(function (v) { return v + addToSlidesGrid_1; });
}
if (slidesLength !== previousSlidesLength) {
swiper.emit('slidesLengthChange');
}
if (snapGrid.length !== previousSnapGridLength) {
if (swiper.params.watchOverflow)
swiper.checkOverflow();
swiper.emit('snapGridLengthChange');
}
if (slidesGrid.length !== previousSlidesGridLength) {
swiper.emit('slidesGridLengthChange');
}
if (params.watchSlidesProgress) {
swiper.updateSlidesOffset();
}
swiper.emit('slidesUpdated');
if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {
var backFaceHiddenClass = "".concat(params.containerModifierClass, "backface-hidden");
var hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);
if (slidesLength <= params.maxBackfaceHiddenSlides) {
if (!hasClassBackfaceClassAdded)
swiper.el.classList.add(backFaceHiddenClass);
}
else if (hasClassBackfaceClassAdded) {
swiper.el.classList.remove(backFaceHiddenClass);
}
}
}
//# sourceMappingURL=updateSlides.js.map