bootstrap 5.2.3 → 5.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/assets/javascripts/bootstrap/alert.js +22 -32
  4. data/assets/javascripts/bootstrap/base-component.js +22 -38
  5. data/assets/javascripts/bootstrap/button.js +19 -22
  6. data/assets/javascripts/bootstrap/carousel.js +52 -135
  7. data/assets/javascripts/bootstrap/collapse.js +40 -102
  8. data/assets/javascripts/bootstrap/dom/data.js +8 -12
  9. data/assets/javascripts/bootstrap/dom/event-handler.js +19 -66
  10. data/assets/javascripts/bootstrap/dom/manipulator.js +4 -17
  11. data/assets/javascripts/bootstrap/dom/selector-engine.js +42 -24
  12. data/assets/javascripts/bootstrap/dropdown.js +74 -145
  13. data/assets/javascripts/bootstrap/modal.js +53 -133
  14. data/assets/javascripts/bootstrap/offcanvas.js +50 -102
  15. data/assets/javascripts/bootstrap/popover.js +23 -29
  16. data/assets/javascripts/bootstrap/scrollspy.js +53 -90
  17. data/assets/javascripts/bootstrap/tab.js +52 -109
  18. data/assets/javascripts/bootstrap/toast.js +31 -73
  19. data/assets/javascripts/bootstrap/tooltip.js +75 -177
  20. data/assets/javascripts/bootstrap/util/backdrop.js +28 -54
  21. data/assets/javascripts/bootstrap/util/component-functions.js +13 -18
  22. data/assets/javascripts/bootstrap/util/config.js +15 -27
  23. data/assets/javascripts/bootstrap/util/focustrap.js +20 -36
  24. data/assets/javascripts/bootstrap/util/index.js +42 -111
  25. data/assets/javascripts/bootstrap/util/sanitizer.js +30 -42
  26. data/assets/javascripts/bootstrap/util/scrollbar.js +24 -50
  27. data/assets/javascripts/bootstrap/util/swipe.js +27 -48
  28. data/assets/javascripts/bootstrap/util/template-factory.js +25 -52
  29. data/assets/javascripts/bootstrap-sprockets.js +12 -12
  30. data/assets/javascripts/bootstrap.js +678 -1441
  31. data/assets/javascripts/bootstrap.min.js +3 -3
  32. data/assets/stylesheets/_bootstrap-grid.scss +1 -3
  33. data/assets/stylesheets/_bootstrap-reboot.scss +1 -0
  34. data/assets/stylesheets/_bootstrap.scss +1 -0
  35. data/assets/stylesheets/bootstrap/_accordion.scss +9 -0
  36. data/assets/stylesheets/bootstrap/_alert.scss +8 -11
  37. data/assets/stylesheets/bootstrap/_button-group.scss +2 -2
  38. data/assets/stylesheets/bootstrap/_buttons.scss +3 -3
  39. data/assets/stylesheets/bootstrap/_card.scss +5 -0
  40. data/assets/stylesheets/bootstrap/_carousel.scss +20 -2
  41. data/assets/stylesheets/bootstrap/_close.scss +32 -9
  42. data/assets/stylesheets/bootstrap/_dropdown.scss +1 -0
  43. data/assets/stylesheets/bootstrap/_functions.scss +1 -1
  44. data/assets/stylesheets/bootstrap/_grid.scss +6 -0
  45. data/assets/stylesheets/bootstrap/_helpers.scss +2 -0
  46. data/assets/stylesheets/bootstrap/_list-group.scss +12 -7
  47. data/assets/stylesheets/bootstrap/_maps.scss +120 -0
  48. data/assets/stylesheets/bootstrap/_mixins.scss +1 -2
  49. data/assets/stylesheets/bootstrap/_nav.scss +40 -3
  50. data/assets/stylesheets/bootstrap/_navbar.scss +15 -4
  51. data/assets/stylesheets/bootstrap/_offcanvas.scss +4 -2
  52. data/assets/stylesheets/bootstrap/_pagination.scss +1 -1
  53. data/assets/stylesheets/bootstrap/_progress.scss +10 -1
  54. data/assets/stylesheets/bootstrap/_reboot.scss +3 -3
  55. data/assets/stylesheets/bootstrap/_root.scss +121 -10
  56. data/assets/stylesheets/bootstrap/_tables.scss +18 -11
  57. data/assets/stylesheets/bootstrap/_tooltip.scss +4 -5
  58. data/assets/stylesheets/bootstrap/_utilities.scss +172 -13
  59. data/assets/stylesheets/bootstrap/_variables-dark.scss +85 -0
  60. data/assets/stylesheets/bootstrap/_variables.scss +262 -153
  61. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +1 -0
  62. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +22 -3
  63. data/assets/stylesheets/bootstrap/forms/_form-check.scss +24 -11
  64. data/assets/stylesheets/bootstrap/forms/_form-control.scss +23 -3
  65. data/assets/stylesheets/bootstrap/forms/_form-select.scss +11 -2
  66. data/assets/stylesheets/bootstrap/forms/_input-group.scss +1 -1
  67. data/assets/stylesheets/bootstrap/helpers/_color-bg.scss +0 -2
  68. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +20 -2
  69. data/assets/stylesheets/bootstrap/helpers/_focus-ring.scss +5 -0
  70. data/assets/stylesheets/bootstrap/helpers/_icon-link.scss +25 -0
  71. data/assets/stylesheets/bootstrap/mixins/_alert.scss +4 -1
  72. data/assets/stylesheets/bootstrap/mixins/_banner.scss +2 -4
  73. data/assets/stylesheets/bootstrap/mixins/_caret.scss +30 -25
  74. data/assets/stylesheets/bootstrap/mixins/_color-mode.scss +21 -0
  75. data/assets/stylesheets/bootstrap/mixins/_forms.scss +8 -7
  76. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +2 -0
  77. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +1 -1
  78. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +5 -1
  79. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +23 -29
  80. data/bootstrap.gemspec +1 -1
  81. data/lib/bootstrap/version.rb +2 -2
  82. data/tasks/updater/js.rb +1 -1
  83. data/tasks/updater/scss.rb +1 -1
  84. metadata +12 -8
