bootstrap 5.0.0 → 5.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/assets/javascripts/bootstrap/alert.js +77 -106
  4. data/assets/javascripts/bootstrap/base-component.js +126 -7
  5. data/assets/javascripts/bootstrap/button.js +24 -24
  6. data/assets/javascripts/bootstrap/carousel.js +115 -128
  7. data/assets/javascripts/bootstrap/collapse.js +119 -176
  8. data/assets/javascripts/bootstrap/dom/data.js +2 -2
  9. data/assets/javascripts/bootstrap/dom/event-handler.js +3 -4
  10. data/assets/javascripts/bootstrap/dom/manipulator.js +4 -4
  11. data/assets/javascripts/bootstrap/dom/selector-engine.js +47 -5
  12. data/assets/javascripts/bootstrap/dropdown.js +142 -130
  13. data/assets/javascripts/bootstrap/modal.js +376 -171
  14. data/assets/javascripts/bootstrap/offcanvas.js +328 -133
  15. data/assets/javascripts/bootstrap/popover.js +27 -59
  16. data/assets/javascripts/bootstrap/scrollspy.js +51 -56
  17. data/assets/javascripts/bootstrap/tab.js +39 -66
  18. data/assets/javascripts/bootstrap/toast.js +175 -86
  19. data/assets/javascripts/bootstrap/tooltip.js +141 -185
  20. data/assets/javascripts/bootstrap-sprockets.js +6 -6
  21. data/assets/javascripts/bootstrap.js +1031 -1026
  22. data/assets/javascripts/bootstrap.min.js +2 -2
  23. data/assets/stylesheets/_bootstrap-grid.scss +3 -1
  24. data/assets/stylesheets/_bootstrap-reboot.scss +2 -4
  25. data/assets/stylesheets/_bootstrap.scss +2 -1
  26. data/assets/stylesheets/bootstrap/_card.scss +7 -6
  27. data/assets/stylesheets/bootstrap/_carousel.scss +2 -2
  28. data/assets/stylesheets/bootstrap/_dropdown.scss +4 -4
  29. data/assets/stylesheets/bootstrap/_functions.scss +100 -3
  30. data/assets/stylesheets/bootstrap/_grid.scss +11 -0
  31. data/assets/stylesheets/bootstrap/_helpers.scss +2 -0
  32. data/assets/stylesheets/bootstrap/_images.scss +1 -1
  33. data/assets/stylesheets/bootstrap/_list-group.scss +5 -5
  34. data/assets/stylesheets/bootstrap/_mixins.scss +1 -0
  35. data/assets/stylesheets/bootstrap/_modal.scss +7 -26
  36. data/assets/stylesheets/bootstrap/_navbar.scss +30 -1
  37. data/assets/stylesheets/bootstrap/_offcanvas.scss +8 -2
  38. data/assets/stylesheets/bootstrap/_placeholders.scss +51 -0
  39. data/assets/stylesheets/bootstrap/_popover.scss +10 -10
  40. data/assets/stylesheets/bootstrap/_reboot.scss +12 -8
  41. data/assets/stylesheets/bootstrap/_root.scss +40 -2
  42. data/assets/stylesheets/bootstrap/_tables.scss +1 -0
  43. data/assets/stylesheets/bootstrap/_toasts.scss +3 -3
  44. data/assets/stylesheets/bootstrap/_tooltip.scss +4 -4
  45. data/assets/stylesheets/bootstrap/_transitions.scss +6 -0
  46. data/assets/stylesheets/bootstrap/_utilities.scss +44 -8
  47. data/assets/stylesheets/bootstrap/_variables.scss +200 -25
  48. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +1 -1
  49. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +3 -1
  50. data/assets/stylesheets/bootstrap/forms/_form-check.scss +1 -1
  51. data/assets/stylesheets/bootstrap/forms/_form-control.scss +6 -6
  52. data/assets/stylesheets/bootstrap/forms/_form-range.scss +1 -1
  53. data/assets/stylesheets/bootstrap/forms/_form-select.scss +3 -0
  54. data/assets/stylesheets/bootstrap/helpers/_stacks.scss +15 -0
  55. data/assets/stylesheets/bootstrap/helpers/_vr.scss +8 -0
  56. data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
  57. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +1 -1
  58. data/assets/stylesheets/bootstrap/mixins/_forms.scss +8 -1
  59. data/assets/stylesheets/bootstrap/mixins/_grid.scss +33 -8
  60. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +27 -6
  61. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +55 -13
  62. data/bootstrap.gemspec +3 -3
  63. data/lib/bootstrap/version.rb +2 -2
  64. data/tasks/updater/js.rb +6 -2
  65. metadata +12 -8
