dropdown.js 17.4 KB
Newer Older
Mark Otto's avatar
dist    
Mark Otto committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('popper.js'), require('./util.js')) :
  typeof define === 'function' && define.amd ? define(['jquery', 'popper.js', './util.js'], factory) :
  (global.Dropdown = factory(global.jQuery,global.Popper,global.Util));
}(this, (function ($,Popper,Util) { 'use strict';

  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
  Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;
  Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;

  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);
    }
  }

  function _createClass(Constructor, protoProps, staticProps) {
    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
    if (staticProps) _defineProperties(Constructor, staticProps);
    return Constructor;
  }

  function _defineProperty(obj, key, value) {
    if (key in obj) {
      Object.defineProperty(obj, key, {
        value: value,
        enumerable: true,
        configurable: true,
        writable: true
      });
    } else {
      obj[key] = value;
    }

    return obj;
  }

  function _objectSpread(target) {
    for (var i = 1; i < arguments.length; i++) {
      var source = arguments[i] != null ? arguments[i] : {};
      var ownKeys = Object.keys(source);

      if (typeof Object.getOwnPropertySymbols === 'function') {
        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
          return Object.getOwnPropertyDescriptor(source, sym).enumerable;
        }));
      }
Mark Otto's avatar
dist    
Mark Otto committed
52

Mark Otto's avatar
dist    
Mark Otto committed
53
54
55
56
      ownKeys.forEach(function (key) {
        _defineProperty(target, key, source[key]);
      });
    }
Mark Otto's avatar
dist    
Mark Otto committed
57

Mark Otto's avatar
dist    
Mark Otto committed
58
59
    return target;
  }
fat's avatar
fat committed
60
61

  /**
Mark Otto's avatar
dist    
Mark Otto committed
62
   * --------------------------------------------------------------------------
Mark Otto's avatar
Mark Otto committed
63
   * Bootstrap (v4.1.3): dropdown.js
Mark Otto's avatar
dist    
Mark Otto committed
64
65
   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
   * --------------------------------------------------------------------------
fat's avatar
fat committed
66
   */
Mark Otto's avatar
dist    
Mark Otto committed
67
68

  var Dropdown = function ($$$1) {
Mark Otto's avatar
dist    
Mark Otto committed
69
70
    /**
     * ------------------------------------------------------------------------
Mark Otto's avatar
dist    
Mark Otto committed
71
     * Constants
Mark Otto's avatar
dist    
Mark Otto committed
72
73
     * ------------------------------------------------------------------------
     */
Mark Otto's avatar
dist    
Mark Otto committed
74
    var NAME = 'dropdown';
Mark Otto's avatar
Mark Otto committed
75
    var VERSION = '4.1.3';
Mark Otto's avatar
dist    
Mark Otto committed
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
    var DATA_KEY = 'bs.dropdown';
    var EVENT_KEY = "." + DATA_KEY;
    var DATA_API_KEY = '.data-api';
    var JQUERY_NO_CONFLICT = $$$1.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 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
    };
    var ClassName = {
      DISABLED: 'disabled',
      SHOW: 'show',
      DROPUP: 'dropup',
      DROPRIGHT: 'dropright',
      DROPLEFT: 'dropleft',
      MENURIGHT: 'dropdown-menu-right',
      MENULEFT: 'dropdown-menu-left',
      POSITION_STATIC: 'position-static'
    };
    var Selector = {
      DATA_TOGGLE: '[data-toggle="dropdown"]',
      FORM_CHILD: '.dropdown form',
      MENU: '.dropdown-menu',
      NAVBAR_NAV: '.navbar-nav',
      VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'
    };
    var AttachmentMap = {
      TOP: 'top-start',
      TOPEND: 'top-end',
      BOTTOM: 'bottom-start',
      BOTTOMEND: 'bottom-end',
      RIGHT: 'right-start',
      RIGHTEND: 'right-end',
      LEFT: 'left-start',
      LEFTEND: 'left-end'
    };
    var Default = {
      offset: 0,
      flip: true,
      boundary: 'scrollParent',
      reference: 'toggle',
      display: 'dynamic'
    };
    var DefaultType = {
      offset: '(number|string|function)',
      flip: 'boolean',
      boundary: '(string|element)',
      reference: '(string|element)',
      display: 'string'
      /**
       * ------------------------------------------------------------------------
       * Class Definition
       * ------------------------------------------------------------------------
       */
fat's avatar
fat committed
148

Mark Otto's avatar
dist    
Mark Otto committed
149
    };