@@ -1,26 +1,22 @@
1
1
  /*!
2
- * Bootstrap collapse.js v5.2.3 (https://getbootstrap.com/)
3
- * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2
+ * Bootstrap collapse.js v5.3.0 (https://getbootstrap.com/)
3
+ * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
5
  */
6
6
  (function (global, factory) {
7
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./dom/event-handler'), require('./dom/selector-engine'), require('./base-component')) :
8
- typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './dom/selector-engine', './base-component'], factory) :
9
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Collapse = factory(global.Index, global.EventHandler, global.SelectorEngine, global.BaseComponent));
10
- })(this, (function (index, EventHandler, SelectorEngine, BaseComponent) { 'use strict';
11
-
12
- const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
13
-
14
- const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
15
- const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
16
- const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./base-component.js'), require('./dom/event-handler.js'), require('./dom/selector-engine.js'), require('./util/index.js')) :
8
+ typeof define === 'function' && define.amd ? define(['./base-component', './dom/event-handler', './dom/selector-engine', './util/index'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Collapse = factory(global.BaseComponent, global.EventHandler, global.SelectorEngine, global.Index));
10
+ })(this, (function (BaseComponent, EventHandler, SelectorEngine, index_js) { 'use strict';
17
11
 
18
12
  /**
19
13
  * --------------------------------------------------------------------------
20
- * Bootstrap (v5.2.3): collapse.js
14
+ * Bootstrap collapse.js
21
15
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
22
16
  * --------------------------------------------------------------------------
23
17
  */
18
+
19
+
24
20
  /**
25
21
  * Constants
26
22
  */
@@ -52,51 +48,45 @@
52
48
  parent: '(null|element)',
53
49
  toggle: 'boolean'
54
50
  };
51
+
55
52
  /**
56
53
  * Class definition
57
54
  */
58
55
 
59
- class Collapse extends BaseComponent__default.default {
56
+ class Collapse extends BaseComponent {
60
57
  constructor(element, config) {
61
58
  super(element, config);
62
59
  this._isTransitioning = false;
63
60
  this._triggerArray = [];
64
- const toggleList = SelectorEngine__default.default.find(SELECTOR_DATA_TOGGLE);
65
-
61
+ const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE);
66
62
  for (const elem of toggleList) {
67
- const selector = index.getSelectorFromElement(elem);
68
- const filterElement = SelectorEngine__default.default.find(selector).filter(foundElement => foundElement === this._element);
69
-
63
+ const selector = SelectorEngine.getSelectorFromElement(elem);
64
+ const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);
70
65
  if (selector !== null && filterElement.length) {
71
66
  this._triggerArray.push(elem);
72
67
  }
73
68
  }
74
-
75
69
  this._initializeChildren();
76
-
77
70
  if (!this._config.parent) {
78
71
  this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());
79
72
  }
80
-
81
73
  if (this._config.toggle) {
82
74
  this.toggle();
83
75
  }
84
- } // Getters
85
-
76
+ }
86
77
 
78
+ // Getters
87
79
  static get Default() {
88
80
  return Default;
89
81
  }
90
-
91
82
  static get DefaultType() {
92
83
  return DefaultType;
93
84
  }
94
-
95
85
  static get NAME() {
96
86
  return NAME;
97
- } // Public
98
-
87
+ }
99
88
 
89
+ // Public
100
90
  toggle() {
101
91
  if (this._isShown()) {
102
92
  this.hide();
@@ -104,206 +94,154 @@
104
94
  this.show();
105
95
  }
106
96
  }
107
-
108
97
  show() {
109
98
  if (this._isTransitioning || this._isShown()) {
110
99
  return;
111
100
  }
101
+ let activeChildren = [];
112
102
 
113
- let activeChildren = []; // find active children
114
-
103
+ // find active children
115
104
  if (this._config.parent) {
116
105
  activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {
117
106
  toggle: false
118
107
  }));
119
108
  }
