UNPKG

swiper

Version:

Most modern mobile touch slider and framework with hardware accelerated transitions

228 lines (201 loc) 7.28 kB
"use strict"; exports.__esModule = true; exports.default = void 0; var _dom = _interopRequireDefault(require("../../utils/dom")); var _utils = require("../../utils/utils"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } var A11y = { makeElFocusable: function makeElFocusable($el) { $el.attr('tabIndex', '0'); return $el; }, makeElNotFocusable: function makeElNotFocusable($el) { $el.attr('tabIndex', '-1'); return $el; }, addElRole: function addElRole($el, role) { $el.attr('role', role); return $el; }, addElLabel: function addElLabel($el, label) { $el.attr('aria-label', label); return $el; }, disableEl: function disableEl($el) { $el.attr('aria-disabled', true); return $el; }, enableEl: function enableEl($el) { $el.attr('aria-disabled', false); return $el; }, onEnterKey: function onEnterKey(e) { var swiper = this; var params = swiper.params.a11y; if (e.keyCode !== 13) return; var $targetEl = (0, _dom.default)(e.target); if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) { if (!(swiper.isEnd && !swiper.params.loop)) { swiper.slideNext(); } if (swiper.isEnd) { swiper.a11y.notify(params.lastSlideMessage); } else { swiper.a11y.notify(params.nextSlideMessage); } } if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) { if (!(swiper.isBeginning && !swiper.params.loop)) { swiper.slidePrev(); } if (swiper.isBeginning) { swiper.a11y.notify(params.firstSlideMessage); } else { swiper.a11y.notify(params.prevSlideMessage); } } if (swiper.pagination && $targetEl.is("." + swiper.params.pagination.bulletClass)) { $targetEl[0].click(); } }, notify: function notify(message) { var swiper = this; var notification = swiper.a11y.liveRegion; if (notification.length === 0) return; notification.html(''); notification.html(message); }, updateNavigation: function updateNavigation() { var swiper = this; if (swiper.params.loop || !swiper.navigation) return; var _swiper$navigation = swiper.navigation, $nextEl = _swiper$navigation.$nextEl, $prevEl = _swiper$navigation.$prevEl; if ($prevEl && $prevEl.length > 0) { if (swiper.isBeginning) { swiper.a11y.disableEl($prevEl); swiper.a11y.makeElNotFocusable($prevEl); } else { swiper.a11y.enableEl($prevEl); swiper.a11y.makeElFocusable($prevEl); } } if ($nextEl && $nextEl.length > 0) { if (swiper.isEnd) { swiper.a11y.disableEl($nextEl); swiper.a11y.makeElNotFocusable($nextEl); } else { swiper.a11y.enableEl($nextEl); swiper.a11y.makeElFocusable($nextEl); } } }, updatePagination: function updatePagination() { var swiper = this; var params = swiper.params.a11y; if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) { swiper.pagination.bullets.each(function (bulletEl) { var $bulletEl = (0, _dom.default)(bulletEl); swiper.a11y.makeElFocusable($bulletEl); swiper.a11y.addElRole($bulletEl, 'button'); swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/\{\{index\}\}/, $bulletEl.index() + 1)); }); } }, init: function init() { var swiper = this; swiper.$el.append(swiper.a11y.liveRegion); // Navigation var params = swiper.params.a11y; var $nextEl; var $prevEl; if (swiper.navigation && swiper.navigation.$nextEl) { $nextEl = swiper.navigation.$nextEl; } if (swiper.navigation && swiper.navigation.$prevEl) { $prevEl = swiper.navigation.$prevEl; } if ($nextEl) { swiper.a11y.makeElFocusable($nextEl); swiper.a11y.addElRole($nextEl, 'button'); swiper.a11y.addElLabel($nextEl, params.nextSlideMessage); $nextEl.on('keydown', swiper.a11y.onEnterKey); } if ($prevEl) { swiper.a11y.makeElFocusable($prevEl); swiper.a11y.addElRole($prevEl, 'button'); swiper.a11y.addElLabel($prevEl, params.prevSlideMessage); $prevEl.on('keydown', swiper.a11y.onEnterKey); } // Pagination if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) { swiper.pagination.$el.on('keydown', "." + swiper.params.pagination.bulletClass, swiper.a11y.onEnterKey); } }, destroy: function destroy() { var swiper = this; if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) swiper.a11y.liveRegion.remove(); var $nextEl; var $prevEl; if (swiper.navigation && swiper.navigation.$nextEl) { $nextEl = swiper.navigation.$nextEl; } if (swiper.navigation && swiper.navigation.$prevEl) { $prevEl = swiper.navigation.$prevEl; } if ($nextEl) { $nextEl.off('keydown', swiper.a11y.onEnterKey); } if ($prevEl) { $prevEl.off('keydown', swiper.a11y.onEnterKey); } // Pagination if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) { swiper.pagination.$el.off('keydown', "." + swiper.params.pagination.bulletClass, swiper.a11y.onEnterKey); } } }; var _default = { name: 'a11y', params: { a11y: { enabled: true, notificationClass: 'swiper-notification', prevSlideMessage: 'Previous slide', nextSlideMessage: 'Next slide', firstSlideMessage: 'This is the first slide', lastSlideMessage: 'This is the last slide', paginationBulletMessage: 'Go to slide {{index}}' } }, create: function create() { var swiper = this; (0, _utils.bindModuleMethods)(swiper, { a11y: _extends(_extends({}, A11y), {}, { liveRegion: (0, _dom.default)("<span class=\"" + swiper.params.a11y.notificationClass + "\" aria-live=\"assertive\" aria-atomic=\"true\"></span>") }) }); }, on: { init: function init(swiper) { if (!swiper.params.a11y.enabled) return; swiper.a11y.init(); swiper.a11y.updateNavigation(); }, toEdge: function toEdge(swiper) { if (!swiper.params.a11y.enabled) return; swiper.a11y.updateNavigation(); }, fromEdge: function fromEdge(swiper) { if (!swiper.params.a11y.enabled) return; swiper.a11y.updateNavigation(); }, paginationUpdate: function paginationUpdate(swiper) { if (!swiper.params.a11y.enabled) return; swiper.a11y.updatePagination(); }, destroy: function destroy(swiper) { if (!swiper.params.a11y.enabled) return; swiper.a11y.destroy(); } } }; exports.default = _default;