dropdown.js 14.8 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
79
    boundary: 'scrollParent',
    reference: 'toggle'
Johann-S's avatar
build    
Johann-S committed
80
81
  };
  var DefaultType = {
Mark Otto's avatar
dist    
Mark Otto committed
82
    offset: '(number|string|function)',
Mark Otto's avatar
dist    
Mark Otto committed
83
    flip: 'boolean',
Mark Otto's avatar
dist    
Mark Otto committed
84
85
    boundary: '(string|element)',
    reference: '(string|element)'
Mark Otto's avatar
dist    
Mark Otto committed
86
87
88
89
90
    /**
     * ------------------------------------------------------------------------
     * Class Definition
     * ------------------------------------------------------------------------
     */
fat's avatar
fat committed
91

Mark Otto's avatar
dist    
Mark Otto committed
92
  };
fat's avatar
fat committed
93

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

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

Jacob Thornton's avatar
Jacob Thornton committed
107

Mark Otto's avatar
dist    
Mark Otto committed
108
    var _proto = Dropdown.prototype;
fat's avatar
fat committed
109

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

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

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

Mark Otto's avatar
dist    
Mark Otto committed
120
      Dropdown._clearMenus();
fat's avatar
fat committed
121

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

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

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


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

Mark Otto's avatar
dist    
Mark Otto committed
146
        var referenceElement = this._element;
Mark Otto's avatar
grunt    
Mark Otto committed
147

Mark Otto's avatar
dist    
Mark Otto committed
148
149
150
151
152
153
154
        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
155
          }
Mark Otto's avatar
dist    
Mark Otto committed
156
157
158
159
160
161
162
        } // 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
163
        }
fat's avatar
fat committed
164

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

Mark Otto's avatar
dist    
Mark Otto committed
171

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

      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
192

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

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

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


    _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
216

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

Mark Otto's avatar
dist    
Mark Otto committed
223
224
225
226
227
    _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
228
      }
Mark Otto's avatar
dist    
Mark Otto committed
229
230
231
232
233
234
235
236
237
238
239
240
241

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

      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
259
260
261
262
263
264
      var _this2 = this;

      var offsetConf = {};

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

Mark Otto's avatar
dist    
Mark Otto committed
272
273
274
      var popperConfig = {
        placement: this._getPlacement(),
        modifiers: {
Mark Otto's avatar
dist    
Mark Otto committed
275
          offset: offsetConf,
Mark Otto's avatar
dist    
Mark Otto committed
276
277
          flip: {
            enabled: this._config.flip
Mark Otto's avatar
dist    
Mark Otto committed
278
279
280
          },
          preventOverflow: {
            boundariesElement: this._config.boundary
Mark Otto's avatar
build    
Mark Otto committed
281
          }
Mark Otto's avatar
dist    
Mark Otto committed
282
        }
Mark Otto's avatar
dist    
Mark Otto committed
283
284
      };
      return popperConfig;
Mark Otto's avatar
dist    
Mark Otto committed
285
    }; // Static
Mark Otto's avatar
dist    
Mark Otto committed
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300


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

Mark Otto's avatar
dist    
Mark Otto committed
304
          data[config]();
Mark Otto's avatar
dist    
Mark Otto committed
305
        }
Mark Otto's avatar
dist    
Mark Otto committed
306
307
308
309
310
311
      });
    };

    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
312
313
      }

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

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

Mark Otto's avatar
dist    
Mark Otto committed
319
320
321
322
        var context = $(toggles[i]).data(DATA_KEY);
        var relatedTarget = {
          relatedTarget: toggles[i]
        };
fat's avatar
fat committed
323

Mark Otto's avatar
dist    
Mark Otto committed
324
325
        if (!context) {
          continue;
Johann-S's avatar
build    
Johann-S committed
326
327
        }

Mark Otto's avatar
dist    
Mark Otto committed
328
        var dropdownMenu = context._menu;
fat's avatar
fat committed
329

Mark Otto's avatar
dist    
Mark Otto committed
330
331
332
        if (!$(parent).hasClass(ClassName.SHOW)) {
          continue;
        }
fat's avatar
fat committed
333

Mark Otto's avatar
dist    
Mark Otto committed
334
335
336
        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
337

Mark Otto's avatar
dist    
Mark Otto committed
338
339
        var hideEvent = $.Event(Event.HIDE, relatedTarget);
        $(parent).trigger(hideEvent);
Mark Otto's avatar
grunt    
Mark Otto committed
340

Mark Otto's avatar
dist    
Mark Otto committed
341
342
        if (hideEvent.isDefaultPrevented()) {
          continue;
Mark Otto's avatar
dist    
Mark Otto committed
343
        } // If this is a touch-enabled device we remove the extra
Mark Otto's avatar
dist    
Mark Otto committed
344
        // empty mouseover listeners we added for iOS support
Mark Otto's avatar
grunt    
Mark Otto committed
345
346


Mark Otto's avatar
dist    
Mark Otto committed
347
348
        if ('ontouchstart' in document.documentElement) {
          $('body').children().off('mouseover', null, $.noop);
Mark Otto's avatar
dist    
Mark Otto committed
349
        }