fat's avatar
fat committed
150

Mark Otto's avatar
dist    
Mark Otto committed
151
152
153
154
155
156
157
158
159
    var Dropdown =
    /*#__PURE__*/
    function () {
      function Dropdown(element, config) {
        this._element = element;
        this._popper = null;
        this._config = this._getConfig(config);
        this._menu = this._getMenuElement();
        this._inNavbar = this._detectNavbar();
fat's avatar
fat committed
160

Mark Otto's avatar
dist    
Mark Otto committed
161
162
        this._addEventListeners();
      } // Getters
fat's avatar
fat committed
163

Jacob Thornton's avatar
Jacob Thornton committed
164

Mark Otto's avatar
dist    
Mark Otto committed
165
      var _proto = Dropdown.prototype;
fat's avatar
fat committed
166

Mark Otto's avatar
dist    
Mark Otto committed
167
168
169
170
171
      // Public
      _proto.toggle = function toggle() {
        if (this._element.disabled || $$$1(this._element).hasClass(ClassName.DISABLED)) {
          return;
        }
fat's avatar
fat committed
172

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

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

Mark Otto's avatar
dist    
Mark Otto committed
177
        Dropdown._clearMenus();
fat's avatar
fat committed
178

Mark Otto's avatar
dist    
Mark Otto committed
179
180
181
        if (isActive) {
          return;
        }
fat's avatar
fat committed
182

Mark Otto's avatar
dist    
Mark Otto committed
183
184
185
186
187
        var relatedTarget = {
          relatedTarget: this._element
        };
        var showEvent = $$$1.Event(Event.SHOW, relatedTarget);
        $$$1(parent).trigger(showEvent);
fat's avatar
fat committed
188

Mark Otto's avatar
dist    
Mark Otto committed
189
190
191
        if (showEvent.isDefaultPrevented()) {
          return;
        } // Disable totally Popper.js for Dropdown in Navbar
Mark Otto's avatar
dist    
Mark Otto committed
192
193


Mark Otto's avatar
dist    
Mark Otto committed
194
195
196
197
198
199
200
201
        if (!this._inNavbar) {
          /**
           * Check for Popper dependency
           * Popper - https://popper.js.org
           */
          if (typeof Popper === 'undefined') {
            throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)');
          }
Mark Otto's avatar
dist    
Mark Otto committed
202

Mark Otto's avatar
dist    
Mark Otto committed
203
          var referenceElement = this._element;
Mark Otto's avatar
grunt    
Mark Otto committed
204

Mark Otto's avatar
dist    
Mark Otto committed
205
206
207
208
          if (this._config.reference === 'parent') {
            referenceElement = parent;
          } else if (Util.isElement(this._config.reference)) {
            referenceElement = this._config.reference; // Check if it's jQuery element
Mark Otto's avatar
dist    
Mark Otto committed
209

Mark Otto's avatar
dist    
Mark Otto committed
210
211
212
213
214
215
            if (typeof this._config.reference.jquery !== 'undefined') {
              referenceElement = this._config.reference[0];
            }
          } // 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
Mark Otto's avatar
dist    
Mark Otto committed
216
217


Mark Otto's avatar
dist    
Mark Otto committed
218
219
220
          if (this._config.boundary !== 'scrollParent') {
            $$$1(parent).addClass(ClassName.POSITION_STATIC);
          }
fat's avatar
fat committed
221

Mark Otto's avatar
dist    
Mark Otto committed
222
223
224
225
226
          this._popper = new Popper(referenceElement, 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
fat's avatar
fat committed
227

Mark Otto's avatar
dist    
Mark Otto committed
228

Mark Otto's avatar
dist    
Mark Otto committed
229
230
231
        if ('ontouchstart' in document.documentElement && $$$1(parent).closest(Selector.NAVBAR_NAV).length === 0) {
          $$$1(document.body).children().on('mouseover', null, $$$1.noop);
        }
Mark Otto's avatar
dist    
Mark Otto committed
232

Mark Otto's avatar
dist    
Mark Otto committed
233
        this._element.focus();
Mark Otto's avatar
dist    
Mark Otto committed
234

Mark Otto's avatar
dist    
Mark Otto committed
235
        this._element.setAttribute('aria-expanded', true);
Mark Otto's avatar
dist    
Mark Otto committed
236

Mark Otto's avatar
dist    
Mark Otto committed
237
238
239
        $$$1(this._menu).toggleClass(ClassName.SHOW);
        $$$1(parent).toggleClass(ClassName.SHOW).trigger($$$1.Event(Event.SHOWN, relatedTarget));
      };
Mark Otto's avatar
dist    
Mark Otto committed
240

Mark Otto's avatar
dist    
Mark Otto committed
241
242
243
244
245
      _proto.dispose = function dispose() {
        $$$1.removeData(this._element, DATA_KEY);
        $$$1(this._element).off(EVENT_KEY);
        this._element = null;
        this._menu = null;
Mark Otto's avatar
dist    
Mark Otto committed
246

Mark Otto's avatar
dist    
Mark Otto committed
247
248
        if (this._popper !== null) {
          this._popper.destroy();
fat's avatar
fat committed
249

Mark Otto's avatar
dist    
Mark Otto committed
250
251
252
          this._popper = null;
        }
      };
Johann-S's avatar
build    
Johann-S committed
253

Mark Otto's avatar
dist    
Mark Otto committed
254
255
      _proto.update = function update() {
        this._inNavbar = this._detectNavbar();
Mark Otto's avatar
dist    
Mark Otto committed
256

Mark Otto's avatar
dist    
Mark Otto committed
257
258
259
260
        if (this._popper !== null) {
          this._popper.scheduleUpdate();
        }
      }; // Private
Mark Otto's avatar
dist    
Mark Otto committed
261
262


Mark Otto's avatar
dist    
Mark Otto committed
263
264
      _proto._addEventListeners = function _addEventListeners() {
        var _this = this;
Mark Otto's avatar
dist    
Mark Otto committed
265

Mark Otto's avatar
dist    
Mark Otto committed
266
267
268
        $$$1(this._element).on(Event.CLICK, function (event) {
          event.preventDefault();
          event.stopPropagation();
Mark Otto's avatar
dist    
Mark Otto committed
269

Mark Otto's avatar
dist    
Mark Otto committed
270
271
272
          _this.toggle();
        });
      };
Johann-S's avatar
build    
Johann-S committed
273

Mark Otto's avatar
dist    
Mark Otto committed
274
275
276
277
278
      _proto._getConfig = function _getConfig(config) {
        config = _objectSpread({}, this.constructor.Default, $$$1(this._element).data(), config);
        Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
        return config;
      };
Johann-S's avatar
build    
Johann-S committed
279

Mark Otto's avatar
dist    
Mark Otto committed
280
281
282
      _proto._getMenuElement = function _getMenuElement() {
        if (!this._menu) {
          var parent = Dropdown._getParentFromElement(this._element);
Mark Otto's avatar
dist    
Mark Otto committed
283

Mark Otto's avatar
dist    
Mark Otto committed
284
285
286
          if (parent) {
            this._menu = parent.querySelector(Selector.MENU);
          }
Mark Otto's avatar
dist    
Mark Otto committed
287
        }
Mark Otto's avatar
dist    
Mark Otto committed
288

Mark Otto's avatar
dist    
Mark Otto committed
289
290
        return this._menu;
      };
Mark Otto's avatar
dist    
Mark Otto committed
291

Mark Otto's avatar
dist    
Mark Otto committed
292
293
294
      _proto._getPlacement = function _getPlacement() {
        var $parentDropdown = $$$1(this._element.parentNode);
        var placement = AttachmentMap.BOTTOM; // Handle dropup
Mark Otto's avatar
dist    
Mark Otto committed
295

Mark Otto's avatar
dist    
Mark Otto committed
296
297
        if ($parentDropdown.hasClass(ClassName.DROPUP)) {
          placement = AttachmentMap.TOP;
Mark Otto's avatar
dist    
Mark Otto committed
298

Mark Otto's avatar
dist    
Mark Otto committed
299
300
301
302
303
304
305
306
307
          if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) {
            placement = AttachmentMap.TOPEND;
          }
        } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) {
          placement = AttachmentMap.RIGHT;
        } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) {
          placement = AttachmentMap.LEFT;
        } else if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) {
          placement = AttachmentMap.BOTTOMEND;
Mark Otto's avatar
build    
Mark Otto committed
308
        }