120
-
121
109
  if (activeChildren.length && activeChildren[0]._isTransitioning) {
122
110
  return;
123
111
  }
124
-
125
- const startEvent = EventHandler__default.default.trigger(this._element, EVENT_SHOW);
126
-
112
+ const startEvent = EventHandler.trigger(this._element, EVENT_SHOW);
127
113
  if (startEvent.defaultPrevented) {
128
114
  return;
129
115
  }
130
-
131
116
  for (const activeInstance of activeChildren) {
132
117
  activeInstance.hide();
133
118
  }
134
-
135
119
  const dimension = this._getDimension();
136
-
137
120
  this._element.classList.remove(CLASS_NAME_COLLAPSE);
138
-
139
121
  this._element.classList.add(CLASS_NAME_COLLAPSING);
140
-
141
122
  this._element.style[dimension] = 0;
142
-
143
123
  this._addAriaAndCollapsedClass(this._triggerArray, true);
144
-
145
124
  this._isTransitioning = true;
146
-
147
125
  const complete = () => {
148
126
  this._isTransitioning = false;
149
-
150
127
  this._element.classList.remove(CLASS_NAME_COLLAPSING);
151
-
152
128
  this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);
153
-
154
129
  this._element.style[dimension] = '';
155
- EventHandler__default.default.trigger(this._element, EVENT_SHOWN);
130
+ EventHandler.trigger(this._element, EVENT_SHOWN);
156
131
  };
157
-
158
132
  const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
159
133
  const scrollSize = `scroll${capitalizedDimension}`;
160
-
161
134
  this._queueCallback(complete, this._element, true);
162
-
163
135
  this._element.style[dimension] = `${this._element[scrollSize]}px`;
164
136
  }
165
-
166
137
  hide() {
167
138
  if (this._isTransitioning || !this._isShown()) {
168
139
  return;
169
140
  }
170
-
171
- const startEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE);
172
-
141
+ const startEvent = EventHandler.trigger(this._element, EVENT_HIDE);
173
142
  if (startEvent.defaultPrevented) {
174
143
  return;
175
144
  }
176
-
177
145
  const dimension = this._getDimension();
178
-
179
146
  this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;
180
- index.reflow(this._element);
181
-
147
+ index_js.reflow(this._element);
182
148
  this._element.classList.add(CLASS_NAME_COLLAPSING);
183
-
184
149
  this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);