@@ -1,13 +1,13 @@
1
1
  /*!
2
- * Bootstrap dropdown.js v5.0.0 (https://getbootstrap.com/)
2
+ * Bootstrap dropdown.js v5.1.1 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
5
  */
6
6
  (function (global, factory) {
7
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core'), require('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
8
- typeof define === 'function' && define.amd ? define(['@popperjs/core', './dom/data', './dom/event-handler', './dom/manipulator', './dom/selector-engine', './base-component'], factory) :
9
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dropdown = factory(global.Popper, global.Data, global.EventHandler, global.Manipulator, global.SelectorEngine, global.Base));
10
- }(this, (function (Popper, Data, EventHandler, Manipulator, SelectorEngine, BaseComponent) { 'use strict';
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
8
+ typeof define === 'function' && define.amd ? define(['@popperjs/core', './dom/event-handler', './dom/manipulator', './dom/selector-engine', './base-component'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dropdown = factory(global.Popper, global.EventHandler, global.Manipulator, global.SelectorEngine, global.Base));
10
+ }(this, (function (Popper, EventHandler, Manipulator, SelectorEngine, BaseComponent) { 'use strict';
11
11
 
12
12
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
13
 
@@ -32,7 +32,6 @@
32
32
  }
33
33
 
34
34
  var Popper__namespace = /*#__PURE__*/_interopNamespace(Popper);
35
- var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
36
35
  var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
37
36
  var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
38
37
  var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
@@ -40,7 +39,7 @@
40
39
 
41
40
  /**
42
41
  * --------------------------------------------------------------------------
43
- * Bootstrap (v5.0.0): util/index.js
42
+ * Bootstrap (v5.1.1): util/index.js
44
43
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
45
44
  * --------------------------------------------------------------------------
46
45
  */
@@ -82,7 +81,30 @@
82
81
  return selector ? document.querySelector(selector) : null;
83
82
  };
84
83
 
85
- const isElement = obj => (obj[0] || obj).nodeType;
84
+ const isElement = obj => {
85
+ if (!obj || typeof obj !== 'object') {
86
+ return false;
87
+ }
88
+
89
+ if (typeof obj.jquery !== 'undefined') {
90
+ obj = obj[0];
91
+ }
92
+
93
+ return typeof obj.nodeType !== 'undefined';
94
+ };
95
+
96
+ const getElement = obj => {
97
+ if (isElement(obj)) {
98
+ // it's a jQuery object or a node element
99
+ return obj.jquery ? obj[0] : obj;
100
+ }
101
+
102
+ if (typeof obj === 'string' && obj.length > 0) {
103
+ return document.querySelector(obj);
104
+ }
105
+
106
+ return null;
107
+ };
86
108
 
87
109
  const typeCheckConfig = (componentName, config, configTypes) => {
88
110
  Object.keys(configTypes).forEach(property => {
@@ -97,17 +119,11 @@
97
119
  };
98
120
 
99
121
  const isVisible = element => {
100
- if (!element) {
122
+ if (!isElement(element) || element.getClientRects().length === 0) {
101
123
  return false;
102
124
  }
103
125
 
104
- if (element.style && element.parentNode && element.parentNode.style) {
105
- const elementStyle = getComputedStyle(element);
106
- const parentNodeStyle = getComputedStyle(element.parentNode);
107
- return elementStyle.display !== 'none' && parentNodeStyle.display !== 'none' && elementStyle.visibility !== 'hidden';
108
- }
109
-
110
- return false;
126
+ return getComputedStyle(element).getPropertyValue('visibility') === 'visible';
111
127
  };
112
128
 
113
129
  const isDisabled = element => {
@@ -140,9 +156,18 @@
140
156
  return null;
141
157
  };
142
158
 
159
+ const DOMContentLoadedCallbacks = [];
160
+
143
161
  const onDOMContentLoaded = callback => {
144
162
  if (document.readyState === 'loading') {
145
- document.addEventListener('DOMContentLoaded', callback);
163
+ // add listener on the first call when the document is in loading state
164
+ if (!DOMContentLoadedCallbacks.length) {
165
+ document.addEventListener('DOMContentLoaded', () => {
166
+ DOMContentLoadedCallbacks.forEach(callback => callback());
167
+ });
168
+ }
169
+
170
+ DOMContentLoadedCallbacks.push(callback);
146
171
  } else {
147
172
  callback();
148
173
  }
@@ -150,12 +175,13 @@
150
175
 
151
176
  const isRTL = () => document.documentElement.dir === 'rtl';
152
177
 
153
- const defineJQueryPlugin = (name, plugin) => {
178
+ const defineJQueryPlugin = plugin => {
154
179
  onDOMContentLoaded(() => {
155
180
  const $ = getjQuery();
156
181
  /* istanbul ignore if */
157
182
 
158
183
  if ($) {
184
+ const name = plugin.NAME;
159
185
  const JQUERY_NO_CONFLICT = $.fn[name];
160
186
  $.fn[name] = plugin.jQueryInterface;
161
187
  $.fn[name].Constructor = plugin;
@@ -167,10 +193,37 @@
167
193
  }
168
194
  });
169
195
  };
196
+ /**
197
+ * Return the previous/next element of a list.
198
+ *
199
+ * @param {array} list The list of elements
200
+ * @param activeElement The active element
201
+ * @param shouldGetNext Choose to get next or previous element
202
+ * @param isCycleAllowed
203
+ * @return {Element|elem} The proper element
204
+ */
205
+
206
+
207
+ const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
208
+ let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed
209
+
210
+ if (index === -1) {
211
+ return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];
212
+ }
213
+
214
+ const listLength = list.length;
215
+ index += shouldGetNext ? 1 : -1;
216
+
217
+ if (isCycleAllowed) {
218
+ index = (index + listLength) % listLength;
219
+ }
220
+
221
+ return list[Math.max(0, Math.min(index, listLength - 1))];
222
+ };
170
223
 
171
224
  /**
172
225
  * --------------------------------------------------------------------------
173
- * Bootstrap (v5.0.0): dropdown.js
226
+ * Bootstrap (v5.1.1): dropdown.js
174
227
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
175
228
  * --------------------------------------------------------------------------
176
229
  */
@@ -196,7 +249,6 @@
196
249
  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
197
250
  const EVENT_SHOW = `show${EVENT_KEY}`;
198
251
  const EVENT_SHOWN = `shown${EVENT_KEY}`;
199
- const EVENT_CLICK = `click${EVENT_KEY}`;
200
252
  const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
201
253
  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`;
202
254
  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`;
@@ -244,8 +296,6 @@
244
296
  this._config = this._getConfig(config);
245
297
  this._menu = this._getMenuElement();
246
298
  this._inNavbar = this._detectNavbar();
247
-
248
- this._addEventListeners();
249
299
  } // Getters
250
300
 
251
301
 
@@ -257,32 +307,20 @@
257
307
  return DefaultType;
258
308
  }
259
309
 
260
- static get DATA_KEY() {
261
- return DATA_KEY;
310
+ static get NAME() {
311
+ return NAME;
262
312
  } // Public
263
313
 
264
314
 
265
315
  toggle() {
266
- if (isDisabled(this._element)) {
267
- return;
268
- }
269
-
270
- const isActive = this._element.classList.contains(CLASS_NAME_SHOW);
271
-
272
- if (isActive) {
273
- this.hide();
274
- return;
275
- }
276
-
277
- this.show();
316
+ return this._isShown() ? this.hide() : this.show();
278
317
  }
279
318
 
280
319
  show() {
281
- if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW)) {
320
+ if (isDisabled(this._element) || this._isShown(this._menu)) {
282
321
  return;
283
322
  }
284
323
 
285
- const parent = Dropdown.getParentFromElement(this._element);
286
324
  const relatedTarget = {
287
325
  relatedTarget: this._element
288
326
  };
@@ -290,38 +328,14 @@
290
328
 
291
329
  if (showEvent.defaultPrevented) {
292
330
  return;
293
- } // Totally disable Popper for Dropdowns in Navbar
331
+ }
294
332
 
333
+ const parent = Dropdown.getParentFromElement(this._element); // Totally disable Popper for Dropdowns in Navbar
295
334
 
296
335
  if (this._inNavbar) {
297
336
  Manipulator__default['default'].setDataAttribute(this._menu, 'popper', 'none');
298
337
  } else {
299
- if (typeof Popper__namespace === 'undefined') {
300
- throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
301
- }
302
-
303
- let referenceElement = this._element;
304
-
305
- if (this._config.reference === 'parent') {
306
- referenceElement = parent;
307
- } else if (isElement(this._config.reference)) {
308
- referenceElement = this._config.reference; // Check if it's jQuery element
309
-
310
- if (typeof this._config.reference.jquery !== 'undefined') {
311
- referenceElement = this._config.reference[0];
312
- }
313
- } else if (typeof this._config.reference === 'object') {
314
- referenceElement = this._config.reference;
315
- }
316
-
317
- const popperConfig = this._getPopperConfig();
318
-
319
- const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);
320
- this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig);
321
-
322
- if (isDisplayStatic) {
323
- Manipulator__default['default'].setDataAttribute(this._menu, 'popper', 'static');
324
- }
338
+ this._createPopper(parent);
325
339
  } // If this is a touch-enabled device we add extra
326
340
  // empty mouseover listeners to the body's immediate children;
327
341
  // only needed because of broken event delegation on iOS
@@ -336,15 +350,15 @@
336
350
 
337
351
  this._element.setAttribute('aria-expanded', true);
338
352
 
339
- this._menu.classList.toggle(CLASS_NAME_SHOW);
353
+ this._menu.classList.add(CLASS_NAME_SHOW);
340
354
 
341
- this._element.classList.toggle(CLASS_NAME_SHOW);
355
+ this._element.classList.add(CLASS_NAME_SHOW);
342
356
 
343
357
  EventHandler__default['default'].trigger(this._element, EVENT_SHOWN, relatedTarget);
344
358
  }
345
359
 
346
360
  hide() {
347
- if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW)) {
361
+ if (isDisabled(this._element) || !this._isShown(this._menu)) {
348
362
  return;
349
363
  }
350
364
 
@@ -356,12 +370,8 @@
356
370
  }
357
371
 
358
372
  dispose() {
359
- this._menu = null;
360
-
361
373
  if (this._popper) {
362
374
  this._popper.destroy();
363
-
364
- this._popper = null;
365
375
  }
366
376
 
367
377
  super.dispose();
@@ -376,13 +386,6 @@
376
386
  } // Private
377
387
 
378
388
 
379
- _addEventListeners() {
380
- EventHandler__default['default'].on(this._element, EVENT_CLICK, event => {
381
- event.preventDefault();
382
- this.toggle();
383
- });
384
- }
385
-
386
389
  _completeHide(relatedTarget) {
387
390
  const hideEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE, relatedTarget);
388
391
 
@@ -425,6 +428,35 @@
425
428
  return config;
426
429
  }
