infinity-forge
Version:
222 lines • 8.72 kB
JavaScript
;
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Navigation = Navigation;
var create_element_if_not_defined_1 = __importDefault(require("../shared/create-element-if-not-defined.js"));
var utils_1 = require("../shared/utils.js");
function Navigation(_a) {
var swiper = _a.swiper, extendParams = _a.extendParams, on = _a.on, emit = _a.emit;
extendParams({
navigation: {
nextEl: null,
prevEl: null,
hideOnClick: false,
disabledClass: 'swiper-button-disabled',
hiddenClass: 'swiper-button-hidden',
lockClass: 'swiper-button-lock',
navigationDisabledClass: 'swiper-navigation-disabled',
},
});
swiper.navigation = {
nextEl: null,
prevEl: null,
};
function getEl(el) {
var res;
if (el && typeof el === 'string' && swiper.isElement) {
res = swiper.el.querySelector(el);
if (res)
return res;
}
if (el) {
if (typeof el === 'string')
res = __spreadArray([], document.querySelectorAll(el), true);
if (swiper.params.uniqueNavElements &&
typeof el === 'string' &&
res &&
res.length > 1 &&
swiper.el.querySelectorAll(el).length === 1) {
res = swiper.el.querySelector(el);
}
else if (res && res.length === 1) {
res = res[0];
}
}
if (el && !res)
return el;
// if (Array.isArray(res) && res.length === 1) res = res[0];
return res;
}
function toggleEl(el, disabled) {
var params = swiper.params.navigation;
el = (0, utils_1.makeElementsArray)(el);
el.forEach(function (subEl) {
var _a;
if (subEl) {
(_a = subEl.classList)[disabled ? 'add' : 'remove'].apply(_a, params.disabledClass.split(' '));
if (subEl.tagName === 'BUTTON')
subEl.disabled = disabled;
if (swiper.params.watchOverflow && swiper.enabled) {
subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);
}
}
});
}
function update() {
// Update Navigation Buttons
var _a = swiper.navigation, nextEl = _a.nextEl, prevEl = _a.prevEl;
if (swiper.params.loop) {
toggleEl(prevEl, false);
toggleEl(nextEl, false);
return;
}
toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);
toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);
}
function onPrevClick(e) {
e.preventDefault();
if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind)
return;
swiper.slidePrev();
emit('navigationPrev');
}
function onNextClick(e) {
e.preventDefault();
if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind)
return;
swiper.slideNext();
emit('navigationNext');
}
function init() {
var params = swiper.params.navigation;
swiper.params.navigation = (0, create_element_if_not_defined_1.default)(swiper, swiper.originalParams.navigation, swiper.params.navigation, {
nextEl: 'swiper-button-next',
prevEl: 'swiper-button-prev',
});
if (!(params.nextEl || params.prevEl))
return;
var nextEl = getEl(params.nextEl);
var prevEl = getEl(params.prevEl);
Object.assign(swiper.navigation, {
nextEl: nextEl,
prevEl: prevEl,
});
nextEl = (0, utils_1.makeElementsArray)(nextEl);
prevEl = (0, utils_1.makeElementsArray)(prevEl);
var initButton = function (el, dir) {
var _a;
if (el) {
el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);
}
if (!swiper.enabled && el) {
(_a = el.classList).add.apply(_a, params.lockClass.split(' '));
}
};
nextEl.forEach(function (el) { return initButton(el, 'next'); });
prevEl.forEach(function (el) { return initButton(el, 'prev'); });
}
function destroy() {
var _a = swiper.navigation, nextEl = _a.nextEl, prevEl = _a.prevEl;
nextEl = (0, utils_1.makeElementsArray)(nextEl);
prevEl = (0, utils_1.makeElementsArray)(prevEl);
var destroyButton = function (el, dir) {
var _a;
el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick);
(_a = el.classList).remove.apply(_a, swiper.params.navigation.disabledClass.split(' '));
};
nextEl.forEach(function (el) { return destroyButton(el, 'next'); });
prevEl.forEach(function (el) { return destroyButton(el, 'prev'); });
}
on('init', function () {
if (swiper.params.navigation.enabled === false) {
// eslint-disable-next-line
disable();
}
else {
init();
update();
}
});
on('toEdge fromEdge lock unlock', function () {
update();
});
on('destroy', function () {
destroy();
});
on('enable disable', function () {
var _a = swiper.navigation, nextEl = _a.nextEl, prevEl = _a.prevEl;
nextEl = (0, utils_1.makeElementsArray)(nextEl);
prevEl = (0, utils_1.makeElementsArray)(prevEl);
if (swiper.enabled) {
update();
return;
}
__spreadArray(__spreadArray([], nextEl, true), prevEl, true).filter(function (el) { return !!el; })
.forEach(function (el) { return el.classList.add(swiper.params.navigation.lockClass); });
});
on('click', function (_s, e) {
var _a = swiper.navigation, nextEl = _a.nextEl, prevEl = _a.prevEl;
nextEl = (0, utils_1.makeElementsArray)(nextEl);
prevEl = (0, utils_1.makeElementsArray)(prevEl);
var targetEl = e.target;
var targetIsButton = prevEl.includes(targetEl) || nextEl.includes(targetEl);
if (swiper.isElement && !targetIsButton) {
var path = e.path || (e.composedPath && e.composedPath());
if (path) {
targetIsButton = path.find(function (pathEl) { return nextEl.includes(pathEl) || prevEl.includes(pathEl); });
}
}
if (swiper.params.navigation.hideOnClick && !targetIsButton) {
if (swiper.pagination &&
swiper.params.pagination &&
swiper.params.pagination.clickable &&
(swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl)))
return;
var isHidden = void 0;
if (nextEl.length) {
isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);
}
else if (prevEl.length) {
isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);
}
if (isHidden === true) {
emit('navigationShow');
}
else {
emit('navigationHide');
}
__spreadArray(__spreadArray([], nextEl, true), prevEl, true).filter(function (el) { return !!el; })
.forEach(function (el) { return el.classList.toggle(swiper.params.navigation.hiddenClass); });
}
});
var enable = function () {
var _a;
(_a = swiper.el.classList).remove.apply(_a, swiper.params.navigation.navigationDisabledClass.split(' '));
init();
update();
};
var disable = function () {
var _a;
(_a = swiper.el.classList).add.apply(_a, swiper.params.navigation.navigationDisabledClass.split(' '));
destroy();
};
Object.assign(swiper.navigation, {
enable: enable,
disable: disable,
update: update,
init: init,
destroy: destroy,
});
}
//# sourceMappingURL=navigation.js.map