(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; });