123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- (function (factory) {
- if (typeof define === 'function' && define.amd) {
- // AMD. Register as an anonymous module
- define(['jquery'], factory);
- } else if (typeof exports === 'object') {
- // Node/CommonJS
- module.exports = factory(require('jquery'));
- } else {
- // Browser globals
- factory(jQuery);
- }
- })(function ($) {
- var DropdownSubmenu =
- /*#__PURE__*/
- function () {
- function DropdownSubmenu(element) {
- this.element = element.parentElement;
- this.menuElement = this.element.querySelector('.dropdown-menu');
- this.init();
- }
- var _proto = DropdownSubmenu.prototype;
- _proto.init = function init() {
- var _this = this;
- $(this.element).off('keydown.bs.dropdown.data-api');
- this.menuElement.addEventListener('keydown', this.itemKeydown.bind(this));
- var dropdownItemNodeList = this.menuElement.querySelectorAll('.dropdown-item');
- Array.from(dropdownItemNodeList).forEach(function (element) {
- element.addEventListener('keydown', _this.handleKeydownDropdownItem.bind(_this));
- });
- $(this.menuElement).on('keydown', '.dropdown-submenu > .dropdown-item', this.handleKeydownSubmenuDropdownItem.bind(this));
- $(this.menuElement).on('click', '.dropdown-submenu > .dropdown-item', this.handleClickSubmenuDropdownItem.bind(this));
- $(this.element).on('hidden.bs.dropdown', function () {
- _this.close(_this.menuElement);
- });
- };
- _proto.handleKeydownDropdownItem = function handleKeydownDropdownItem(event) {
- // 27: Esc
- if (event.keyCode !== 27) {
- return;
- }
- event.target.closest('.dropdown-menu').previousElementSibling.focus();
- event.target.closest('.dropdown-menu').classList.remove('show');
- };
- _proto.handleKeydownSubmenuDropdownItem = function handleKeydownSubmenuDropdownItem(event) {
- // 32: Spacebar
- if (event.keyCode !== 32) {
- return;
- } // NOTE: Off vertical scrolling
- event.preventDefault();
- this.toggle(event.target);
- };
- _proto.handleClickSubmenuDropdownItem = function handleClickSubmenuDropdownItem(event) {
- event.stopPropagation();
- this.toggle(event.target);
- };
- _proto.itemKeydown = function itemKeydown(event) {
- // 38: Arrow up, 40: Arrow down
- if (![38, 40].includes(event.keyCode)) {
- return;
- } // NOTE: Off vertical scrolling
- event.preventDefault();
- event.stopPropagation();
- var itemNodeList = this.element.querySelectorAll('.show > .dropdown-item:not(:disabled):not(.disabled), .show > .dropdown > .dropdown-item');
- var index = Array.from(itemNodeList).indexOf(event.target);
- if (event.keyCode === 38 && index !== 0) {
- index--;
- } else if (event.keyCode === 40 && index !== itemNodeList.length - 1) {
- index++;
- } else {
- return;
- }
- itemNodeList[index].focus();
- };
- _proto.toggle = function toggle(element) {
- var dropdownElement = element.closest('.dropdown');
- var parentMenuElement = dropdownElement.closest('.dropdown-menu');
- var menuElement = dropdownElement.querySelector('.dropdown-menu');
- var isOpen = menuElement.classList.contains('show');
- this.close(parentMenuElement);
- menuElement.classList.toggle('show', !isOpen);
- };
- _proto.close = function close(menuElement) {
- var menuNodeList = menuElement.querySelectorAll('.dropdown-menu.show');
- Array.from(menuNodeList).forEach(function (element) {
- element.classList.remove('show');
- });
- };
- return DropdownSubmenu;
- }(); // For AMD/Node/CommonJS used elements (optional)
- // http://learn.jquery.com/jquery-ui/environments/amd/
- $.fn.submenupicker = function (elements) {
- var $elements = this instanceof $ ? this : $(elements);
- return $elements.each(function () {
- var data = $.data(this, 'bs.submenu');
- if (!data) {
- data = new DropdownSubmenu(this);
- $.data(this, 'bs.submenu', data);
- }
- });
- };
- return DropdownSubmenu;
- });
|