dropdown.js 15.1 KB
Newer Older
Mark Otto's avatar
dist    
Mark Otto committed
1
2
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }

Mark Otto's avatar
dist    
Mark Otto committed
3
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); } }
Mark Otto's avatar
dist    
Mark Otto committed
4

Mark Otto's avatar
dist    
Mark Otto committed
5
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
fat's avatar
fat committed
6
7
8

/**
 * --------------------------------------------------------------------------
Mark Otto's avatar
Mark Otto committed
9
 * Bootstrap (v4.0.0): dropdown.js
fat's avatar
fat committed
10
11
12
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * --------------------------------------------------------------------------
 */
Mark Otto's avatar
dist    
Mark Otto committed
13
var Dropdown = function ($) {
fat's avatar
fat committed
14
15
16
17
18
19
  /**
   * ------------------------------------------------------------------------
   * Constants
   * ------------------------------------------------------------------------
   */
  var NAME = 'dropdown';
Mark Otto's avatar
Mark Otto committed
20
  var VERSION = '4.0.0';
fat's avatar
fat committed
21
  var DATA_KEY = 'bs.dropdown';
Mark Otto's avatar
dist    
Mark Otto committed
22
  var EVENT_KEY = "." + DATA_KEY;
fat's avatar
fat committed
23
  var DATA_API_KEY = '.data-api';
fat's avatar
fat committed
24
  var JQUERY_NO_CONFLICT = $.fn[NAME];
Chris Rebert's avatar
grunt    
Chris Rebert committed
25
  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
Mark Otto's avatar
dist    
Mark Otto committed
26

Mark Otto's avatar
grunt    
Mark Otto committed
27
  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key
Mark Otto's avatar
dist    
Mark Otto committed
28

Mark Otto's avatar
grunt    
Mark Otto committed
29
  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key
Mark Otto's avatar
dist    
Mark Otto committed
30

Chris Rebert's avatar
grunt    
Chris Rebert committed
31
  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key
Mark Otto's avatar
dist    
Mark Otto committed
32

Chris Rebert's avatar
grunt    
Chris Rebert committed
33
  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key
Mark Otto's avatar
dist    
Mark Otto committed
34

Chris Rebert's avatar
grunt    
Chris Rebert committed
35
  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
fat's avatar
fat committed
36

Mark Otto's avatar
dist    
Mark Otto committed
37
  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
fat's avatar
fat committed
38
  var Event = {
Mark Otto's avatar
dist    
Mark Otto committed
39
40
41
42
43
44
45
46
    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
fat's avatar
fat committed
47
48
49
  };
  var ClassName = {
    DISABLED: 'disabled',
Mark Otto's avatar
build    
Mark Otto committed
50
51
    SHOW: 'show',
    DROPUP: 'dropup',
Mark Otto's avatar
dist    
Mark Otto committed
52
53
    DROPRIGHT: 'dropright',
    DROPLEFT: 'dropleft',
Mark Otto's avatar
build    
Mark Otto committed
54
    MENURIGHT: 'dropdown-menu-right',
Mark Otto's avatar
dist    
Mark Otto committed
55
56
    MENULEFT: 'dropdown-menu-left',
    POSITION_STATIC: 'position-static'
fat's avatar
fat committed
57
58
59
60
  };
  var Selector = {
    DATA_TOGGLE: '[data-toggle="dropdown"]',
    FORM_CHILD: '.dropdown form',
Mark Otto's avatar
grunt    
Mark Otto committed
61
    MENU: '.dropdown-menu',
fat's avatar
fat committed
62
    NAVBAR_NAV: '.navbar-nav',
Mark Otto's avatar
grunt    
Mark Otto committed
63
    VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled)'
fat's avatar
fat committed
64
  };
