bootstrap 4.3.1 → 5.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (158) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +17 -2
  3. data/CHANGELOG.md +2 -14
  4. data/README.md +7 -4
  5. data/assets/javascripts/bootstrap/alert.js +172 -136
  6. data/assets/javascripts/bootstrap/base-component.js +182 -0
  7. data/assets/javascripts/bootstrap/button.js +101 -142
  8. data/assets/javascripts/bootstrap/carousel.js +483 -408
  9. data/assets/javascripts/bootstrap/collapse.js +340 -273
  10. data/assets/javascripts/bootstrap/dom/data.js +68 -0
  11. data/assets/javascripts/bootstrap/dom/event-handler.js +321 -0
  12. data/assets/javascripts/bootstrap/dom/manipulator.js +88 -0
  13. data/assets/javascripts/bootstrap/dom/selector-engine.js +127 -0
  14. data/assets/javascripts/bootstrap/dropdown.js +491 -399
  15. data/assets/javascripts/bootstrap/modal.js +841 -449
  16. data/assets/javascripts/bootstrap/offcanvas.js +866 -0
  17. data/assets/javascripts/bootstrap/popover.js +121 -198
  18. data/assets/javascripts/bootstrap/scrollspy.js +256 -240
  19. data/assets/javascripts/bootstrap/tab.js +218 -154
  20. data/assets/javascripts/bootstrap/toast.js +329 -189
  21. data/assets/javascripts/bootstrap/tooltip.js +651 -552
  22. data/assets/javascripts/bootstrap-global-this-define.js +6 -0
  23. data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
  24. data/assets/javascripts/bootstrap-sprockets.js +8 -1
  25. data/assets/javascripts/bootstrap.js +3503 -2892
  26. data/assets/javascripts/bootstrap.min.js +4 -4
  27. data/assets/stylesheets/_bootstrap-grid.scss +56 -18
  28. data/assets/stylesheets/_bootstrap-reboot.scss +5 -4
  29. data/assets/stylesheets/_bootstrap.scss +20 -11
  30. data/assets/stylesheets/bootstrap/_accordion.scss +118 -0
  31. data/assets/stylesheets/bootstrap/_alert.scss +15 -9
  32. data/assets/stylesheets/bootstrap/_badge.scss +2 -27
  33. data/assets/stylesheets/bootstrap/_breadcrumb.scss +5 -18
  34. data/assets/stylesheets/bootstrap/_button-group.scss +21 -45
  35. data/assets/stylesheets/bootstrap/_buttons.scss +28 -54
  36. data/assets/stylesheets/bootstrap/_card.scss +52 -125
  37. data/assets/stylesheets/bootstrap/_carousel.scss +70 -38
  38. data/assets/stylesheets/bootstrap/_close.scss +30 -31
  39. data/assets/stylesheets/bootstrap/_containers.scss +41 -0
  40. data/assets/stylesheets/bootstrap/_dropdown.scss +88 -39
  41. data/assets/stylesheets/bootstrap/_forms.scss +9 -330
  42. data/assets/stylesheets/bootstrap/_functions.scss +243 -27
  43. data/assets/stylesheets/bootstrap/_grid.scss +14 -33
  44. data/assets/stylesheets/bootstrap/_helpers.scss +9 -0
  45. data/assets/stylesheets/bootstrap/_images.scss +3 -3
  46. data/assets/stylesheets/bootstrap/_list-group.scss +61 -36
  47. data/assets/stylesheets/bootstrap/_mixins.scss +12 -16
  48. data/assets/stylesheets/bootstrap/_modal.scss +64 -84
  49. data/assets/stylesheets/bootstrap/_nav.scss +29 -10
  50. data/assets/stylesheets/bootstrap/_navbar.scss +93 -52
  51. data/assets/stylesheets/bootstrap/_offcanvas.scss +83 -0
  52. data/assets/stylesheets/bootstrap/_pagination.scss +13 -22
  53. data/assets/stylesheets/bootstrap/_placeholders.scss +51 -0
  54. data/assets/stylesheets/bootstrap/_popover.scss +29 -42
  55. data/assets/stylesheets/bootstrap/_progress.scss +10 -5
  56. data/assets/stylesheets/bootstrap/_reboot.scss +350 -208
  57. data/assets/stylesheets/bootstrap/_root.scss +43 -8
  58. data/assets/stylesheets/bootstrap/_spinners.scss +21 -7
  59. data/assets/stylesheets/bootstrap/_tables.scss +84 -114
  60. data/assets/stylesheets/bootstrap/_toasts.scss +21 -14
  61. data/assets/stylesheets/bootstrap/_tooltip.scss +21 -21
  62. data/assets/stylesheets/bootstrap/_transitions.scss +8 -1
  63. data/assets/stylesheets/bootstrap/_type.scss +40 -61
  64. data/assets/stylesheets/bootstrap/_utilities.scss +630 -17
  65. data/assets/stylesheets/bootstrap/_variables.scss +1007 -489
  66. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +18 -0
  67. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +63 -0
  68. data/assets/stylesheets/bootstrap/forms/_form-check.scss +152 -0
  69. data/assets/stylesheets/bootstrap/forms/_form-control.scss +219 -0
  70. data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
  71. data/assets/stylesheets/bootstrap/forms/_form-select.scss +72 -0
  72. data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
  73. data/assets/stylesheets/bootstrap/forms/_input-group.scss +121 -0
  74. data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
  75. data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
  76. data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
  77. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +12 -0
  78. data/assets/stylesheets/bootstrap/helpers/_position.scss +30 -0
  79. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
  80. data/assets/stylesheets/bootstrap/helpers/_stacks.scss +15 -0
  81. data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
  82. data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
  83. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
  84. data/assets/stylesheets/bootstrap/helpers/_vr.scss +8 -0
  85. data/assets/stylesheets/bootstrap/mixins/_alert.scss +3 -5
  86. data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
  87. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +37 -22
  88. data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +7 -9
  89. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +14 -10
  90. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +77 -51
  91. data/assets/stylesheets/bootstrap/mixins/_caret.scss +10 -8
  92. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
  93. data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
  94. data/assets/stylesheets/bootstrap/mixins/_container.scss +9 -0
  95. data/assets/stylesheets/bootstrap/mixins/_forms.scss +67 -115
  96. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
  97. data/assets/stylesheets/bootstrap/mixins/_grid.scss +132 -32
  98. data/assets/stylesheets/bootstrap/mixins/_image.scss +0 -20
  99. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +5 -2
  100. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +17 -8
  101. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +1 -1
  102. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +21 -0
  103. data/assets/stylesheets/bootstrap/mixins/_transition.scss +18 -8
  104. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +89 -0
  105. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +29 -0
  106. data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
  107. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +278 -128
  108. data/bootstrap.gemspec +4 -6
  109. data/lib/bootstrap/version.rb +2 -2
  110. data/tasks/updater/js.rb +25 -6
  111. data/tasks/updater/network.rb +8 -2
  112. data/test/dummy_rails/app/assets/config/manifest.js +3 -0
  113. data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
  114. data/test/dummy_rails/app/assets/stylesheets/.browserslistrc +1 -0
  115. data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
  116. data/test/dummy_rails/app/views/pages/root.html +89 -0
  117. data/test/dummy_rails/config/application.rb +0 -3
  118. data/test/gemfiles/rails_6_0.gemfile +7 -0
  119. data/test/gemfiles/rails_6_1.gemfile +7 -0
  120. data/test/support/dummy_rails_integration.rb +3 -1
  121. data/test/test_helper.rb +18 -13
  122. metadata +61 -79
  123. data/assets/javascripts/bootstrap/util.js +0 -171
  124. data/assets/stylesheets/bootstrap/_code.scss +0 -48
  125. data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -507
  126. data/assets/stylesheets/bootstrap/_input-group.scss +0 -193
  127. data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
  128. data/assets/stylesheets/bootstrap/_media.scss +0 -8
  129. data/assets/stylesheets/bootstrap/_print.scss +0 -141
  130. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -21
  131. data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
  132. data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
  133. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -66
  134. data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
  135. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -10
  136. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -33
  137. data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
  138. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
  139. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -16
  140. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
  141. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
  142. data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
  143. data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
  144. data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
  145. data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
  146. data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
  147. data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
  148. data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
  149. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
  150. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
  151. data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
  152. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
  153. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
  154. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
  155. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
  156. data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
  157. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -13
  158. data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