Mark Otto's avatar
dist    
Mark Otto committed
309

Mark Otto's avatar
dist    
Mark Otto committed
310
311
        return placement;
      };
Mark Otto's avatar
dist    
Mark Otto committed
312

Mark Otto's avatar
dist    
Mark Otto committed
313
314
315
      _proto._detectNavbar = function _detectNavbar() {
        return $$$1(this._element).closest('.navbar').length > 0;
      };
Mark Otto's avatar
dist    
Mark Otto committed
316

Mark Otto's avatar
dist    
Mark Otto committed
317
318
      _proto._getPopperConfig = function _getPopperConfig() {
        var _this2 = this;
Mark Otto's avatar
dist    
Mark Otto committed
319

Mark Otto's avatar
dist    
Mark Otto committed
320
        var offsetConf = {};
Mark Otto's avatar
dist    
Mark Otto committed
321

Mark Otto's avatar
dist    
Mark Otto committed
322
323
324
325
326
327
328
329
        if (typeof this._config.offset === 'function') {
          offsetConf.fn = function (data) {
            data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {});
            return data;
          };
        } else {
          offsetConf.offset = this._config.offset;
        }
Mark Otto's avatar
dist    
Mark Otto committed
330

Mark Otto's avatar
dist    
Mark Otto committed
331
332
333
334
335
336
337
338
339
340
341
        var popperConfig = {
          placement: this._getPlacement(),
          modifiers: {
            offset: offsetConf,
            flip: {
              enabled: this._config.flip
            },
            preventOverflow: {
              boundariesElement: this._config.boundary
            }
          } // Disable Popper.js if we have a static display
Mark Otto's avatar
dist    
Mark Otto committed
342
343
344

        };