Johann-S's avatar
build    
Johann-S committed
65
66
  var AttachmentMap = {
    TOP: 'top-start',
Mark Otto's avatar
build    
Mark Otto committed
67
68
    TOPEND: 'top-end',
    BOTTOM: 'bottom-start',
Mark Otto's avatar
dist    
Mark Otto committed
69
70
71
72
73
    BOTTOMEND: 'bottom-end',
    RIGHT: 'right-start',
    RIGHTEND: 'right-end',
    LEFT: 'left-start',
    LEFTEND: 'left-end'
Johann-S's avatar
build    
Johann-S committed
74
75
76
  };
  var Default = {
    offset: 0,
Mark Otto's avatar
dist    
Mark Otto committed
77
    flip: true,
Mark Otto's avatar
dist    
Mark Otto committed
78
    boundary: 'scrollParent',
Mark Otto's avatar
dist    
Mark Otto committed
79
80
    reference: 'toggle',
    display: 'dynamic'
Johann-S's avatar
build    
Johann-S committed
81
82
  };
  var DefaultType = {
Mark Otto's avatar
dist    
Mark Otto committed
83
    offset: '(number|string|function)',
Mark Otto's avatar
dist    
Mark Otto committed
84
    flip: 'boolean',
Mark Otto's avatar
dist    
Mark Otto committed
85
    boundary: '(string|element)',
Mark Otto's avatar
dist    
Mark Otto committed
86
87
    reference: '(string|element)',
    display: 'string'
Mark Otto's avatar
dist    
Mark Otto committed
88
89
90
91
92
    /**
     * ------------------------------------------------------------------------
     * Class Definition
     * ------------------------------------------------------------------------
     */
fat's avatar
fat committed
93

Mark Otto's avatar
dist    
Mark Otto committed
94
  };
fat's avatar
fat committed
95

Mark Otto's avatar
dist    
Mark Otto committed
96
97
98
99
  var Dropdown =
  /*#__PURE__*/
  function () {
    function Dropdown(element, config) {
fat's avatar
fat committed
100
      this._element = element;
Johann-S's avatar
build    
Johann-S committed
101
102
103
      this._popper = null;
      this._config = this._getConfig(config);
      this._menu = this._getMenuElement();
Mark Otto's avatar
build    
Mark Otto committed
104
      this._inNavbar = this._detectNavbar();
fat's avatar
fat committed
105
106

      this._addEventListeners();
Mark Otto's avatar
dist    
Mark Otto committed
107
    } // Getters
fat's avatar
fat committed
108

Jacob Thornton's avatar
Jacob Thornton committed
109

Mark Otto's avatar
dist    
Mark Otto committed
110
    var _proto = Dropdown.prototype;
fat's avatar
fat committed
111

Mark Otto's avatar
dist    
Mark Otto committed
112
    // Public
Mark Otto's avatar
dist    
Mark Otto committed
113
114
115
116
    _proto.toggle = function toggle() {
      if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) {
        return;
      }
fat's avatar
fat committed
117

Mark Otto's avatar
dist    
Mark Otto committed
118
      var parent = Dropdown._getParentFromElement(this._element);
fat's avatar
fat committed
119

Mark Otto's avatar
dist    
Mark Otto committed
120
      var isActive = $(this._menu).hasClass(ClassName.SHOW);
fat's avatar
fat committed
121

Mark Otto's avatar
dist    
Mark Otto committed
122
      Dropdown._clearMenus();
fat's avatar
fat committed
123

Mark Otto's avatar
dist    
Mark Otto committed
124
125
126
      if (isActive) {
        return;
      }
fat's avatar
fat committed
127

Mark Otto's avatar
dist    
Mark Otto committed
128
129
130
131
132
      var relatedTarget = {
        relatedTarget: this._element
      };
      var showEvent = $.Event(Event.SHOW, relatedTarget);
      $(parent).trigger(showEvent);
fat's avatar
fat committed
133

Mark Otto's avatar
dist    
Mark Otto committed
134
135
      if (showEvent.isDefaultPrevented()) {
        return;
Mark Otto's avatar
dist    
Mark Otto committed
136
      } // Disable totally Popper.js for Dropdown in Navbar
Mark Otto's avatar
dist    
Mark Otto committed
137
138


Mark Otto's avatar
dist    
Mark Otto committed
139
140
141
142
143
144
      if (!this._inNavbar) {
        /**
         * Check for Popper dependency
         * Popper - https://popper.js.org
         */
        if (typeof Popper === 'undefined') {
Mark Otto's avatar
dist    
Mark Otto committed
145
          throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)');
Mark Otto's avatar
dist    
Mark Otto committed
146
        }
Mark Otto's avatar
dist    
Mark Otto committed
147

Mark Otto's avatar
dist    
Mark Otto committed
148
        var referenceElement = this._element;
Mark Otto's avatar
grunt    
Mark Otto committed
149

Mark Otto's avatar
dist    
Mark Otto committed
150
151
152
153
154
155
156
        if (this._config.reference === 'parent') {
          referenceElement = parent;
        } else if (Util.isElement(this._config.reference)) {
          referenceElement = this._config.reference; // Check if it's jQuery element

          if (typeof this._config.reference.jquery !== 'undefined') {
            referenceElement = this._config.reference[0];
Mark Otto's avatar
dist    
Mark Otto committed
157
          }
Mark Otto's avatar
dist    
Mark Otto committed
158
159
160
161
162
163
164
        } // If boundary is not `scrollParent`, then set position to `static`
        // to allow the menu to "escape" the scroll parent's boundaries
        // https://github.com/twbs/bootstrap/issues/24251


        if (this._config.boundary !== 'scrollParent') {
          $(parent).addClass(ClassName.POSITION_STATIC);
Mark Otto's avatar
dist    
Mark Otto committed
165
        }
fat's avatar
fat committed
166

Mark Otto's avatar
dist    
Mark Otto committed
167
        this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());