185
-
186
150
  for (const trigger of this._triggerArray) {
187
- const element = index.getElementFromSelector(trigger);
188
-
151
+ const element = SelectorEngine.getElementFromSelector(trigger);
189
152
  if (element && !this._isShown(element)) {
190
153
  this._addAriaAndCollapsedClass([trigger], false);
191
154
  }
192
155
  }
193
-
194
156
  this._isTransitioning = true;
195
-
196
157
  const complete = () => {
197
158
  this._isTransitioning = false;
198
-
199
159
  this._element.classList.remove(CLASS_NAME_COLLAPSING);
200
-
201
160
  this._element.classList.add(CLASS_NAME_COLLAPSE);
202
-
203
- EventHandler__default.default.trigger(this._element, EVENT_HIDDEN);
161
+ EventHandler.trigger(this._element, EVENT_HIDDEN);
204
162
  };
205
-
206
163
  this._element.style[dimension] = '';
207
-
208
164
  this._queueCallback(complete, this._element, true);
209
165
  }
210
-
211
166
  _isShown(element = this._element) {
212
167
  return element.classList.contains(CLASS_NAME_SHOW);
213
- } // Private
214
-
168
+ }
215
169
 
170
+ // Private
216
171
  _configAfterMerge(config) {
217
172
  config.toggle = Boolean(config.toggle); // Coerce string values
218
-
219
- config.parent = index.getElement(config.parent);
173
+ config.parent = index_js.getElement(config.parent);
220
174
  return config;
221
175
  }
222
-
223
176
  _getDimension() {
224
177
  return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;
225
178
  }
226
-
227
179
  _initializeChildren() {
228
180
  if (!this._config.parent) {
229
181
  return;
230
182
  }
231
-
232
183
  const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE);
233
-
234
184
  for (const element of children) {
235
- const selected = index.getElementFromSelector(element);
236
-
185
+ const selected = SelectorEngine.getElementFromSelector(element);
237
186
  if (selected) {
238
187
  this._addAriaAndCollapsedClass([element], this._isShown(selected));
239
188
  }
240
189
  }
241
190
  }
242
-
243
191
  _getFirstLevelChildren(selector) {
244
- const children = SelectorEngine__default.default.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); // remove children if greater depth
245
-
246
- return SelectorEngine__default.default.find(selector, this._config.parent).filter(element => !children.includes(element));
192
+ const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
193
+ // remove children if greater depth
194
+ return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));
247
195
  }
248
-
249
196
  _addAriaAndCollapsedClass(triggerArray, isOpen) {
250
197
  if (!triggerArray.length) {
251
198
  return;
252
199
  }
253
-
254
200
  for (const element of triggerArray) {
255
201
  element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);
256
202
  element.setAttribute('aria-expanded', isOpen);
257
203
  }
258
- } // Static
259
-
204
+ }
260
205
 
206
+ // Static
261
207
  static jQueryInterface(config) {
262
208
  const _config = {};
263
-
264
209
  if (typeof config === 'string' && /show|hide/.test(config)) {
265
210
  _config.toggle = false;
266
211
  }
267
-
268
212
  return this.each(function () {
269
213
  const data = Collapse.getOrCreateInstance(this, _config);
270
-
271
214
  if (typeof config === 'string') {
272
215
  if (typeof data[config] === 'undefined') {
273
216
  throw new TypeError(`No method named "${config}"`);
274
217
  }
275
-
276
218
  data[config]();
277
219
  }
278
220
  });
279
221
  }
280
-
281
222
  }
223
+
282
224
  /**
283
225
  * Data API implementation
284
226
  */
285
227
 
286
-
287
- EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
228
+ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
288
229
  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
289
230
  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {
290
231
  event.preventDefault();
291
232
  }
292
-
293
- const selector = index.getSelectorFromElement(this);
294
- const selectorElements = SelectorEngine__default.default.find(selector);
295
-
296
- for (const element of selectorElements) {
233
+ for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {
297
234
  Collapse.getOrCreateInstance(element, {
298
235
  toggle: false
299
236
  }).toggle();
300
237
  }
301
238
  });
239
+
302
240
  /**
303
241
  * jQuery
304
242
  */
305
243
 
