PageSourceSearch

https://www.jynarque.com/sites/g/files/qhldwo12166/themes/site/the…/js/base/bootstrap/bootstrap.dropdown.js

js jynarque.com collected 2026-10-08 00:24:47 UTC 16,872 bytes, 514 lines download raw bytes

1"use strict";
2
3function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
5(function (global, factory) {
6  (typeof exports === "undefined" ? "undefined" : _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 = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dropdown = factory(global.jQuery, global.Popper, global.Util));
7})(void 0, function ($, Popper, Util) {
8  'use strict';
9
10  function _interopDefaultLegacy(e) {
11    return e && _typeof(e) === 'object' && 'default' in e ? e : {
12      'default': e
13    };
14  }
15
16  var $__default = _interopDefaultLegacy($);
17
18  var Popper__default = _interopDefaultLegacy(Popper);
19
20  var Util__default = _interopDefaultLegacy(Util);
21
22  function _extends() {
23    _extends = Object.assign || function (target) {
24      for (var i = 1; i < arguments.length; i++) {
25        var source = arguments[i];
26
27        for (var key in source) {
28          if (Object.prototype.hasOwnProperty.call(source, key)) {
29            target[key] = source[key];
30          }
31        }
32      }
33
34      return target;
35    };
36
37    return _extends.apply(this, arguments);
38  }
39
40  function _defineProperties(target, props) {
41    for (var i = 0; i < props.length; i++) {
42      var descriptor = props[i];
43      descriptor.enumerable = descriptor.enumerable || false;
44      descriptor.configurable = true;
45      if ("value" in descriptor) descriptor.writable = true;
46      Object.defineProperty(target, descriptor.key, descriptor);
47    }
48  }
49
50  function _createClass(Constructor, protoProps, staticProps) {
51    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
52    if (staticProps) _defineProperties(Constructor, staticProps);
53    return Constructor;
54  }
55
56  var NAME = 'dropdown';
57  var VERSION = '4.5.3';
58  var DATA_KEY = 'bs.dropdown';
59  var EVENT_KEY = "." + DATA_KEY;
60  var DATA_API_KEY = '.data-api';
61  var JQUERY_NO_CONFLICT = $__default['default'].fn[NAME];
62  var ESCAPE_KEYCODE = 27;
63  var SPACE_KEYCODE = 32;
64  var TAB_KEYCODE = 9;
65  var ARROW_UP_KEYCODE = 38;
66  var ARROW_DOWN_KEYCODE = 40;
67  var RIGHT_MOUSE_BUTTON_WHICH = 3;
68  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
69  var EVENT_HIDE = "hide" + EVENT_KEY;
70  var EVENT_HIDDEN = "hidden" + EVENT_KEY;
71  var EVENT_SHOW = "show" + EVENT_KEY;
72  var EVENT_SHOWN = "shown" + EVENT_KEY;
73  var EVENT_CLICK = "click" + EVENT_KEY;
74  var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
75  var EVENT_KEYDOWN_DATA_API = "keydown" + EVENT_KEY + DATA_API_KEY;
76  var EVENT_KEYUP_DATA_API = "keyup" + EVENT_KEY + DATA_API_KEY;
77  var CLASS_NAME_DISABLED = 'disabled';
78  var CLASS_NAME_SHOW = 'show';
79  var CLASS_NAME_DROPUP = 'dropup';
80  var CLASS_NAME_DROPRIGHT = 'dropright';
81  var CLASS_NAME_DROPLEFT = 'dropleft';
82  var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';
83  var CLASS_NAME_POSITION_STATIC = 'position-static';
84  var SELECTOR_DATA_TOGGLE = '[data-toggle="dropdown"]';
85  var SELECTOR_FORM_CHILD = '.dropdown form';
86  var SELECTOR_MENU = '.dropdown-menu';
87  var SELECTOR_NAVBAR_NAV = '.navbar-nav';
88  var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
89  var PLACEMENT_TOP = 'top-start';
90  var PLACEMENT_TOPEND = 'top-end';
91  var PLACEMENT_BOTTOM = 'bottom-start';
92  var PLACEMENT_BOTTOMEND = 'bottom-end';
93  var PLACEMENT_RIGHT = 'right-start';
94  var PLACEMENT_LEFT = 'left-start';
95  var Default = {
96    offset: 0,
97    flip: true,
98    boundary: 'scrollParent',
99    reference: 'toggle',
100    display: 'dynamic',
101    popperConfig: null
102  };
103  var DefaultType = {
104    offset: '(number|string|function)',
105    flip: 'boolean',
106    boundary: '(string|element)',
107    reference: '(string|element)',
108    display: 'string',
109    popperConfig: '(null|object)'
110  };
111
112  var Dropdown = function () {
113    function Dropdown(element, config) {
114      this._element = element;
115      this._popper = null;
116      this._config = this._getConfig(config);
117      this._menu = this._getMenuElement();
118      this._inNavbar = this._detectNavbar();
119
120      this._addEventListeners();
121    }
122
123    var _proto = Dropdown.prototype;
124
vendor: 6,259 bytes, lines 125-321
125    _proto.toggle = function toggle() {
126      if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED)) {
127        return;
128      }
129
130      var isActive = $__default['default'](this._menu).hasClass(CLASS_NAME_SHOW);
131
132      Dropdown._clearMenus();
133
134      if (isActive) {
135        return;
136      }
137
138      this.show(true);
139    };
140
141    _proto.show = function show(usePopper) {
142      if (usePopper === void 0) {
143        usePopper = false;
144      }
145
146      if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED) || $__default['default'](this._menu).hasClass(CLASS_NAME_SHOW)) {
147        return;
148      }
149
150      var relatedTarget = {
151        relatedTarget: this._element
152      };
153      var showEvent = $__default['default'].Event(EVENT_SHOW, relatedTarget);
154
155      var parent = Dropdown._getParentFromElement(this._element);
156
157      $__default['default'](parent).trigger(showEvent);
158
159      if (showEvent.isDefaultPrevented()) {
160        return;
161      }
162
163      if (!this._inNavbar && usePopper) {
164        if (typeof Popper__default['default'] === 'undefined') {
165          throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)');
166        }
167
168        var referenceElement = this._element;
169
170        if (this._config.reference === 'parent') {
171          referenceElement = parent;
172        } else if (Util__default['default'].isElement(this._config.reference)) {
173          referenceElement = this._config.reference;
174
175          if (typeof this._config.reference.jquery !== 'undefined') {
176            referenceElement = this._config.reference[0];
177          }
178        }
179
180        if (this._config.boundary !== 'scrollParent') {
181          $__default['default'](parent).addClass(CLASS_NAME_POSITION_STATIC);
182        }
183
184        this._popper = new Popper__default['default'](referenceElement, this._menu, this._getPopperConfig());
185      }
186
187      if ('ontouchstart' in document.documentElement && $__default['default'](parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {
188        $__default['default'](document.body).children().on('mouseover', null, $__default['default'].noop);
189      }
190
191      this._element.focus();
192
193      this._element.setAttribute('aria-expanded', true);
194
195      $__default['default'](this._menu).toggleClass(CLASS_NAME_SHOW);
196      $__default['default'](parent).toggleClass(CLASS_NAME_SHOW).trigger($__default['default'].Event(EVENT_SHOWN, relatedTarget));
197    };
198
199    _proto.hide = function hide() {
200      if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED) || !$__default['default'](this._menu).hasClass(CLASS_NAME_SHOW)) {
201        return;
202      }
203
204      var relatedTarget = {
205        relatedTarget: this._element
206      };
207      var hideEvent = $__default['default'].Event(EVENT_HIDE, relatedTarget);
208
209      var parent = Dropdown._getParentFromElement(this._element);
210
211      $__default['default'](parent).trigger(hideEvent);
212
213      if (hideEvent.isDefaultPrevented()) {
214        return;
215      }
216
217      if (this._popper) {
218        this._popper.destroy();
219      }
220
221      $__default['default'](this._menu).toggleClass(CLASS_NAME_SHOW);
222      $__default['default'](parent).toggleClass(CLASS_NAME_SHOW).trigger($__default['default'].Event(EVENT_HIDDEN, relatedTarget));
223    };
224
225    _proto.dispose = function dispose() {
226      $__default['default'].removeData(this._element, DATA_KEY);
227      $__default['default'](this._element).off(EVENT_KEY);
228      this._element = null;
229      this._menu = null;
230
231      if (this._popper !== null) {
232        this._popper.destroy();
233
234        this._popper = null;
235      }
236    };
237
238    _proto.update = function update() {
239      this._inNavbar = this._detectNavbar();
240
241      if (this._popper !== null) {
242        this._popper.scheduleUpdate();
243      }
244    };
245
246    _proto._addEventListeners = function _addEventListeners() {
247      var _this = this;
248
249      $__default['default'](this._element).on(EVENT_CLICK, function (event) {
250        event.preventDefault();
251        event.stopPropagation();
252
253        _this.toggle();
254      });
255    };
256
257    _proto._getConfig = function _getConfig(config) {
258      config = _extends({}, this.constructor.Default, $__default['default'](this._element).data(), config);
259      Util__default['default'].typeCheckConfig(NAME, config, this.constructor.DefaultType);
260      return config;
261    };
262
263    _proto._getMenuElement = function _getMenuElement() {
264      if (!this._menu) {
265        var parent = Dropdown._getParentFromElement(this._element);
266
267        if (parent) {
268          this._menu = parent.querySelector(SELECTOR_MENU);
269        }
270      }
271
272      return this._menu;
273    };
274
275    _proto._getPlacement = function _getPlacement() {
276      var $parentDropdown = $__default['default'](this._element.parentNode);
277      var placement = PLACEMENT_BOTTOM;
278
279      if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {
280        placement = $__default['default'](this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP;
281      } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {
282        placement = PLACEMENT_RIGHT;
283      } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {
284        placement = PLACEMENT_LEFT;
285      } else if ($__default['default'](this._menu).hasClass(CLASS_NAME_MENURIGHT)) {
286        placement = PLACEMENT_BOTTOMEND;
287      }
288
289      return placement;
290    };
291
292    _proto._detectNavbar = function _detectNavbar() {
293      return $__default['default'](this._element).closest('.navbar').length > 0;
294    };
295
296    _proto._getOffset = function _getOffset() {
297      var _this2 = this;
298
299      var offset = {};
300
301      if (typeof this._config.offset === 'function') {
302        offset.fn = function (data) {
303          data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});
304          return data;
305        };
306      } else {
307        offset.offset = this._config.offset;
308      }
309
310      return offset;
311    };
312
313    _proto._getPopperConfig = function _getPopperConfig() {
314      var popperConfig = {
315        placement: this._getPlacement(),
316        modifiers: {
317          offset: this._getOffset(),
318          flip: {
319            enabled: this._config.flip
320          },
321          preventOverflow: {
vendor: 5,977 bytes, lines 322-514
322            boundariesElement: this._config.boundary
323          }
324        }
325      };
326
327      if (this._config.display === 'static') {
328        popperConfig.modifiers.applyStyle = {
329          enabled: false
330        };
331      }
332
333      return _extends({}, popperConfig, this._config.popperConfig);
334    };
335
336    Dropdown._jQueryInterface = function _jQueryInterface(config) {
337      return this.each(function () {
338        var data = $__default['default'](this).data(DATA_KEY);
339
340        var _config = _typeof(config) === 'object' ? config : null;
341
342        if (!data) {
343          data = new Dropdown(this, _config);
344          $__default['default'](this).data(DATA_KEY, data);
345        }
346
347        if (typeof config === 'string') {
348          if (typeof data[config] === 'undefined') {
349            throw new TypeError("No method named \"" + config + "\"");
350          }
351
352          data[config]();
353        }
354      });
355    };
356
357    Dropdown._clearMenus = function _clearMenus(event) {
358      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {
359        return;
360      }
361
362      var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE));
363
364      for (var i = 0, len = toggles.length; i < len; i++) {
365        var parent = Dropdown._getParentFromElement(toggles[i]);
366
367        var context = $__default['default'](toggles[i]).data(DATA_KEY);
368        var relatedTarget = {
369          relatedTarget: toggles[i]
370        };
371
372        if (event && event.type === 'click') {
373          relatedTarget.clickEvent = event;
374        }
375
376        if (!context) {
377          continue;
378        }
379
380        var dropdownMenu = context._menu;
381
382        if (!$__default['default'](parent).hasClass(CLASS_NAME_SHOW)) {
383          continue;
384        }
385
386        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $__default['default'].contains(parent, event.target)) {
387          continue;
388        }
389
390        var hideEvent = $__default['default'].Event(EVENT_HIDE, relatedTarget);
391        $__default['default'](parent).trigger(hideEvent);
392
393        if (hideEvent.isDefaultPrevented()) {
394          continue;
395        }
396
397        if ('ontouchstart' in document.documentElement) {
398          $__default['default'](document.body).children().off('mouseover', null, $__default['default'].noop);
399        }
400
401        toggles[i].setAttribute('aria-expanded', 'false');
402
403        if (context._popper) {
404          context._popper.destroy();
405        }
406
407        $__default['default'](dropdownMenu).removeClass(CLASS_NAME_SHOW);
408        $__default['default'](parent).removeClass(CLASS_NAME_SHOW).trigger($__default['default'].Event(EVENT_HIDDEN, relatedTarget));
409      }
410    };
411
412    Dropdown._getParentFromElement = function _getParentFromElement(element) {
413      var parent;
414      var selector = Util__default['default'].getSelectorFromElement(element);
415
416      if (selector) {
417        parent = document.querySelector(selector);
418      }
419
420      return parent || element.parentNode;
421    };
422
423    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
424      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 || $__default['default'](event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
425        return;
426      }
427
428      if (this.disabled || $__default['default'](this).hasClass(CLASS_NAME_DISABLED)) {
429        return;
430      }
431
432      var parent = Dropdown._getParentFromElement(this);
433
434      var isActive = $__default['default'](parent).hasClass(CLASS_NAME_SHOW);
435
436      if (!isActive && event.which === ESCAPE_KEYCODE) {
437        return;
438      }
439
440      event.preventDefault();
441      event.stopPropagation();
442
443      if (!isActive || event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE) {
444        if (event.which === ESCAPE_KEYCODE) {
445          $__default['default'](parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus');
446        }
447
448        $__default['default'](this).trigger('click');
449        return;
450      }
451
452      var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) {
453        return $__default['default'](item).is(':visible');
454      });
455
456      if (items.length === 0) {
457        return;
458      }
459
460      var index = items.indexOf(event.target);
461
462      if (event.which === ARROW_UP_KEYCODE && index > 0) {
463        index--;
464      }
465
466      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
467        index++;
468      }
469
470      if (index < 0) {
471        index = 0;
472      }
473
474      items[index].focus();
475    };
476
477    _createClass(Dropdown, null, [{
478      key: "VERSION",
479      get: function get() {
480        return VERSION;
481      }
482    }, {
483      key: "Default",
484      get: function get() {
485        return Default;
486      }
487    }, {
488      key: "DefaultType",
489      get: function get() {
490        return DefaultType;
491      }
492    }]);
493
494    return Dropdown;
495  }();
496
497  $__default['default'](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) {
498    event.preventDefault();
499    event.stopPropagation();
500
501    Dropdown._jQueryInterface.call($__default['default'](this), 'toggle');
502  }).on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, function (e) {
503    e.stopPropagation();
504  });
505  $__default['default'].fn[NAME] = Dropdown._jQueryInterface;
506  $__default['default'].fn[NAME].Constructor = Dropdown;
507
508  $__default['default'].fn[NAME].noConflict = function () {
509    $__default['default'].fn[NAME] = JQUERY_NO_CONFLICT;
510    return Dropdown._jQueryInterface;
511  };
512
513  return Dropdown;
514});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.