Mark Otto's avatar
dist    
Mark Otto committed
168
      } // If this is a touch-enabled device we add extra
Mark Otto's avatar
dist    
Mark Otto committed
169
170
171
      // 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
fat's avatar
fat committed
172

Mark Otto's avatar
dist    
Mark Otto committed
173

Mark Otto's avatar
dist    
Mark Otto committed
174
      if ('ontouchstart' in document.documentElement && $(parent).closest(Selector.NAVBAR_NAV).length === 0) {
Mark Otto's avatar
dist    
Mark Otto committed
175
        $('body').children().on('mouseover', null, $.noop);
Mark Otto's avatar
dist    
Mark Otto committed
176
      }
Mark Otto's avatar
dist    
Mark Otto committed
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193

      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();
fat's avatar
fat committed
194

Mark Otto's avatar
dist    
Mark Otto committed
195
196
        this._popper = null;
      }
Mark Otto's avatar
dist    
Mark Otto committed
197
    };
Johann-S's avatar
build    
Johann-S committed
198

Mark Otto's avatar
dist    
Mark Otto committed
199
200
201
202
203
    _proto.update = function update() {
      this._inNavbar = this._detectNavbar();

      if (this._popper !== null) {
        this._popper.scheduleUpdate();
Johann-S's avatar
build    
Johann-S committed
204
      }
Mark Otto's avatar
dist    
Mark Otto committed
205
    }; // Private
Mark Otto's avatar
dist    
Mark Otto committed
206
207
208
209
210
211
212
213
214
215
216
217


    _proto._addEventListeners = function _addEventListeners() {
      var _this = this;

      $(this._element).on(Event.CLICK, function (event) {
        event.preventDefault();
        event.stopPropagation();

        _this.toggle();
      });
    };
Johann-S's avatar
build    
Johann-S committed
218

Mark Otto's avatar
dist    
Mark Otto committed
219
    _proto._getConfig = function _getConfig(config) {
Mark Otto's avatar
dist    
Mark Otto committed
220
      config = _extends({}, this.constructor.Default, $(this._element).data(), config);
Mark Otto's avatar
dist    
Mark Otto committed
221
222
223
      Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
      return config;
    };
Johann-S's avatar
build    
Johann-S committed
224

Mark Otto's avatar
dist    
Mark Otto committed
225
226
227
228
229
    _proto._getMenuElement = function _getMenuElement() {
      if (!this._menu) {
        var parent = Dropdown._getParentFromElement(this._element);

        this._menu = $(parent).find(Selector.MENU)[0];
Johann-S's avatar
build    
Johann-S committed
230
      }
Mark Otto's avatar
dist    
Mark Otto committed
231
232
233
234
235
236
237
238
239
240
241
242
243

      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;
Mark Otto's avatar
build    
Mark Otto committed
244
        }
