infinity-forge
Version:
144 lines • 6.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Grid = Grid;
function Grid(_a) {
var swiper = _a.swiper, extendParams = _a.extendParams, on = _a.on;
extendParams({
grid: {
rows: 1,
fill: 'column',
},
});
var slidesNumberEvenToRows;
var slidesPerRow;
var numFullColumns;
var wasMultiRow;
var getSpaceBetween = function () {
var spaceBetween = swiper.params.spaceBetween;
if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiper.size;
}
else if (typeof spaceBetween === 'string') {
spaceBetween = parseFloat(spaceBetween);
}
return spaceBetween;
};
var initSlides = function (slides) {
var slidesPerView = swiper.params.slidesPerView;
var _a = swiper.params.grid, rows = _a.rows, fill = _a.fill;
var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : slides.length;
numFullColumns = Math.floor(slidesLength / rows);
if (Math.floor(slidesLength / rows) === slidesLength / rows) {
slidesNumberEvenToRows = slidesLength;
}
else {
slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows;
}
if (slidesPerView !== 'auto' && fill === 'row') {
slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows);
}
slidesPerRow = slidesNumberEvenToRows / rows;
};
var unsetSlides = function () {
if (swiper.slides) {
swiper.slides.forEach(function (slide) {
if (slide.swiperSlideGridSet) {
slide.style.height = '';
slide.style[swiper.getDirectionLabel('margin-top')] = '';
}
});
}
};
var updateSlide = function (i, slide, slides) {
var slidesPerGroup = swiper.params.slidesPerGroup;
var spaceBetween = getSpaceBetween();
var _a = swiper.params.grid, rows = _a.rows, fill = _a.fill;
var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : slides.length;
// Set slides order
var newSlideOrderIndex;
var column;
var row;
if (fill === 'row' && slidesPerGroup > 1) {
var groupIndex = Math.floor(i / (slidesPerGroup * rows));
var slideIndexInGroup = i - rows * slidesPerGroup * groupIndex;
var columnsInGroup = groupIndex === 0
? slidesPerGroup
: Math.min(Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows), slidesPerGroup);
row = Math.floor(slideIndexInGroup / columnsInGroup);
column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup;
newSlideOrderIndex = column + (row * slidesNumberEvenToRows) / rows;
slide.style.order = newSlideOrderIndex;
}
else if (fill === 'column') {
column = Math.floor(i / rows);
row = i - column * rows;
if (column > numFullColumns || (column === numFullColumns && row === rows - 1)) {
row += 1;
if (row >= rows) {
row = 0;
column += 1;
}
}
}
else {
row = Math.floor(i / slidesPerRow);
column = i - row * slidesPerRow;
}
slide.row = row;
slide.column = column;
slide.style.height = "calc((100% - ".concat((rows - 1) * spaceBetween, "px) / ").concat(rows, ")");
slide.style[swiper.getDirectionLabel('margin-top')] = row !== 0 ? spaceBetween && "".concat(spaceBetween, "px") : '';
slide.swiperSlideGridSet = true;
};
var updateWrapperSize = function (slideSize, snapGrid) {
var _a = swiper.params, centeredSlides = _a.centeredSlides, roundLengths = _a.roundLengths;
var spaceBetween = getSpaceBetween();
var rows = swiper.params.grid.rows;
swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows;
swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween;
if (!swiper.params.cssMode) {
swiper.wrapperEl.style[swiper.getDirectionLabel('width')] = "".concat(swiper.virtualSize + spaceBetween, "px");
}
if (centeredSlides) {
var newSlidesGrid = [];
for (var i = 0; i < snapGrid.length; i += 1) {
var slidesGridItem = snapGrid[i];
if (roundLengths)
slidesGridItem = Math.floor(slidesGridItem);
if (snapGrid[i] < swiper.virtualSize + snapGrid[0])
newSlidesGrid.push(slidesGridItem);
}
snapGrid.splice(0, snapGrid.length);
snapGrid.push.apply(snapGrid, newSlidesGrid);
}
};
var onInit = function () {
wasMultiRow = swiper.params.grid && swiper.params.grid.rows > 1;
};
var onUpdate = function () {
var params = swiper.params, el = swiper.el;
var isMultiRow = params.grid && params.grid.rows > 1;
if (wasMultiRow && !isMultiRow) {
el.classList.remove("".concat(params.containerModifierClass, "grid"), "".concat(params.containerModifierClass, "grid-column"));
numFullColumns = 1;
swiper.emitContainerClasses();
}
else if (!wasMultiRow && isMultiRow) {
el.classList.add("".concat(params.containerModifierClass, "grid"));
if (params.grid.fill === 'column') {
el.classList.add("".concat(params.containerModifierClass, "grid-column"));
}
swiper.emitContainerClasses();
}
wasMultiRow = isMultiRow;
};
on('init', onInit);
on('update', onUpdate);
swiper.grid = {
initSlides: initSlides,
unsetSlides: unsetSlides,
updateSlide: updateSlide,
updateWrapperSize: updateWrapperSize,
};
}
//# sourceMappingURL=grid.js.map