Mark Otto's avatar
dist    
Mark Otto committed
350
351
352
353

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

Mark Otto's avatar
dist    
Mark Otto committed
357
358
359
    Dropdown._getParentFromElement = function _getParentFromElement(element) {
      var parent;
      var selector = Util.getSelectorFromElement(element);
fat's avatar
fat committed
360

Mark Otto's avatar
dist    
Mark Otto committed
361
362
      if (selector) {
        parent = $(selector)[0];
Mark Otto's avatar
grunt    
Mark Otto committed
363
      }
Mark Otto's avatar
dist    
Mark Otto committed
364

Mark Otto's avatar
dist    
Mark Otto committed
365
      return parent || element.parentNode;
Mark Otto's avatar
dist    
Mark Otto committed
366
367
    }; // eslint-disable-next-line complexity

fat's avatar
fat committed
368

Mark Otto's avatar
dist    
Mark Otto committed
369
    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
Mark Otto's avatar
dist    
Mark Otto committed
370
371
372
373
374
375
376
377
      // 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
378
379
        return;
      }
fat's avatar
fat committed
380

Mark Otto's avatar
dist    
Mark Otto committed
381
382
      event.preventDefault();
      event.stopPropagation();
fat's avatar
fat committed
383

Mark Otto's avatar
dist    
Mark Otto committed
384
385
386
      if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {
        return;
      }
fat's avatar
fat committed
387

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

Mark Otto's avatar
dist    
Mark Otto committed
390
391
392
393
394
395
      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
396
397
        }

Mark Otto's avatar
dist    
Mark Otto committed
398
399
400
        $(this).trigger('click');
        return;
      }
fat's avatar
fat committed
401

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

Mark Otto's avatar
dist    
Mark Otto committed
404
      if (items.length === 0) {
Mark Otto's avatar
dist    
Mark Otto committed
405
406
        return;
      }
fat's avatar
fat committed
407

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

Mark Otto's avatar
dist    
Mark Otto committed
410
      if (event.which === ARROW_UP_KEYCODE && index > 0) {
Mark Otto's avatar
dist    
Mark Otto committed
411
        // Up
Mark Otto's avatar
dist    
Mark Otto committed
412
413
        index--;
      }
Mark Otto's avatar
Mark Otto committed
414

Mark Otto's avatar
dist    
Mark Otto committed
415
      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
Mark Otto's avatar
dist    
Mark Otto committed
416
        // Down
Mark Otto's avatar
dist    
Mark Otto committed
417
418
        index++;
      }
fat's avatar
fat committed
419

Mark Otto's avatar
dist    
Mark Otto committed
420
421
      if (index < 0) {
        index = 0;
fat's avatar
fat committed
422
      }
Mark Otto's avatar
dist    
Mark Otto committed
423
424
425
426
427
428

      items[index].focus();
    };

    _createClass(Dropdown, null, [{
      key: "VERSION",
Jacob Thornton's avatar
Jacob Thornton committed
429
430
431
      get: function get() {
        return VERSION;
      }
Johann-S's avatar
build    
Johann-S committed
432
    }, {
Mark Otto's avatar
dist    
Mark Otto committed
433
      key: "Default",
Johann-S's avatar
build    
Johann-S committed
434
435
436
437
      get: function get() {
        return Default;
      }
    }, {
Mark Otto's avatar
dist    
Mark Otto committed
438
      key: "DefaultType",
Johann-S's avatar
build    
Johann-S committed
439
440
441
      get: function get() {
        return DefaultType;
      }
fat's avatar
fat committed
442
443
444
    }]);

    return Dropdown;
Mark Otto's avatar
grunt    
Mark Otto committed
445
446
447
448
449
450
  }();
  /**
   * ------------------------------------------------------------------------
   * Data Api implementation
   * ------------------------------------------------------------------------
   */
fat's avatar
fat committed
451

Mark Otto's avatar
dist    
Mark Otto committed
452
453

  $(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
454
455
    event.preventDefault();
    event.stopPropagation();
Mark Otto's avatar
dist    
Mark Otto committed
456

Johann-S's avatar
build    
Johann-S committed
457
458
    Dropdown._jQueryInterface.call($(this), 'toggle');
  }).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) {
fat's avatar
fat committed
459
    e.stopPropagation();
Mark Otto's avatar
Mark Otto committed
460
  });
fat's avatar
fat committed
461
462
463
464
465
466
  /**
   * ------------------------------------------------------------------------
   * jQuery
   * ------------------------------------------------------------------------
   */

Mark Otto's avatar
Mark Otto committed
467
  $.fn[NAME] = Dropdown._jQueryInterface;
fat's avatar
fat committed
468
  $.fn[NAME].Constructor = Dropdown;
Mark Otto's avatar
dist    
Mark Otto committed
469

fat's avatar
fat committed
470
471
472
473
474
475
  $.fn[NAME].noConflict = function () {
    $.fn[NAME] = JQUERY_NO_CONFLICT;
    return Dropdown._jQueryInterface;
  };

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