Mark Otto's avatar
dist    
Mark Otto committed
345
346
347
348
349
        if (this._config.display === 'static') {
          popperConfig.modifiers.applyStyle = {
            enabled: false
          };
        }
Mark Otto's avatar
dist    
Mark Otto committed
350

Mark Otto's avatar
dist    
Mark Otto committed
351
352
        return popperConfig;
      }; // Static
Mark Otto's avatar
dist    
Mark Otto committed
353
354


Mark Otto's avatar
dist    
Mark Otto committed
355
356
357
      Dropdown._jQueryInterface = function _jQueryInterface(config) {
        return this.each(function () {
          var data = $$$1(this).data(DATA_KEY);
Mark Otto's avatar
dist    
Mark Otto committed
358

Mark Otto's avatar
dist    
Mark Otto committed
359
360
361
362
363
364
          var _config = typeof config === 'object' ? config : null;

          if (!data) {
            data = new Dropdown(this, _config);
            $$$1(this).data(DATA_KEY, data);
          }
Mark Otto's avatar
dist    
Mark Otto committed
365

Mark Otto's avatar
dist    
Mark Otto committed
366
367
368
369
370
371
          if (typeof config === 'string') {
            if (typeof data[config] === 'undefined') {
              throw new TypeError("No method named \"" + config + "\"");
            }

            data[config]();
Mark Otto's avatar
dist    
Mark Otto committed
372
          }
Mark Otto's avatar
dist    
Mark Otto committed
373
374
        });
      };
Mark Otto's avatar
build    
Mark Otto committed
375

Mark Otto's avatar
dist    
Mark Otto committed
376
377
378
      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
dist    
Mark Otto committed
379
        }
Mark Otto's avatar
dist    
Mark Otto committed
380

Mark Otto's avatar
dist    
Mark Otto committed
381
        var toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE));
Mark Otto's avatar
build    
Mark Otto committed
382

