diff options
author | Mark Otto <markdotto@gmail.com> | 2017-10-01 00:28:03 +0300 |
---|---|---|
committer | Mark Otto <markdotto@gmail.com> | 2017-10-01 00:28:03 +0300 |
commit | f5ad6e3987788ae5903a39384c49171bf52bd7b8 (patch) | |
tree | 4ef5356be5901c7b6933781cce13f26b02fb9353 /js/dist/dropdown.js | |
parent | 136c49a13fc347752674d57442eefc10f050aee0 (diff) |
dist
Diffstat (limited to 'js/dist/dropdown.js')
-rw-r--r-- | js/dist/dropdown.js | 509 |
1 files changed, 249 insertions, 260 deletions
diff --git a/js/dist/dropdown.js b/js/dist/dropdown.js index bf393b126e..0529174795 100644 --- a/js/dist/dropdown.js +++ b/js/dist/dropdown.js @@ -1,10 +1,6 @@ -'use strict'; +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } /** * -------------------------------------------------------------------------- @@ -12,9 +8,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * -------------------------------------------------------------------------- */ - var Dropdown = function () { - /** * Check for Popper dependency * Popper - https://popper.js.org @@ -22,38 +16,42 @@ var Dropdown = function () { if (typeof Popper === 'undefined') { throw new Error('Bootstrap dropdown require Popper.js (https://popper.js.org)'); } - /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ + var NAME = 'dropdown'; var VERSION = '4.0.0-beta'; var DATA_KEY = 'bs.dropdown'; - var EVENT_KEY = '.' + DATA_KEY; + var EVENT_KEY = "." + DATA_KEY; var DATA_API_KEY = '.data-api'; var JQUERY_NO_CONFLICT = $.fn[NAME]; var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key + var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key + var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key + var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key + var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key + var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse) - var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + '|' + ARROW_DOWN_KEYCODE + '|' + ESCAPE_KEYCODE); + var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE); var Event = { - HIDE: 'hide' + EVENT_KEY, - HIDDEN: 'hidden' + EVENT_KEY, - SHOW: 'show' + EVENT_KEY, - SHOWN: 'shown' + EVENT_KEY, - CLICK: 'click' + EVENT_KEY, - CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY, - KEYDOWN_DATA_API: 'keydown' + EVENT_KEY + DATA_API_KEY, - KEYUP_DATA_API: 'keyup' + EVENT_KEY + DATA_API_KEY + HIDE: "hide" + EVENT_KEY, + HIDDEN: "hidden" + EVENT_KEY, + SHOW: "show" + EVENT_KEY, + SHOWN: "shown" + EVENT_KEY, + CLICK: "click" + EVENT_KEY, + CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY, + KEYDOWN_DATA_API: "keydown" + EVENT_KEY + DATA_API_KEY, + KEYUP_DATA_API: "keyup" + EVENT_KEY + DATA_API_KEY }; - var ClassName = { DISABLED: 'disabled', SHOW: 'show', @@ -61,7 +59,6 @@ var Dropdown = function () { MENURIGHT: 'dropdown-menu-right', MENULEFT: 'dropdown-menu-left' }; - var Selector = { DATA_TOGGLE: '[data-toggle="dropdown"]', FORM_CHILD: '.dropdown form', @@ -69,23 +66,19 @@ var Dropdown = function () { NAVBAR_NAV: '.navbar-nav', VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled)' }; - var AttachmentMap = { TOP: 'top-start', TOPEND: 'top-end', BOTTOM: 'bottom-start', BOTTOMEND: 'bottom-end' }; - var Default = { offset: 0, flip: true }; - var DefaultType = { offset: '(number|string)', flip: 'boolean' - /** * ------------------------------------------------------------------------ * Class Definition @@ -93,10 +86,11 @@ var Dropdown = function () { */ }; - var Dropdown = function () { - function Dropdown(element, config) { - _classCallCheck(this, Dropdown); + var Dropdown = + /*#__PURE__*/ + function () { + function Dropdown(element, config) { this._element = element; this._popper = null; this._config = this._getConfig(config); @@ -104,305 +98,299 @@ var Dropdown = function () { this._inNavbar = this._detectNavbar(); this._addEventListeners(); - } + } // getters - // getters - _createClass(Dropdown, [{ - key: 'toggle', + var _proto = Dropdown.prototype; + // public + _proto.toggle = function toggle() { + if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) { + return; + } - // public - - value: function toggle() { - if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) { - return; - } + var parent = Dropdown._getParentFromElement(this._element); - var parent = Dropdown._getParentFromElement(this._element); - var isActive = $(this._menu).hasClass(ClassName.SHOW); + var isActive = $(this._menu).hasClass(ClassName.SHOW); - Dropdown._clearMenus(); + Dropdown._clearMenus(); - if (isActive) { - return; - } + if (isActive) { + return; + } - var relatedTarget = { - relatedTarget: this._element - }; - var showEvent = $.Event(Event.SHOW, relatedTarget); + var relatedTarget = { + relatedTarget: this._element + }; + var showEvent = $.Event(Event.SHOW, relatedTarget); + $(parent).trigger(showEvent); - $(parent).trigger(showEvent); + if (showEvent.isDefaultPrevented()) { + return; + } - if (showEvent.isDefaultPrevented()) { - return; - } + var element = this._element; // for dropup with alignment we use the parent as popper container - var element = this._element; - // for dropup with alignment we use the parent as popper container - if ($(parent).hasClass(ClassName.DROPUP)) { - if ($(this._menu).hasClass(ClassName.MENULEFT) || $(this._menu).hasClass(ClassName.MENURIGHT)) { - element = parent; - } - } - this._popper = new Popper(element, this._menu, this._getPopperConfig()); - - // if this is a touch-enabled device we add extra - // empty mouseover listeners to the body's immediate children; - // only needed because of broken event delegation on iOS - // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html - if ('ontouchstart' in document.documentElement && !$(parent).closest(Selector.NAVBAR_NAV).length) { - $('body').children().on('mouseover', null, $.noop); + if ($(parent).hasClass(ClassName.DROPUP)) { + if ($(this._menu).hasClass(ClassName.MENULEFT) || $(this._menu).hasClass(ClassName.MENURIGHT)) { + element = parent; } + } - this._element.focus(); - this._element.setAttribute('aria-expanded', true); + this._popper = new Popper(element, this._menu, this._getPopperConfig()); // if this is a touch-enabled device we add extra + // empty mouseover listeners to the body's immediate children; + // only needed because of broken event delegation on iOS + // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html - $(this._menu).toggleClass(ClassName.SHOW); - $(parent).toggleClass(ClassName.SHOW).trigger($.Event(Event.SHOWN, relatedTarget)); - } - }, { - key: 'dispose', - value: function dispose() { - $.removeData(this._element, DATA_KEY); - $(this._element).off(EVENT_KEY); - this._element = null; - this._menu = null; - if (this._popper !== null) { - this._popper.destroy(); - } - this._popper = null; + if ('ontouchstart' in document.documentElement && !$(parent).closest(Selector.NAVBAR_NAV).length) { + $('body').children().on('mouseover', null, $.noop); } - }, { - key: 'update', - value: function update() { - this._inNavbar = this._detectNavbar(); - if (this._popper !== null) { - this._popper.scheduleUpdate(); - } + + this._element.focus(); + + this._element.setAttribute('aria-expanded', true); + + $(this._menu).toggleClass(ClassName.SHOW); + $(parent).toggleClass(ClassName.SHOW).trigger($.Event(Event.SHOWN, relatedTarget)); + }; + + _proto.dispose = function dispose() { + $.removeData(this._element, DATA_KEY); + $(this._element).off(EVENT_KEY); + this._element = null; + this._menu = null; + + if (this._popper !== null) { + this._popper.destroy(); } - // private + this._popper = null; + }; - }, { - key: '_addEventListeners', - value: function _addEventListeners() { - var _this = this; - - $(this._element).on(Event.CLICK, function (event) { - event.preventDefault(); - event.stopPropagation(); - _this.toggle(); - }); + _proto.update = function update() { + this._inNavbar = this._detectNavbar(); + + if (this._popper !== null) { + this._popper.scheduleUpdate(); } - }, { - key: '_getConfig', - value: function _getConfig(config) { - config = $.extend({}, this.constructor.Default, $(this._element).data(), config); + }; // private + + + _proto._addEventListeners = function _addEventListeners() { + var _this = this; + + $(this._element).on(Event.CLICK, function (event) { + event.preventDefault(); + event.stopPropagation(); + + _this.toggle(); + }); + }; - Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); + _proto._getConfig = function _getConfig(config) { + config = $.extend({}, this.constructor.Default, $(this._element).data(), config); + Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); + return config; + }; - return config; + _proto._getMenuElement = function _getMenuElement() { + if (!this._menu) { + var parent = Dropdown._getParentFromElement(this._element); + + this._menu = $(parent).find(Selector.MENU)[0]; } - }, { - key: '_getMenuElement', - value: function _getMenuElement() { - if (!this._menu) { - var parent = Dropdown._getParentFromElement(this._element); - this._menu = $(parent).find(Selector.MENU)[0]; + + return this._menu; + }; + + _proto._getPlacement = function _getPlacement() { + var $parentDropdown = $(this._element).parent(); + var placement = AttachmentMap.BOTTOM; // Handle dropup + + if ($parentDropdown.hasClass(ClassName.DROPUP)) { + placement = AttachmentMap.TOP; + + if ($(this._menu).hasClass(ClassName.MENURIGHT)) { + placement = AttachmentMap.TOPEND; } - return this._menu; + } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) { + placement = AttachmentMap.BOTTOMEND; } - }, { - key: '_getPlacement', - value: function _getPlacement() { - var $parentDropdown = $(this._element).parent(); - var placement = AttachmentMap.BOTTOM; - - // Handle dropup - if ($parentDropdown.hasClass(ClassName.DROPUP)) { - placement = AttachmentMap.TOP; - if ($(this._menu).hasClass(ClassName.MENURIGHT)) { - placement = AttachmentMap.TOPEND; + + return placement; + }; + + _proto._detectNavbar = function _detectNavbar() { + return $(this._element).closest('.navbar').length > 0; + }; + + _proto._getPopperConfig = function _getPopperConfig() { + var popperConfig = { + placement: this._getPlacement(), + modifiers: { + offset: { + offset: this._config.offset + }, + flip: { + enabled: this._config.flip } - } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) { - placement = AttachmentMap.BOTTOMEND; - } - return placement; - } - }, { - key: '_detectNavbar', - value: function _detectNavbar() { - return $(this._element).closest('.navbar').length > 0; + } // Disable Popper.js for Dropdown in Navbar + + }; + + if (this._inNavbar) { + popperConfig.modifiers.applyStyle = { + enabled: !this._inNavbar + }; } - }, { - key: '_getPopperConfig', - value: function _getPopperConfig() { - var popperConfig = { - placement: this._getPlacement(), - modifiers: { - offset: { - offset: this._config.offset - }, - flip: { - enabled: this._config.flip - } + + return popperConfig; + }; // static + + + Dropdown._jQueryInterface = function _jQueryInterface(config) { + return this.each(function () { + var data = $(this).data(DATA_KEY); + + var _config = typeof config === 'object' ? config : null; + + if (!data) { + data = new Dropdown(this, _config); + $(this).data(DATA_KEY, data); + } + + if (typeof config === 'string') { + if (typeof data[config] === 'undefined') { + throw new Error("No method named \"" + config + "\""); } - // Disable Popper.js for Dropdown in Navbar - };if (this._inNavbar) { - popperConfig.modifiers.applyStyle = { - enabled: !this._inNavbar - }; + data[config](); } - return popperConfig; + }); + }; + + Dropdown._clearMenus = function _clearMenus(event) { + if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { + return; } - // static + var toggles = $.makeArray($(Selector.DATA_TOGGLE)); - }], [{ - key: '_jQueryInterface', - value: function _jQueryInterface(config) { - return this.each(function () { - var data = $(this).data(DATA_KEY); - var _config = (typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' ? config : null; + for (var i = 0; i < toggles.length; i++) { + var parent = Dropdown._getParentFromElement(toggles[i]); - if (!data) { - data = new Dropdown(this, _config); - $(this).data(DATA_KEY, data); - } + var context = $(toggles[i]).data(DATA_KEY); + var relatedTarget = { + relatedTarget: toggles[i] + }; - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new Error('No method named "' + config + '"'); - } - data[config](); - } - }); - } - }, { - key: '_clearMenus', - value: function _clearMenus(event) { - if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { - return; + if (!context) { + continue; } - var toggles = $.makeArray($(Selector.DATA_TOGGLE)); - for (var i = 0; i < toggles.length; i++) { - var parent = Dropdown._getParentFromElement(toggles[i]); - var context = $(toggles[i]).data(DATA_KEY); - var relatedTarget = { - relatedTarget: toggles[i] - }; + var dropdownMenu = context._menu; - if (!context) { - continue; - } + if (!$(parent).hasClass(ClassName.SHOW)) { + continue; + } - var dropdownMenu = context._menu; - if (!$(parent).hasClass(ClassName.SHOW)) { - continue; - } + if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) { + continue; + } - if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) { - continue; - } + var hideEvent = $.Event(Event.HIDE, relatedTarget); + $(parent).trigger(hideEvent); - var hideEvent = $.Event(Event.HIDE, relatedTarget); - $(parent).trigger(hideEvent); - if (hideEvent.isDefaultPrevented()) { - continue; - } + if (hideEvent.isDefaultPrevented()) { + continue; + } // if this is a touch-enabled device we remove the extra + // empty mouseover listeners we added for iOS support - // if this is a touch-enabled device we remove the extra - // empty mouseover listeners we added for iOS support - if ('ontouchstart' in document.documentElement) { - $('body').children().off('mouseover', null, $.noop); - } - toggles[i].setAttribute('aria-expanded', 'false'); - - $(dropdownMenu).removeClass(ClassName.SHOW); - $(parent).removeClass(ClassName.SHOW).trigger($.Event(Event.HIDDEN, relatedTarget)); + if ('ontouchstart' in document.documentElement) { + $('body').children().off('mouseover', null, $.noop); } + + toggles[i].setAttribute('aria-expanded', 'false'); + $(dropdownMenu).removeClass(ClassName.SHOW); + $(parent).removeClass(ClassName.SHOW).trigger($.Event(Event.HIDDEN, relatedTarget)); } - }, { - key: '_getParentFromElement', - value: function _getParentFromElement(element) { - var parent = void 0; - var selector = Util.getSelectorFromElement(element); + }; - if (selector) { - parent = $(selector)[0]; - } + Dropdown._getParentFromElement = function _getParentFromElement(element) { + var parent; + var selector = Util.getSelectorFromElement(element); - return parent || element.parentNode; + if (selector) { + parent = $(selector)[0]; } - }, { - key: '_dataApiKeydownHandler', - value: function _dataApiKeydownHandler(event) { - if (!REGEXP_KEYDOWN.test(event.which) || /button/i.test(event.target.tagName) && event.which === SPACE_KEYCODE || /input|textarea/i.test(event.target.tagName)) { - return; - } - event.preventDefault(); - event.stopPropagation(); + return parent || element.parentNode; + }; - if (this.disabled || $(this).hasClass(ClassName.DISABLED)) { - return; - } + Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { + if (!REGEXP_KEYDOWN.test(event.which) || /button/i.test(event.target.tagName) && event.which === SPACE_KEYCODE || /input|textarea/i.test(event.target.tagName)) { + return; + } - var parent = Dropdown._getParentFromElement(this); - var isActive = $(parent).hasClass(ClassName.SHOW); + event.preventDefault(); + event.stopPropagation(); - if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { + if (this.disabled || $(this).hasClass(ClassName.DISABLED)) { + return; + } - if (event.which === ESCAPE_KEYCODE) { - var toggle = $(parent).find(Selector.DATA_TOGGLE)[0]; - $(toggle).trigger('focus'); - } + var parent = Dropdown._getParentFromElement(this); - $(this).trigger('click'); - return; + var isActive = $(parent).hasClass(ClassName.SHOW); + + if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { + if (event.which === ESCAPE_KEYCODE) { + var toggle = $(parent).find(Selector.DATA_TOGGLE)[0]; + $(toggle).trigger('focus'); } - var items = $(parent).find(Selector.VISIBLE_ITEMS).get(); + $(this).trigger('click'); + return; + } - if (!items.length) { - return; - } + var items = $(parent).find(Selector.VISIBLE_ITEMS).get(); - var index = items.indexOf(event.target); + if (!items.length) { + return; + } - if (event.which === ARROW_UP_KEYCODE && index > 0) { - // up - index--; - } + var index = items.indexOf(event.target); - if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { - // down - index++; - } + if (event.which === ARROW_UP_KEYCODE && index > 0) { + // up + index--; + } - if (index < 0) { - index = 0; - } + if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { + // down + index++; + } - items[index].focus(); + if (index < 0) { + index = 0; } - }, { - key: 'VERSION', + + items[index].focus(); + }; + + _createClass(Dropdown, null, [{ + key: "VERSION", get: function get() { return VERSION; } }, { - key: 'Default', + key: "Default", get: function get() { return Default; } }, { - key: 'DefaultType', + key: "DefaultType", get: function get() { return DefaultType; } @@ -410,21 +398,21 @@ var Dropdown = function () { return Dropdown; }(); - /** * ------------------------------------------------------------------------ * Data Api implementation * ------------------------------------------------------------------------ */ - $(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + ' ' + Event.KEYUP_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { + + $(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + " " + Event.KEYUP_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { event.preventDefault(); event.stopPropagation(); + Dropdown._jQueryInterface.call($(this), 'toggle'); }).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) { e.stopPropagation(); }); - /** * ------------------------------------------------------------------------ * jQuery @@ -433,6 +421,7 @@ var Dropdown = function () { $.fn[NAME] = Dropdown._jQueryInterface; $.fn[NAME].Constructor = Dropdown; + $.fn[NAME].noConflict = function () { $.fn[NAME] = JQUERY_NO_CONFLICT; return Dropdown._jQueryInterface; |