306
- index.defineJQueryPlugin(Collapse);
244
+ index_js.defineJQueryPlugin(Collapse);
307
245
 
308
246
  return Collapse;
309
247
 
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * Bootstrap data.js v5.2.3 (https://getbootstrap.com/)
3
- * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2
+ * Bootstrap data.js v5.3.0 (https://getbootstrap.com/)
3
+ * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
5
  */
6
6
  (function (global, factory) {
@@ -11,7 +11,7 @@
11
11
 
12
12
  /**
13
13
  * --------------------------------------------------------------------------
14
- * Bootstrap (v5.2.3): dom/data.js
14
+ * Bootstrap dom/data.js
15
15
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
16
16
  * --------------------------------------------------------------------------
17
17
  */
@@ -19,46 +19,42 @@
19
19
  /**
20
20
  * Constants
21
21
  */
22
+
22
23
  const elementMap = new Map();
23
24
  const data = {
24
25
  set(element, key, instance) {
25
26
  if (!elementMap.has(element)) {
26
27
  elementMap.set(element, new Map());
27
28
  }
29
+ const instanceMap = elementMap.get(element);
28
30
 
29
- const instanceMap = elementMap.get(element); // make it clear we only want one instance per element
31
+ // make it clear we only want one instance per element
30
32
  // can be removed later when multiple key/instances are fine to be used
31
-
32
33
  if (!instanceMap.has(key) && instanceMap.size !== 0) {
33
34
  // eslint-disable-next-line no-console
34
35
  console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
35
36
  return;
36
37
  }
37
-
38
38
  instanceMap.set(key, instance);
39
39
  },
40
-
41
40
  get(element, key) {
42
41
  if (elementMap.has(element)) {
43
42
  return elementMap.get(element).get(key) || null;
44
43
  }
45
-
46
44
  return null;
47
45
  },
48
-
49
46
  remove(element, key) {
50
47
  if (!elementMap.has(element)) {
51
48
  return;
52
49
  }
53
-
54
50
  const instanceMap = elementMap.get(element);
55
- instanceMap.delete(key); // free up element references if there are no instances left for an element
51
+ instanceMap.delete(key);
56
52
 
53
+ // free up element references if there are no instances left for an element
57
54
  if (instanceMap.size === 0) {
58
55
  elementMap.delete(element);
59
56
  }
60
57
  }
61
-
62
58
  };
63
59
 
64
60
  return data;
@@ -1,20 +1,22 @@
1
1
  /*!
2
- * Bootstrap event-handler.js v5.2.3 (https://getbootstrap.com/)
3
- * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2
+ * Bootstrap event-handler.js v5.3.0 (https://getbootstrap.com/)
3
+ * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
5
  */
6
6
  (function (global, factory) {
7
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../util/index')) :
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../util/index.js')) :
8
8
  typeof define === 'function' && define.amd ? define(['../util/index'], factory) :
9
9
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.EventHandler = factory(global.Index));
10
- })(this, (function (index) { 'use strict';
10
+ })(this, (function (index_js) { 'use strict';
11
11
 
12
12
  /**
13
13
  * --------------------------------------------------------------------------
14
- * Bootstrap (v5.2.3): dom/event-handler.js
14
+ * Bootstrap dom/event-handler.js
15
15
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
16
16
  * --------------------------------------------------------------------------
17
17
  */
18
+
19
+
18
20
  /**
19
21
  * Constants
20
22
  */
@@ -23,13 +25,13 @@
23
25
  const stripNameRegex = /\..*/;
24
26
  const stripUidRegex = /::\d+$/;
25
27
  const eventRegistry = {}; // Events storage
26
-
27
28
  let uidEvent = 1;
28
29
  const customEvents = {
29
30
  mouseenter: 'mouseover',
30
31
  mouseleave: 'mouseout'
31
32
  };
32
33
  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);
34
+
33
35
  /**
34
36
  * Private methods
35
37
  */
@@ -37,32 +39,26 @@
37
39
  function makeEventUid(element, uid) {
38
40
  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;
39
41
  }
40
-
41
42
  function getElementEvents(element) {
42
43
  const uid = makeEventUid(element);
43
44
  element.uidEvent = uid;
44
45
  eventRegistry[uid] = eventRegistry[uid] || {};
45
46
  return eventRegistry[uid];
46
47
  }
47
-
48
48
  function bootstrapHandler(element, fn) {
49
49
  return function handler(event) {
50
50
  hydrateObj(event, {
51
51
  delegateTarget: element
52
52
  });
53
-
54
53
  if (handler.oneOff) {
55
54
  EventHandler.off(element, event.type, fn);
56
55
  }
57
-
58
56
  return fn.apply(element, [event]);
59
57
  };
60
58
  }
61
-
62
59
  function bootstrapDelegationHandler(element, selector, fn) {
63
60
  return function handler(event) {
64
61
  const domElements = element.querySelectorAll(selector);
65
-
66
62
  for (let {
67
63
  target
68
64
  } = event; target && target !== this; target = target.parentNode) {
@@ -70,46 +66,38 @@
70
66
  if (domElement !== target) {
71
67
  continue;
72
68
  }
73
-
74
69
  hydrateObj(event, {
75
70
  delegateTarget: target
76
71
  });
77
-
78
72
  if (handler.oneOff) {
79
73
  EventHandler.off(element, event.type, selector, fn);
80
74
  }
81
-
82
75
  return fn.apply(target, [event]);
83
76
  }
84
77
  }
85
78
  };
86
79
  }
87
-
88
80
  function findHandler(events, callable, delegationSelector = null) {
89
81
  return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);
90
82
  }
91
-
92
83
  function normalizeParameters(originalTypeEvent, handler, delegationFunction) {
93
- const isDelegated = typeof handler === 'string'; // todo: tooltip passes `false` instead of selector, so we need to check
94
-
84
+ const isDelegated = typeof handler === 'string';
85
+ // TODO: tooltip passes `false` instead of selector, so we need to check
95
86
  const callable = isDelegated ? delegationFunction : handler || delegationFunction;
96
87
  let typeEvent = getTypeEvent(originalTypeEvent);
97
-
98
88
  if (!nativeEvents.has(typeEvent)) {
99
89
  typeEvent = originalTypeEvent;
100
90
  }
101
-
102
91
  return [isDelegated, callable, typeEvent];
103
92
  }
104
-
105
93
  function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {
106
94
  if (typeof originalTypeEvent !== 'string' || !element) {
107
95
  return;
108
96
  }
97
+ let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
109
98
 
110
- let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
99
+ // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
111
100
  // this prevents the handler from being dispatched the same way as mouseover or mouseout does
112
-
113
101
  if (originalTypeEvent in customEvents) {
114
102
  const wrapFunction = fn => {
115
103
  return function (event) {
@@ -118,19 +106,15 @@
118
106
  }
119
107
  };
120
108
  };
121
-
122
109
  callable = wrapFunction(callable);
123
110
  }
124
-
125
111
  const events = getElementEvents(element);
126
112
  const handlers = events[typeEvent] || (events[typeEvent] = {});
127
113
  const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);
128
-
129
114
  if (previousFunction) {
130
115
  previousFunction.oneOff = previousFunction.oneOff && oneOff;
131
116
  return;
132
117
  }
133
-
134
118
  const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));
135
119
  const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);