@@ -0,0 +1,68 @@
1
+ /*!
2
+ * Bootstrap data.js v5.1.3 (https://getbootstrap.com/)
3
+ * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
+ */
6
+ (function (global, factory) {
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
8
+ typeof define === 'function' && define.amd ? define(factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Data = factory());
10
+ })(this, (function () { 'use strict';
11
+
12
+ /**
13
+ * --------------------------------------------------------------------------
14
+ * Bootstrap (v5.1.3): dom/data.js
15
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
16
+ * --------------------------------------------------------------------------
17
+ */
18
+
19
+ /**
20
+ * ------------------------------------------------------------------------
21
+ * Constants
22
+ * ------------------------------------------------------------------------
23
+ */
24
+ const elementMap = new Map();
25
+ const data = {
26
+ set(element, key, instance) {
27
+ if (!elementMap.has(element)) {
28
+ elementMap.set(element, new Map());
29
+ }
30
+
31
+ const instanceMap = elementMap.get(element); // make it clear we only want one instance per element
32
+ // can be removed later when multiple key/instances are fine to be used
33
+
34
+ if (!instanceMap.has(key) && instanceMap.size !== 0) {
35
+ // eslint-disable-next-line no-console
36
+ console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
37
+ return;
38
+ }
39
+
40
+ instanceMap.set(key, instance);
41
+ },
42
+
43
+ get(element, key) {
44
+ if (elementMap.has(element)) {
45
+ return elementMap.get(element).get(key) || null;
46
+ }
47
+
48
+ return null;
49
+ },
50
+
51
+ remove(element, key) {
52
+ if (!elementMap.has(element)) {
53
+ return;
54
+ }
55
+
56
+ const instanceMap = elementMap.get(element);
57
+ instanceMap.delete(key); // free up element references if there are no instances left for an element
58
+
59
+ if (instanceMap.size === 0) {
60
+ elementMap.delete(element);
61
+ }
62
+ }
63
+
64
+ };
65
+
66
+ return data;
67
+
68
+ }));
@@ -0,0 +1,321 @@
1
+ /*!
2
+ * Bootstrap event-handler.js v5.1.3 (https://getbootstrap.com/)
3
+ * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
+ */
6
+ (function (global, factory) {
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
8
+ typeof define === 'function' && define.amd ? define(factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.EventHandler = factory());
10
+ })(this, (function () { 'use strict';
11
+
12
+ /**
13
+ * --------------------------------------------------------------------------
14
+ * Bootstrap (v5.1.3): util/index.js
15
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
16
+ * --------------------------------------------------------------------------
17
+ */
18
+
19
+ const getjQuery = () => {
20
+ const {
21
+ jQuery
22
+ } = window;
23
+
24
+ if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
25
+ return jQuery;
26
+ }
27
+
28
+ return null;
29
+ };
30
+
31
+ /**
32
+ * --------------------------------------------------------------------------
33
+ * Bootstrap (v5.1.3): dom/event-handler.js
34
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
35
+ * --------------------------------------------------------------------------
36
+ */
37
+ /**
38
+ * ------------------------------------------------------------------------
39
+ * Constants
40
+ * ------------------------------------------------------------------------
41
+ */
42
+
43
+ const namespaceRegex = /[^.]*(?=\..*)\.|.*/;
44
+ const stripNameRegex = /\..*/;
45
+ const stripUidRegex = /::\d+$/;
46
+ const eventRegistry = {}; // Events storage
47
+
48
+ let uidEvent = 1;
49
+ const customEvents = {
50
+ mouseenter: 'mouseover',
51
+ mouseleave: 'mouseout'
52
+ };
53
+ const customEventsRegex = /^(mouseenter|mouseleave)/i;
54
+ 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']);
55
+ /**
56
+ * ------------------------------------------------------------------------
57
+ * Private methods
58
+ * ------------------------------------------------------------------------
59
+ */
60
+
61
+ function getUidEvent(element, uid) {
62
+ return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;
63
+ }
64
+
65
+ function getEvent(element) {
66
+ const uid = getUidEvent(element);
67
+ element.uidEvent = uid;
68
+ eventRegistry[uid] = eventRegistry[uid] || {};
69
+ return eventRegistry[uid];
70
+ }
71
+
72
+ function bootstrapHandler(element, fn) {
73
+ return function handler(event) {
74
+ event.delegateTarget = element;
75
+
76
+ if (handler.oneOff) {
77
+ EventHandler.off(element, event.type, fn);
78
+ }
79
+
80
+ return fn.apply(element, [event]);
81
+ };
82
+ }
83
+
84
+ function bootstrapDelegationHandler(element, selector, fn) {
85
+ return function handler(event) {
86
+ const domElements = element.querySelectorAll(selector);
87
+
88
+ for (let {
89
+ target
90
+ } = event; target && target !== this; target = target.parentNode) {
91
+ for (let i = domElements.length; i--;) {
92
+ if (domElements[i] === target) {
93
+ event.delegateTarget = target;
94
+
95
+ if (handler.oneOff) {
96
+ EventHandler.off(element, event.type, selector, fn);
97
+ }
98
+
99
+ return fn.apply(target, [event]);
100
+ }
101
+ }
102
+ } // To please ESLint
103
+
104
+
105
+ return null;
106
+ };
107
+ }
108
+
109
+ function findHandler(events, handler, delegationSelector = null) {
110
+ const uidEventList = Object.keys(events);
111
+
112
+ for (let i = 0, len = uidEventList.length; i < len; i++) {
113
+ const event = events[uidEventList[i]];
114
+
115
+ if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {
116
+ return event;
117
+ }
118
+ }
119
+
120
+ return null;
121
+ }
122
+
123
+ function normalizeParams(originalTypeEvent, handler, delegationFn) {
124
+ const delegation = typeof handler === 'string';
125
+ const originalHandler = delegation ? delegationFn : handler;
126
+ let typeEvent = getTypeEvent(originalTypeEvent);
127
+ const isNative = nativeEvents.has(typeEvent);
128
+
129
+ if (!isNative) {
130
+ typeEvent = originalTypeEvent;
131
+ }
132
+
133
+ return [delegation, originalHandler, typeEvent];
134
+ }
135
+
136
+ function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {
137
+ if (typeof originalTypeEvent !== 'string' || !element) {
138
+ return;
139
+ }
140
+
141
+ if (!handler) {
142
+ handler = delegationFn;
143
+ delegationFn = null;
144
+ } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
145
+ // this prevents the handler from being dispatched the same way as mouseover or mouseout does
146
+
147
+
148
+ if (customEventsRegex.test(originalTypeEvent)) {
149
+ const wrapFn = fn => {
150
+ return function (event) {
151
+ if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {
152
+ return fn.call(this, event);
153
+ }
154
+ };
155
+ };
156
+
157
+ if (delegationFn) {
158
+ delegationFn = wrapFn(delegationFn);
159
+ } else {
160
+ handler = wrapFn(handler);
161
+ }
162
+ }
163
+
164
+ const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);
165
+ const events = getEvent(element);
166
+ const handlers = events[typeEvent] || (events[typeEvent] = {});
167
+ const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);
168
+
169
+ if (previousFn) {
170
+ previousFn.oneOff = previousFn.oneOff && oneOff;
171
+ return;
172
+ }
173
+
174
+ const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));
175
+ const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);
176
+ fn.delegationSelector = delegation ? handler : null;
177
+ fn.originalHandler = originalHandler;
178
+ fn.oneOff = oneOff;
179
+ fn.uidEvent = uid;
180
+ handlers[uid] = fn;
181
+ element.addEventListener(typeEvent, fn, delegation);
182
+ }
183
+
184
+ function removeHandler(element, events, typeEvent, handler, delegationSelector) {
185
+ const fn = findHandler(events[typeEvent], handler, delegationSelector);
186
+
187
+ if (!fn) {
188
+ return;
189
+ }
190
+
191
+ element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));
192
+ delete events[typeEvent][fn.uidEvent];
193
+ }
194
+
195
+ function removeNamespacedHandlers(element, events, typeEvent, namespace) {
196
+ const storeElementEvent = events[typeEvent] || {};
197
+ Object.keys(storeElementEvent).forEach(handlerKey => {
198
+ if (handlerKey.includes(namespace)) {
199
+ const event = storeElementEvent[handlerKey];
200
+ removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);
201
+ }
202
+ });
203
+ }
204
+
205
+ function getTypeEvent(event) {
206
+ // allow to get the native events from namespaced events ('click.bs.button' --> 'click')
207
+ event = event.replace(stripNameRegex, '');
208
+ return customEvents[event] || event;
209
+ }
210
+
211
+ const EventHandler = {
212
+ on(element, event, handler, delegationFn) {
213
+ addHandler(element, event, handler, delegationFn, false);
214
+ },
215
+
216
+ one(element, event, handler, delegationFn) {
217
+ addHandler(element, event, handler, delegationFn, true);
218
+ },
219
+
220
+ off(element, originalTypeEvent, handler, delegationFn) {
221
+ if (typeof originalTypeEvent !== 'string' || !element) {
222
+ return;
223
+ }
224
+
225
+ const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);
226
+ const inNamespace = typeEvent !== originalTypeEvent;
227
+ const events = getEvent(element);
228
+ const isNamespace = originalTypeEvent.startsWith('.');
229
+
230
+ if (typeof originalHandler !== 'undefined') {
231
+ // Simplest case: handler is passed, remove that listener ONLY.
232
+ if (!events || !events[typeEvent]) {
233
+ return;
234
+ }
235
+
236
+ removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);
237
+ return;
238
+ }
239
+
240
+ if (isNamespace) {
241
+ Object.keys(events).forEach(elementEvent => {
242
+ removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
243
+ });
244
+ }
245
+
246
+ const storeElementEvent = events[typeEvent] || {};
247
+ Object.keys(storeElementEvent).forEach(keyHandlers => {
248
+ const handlerKey = keyHandlers.replace(stripUidRegex, '');
249
+
250
+ if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
251
+ const event = storeElementEvent[keyHandlers];
252
+ removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);
253
+ }
254
+ });
255
+ },
256
+
257
+ trigger(element, event, args) {
258
+ if (typeof event !== 'string' || !element) {
259
+ return null;
260
+ }
261
+
262
+ const $ = getjQuery();
263
+ const typeEvent = getTypeEvent(event);
264
+ const inNamespace = event !== typeEvent;
265
+ const isNative = nativeEvents.has(typeEvent);
266
+ let jQueryEvent;
267
+ let bubbles = true;
268
+ let nativeDispatch = true;
269
+ let defaultPrevented = false;
270
+ let evt = null;
271
+
272
+ if (inNamespace && $) {
273
+ jQueryEvent = $.Event(event, args);
274
+ $(element).trigger(jQueryEvent);
275
+ bubbles = !jQueryEvent.isPropagationStopped();
276
+ nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
277
+ defaultPrevented = jQueryEvent.isDefaultPrevented();
278
+ }
279
+
280
+ if (isNative) {
281
+ evt = document.createEvent('HTMLEvents');
282
+ evt.initEvent(typeEvent, bubbles, true);
283
+ } else {
284
+ evt = new CustomEvent(event, {
285
+ bubbles,
286
+ cancelable: true
287
+ });
288
+ } // merge custom information in our event
289
+
290
+
291
+ if (typeof args !== 'undefined') {
292
+ Object.keys(args).forEach(key => {
293
+ Object.defineProperty(evt, key, {
294
+ get() {
295
+ return args[key];
296
+ }
297
+
298
+ });
299
+ });
300
+ }
301
+
302
+ if (defaultPrevented) {
303
+ evt.preventDefault();
304
+ }
305
+
306
+ if (nativeDispatch) {
307
+ element.dispatchEvent(evt);
308
+ }
309
+
310
+ if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {
311
+ jQueryEvent.preventDefault();
312
+ }
313
+
314
+ return evt;
315
+ }
316
+
317
+ };
318
+
319
+ return EventHandler;
320
+
321
+ }));
@@ -0,0 +1,88 @@
1
+ /*!
2
+ * Bootstrap manipulator.js v5.1.3 (https://getbootstrap.com/)
3
+ * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
+ */
6
+ (function (global, factory) {
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
8
+ typeof define === 'function' && define.amd ? define(factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Manipulator = factory());
10
+ })(this, (function () { 'use strict';
11
+
12
+ /**
13
+ * --------------------------------------------------------------------------
14
+ * Bootstrap (v5.1.3): dom/manipulator.js
15
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
16
+ * --------------------------------------------------------------------------
17
+ */
18
+ function normalizeData(val) {
19
+ if (val === 'true') {
20
+ return true;
21
+ }
22
+
23
+ if (val === 'false') {
24
+ return false;
25
+ }
26
+
27
+ if (val === Number(val).toString()) {
28
+ return Number(val);
29
+ }
30
+
31
+ if (val === '' || val === 'null') {
32
+ return null;
33
+ }
34
+
35
+ return val;
36
+ }
37
+
38
+ function normalizeDataKey(key) {
39
+ return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);
40
+ }
41
+
42
+ const Manipulator = {
43
+ setDataAttribute(element, key, value) {
44
+ element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);
45
+ },
46
+
47
+ removeDataAttribute(element, key) {
48
+ element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);
49
+ },
50
+
51
+ getDataAttributes(element) {
52
+ if (!element) {
53
+ return {};
54
+ }
55
+
56
+ const attributes = {};
57
+ Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {
58
+ let pureKey = key.replace(/^bs/, '');
59
+ pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
60
+ attributes[pureKey] = normalizeData(element.dataset[key]);
61
+ });
62
+ return attributes;
63
+ },
64
+
65
+ getDataAttribute(element, key) {
66
+ return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));
67
+ },
68
+
69
+ offset(element) {
70
+ const rect = element.getBoundingClientRect();
71
+ return {
72
+ top: rect.top + window.pageYOffset,
73
+ left: rect.left + window.pageXOffset
74
+ };
75
+ },
76
+
77
+ position(element) {
78
+ return {
79
+ top: element.offsetTop,
80
+ left: element.offsetLeft
81
+ };
82
+ }
83
+
84
+ };
85
+
86
+ return Manipulator;
87
+
88
+ }));
@@ -0,0 +1,127 @@
1
+ /*!
2
+ * Bootstrap selector-engine.js v5.1.3 (https://getbootstrap.com/)
3
+ * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
+ */
6
+ (function (global, factory) {
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
8
+ typeof define === 'function' && define.amd ? define(factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.SelectorEngine = factory());
10
+ })(this, (function () { 'use strict';
11
+
12
+ /**
13
+ * --------------------------------------------------------------------------
14
+ * Bootstrap (v5.1.3): util/index.js
15
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
16
+ * --------------------------------------------------------------------------
17
+ */
18
+
19
+ const isElement = obj => {
20
+ if (!obj || typeof obj !== 'object') {
21
+ return false;
22
+ }
23
+
24
+ if (typeof obj.jquery !== 'undefined') {
25
+ obj = obj[0];
26
+ }
27
+
28
+ return typeof obj.nodeType !== 'undefined';
29
+ };
30
+
31
+ const isVisible = element => {
32
+ if (!isElement(element) || element.getClientRects().length === 0) {
33
+ return false;
34
+ }
35
+
36
+ return getComputedStyle(element).getPropertyValue('visibility') === 'visible';
37
+ };
38
+
39
+ const isDisabled = element => {
40
+ if (!element || element.nodeType !== Node.ELEMENT_NODE) {
41
+ return true;
42
+ }
43
+
44
+ if (element.classList.contains('disabled')) {
45
+ return true;
46
+ }
47
+
48
+ if (typeof element.disabled !== 'undefined') {
49
+ return element.disabled;
50
+ }
51
+
52
+ return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
53
+ };
54
+
55
+ /**
56
+ * --------------------------------------------------------------------------
57
+ * Bootstrap (v5.1.3): dom/selector-engine.js
58
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
59
+ * --------------------------------------------------------------------------
60
+ */
61
+ const NODE_TEXT = 3;
62
+ const SelectorEngine = {
63
+ find(selector, element = document.documentElement) {
64
+ return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
65
+ },
66
+
67
+ findOne(selector, element = document.documentElement) {
68
+ return Element.prototype.querySelector.call(element, selector);
69
+ },
70
+
71
+ children(element, selector) {
72
+ return [].concat(...element.children).filter(child => child.matches(selector));
73
+ },
74
+
75
+ parents(element, selector) {
76
+ const parents = [];
77
+ let ancestor = element.parentNode;
78
+
79
+ while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {
80
+ if (ancestor.matches(selector)) {
81
+ parents.push(ancestor);
82
+ }
83
+
84
+ ancestor = ancestor.parentNode;
85
+ }
86
+
87
+ return parents;
88
+ },
89
+
90
+ prev(element, selector) {
91
+ let previous = element.previousElementSibling;
92
+
93
+ while (previous) {
94
+ if (previous.matches(selector)) {
95
+ return [previous];
96
+ }
97
+
98
+ previous = previous.previousElementSibling;
99
+ }
100
+
101
+ return [];
102
+ },
103
+
104
+ next(element, selector) {
105
+ let next = element.nextElementSibling;
106
+
107
+ while (next) {
108
+ if (next.matches(selector)) {
109
+ return [next];
110
+ }
111
+
112
+ next = next.nextElementSibling;
113
+ }
114
+
115
+ return [];
116
+ },
117
+
118
+ focusableChildren(element) {
119
+ const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(', ');
120
+ return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));
121
+ }
122
+
123
+ };
124
+
125
+ return SelectorEngine;
126
+
127
+ }));