Mark Otto's avatar
dist    
Mark Otto committed
245
246
247
248
      } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) {
        placement = AttachmentMap.RIGHT;
      } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) {
        placement = AttachmentMap.LEFT;
Mark Otto's avatar
dist    
Mark Otto committed
249
250
      } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {
        placement = AttachmentMap.BOTTOMEND;
Mark Otto's avatar
build    
Mark Otto committed
251
      }
Mark Otto's avatar
dist    
Mark Otto committed
252
253
254
255
256
257
258
259
260

      return placement;
    };

    _proto._detectNavbar = function _detectNavbar() {
      return $(this._element).closest('.navbar').length > 0;
    };

    _proto._getPopperConfig = function _getPopperConfig() {
Mark Otto's avatar
dist    
Mark Otto committed
261
262
263
264
265
266
      var _this2 = this;

      var offsetConf = {};

      if (typeof this._config.offset === 'function') {
        offsetConf.fn = function (data) {
Mark Otto's avatar
dist    
Mark Otto committed
267
          data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets) || {});
Mark Otto's avatar
dist    
Mark Otto committed
268
269
270
271
272
273
          return data;
        };
      } else {
        offsetConf.offset = this._config.offset;
      }

Mark Otto's avatar
dist    
Mark Otto committed
274
275
276
      var popperConfig = {
        placement: this._getPlacement(),
        modifiers: {
Mark Otto's avatar
dist    
Mark Otto committed
277
          offset: offsetConf,
Mark Otto's avatar
dist    
Mark Otto committed
278
279
          flip: {
            enabled: this._config.flip
Mark Otto's avatar
dist    
Mark Otto committed
280
281
282
          },
          preventOverflow: {
            boundariesElement: this._config.boundary
Mark Otto's avatar
build    
Mark Otto committed
283
          }
Mark Otto's avatar
dist    
Mark Otto committed
284
285
        } // Disable Popper.js if we have a static display

Mark Otto's avatar
dist    
Mark Otto committed
286
      };
Mark Otto's avatar
dist    
Mark Otto committed
287
288
289
290
291
292
293

      if (this._config.display === 'static') {
        popperConfig.modifiers.applyStyle = {
          enabled: false
        };
      }

Mark Otto's avatar
dist    
Mark Otto committed
294
      return popperConfig;
Mark Otto's avatar
dist    
Mark Otto committed
295
    }; // Static
Mark Otto's avatar
dist    
Mark Otto committed
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310


    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') {
Mark Otto's avatar
dist    
Mark Otto committed
311
            throw new TypeError("No method named \"" + config + "\"");
Mark Otto's avatar
dist    
Mark Otto committed
312
          }
Mark Otto's avatar
build    
Mark Otto committed
313

Mark Otto's avatar
dist    
Mark Otto committed
314
          data[config]();
Mark Otto's avatar
dist    
Mark Otto committed
315
        }