Mark Otto's avatar
dist    
Mark Otto committed
383
384
        for (var i = 0, len = toggles.length; i < len; i++) {
          var parent = Dropdown._getParentFromElement(toggles[i]);
fat's avatar
fat committed
385

Mark Otto's avatar
dist    
Mark Otto committed
386
387
388
389
          var context = $$$1(toggles[i]).data(DATA_KEY);
          var relatedTarget = {
            relatedTarget: toggles[i]
          };
fat's avatar
fat committed
390

Mark Otto's avatar
dist    
Mark Otto committed
391
392
393
          if (event && event.type === 'click') {
            relatedTarget.clickEvent = event;
          }
fat's avatar
fat committed
394

Mark Otto's avatar
dist    
Mark Otto committed
395
396
397
          if (!context) {
            continue;
          }
Mark Otto's avatar
dist    
Mark Otto committed
398

Mark Otto's avatar
dist    
Mark Otto committed
399
          var dropdownMenu = context._menu;
Johann-S's avatar
build    
Johann-S committed
400

Mark Otto's avatar
dist    
Mark Otto committed
401
402
403
          if (!$$$1(parent).hasClass(ClassName.SHOW)) {
            continue;
          }
fat's avatar
fat committed
404

Mark Otto's avatar
dist    
Mark Otto committed
405
406
407
          if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $$$1.contains(parent, event.target)) {
            continue;
          }
fat's avatar
fat committed
408

Mark Otto's avatar
dist    
Mark Otto committed
409
410
          var hideEvent = $$$1.Event(Event.HIDE, relatedTarget);
          $$$1(parent).trigger(hideEvent);
Mark Otto's avatar
grunt    
Mark Otto committed
411

Mark Otto's avatar
dist    
Mark Otto committed
412
413
414
415
          if (hideEvent.isDefaultPrevented()) {
            continue;
          } // If this is a touch-enabled device we remove the extra
          // empty mouseover listeners we added for iOS support
Mark Otto's avatar
grunt    
Mark Otto committed
416

Mark Otto's avatar
grunt    
Mark Otto committed
417

Mark Otto's avatar
dist    
Mark Otto committed
418
419
420
          if ('ontouchstart' in document.documentElement) {
            $$$1(document.body).children().off('mouseover', null, $$$1.noop);
          }
Mark Otto's avatar
grunt    
Mark Otto committed
421

Mark Otto's avatar
dist    
Mark Otto committed
422
423
424
          toggles[i].setAttribute('aria-expanded', 'false');
          $$$1(dropdownMenu).removeClass(ClassName.SHOW);
          $$$1(parent).removeClass(ClassName.SHOW).trigger($$$1.Event(Event.HIDDEN, relatedTarget));
Mark Otto's avatar
dist    
Mark Otto committed
425
        }
Mark Otto's avatar
dist    
Mark Otto committed
426
      };
Mark Otto's avatar
dist    
Mark Otto committed
427

Mark Otto's avatar
dist    
Mark Otto committed
428
429
430
      Dropdown._getParentFromElement = function _getParentFromElement(element) {
        var parent;
        var selector = Util.getSelectorFromElement(element);
fat's avatar
fat committed
431

Mark Otto's avatar
dist    
Mark Otto committed
432
433
434
        if (selector) {
          parent = document.querySelector(selector);
        }
fat's avatar
fat committed
435

Mark Otto's avatar
dist    
Mark Otto committed
436
437
        return parent || element.parentNode;
      }; // eslint-disable-next-line complexity
Mark Otto's avatar
dist    
Mark Otto committed
438

Mark Otto's avatar
dist    
Mark Otto committed
439

Mark Otto's avatar
dist    
Mark Otto committed
440
441
442
443
444
445
446
447
448
449
450
      Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
        // 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 || $$$1(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
          return;
        }
fat's avatar
fat committed
451

Mark Otto's avatar
dist    
Mark Otto committed
452
453
        event.preventDefault();
        event.stopPropagation();
fat's avatar
fat committed
454

Mark Otto's avatar
dist    
Mark Otto committed
455
456
457
        if (this.disabled || $$$1(this).hasClass(ClassName.DISABLED)) {
          return;
        }
