]>
git.ipfire.org Git - ipfire.org.git/blob - static/scss/bootstrap-4.0.0-alpha.6/js/dist/dropdown.js
52d13ad1295def00cd61281bfd384f590cc317ba
1 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
; }; }();
3 function _classCallCheck(instance
, Constructor
) { if (!(instance
instanceof Constructor
)) { throw new TypeError("Cannot call a class as a function"); } }
6 * --------------------------------------------------------------------------
7 * Bootstrap (v4.0.0-alpha.6): dropdown.js
8 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
9 * --------------------------------------------------------------------------
12 var Dropdown = function ($) {
15 * ------------------------------------------------------------------------
17 * ------------------------------------------------------------------------
20 var NAME
= 'dropdown';
21 var VERSION
= '4.0.0-alpha.6';
22 var DATA_KEY
= 'bs.dropdown';
23 var EVENT_KEY
= '.' + DATA_KEY
;
24 var DATA_API_KEY
= '.data-api';
25 var JQUERY_NO_CONFLICT
= $.fn
[NAME
];
26 var ESCAPE_KEYCODE
= 27; // KeyboardEvent.which value for Escape (Esc) key
27 var ARROW_UP_KEYCODE
= 38; // KeyboardEvent.which value for up arrow key
28 var ARROW_DOWN_KEYCODE
= 40; // KeyboardEvent.which value for down arrow key
29 var RIGHT_MOUSE_BUTTON_WHICH
= 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
32 HIDE
: 'hide' + EVENT_KEY
,
33 HIDDEN
: 'hidden' + EVENT_KEY
,
34 SHOW
: 'show' + EVENT_KEY
,
35 SHOWN
: 'shown' + EVENT_KEY
,
36 CLICK
: 'click' + EVENT_KEY
,
37 CLICK_DATA_API
: 'click' + EVENT_KEY
+ DATA_API_KEY
,
38 FOCUSIN_DATA_API
: 'focusin' + EVENT_KEY
+ DATA_API_KEY
,
39 KEYDOWN_DATA_API
: 'keydown' + EVENT_KEY
+ DATA_API_KEY
43 BACKDROP
: 'dropdown-backdrop',
49 BACKDROP
: '.dropdown-backdrop',
50 DATA_TOGGLE
: '[data-toggle="dropdown"]',
51 FORM_CHILD
: '.dropdown form',
52 ROLE_MENU
: '[role="menu"]',
53 ROLE_LISTBOX
: '[role="listbox"]',
54 NAVBAR_NAV
: '.navbar-nav',
55 VISIBLE_ITEMS
: '[role="menu"] li:not(.disabled) a, ' + '[role="listbox"] li:not(.disabled) a'
59 * ------------------------------------------------------------------------
61 * ------------------------------------------------------------------------
64 var Dropdown = function () {
65 function Dropdown(element
) {
66 _classCallCheck(this, Dropdown
);
68 this._element
= element
;
70 this._addEventListeners();
77 Dropdown
.prototype.toggle
= function toggle() {
78 if (this.disabled
|| $(this).hasClass(ClassName
.DISABLED
)) {
82 var parent
= Dropdown
._getParentFromElement(this);
83 var isActive
= $(parent
).hasClass(ClassName
.SHOW
);
85 Dropdown
._clearMenus();
91 if ('ontouchstart' in document
.documentElement
&& !$(parent
).closest(Selector
.NAVBAR_NAV
).length
) {
93 // if mobile we use a backdrop because click events don't delegate
94 var dropdown
= document
.createElement('div');
95 dropdown
.className
= ClassName
.BACKDROP
;
96 $(dropdown
).insertBefore(this);
97 $(dropdown
).on('click', Dropdown
._clearMenus
);
100 var relatedTarget
= {
103 var showEvent
= $.Event(Event
.SHOW
, relatedTarget
);
105 $(parent
).trigger(showEvent
);
107 if (showEvent
.isDefaultPrevented()) {
112 this.setAttribute('aria-expanded', true);
114 $(parent
).toggleClass(ClassName
.SHOW
);
115 $(parent
).trigger($.Event(Event
.SHOWN
, relatedTarget
));
120 Dropdown
.prototype.dispose
= function dispose() {
121 $.removeData(this._element
, DATA_KEY
);
122 $(this._element
).off(EVENT_KEY
);
123 this._element
= null;
128 Dropdown
.prototype._addEventListeners
= function _addEventListeners() {
129 $(this._element
).on(Event
.CLICK
, this.toggle
);
134 Dropdown
._jQueryInterface
= function _jQueryInterface(config
) {
135 return this.each(function () {
136 var data
= $(this).data(DATA_KEY
);
139 data
= new Dropdown(this);
140 $(this).data(DATA_KEY
, data
);
143 if (typeof config
=== 'string') {
144 if (data
[config
] === undefined) {
145 throw new Error('No method named "' + config
+ '"');
147 data
[config
].call(this);
152 Dropdown
._clearMenus
= function _clearMenus(event
) {
153 if (event
&& event
.which
=== RIGHT_MOUSE_BUTTON_WHICH
) {
157 var backdrop
= $(Selector
.BACKDROP
)[0];
159 backdrop
.parentNode
.removeChild(backdrop
);
162 var toggles
= $.makeArray($(Selector
.DATA_TOGGLE
));
164 for (var i
= 0; i
< toggles
.length
; i
++) {
165 var parent
= Dropdown
._getParentFromElement(toggles
[i
]);
166 var relatedTarget
= {
167 relatedTarget
: toggles
[i
]
170 if (!$(parent
).hasClass(ClassName
.SHOW
)) {
174 if (event
&& (event
.type
=== 'click' && /input|textarea/i.test(event
.target
.tagName
) || event
.type
=== 'focusin') && $.contains(parent
, event
.target
)) {
178 var hideEvent
= $.Event(Event
.HIDE
, relatedTarget
);
179 $(parent
).trigger(hideEvent
);
180 if (hideEvent
.isDefaultPrevented()) {
184 toggles
[i
].setAttribute('aria-expanded', 'false');
186 $(parent
).removeClass(ClassName
.SHOW
).trigger($.Event(Event
.HIDDEN
, relatedTarget
));
190 Dropdown
._getParentFromElement
= function _getParentFromElement(element
) {
192 var selector
= Util
.getSelectorFromElement(element
);
195 parent
= $(selector
)[0];
198 return parent
|| element
.parentNode
;
201 Dropdown
._dataApiKeydownHandler
= function _dataApiKeydownHandler(event
) {
202 if (!/(38|40|27|32)/.test(event
.which
) || /input|textarea/i.test(event
.target
.tagName
)) {
206 event
.preventDefault();
207 event
.stopPropagation();
209 if (this.disabled
|| $(this).hasClass(ClassName
.DISABLED
)) {
213 var parent
= Dropdown
._getParentFromElement(this);
214 var isActive
= $(parent
).hasClass(ClassName
.SHOW
);
216 if (!isActive
&& event
.which
!== ESCAPE_KEYCODE
|| isActive
&& event
.which
=== ESCAPE_KEYCODE
) {
218 if (event
.which
=== ESCAPE_KEYCODE
) {
219 var toggle
= $(parent
).find(Selector
.DATA_TOGGLE
)[0];
220 $(toggle
).trigger('focus');
223 $(this).trigger('click');
227 var items
= $(parent
).find(Selector
.VISIBLE_ITEMS
).get();
233 var index
= items
.indexOf(event
.target
);
235 if (event
.which
=== ARROW_UP_KEYCODE
&& index
> 0) {
240 if (event
.which
=== ARROW_DOWN_KEYCODE
&& index
< items
.length
- 1) {
249 items
[index
].focus();
252 _createClass(Dropdown
, null, [{
254 get: function get() {
263 * ------------------------------------------------------------------------
264 * Data Api implementation
265 * ------------------------------------------------------------------------
268 $(document
).on(Event
.KEYDOWN_DATA_API
, Selector
.DATA_TOGGLE
, Dropdown
._dataApiKeydownHandler
).on(Event
.KEYDOWN_DATA_API
, Selector
.ROLE_MENU
, Dropdown
._dataApiKeydownHandler
).on(Event
.KEYDOWN_DATA_API
, Selector
.ROLE_LISTBOX
, Dropdown
._dataApiKeydownHandler
).on(Event
.CLICK_DATA_API
+ ' ' + Event
.FOCUSIN_DATA_API
, Dropdown
._clearMenus
).on(Event
.CLICK_DATA_API
, Selector
.DATA_TOGGLE
, Dropdown
.prototype.toggle
).on(Event
.CLICK_DATA_API
, Selector
.FORM_CHILD
, function (e
) {
273 * ------------------------------------------------------------------------
275 * ------------------------------------------------------------------------
278 $.fn
[NAME
] = Dropdown
._jQueryInterface
;
279 $.fn
[NAME
].Constructor
= Dropdown
;
280 $.fn
[NAME
].noConflict = function () {
281 $.fn
[NAME
] = JQUERY_NO_CONFLICT
;
282 return Dropdown
._jQueryInterface
;
287 //# sourceMappingURL=dropdown.js.map