Mark Otto's avatar
dist    
Mark Otto committed
316
317
318
319
320
321
      });
    };

    Dropdown._clearMenus = function _clearMenus(event) {
      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {
        return;
Mark Otto's avatar
build    
Mark Otto committed
322
323
      }

Mark Otto's avatar
dist    
Mark Otto committed
324
      var toggles = $.makeArray($(Selector.DATA_TOGGLE));
fat's avatar
fat committed
325

Mark Otto's avatar
dist    
Mark Otto committed
326
327
      for (var i = 0; i < toggles.length; i++) {
        var parent = Dropdown._getParentFromElement(toggles[i]);
fat's avatar
fat committed
328

Mark Otto's avatar
dist    
Mark Otto committed
329
330
331
332
        var context = $(toggles[i]).data(DATA_KEY);
        var relatedTarget = {
          relatedTarget: toggles[i]
        };
fat's avatar
fat committed
333

Mark Otto's avatar
dist    
Mark Otto committed
334
335
        if (!context) {
          continue;
Johann-S's avatar
build    
Johann-S committed
336
337
        }

Mark Otto's avatar
dist    
Mark Otto committed
338
        var dropdownMenu = context._menu;
fat's avatar
fat committed
339

Mark Otto's avatar
dist    
Mark Otto committed
340
341
342
        if (!$(parent).hasClass(ClassName.SHOW)) {
          continue;
        }
fat's avatar
fat committed
343

Mark Otto's avatar
dist    
Mark Otto committed
344
345
346
        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) {
          continue;
        }
Mark Otto's avatar
grunt    
Mark Otto committed
347

Mark Otto's avatar
dist    
Mark Otto committed
348
349
        var hideEvent = $.Event(Event.HIDE, relatedTarget);
        $(parent).trigger(hideEvent);
Mark Otto's avatar
grunt    
Mark Otto committed
350

Mark Otto's avatar
dist    
Mark Otto committed
351
352
        if (hideEvent.isDefaultPrevented()) {
          continue;
Mark Otto's avatar
dist    
Mark Otto committed
353
        } // If this is a touch-enabled device we remove the extra
Mark Otto's avatar
dist    
Mark Otto committed
354
        // empty mouseover listeners we added for iOS support
Mark Otto's avatar
grunt    
Mark Otto committed
355
356


Mark Otto's avatar
dist    
Mark Otto committed
357
358
        if ('ontouchstart' in document.documentElement) {
          $('body').children().off('mouseover', null, $.noop);
Mark Otto's avatar
dist    
Mark Otto committed
359
        }
Mark Otto's avatar
dist    
Mark Otto committed
360
361
362
363

        toggles[i].setAttribute('aria-expanded', 'false');
        $(dropdownMenu).removeClass(ClassName.SHOW);
        $(parent).removeClass(ClassName.SHOW).trigger($.Event(Event.HIDDEN, relatedTarget));
fat's avatar
fat committed
364
      }
Mark Otto's avatar
dist    
Mark Otto committed
365
    };
fat's avatar
fat committed
366

Mark Otto's avatar
dist    
Mark Otto committed
367
368
369
    Dropdown._getParentFromElement = function _getParentFromElement(element) {
      var parent;
      var selector = Util.getSelectorFromElement(element);
fat's avatar
fat committed
370

Mark Otto's avatar
dist    
Mark Otto committed
371
372
      if (selector) {
        parent = $(selector)[0];
Mark Otto's avatar
grunt    
Mark Otto committed
373
      }
Mark Otto's avatar
dist    
Mark Otto committed
374

Mark Otto's avatar
dist    
Mark Otto committed
375
      return parent || element.parentNode;
Mark Otto's avatar
dist    
Mark Otto committed
376
377
    }; // eslint-disable-next-line complexity

fat's avatar
fat committed
378

Mark Otto's avatar
dist    
Mark Otto committed
379
    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
Mark Otto's avatar
dist    
Mark Otto committed
380
381
382
383
384
385
386
387
      // If not input/textarea:
      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command
      // If input/textarea:
      //  - If space key => not a dropdown command
      //  - If key is other than escape
      //    - If key is not up or down => not a dropdown command
      //    - If trigger inside the menu => not a dropdown command
      if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
Mark Otto's avatar
dist    
Mark Otto committed
388
389
        return;
      }
fat's avatar
fat committed
390

Mark Otto's avatar
dist    
Mark Otto committed
391
392
      event.preventDefault();
      event.stopPropagation();
fat's avatar
fat committed
393

Mark Otto's avatar
dist    
Mark Otto committed
394
395
396
      if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {
        return;
      }
fat's avatar
fat committed
397

Mark Otto's avatar
dist    
Mark Otto committed
398
      var parent = Dropdown._getParentFromElement(this);
Mark Otto's avatar
grunt    
Mark Otto committed
399

Mark Otto's avatar
dist    
Mark Otto committed
400
401
402
403
404
405
      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');
fat's avatar
fat committed
406
407
        }