427
430
 
431
+ _createPopper(parent) {
432
+ if (typeof Popper__namespace === 'undefined') {
433
+ throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
434
+ }
435
+
436
+ let referenceElement = this._element;
437
+
438
+ if (this._config.reference === 'parent') {
439
+ referenceElement = parent;
440
+ } else if (isElement(this._config.reference)) {
441
+ referenceElement = getElement(this._config.reference);
442
+ } else if (typeof this._config.reference === 'object') {
443
+ referenceElement = this._config.reference;
444
+ }
445
+
446
+ const popperConfig = this._getPopperConfig();
447
+
448
+ const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);
449
+ this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig);
450
+
451
+ if (isDisplayStatic) {
452
+ Manipulator__default['default'].setDataAttribute(this._menu, 'popper', 'static');
453
+ }
454
+ }
455
+
456
+ _isShown(element = this._element) {
457
+ return element.classList.contains(CLASS_NAME_SHOW);
458
+ }
459
+
428
460
  _getMenuElement() {
429
461
  return SelectorEngine__default['default'].next(this._element, SELECTOR_MENU)[0];
430
462
  }
@@ -498,75 +530,53 @@
498
530
  };
499
531
  }
500
532
 
501
- _selectMenuItem(event) {
533
+ _selectMenuItem({
534
+ key,
535
+ target
536
+ }) {
502
537
  const items = SelectorEngine__default['default'].find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);
503
538
 
504
539
  if (!items.length) {
505
540
  return;
506
- }
507
-
508
- let index = items.indexOf(event.target); // Up
509
-
510
- if (event.key === ARROW_UP_KEY && index > 0) {
511
- index--;
512
- } // Down
513
-
514
-
515
- if (event.key === ARROW_DOWN_KEY && index < items.length - 1) {
516
- index++;
517
- } // index is -1 if the first keydown is an ArrowUp
541
+ } // if target isn't included in items (e.g. when expanding the dropdown)
542
+ // allow cycling to get the last item in case key equals ARROW_UP_KEY
518
543
 