136
120
  fn.delegationSelector = isDelegated ? handler : null;
@@ -140,94 +124,74 @@
140
124
  handlers[uid] = fn;
141
125
  element.addEventListener(typeEvent, fn, isDelegated);
142
126
  }
143
-
144
127
  function removeHandler(element, events, typeEvent, handler, delegationSelector) {
145
128
  const fn = findHandler(events[typeEvent], handler, delegationSelector);
146
-
147
129
  if (!fn) {
148
130
  return;
149
131
  }
150
-
151
132
  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));
152
133
  delete events[typeEvent][fn.uidEvent];
153
134
  }
154
-
155
135
  function removeNamespacedHandlers(element, events, typeEvent, namespace) {
156
136
  const storeElementEvent = events[typeEvent] || {};
157
-
158
- for (const handlerKey of Object.keys(storeElementEvent)) {
137
+ for (const [handlerKey, event] of Object.entries(storeElementEvent)) {
159
138
  if (handlerKey.includes(namespace)) {
160
- const event = storeElementEvent[handlerKey];
161
139
  removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
162
140
  }
163
141
  }
164
142
  }
165
-
166
143
  function getTypeEvent(event) {
167
144
  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')
168
145
  event = event.replace(stripNameRegex, '');
169
146
  return customEvents[event] || event;
170
147
  }
171
-
172
148
  const EventHandler = {
173
149
  on(element, event, handler, delegationFunction) {
174
150
  addHandler(element, event, handler, delegationFunction, false);
175
151
  },
176
-
177
152
  one(element, event, handler, delegationFunction) {
178
153
  addHandler(element, event, handler, delegationFunction, true);
179
154
  },
180
-
181
155
  off(element, originalTypeEvent, handler, delegationFunction) {
182
156
  if (typeof originalTypeEvent !== 'string' || !element) {
183
157
  return;
184
158
  }
185
-
186
159
  const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
187
160
  const inNamespace = typeEvent !== originalTypeEvent;
188
161
  const events = getElementEvents(element);
189
162
  const storeElementEvent = events[typeEvent] || {};
190
163
  const isNamespace = originalTypeEvent.startsWith('.');
191
-
192
164
  if (typeof callable !== 'undefined') {
193
165
  // Simplest case: handler is passed, remove that listener ONLY.
194
166
  if (!Object.keys(storeElementEvent).length) {
195
167
  return;
196
168
  }
197
-
198
169
  removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);
199
170
  return;
200
171
  }
201
-
202
172
  if (isNamespace) {
203
173
  for (const elementEvent of Object.keys(events)) {
204
174
  removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
205
175
  }
206
176
  }
207
-
208
- for (const keyHandlers of Object.keys(storeElementEvent)) {
177
+ for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {
209
178
  const handlerKey = keyHandlers.replace(stripUidRegex, '');
210
-
211
179
  if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
212
- const event = storeElementEvent[keyHandlers];
213
180
  removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
214
181
  }
215
182
  }
216
183
  },
217
-
218
184
  trigger(element, event, args) {
219
185
  if (typeof event !== 'string' || !element) {
220
186
  return null;
221
187
  }
222
-
223
- const $ = index.getjQuery();
188
+ const $ = index_js.getjQuery();
224
189
  const typeEvent = getTypeEvent(event);
225
190
  const inNamespace = event !== typeEvent;
226
191
  let jQueryEvent = null;
227
192
  let bubbles = true;
228
193
  let nativeDispatch = true;
229
194
  let defaultPrevented = false;
230
-
231
195
  if (inNamespace && $) {
232
196
  jQueryEvent = $.Event(event, args);
233
197
  $(element).trigger(jQueryEvent);
@@ -235,46 +199,35 @@
235
199
  nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
236
200
  defaultPrevented = jQueryEvent.isDefaultPrevented();
237
201
  }
238
-
239
- let evt = new Event(event, {
202
+ const evt = hydrateObj(new Event(event, {
240
203
  bubbles,
241
204
  cancelable: true
242
- });
243
- evt = hydrateObj(evt, args);
244
-
205
+ }), args);
245
206
  if (defaultPrevented) {
246
207
  evt.preventDefault();
247
208
  }
248
-
249
209
  if (nativeDispatch) {
250
210
  element.dispatchEvent(evt);
251
211
  }
252
-
253
212
  if (evt.defaultPrevented && jQueryEvent) {
254
213
  jQueryEvent.preventDefault();
255
214
  }
256
-
257
215
  return evt;
258
216
  }
259
-
260
217
  };
261
-
262
- function hydrateObj(obj, meta) {
263
- for (const [key, value] of Object.entries(meta || {})) {
218
+ function hydrateObj(obj, meta = {}) {
219
+ for (const [key, value] of Object.entries(meta)) {
264
220
  try {
265
221
  obj[key] = value;
266
222
  } catch (_unused) {
267
223
  Object.defineProperty(obj, key, {
268
224
  configurable: true,
269
-
270
225
  get() {
271
226
  return value;
272
227
  }
273
-
274
228
  });
275
229
  }
276
230
  }
277
-
278
231
  return obj;
279
232
  }
280
233