Mark Otto's avatar
dist    
Mark Otto committed
408
409
410
        $(this).trigger('click');
        return;
      }
fat's avatar
fat committed
411

Mark Otto's avatar
dist    
Mark Otto committed
412
      var items = $(parent).find(Selector.VISIBLE_ITEMS).get();
fat's avatar
fat committed
413

Mark Otto's avatar
dist    
Mark Otto committed
414
      if (items.length === 0) {
Mark Otto's avatar
dist    
Mark Otto committed
415
416
        return;
      }
fat's avatar
fat committed
417

Mark Otto's avatar
dist    
Mark Otto committed
418
      var index = items.indexOf(event.target);
Mark Otto's avatar
Mark Otto committed
419

Mark Otto's avatar
dist    
Mark Otto committed
420
      if (event.which === ARROW_UP_KEYCODE && index > 0) {
Mark Otto's avatar
dist    
Mark Otto committed
421
        // Up
Mark Otto's avatar
dist    
Mark Otto committed
422
423
        index--;
      }
Mark Otto's avatar
Mark Otto committed
424

Mark Otto's avatar
dist    
Mark Otto committed
425
      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
Mark Otto's avatar
dist    
Mark Otto committed
426
        // Down
Mark Otto's avatar
dist    
Mark Otto committed
427
428
        index++;
      }
fat's avatar
fat committed
429

Mark Otto's avatar
dist    
Mark Otto committed
430
431
      if (index < 0) {
        index = 0;
fat's avatar
fat committed
432
      }
Mark Otto's avatar
dist    
Mark Otto committed
433
434
435
436
437
438

      items[index].focus();
    };

    _createClass(Dropdown, null, [{
      key: "VERSION",
Jacob Thornton's avatar
Jacob Thornton committed
439
440
441
      get: function get() {
        return VERSION;
      }
Johann-S's avatar
build    
Johann-S committed
442
    }, {
Mark Otto's avatar
dist    
Mark Otto committed
443
      key: "Default",
Johann-S's avatar
build    
Johann-S committed
444
445
446
447
      get: function get() {
        return Default;
      }
    }, {
Mark Otto's avatar
dist    
Mark Otto committed
448
      key: "DefaultType",
Johann-S's avatar
build    
Johann-S committed
449
450
451
      get: function get() {
        return DefaultType;
      }
fat's avatar
fat committed
452
453
454
    }]);

    return Dropdown;
Mark Otto's avatar
grunt    
Mark Otto committed
455
456
457
458
459
460
  }();
  /**
   * ------------------------------------------------------------------------
   * Data Api implementation
   * ------------------------------------------------------------------------
   */
fat's avatar
fat committed
461

Mark Otto's avatar
dist    
Mark Otto committed
462
463

  $(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) {
Johann-S's avatar
build    
Johann-S committed
464
465
    event.preventDefault();
    event.stopPropagation();
Mark Otto's avatar
dist    
Mark Otto committed
466

Johann-S's avatar
build    
Johann-S committed
467
468
    Dropdown._jQueryInterface.call($(this), 'toggle');
  }).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) {
fat's avatar
fat committed
469
    e.stopPropagation();
Mark Otto's avatar
Mark Otto committed
470
  });
fat's avatar
fat committed
471
472
473
474
475
476
  /**
   * ------------------------------------------------------------------------
   * jQuery
   * ------------------------------------------------------------------------
   */

Mark Otto's avatar
Mark Otto committed
477
  $.fn[NAME] = Dropdown._jQueryInterface;
fat's avatar
fat committed
478
  $.fn[NAME].Constructor = Dropdown;
Mark Otto's avatar
dist    
Mark Otto committed
479

fat's avatar
fat committed
480
481
482
483
484
485
  $.fn[NAME].noConflict = function () {
    $.fn[NAME] = JQUERY_NO_CONFLICT;
    return Dropdown._jQueryInterface;
  };

  return Dropdown;
Mark Otto's avatar
dist    
Mark Otto committed
486
}($, Popper);
Mark Otto's avatar
build    
Mark Otto committed
487
//# sourceMappingURL=dropdown.js.map