519
544
 
520
- index = index === -1 ? 0 : index;
521
- items[index].focus();
545
+ getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();
522
546
  } // Static
523
547
 
524
548
 
525
- static dropdownInterface(element, config) {
526
- let data = Data__default['default'].get(element, DATA_KEY);
527
-
528
- const _config = typeof config === 'object' ? config : null;
549
+ static jQueryInterface(config) {
550
+ return this.each(function () {
551
+ const data = Dropdown.getOrCreateInstance(this, config);
529
552
 
530
- if (!data) {
531
- data = new Dropdown(element, _config);
532
- }
553
+ if (typeof config !== 'string') {
554
+ return;
555
+ }
533
556
 
534
- if (typeof config === 'string') {
535
557
  if (typeof data[config] === 'undefined') {
536
558
  throw new TypeError(`No method named "${config}"`);
537
559
  }
538
560
 
539
561
  data[config]();
540
- }
541
- }
542
-
543
- static jQueryInterface(config) {
544
- return this.each(function () {
545
- Dropdown.dropdownInterface(this, config);
546
562
  });
547
563
  }
548
564
 
549
565
  static clearMenus(event) {
550
- if (event) {
551
- if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY) {
552
- return;
553
- }
554
-
555
- if (/input|select|option|textarea|form/i.test(event.target.tagName)) {
556
- return;
557
- }
566
+ if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {
567
+ return;
558
568
  }
559
569
 
560
570
  const toggles = SelectorEngine__default['default'].find(SELECTOR_DATA_TOGGLE);
561
571
 
562
572
  for (let i = 0, len = toggles.length; i < len; i++) {
563
- const context = Data__default['default'].get(toggles[i], DATA_KEY);
573
+ const context = Dropdown.getInstance(toggles[i]);
564
574
 
565
575
  if (!context || context._config.autoClose === false) {
566
576
  continue;
567
577
  }
568
578
 
569
- if (!context._element.classList.contains(CLASS_NAME_SHOW)) {
579
+ if (!context._isShown()) {
570
580
  continue;
571
581
  }
572
582
 
@@ -580,10 +590,10 @@
580
590
 
581
591
  if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {
582
592
  continue;
583
- } // Tab navigation through the dropdown menu shouldn't close the menu
593
+ } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
584
594
 
585
595
 
586
- if (event.type === 'keyup' && event.key === TAB_KEY && context._menu.contains(event.target)) {
596
+ if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {
587
597
  continue;
588
598
  }
589
599
 
@@ -625,25 +635,27 @@
625
635
  return;
626
636
  }
627
637
 
628
- const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine__default['default'].prev(this, SELECTOR_DATA_TOGGLE)[0];
638
+ const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine__default['default'].prev(this, SELECTOR_DATA_TOGGLE)[0];
639
+ const instance = Dropdown.getOrCreateInstance(getToggleButton);
629
640
 
630
641
  if (event.key === ESCAPE_KEY) {
631
- getToggleButton().focus();
632
- Dropdown.clearMenus();
642
+ instance.hide();
633
643
  return;
634
644
  }
635
645
 
636
- if (!isActive && (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY)) {
637
- getToggleButton().click();
646
+ if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {
647
+ if (!isActive) {
648
+ instance.show();
649
+ }
650
+
651
+ instance._selectMenuItem(event);
652
+
638
653
  return;
639
654
  }
640
655
 
641
656
  if (!isActive || event.key === SPACE_KEY) {
642
657
  Dropdown.clearMenus();
643
- return;
644
658
  }
645
-
646
- Dropdown.getInstance(getToggleButton())._selectMenuItem(event);
647
659
  }
648
660
 
649
661
  }
@@ -660,7 +672,7 @@
660
672
  EventHandler__default['default'].on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
661
673
  EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
662
674
  event.preventDefault();
663
- Dropdown.dropdownInterface(this);
675
+ Dropdown.getOrCreateInstance(this).toggle();
664
676
  });
665
677
  /**
666
678
  * ------------------------------------------------------------------------
@@ -669,7 +681,7 @@
669
681
  * add .Dropdown to jQuery only if jQuery is present
670
682
  */
671
683
 
672
- defineJQueryPlugin(NAME, Dropdown);
684
+ defineJQueryPlugin(Dropdown);
673
685
 
674
686
  return Dropdown;
675
687