fat's avatar
fat committed
458

Mark Otto's avatar
dist    
Mark Otto committed
459
        var parent = Dropdown._getParentFromElement(this);
fat's avatar
fat committed
460

Mark Otto's avatar
dist    
Mark Otto committed
461
        var isActive = $$$1(parent).hasClass(ClassName.SHOW);
Mark Otto's avatar
grunt    
Mark Otto committed
462

Mark Otto's avatar
dist    
Mark Otto committed
463
464
465
466
467
        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.querySelector(Selector.DATA_TOGGLE);
            $$$1(toggle).trigger('focus');
          }
Mark Otto's avatar
dist    
Mark Otto committed
468

Mark Otto's avatar
dist    
Mark Otto committed
469
470
          $$$1(this).trigger('click');
          return;
fat's avatar
fat committed
471
472
        }

Mark Otto's avatar
dist    
Mark Otto committed
473
        var items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS));
fat's avatar
fat committed
474

Mark Otto's avatar
dist    
Mark Otto committed
475
476
477
        if (items.length === 0) {
          return;
        }
fat's avatar
fat committed
478

Mark Otto's avatar
dist    
Mark Otto committed
479
        var index = items.indexOf(event.target);
fat's avatar
fat committed
480

Mark Otto's avatar
dist    
Mark Otto committed
481
482
483
484
        if (event.which === ARROW_UP_KEYCODE && index > 0) {
          // Up
          index--;
        }
Mark Otto's avatar
Mark Otto committed
485

Mark Otto's avatar
dist    
Mark Otto committed
486
487
488
489
        if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
          // Down
          index++;
        }
Mark Otto's avatar
Mark Otto committed
490

Mark Otto's avatar
dist    
Mark Otto committed
491
492
493
        if (index < 0) {
          index = 0;
        }
fat's avatar
fat committed
494

Mark Otto's avatar
dist    
Mark Otto committed
495
496
        items[index].focus();
      };
Mark Otto's avatar
dist    
Mark Otto committed
497

Mark Otto's avatar
dist    
Mark Otto committed
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
      _createClass(Dropdown, null, [{
        key: "VERSION",
        get: function get() {
          return VERSION;
        }
      }, {
        key: "Default",
        get: function get() {
          return Default;
        }
      }, {
        key: "DefaultType",
        get: function get() {
          return DefaultType;
        }
      }]);
Mark Otto's avatar
dist    
Mark Otto committed
514

Mark Otto's avatar
dist    
Mark Otto committed
515
516
517
518
519
520
521
      return Dropdown;
    }();
    /**
     * ------------------------------------------------------------------------
     * Data Api implementation
     * ------------------------------------------------------------------------
     */
fat's avatar
fat committed
522
523


Mark Otto's avatar
dist    
Mark Otto committed
524
525
526
    $$$1(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();
Mark Otto's avatar
dist    
Mark Otto committed
527

Mark Otto's avatar
dist    
Mark Otto committed
528
529
530
531
532
533
534
535
536
      Dropdown._jQueryInterface.call($$$1(this), 'toggle');
    }).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) {
      e.stopPropagation();
    });
    /**
     * ------------------------------------------------------------------------
     * jQuery
     * ------------------------------------------------------------------------
     */
Mark Otto's avatar
dist    
Mark Otto committed
537

Mark Otto's avatar
dist    
Mark Otto committed
538
539
    $$$1.fn[NAME] = Dropdown._jQueryInterface;
    $$$1.fn[NAME].Constructor = Dropdown;
fat's avatar
fat committed
540

Mark Otto's avatar
dist    
Mark Otto committed
541
542
543
544
    $$$1.fn[NAME].noConflict = function () {
      $$$1.fn[NAME] = JQUERY_NO_CONFLICT;
      return Dropdown._jQueryInterface;
    };
Mark Otto's avatar
dist    
Mark Otto committed
545

Mark Otto's avatar
dist    
Mark Otto committed
546
547
    return Dropdown;
  }($, Popper);
fat's avatar
fat committed
548
549

  return Dropdown;
Mark Otto's avatar
dist    
Mark Otto committed
550
551
552

})));
//# sourceMappingURL=dropdown.js.map