bootstrap 5.1.3 → 5.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +61 -0
- data/CHANGELOG.md +9 -0
- data/Gemfile +1 -0
- data/README.md +35 -14
- data/Rakefile +16 -5
- data/assets/javascripts/bootstrap/alert.js +22 -167
- data/assets/javascripts/bootstrap/base-component.js +34 -133
- data/assets/javascripts/bootstrap/button.js +19 -86
- data/assets/javascripts/bootstrap/carousel.js +209 -564
- data/assets/javascripts/bootstrap/collapse.js +78 -324
- data/assets/javascripts/bootstrap/dom/data.js +8 -14
- data/assets/javascripts/bootstrap/dom/event-handler.js +89 -174
- data/assets/javascripts/bootstrap/dom/manipulator.js +22 -39
- data/assets/javascripts/bootstrap/dom/selector-engine.js +47 -71
- data/assets/javascripts/bootstrap/dropdown.js +135 -420
- data/assets/javascripts/bootstrap/modal.js +115 -837
- data/assets/javascripts/bootstrap/offcanvas.js +93 -714
- data/assets/javascripts/bootstrap/popover.js +42 -130
- data/assets/javascripts/bootstrap/scrollspy.js +180 -296
- data/assets/javascripts/bootstrap/tab.js +197 -245
- data/assets/javascripts/bootstrap/toast.js +52 -276
- data/assets/javascripts/bootstrap/tooltip.js +283 -744
- data/assets/javascripts/bootstrap/util/backdrop.js +138 -0
- data/assets/javascripts/bootstrap/util/component-functions.js +41 -0
- data/assets/javascripts/bootstrap/util/config.js +67 -0
- data/assets/javascripts/bootstrap/util/focustrap.js +112 -0
- data/assets/javascripts/bootstrap/util/index.js +280 -0
- data/assets/javascripts/bootstrap/util/sanitizer.js +113 -0
- data/assets/javascripts/bootstrap/util/scrollbar.js +112 -0
- data/assets/javascripts/bootstrap/util/swipe.js +134 -0
- data/assets/javascripts/bootstrap/util/template-factory.js +150 -0
- data/assets/javascripts/bootstrap-global-this-define.js +1 -1
- data/assets/javascripts/bootstrap-sprockets.js +15 -6
- data/assets/javascripts/bootstrap.js +2278 -2831
- data/assets/javascripts/bootstrap.min.js +3 -3
- data/assets/stylesheets/_bootstrap-grid.scss +4 -9
- data/assets/stylesheets/_bootstrap-reboot.scss +4 -7
- data/assets/stylesheets/_bootstrap-utilities.scss +19 -0
- data/assets/stylesheets/_bootstrap.scss +5 -6
- data/assets/stylesheets/bootstrap/_accordion.scss +68 -33
- data/assets/stylesheets/bootstrap/_alert.scss +25 -14
- data/assets/stylesheets/bootstrap/_badge.scss +14 -5
- data/assets/stylesheets/bootstrap/_breadcrumb.scss +22 -10
- data/assets/stylesheets/bootstrap/_button-group.scss +12 -4
- data/assets/stylesheets/bootstrap/_buttons.scss +133 -28
- data/assets/stylesheets/bootstrap/_card.scss +61 -39
- data/assets/stylesheets/bootstrap/_carousel.scss +22 -25
- data/assets/stylesheets/bootstrap/_close.scss +36 -10
- data/assets/stylesheets/bootstrap/_containers.scss +1 -1
- data/assets/stylesheets/bootstrap/_dropdown.scss +86 -76
- data/assets/stylesheets/bootstrap/_functions.scss +10 -10
- data/assets/stylesheets/bootstrap/_grid.scss +9 -3
- data/assets/stylesheets/bootstrap/_helpers.scss +3 -0
- data/assets/stylesheets/bootstrap/_list-group.scss +81 -56
- data/assets/stylesheets/bootstrap/_maps.scss +174 -0
- data/assets/stylesheets/bootstrap/_mixins.scss +1 -2
- data/assets/stylesheets/bootstrap/_modal.scss +76 -45
- data/assets/stylesheets/bootstrap/_nav.scss +87 -29
- data/assets/stylesheets/bootstrap/_navbar.scss +102 -148
- data/assets/stylesheets/bootstrap/_offcanvas.scss +125 -61
- data/assets/stylesheets/bootstrap/_pagination.scss +66 -21
- data/assets/stylesheets/bootstrap/_placeholders.scss +1 -1
- data/assets/stylesheets/bootstrap/_popover.scss +90 -52
- data/assets/stylesheets/bootstrap/_progress.scss +31 -11
- data/assets/stylesheets/bootstrap/_reboot.scss +32 -46
- data/assets/stylesheets/bootstrap/_root.scss +155 -22
- data/assets/stylesheets/bootstrap/_spinners.scss +38 -22
- data/assets/stylesheets/bootstrap/_tables.scss +40 -24
- data/assets/stylesheets/bootstrap/_toasts.scss +38 -16
- data/assets/stylesheets/bootstrap/_tooltip.scss +60 -56
- data/assets/stylesheets/bootstrap/_type.scss +3 -1
- data/assets/stylesheets/bootstrap/_utilities.scss +209 -33
- data/assets/stylesheets/bootstrap/_variables-dark.scss +102 -0
- data/assets/stylesheets/bootstrap/_variables.scss +415 -303
- data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +39 -5
- data/assets/stylesheets/bootstrap/forms/_form-check.scss +51 -14
- data/assets/stylesheets/bootstrap/forms/_form-control.scss +36 -41
- data/assets/stylesheets/bootstrap/forms/_form-range.scss +3 -3
- data/assets/stylesheets/bootstrap/forms/_form-select.scss +12 -4
- data/assets/stylesheets/bootstrap/forms/_input-group.scss +20 -9
- data/assets/stylesheets/bootstrap/helpers/_color-bg.scss +7 -0
- data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +20 -2
- data/assets/stylesheets/bootstrap/helpers/_focus-ring.scss +5 -0
- data/assets/stylesheets/bootstrap/helpers/_icon-link.scss +25 -0
- data/assets/stylesheets/bootstrap/helpers/_position.scss +7 -1
- data/assets/stylesheets/bootstrap/helpers/_ratio.scss +2 -2
- data/assets/stylesheets/bootstrap/helpers/_vr.scss +2 -2
- data/assets/stylesheets/bootstrap/mixins/_alert.scss +11 -4
- data/assets/stylesheets/bootstrap/mixins/_banner.scss +7 -0
- data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +8 -8
- data/assets/stylesheets/bootstrap/mixins/_buttons.scss +32 -95
- data/assets/stylesheets/bootstrap/mixins/_caret.scss +30 -25
- data/assets/stylesheets/bootstrap/mixins/_color-mode.scss +21 -0
- data/assets/stylesheets/bootstrap/mixins/_container.scss +4 -2
- data/assets/stylesheets/bootstrap/mixins/_forms.scss +38 -19
- data/assets/stylesheets/bootstrap/mixins/_gradients.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +15 -15
- data/assets/stylesheets/bootstrap/mixins/_list-group.scss +2 -0
- data/assets/stylesheets/bootstrap/mixins/_pagination.scss +4 -25
- data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +12 -9
- data/assets/stylesheets/bootstrap/mixins/_utilities.scss +14 -6
- data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +6 -2
- data/assets/stylesheets/bootstrap/vendor/_rfs.scss +23 -29
- data/bootstrap.gemspec +3 -3
- data/lib/bootstrap/engine.rb +17 -2
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +10 -5
- data/tasks/updater/network.rb +2 -2
- data/tasks/updater/scss.rb +2 -2
- data/tasks/updater.rb +2 -2
- data/test/dummy_rails/config/application.rb +0 -2
- data/test/dummy_rails/public/favicon.ico +0 -0
- data/test/gemfiles/rails_4_2.gemfile +2 -1
- data/test/gemfiles/rails_5_0.gemfile +1 -2
- data/test/gemfiles/rails_5_1.gemfile +1 -2
- data/test/gemfiles/rails_5_2.gemfile +7 -0
- data/test/gemfiles/rails_6_0.gemfile +1 -1
- data/test/gemfiles/rails_6_1.gemfile +1 -1
- data/test/gemfiles/rails_7_0_dartsass.gemfile +7 -0
- data/test/gemfiles/rails_7_0_sassc.gemfile +7 -0
- data/test/rails_test.rb +0 -5
- data/test/test_helper.rb +3 -2
- metadata +49 -29
- data/.travis.yml +0 -32
- data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +0 -18
|
@@ -1,202 +1,24 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Bootstrap toast.js v5.
|
|
3
|
-
* Copyright 2011-
|
|
2
|
+
* Bootstrap toast.js v5.3.5 (https://getbootstrap.com/)
|
|
3
|
+
* Copyright 2011-2025 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('./dom/event-handler.js'), require('./
|
|
8
|
-
typeof define === 'function' && define.amd ? define(['./dom/event-handler', './
|
|
9
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Toast = factory(global.EventHandler, global.
|
|
10
|
-
})(this, (function (EventHandler,
|
|
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 Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
|
|
16
|
-
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* --------------------------------------------------------------------------
|
|
20
|
-
* Bootstrap (v5.1.3): util/index.js
|
|
21
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
22
|
-
* --------------------------------------------------------------------------
|
|
23
|
-
*/
|
|
24
|
-
|
|
25
|
-
const toType = obj => {
|
|
26
|
-
if (obj === null || obj === undefined) {
|
|
27
|
-
return `${obj}`;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
const getSelector = element => {
|
|
34
|
-
let selector = element.getAttribute('data-bs-target');
|
|
35
|
-
|
|
36
|
-
if (!selector || selector === '#') {
|
|
37
|
-
let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
|
|
38
|
-
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
|
|
39
|
-
// `document.querySelector` will rightfully complain it is invalid.
|
|
40
|
-
// See https://github.com/twbs/bootstrap/issues/32273
|
|
41
|
-
|
|
42
|
-
if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
|
|
43
|
-
return null;
|
|
44
|
-
} // Just in case some CMS puts out a full URL with the anchor appended
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
|
|
48
|
-
hrefAttr = `#${hrefAttr.split('#')[1]}`;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
return selector;
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
const getElementFromSelector = element => {
|
|
58
|
-
const selector = getSelector(element);
|
|
59
|
-
return selector ? document.querySelector(selector) : null;
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
const isElement = obj => {
|
|
63
|
-
if (!obj || typeof obj !== 'object') {
|
|
64
|
-
return false;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
if (typeof obj.jquery !== 'undefined') {
|
|
68
|
-
obj = obj[0];
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
return typeof obj.nodeType !== 'undefined';
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
const typeCheckConfig = (componentName, config, configTypes) => {
|
|
75
|
-
Object.keys(configTypes).forEach(property => {
|
|
76
|
-
const expectedTypes = configTypes[property];
|
|
77
|
-
const value = config[property];
|
|
78
|
-
const valueType = value && isElement(value) ? 'element' : toType(value);
|
|
79
|
-
|
|
80
|
-
if (!new RegExp(expectedTypes).test(valueType)) {
|
|
81
|
-
throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
const isDisabled = element => {
|
|
87
|
-
if (!element || element.nodeType !== Node.ELEMENT_NODE) {
|
|
88
|
-
return true;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
if (element.classList.contains('disabled')) {
|
|
92
|
-
return true;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
if (typeof element.disabled !== 'undefined') {
|
|
96
|
-
return element.disabled;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
|
|
100
|
-
};
|
|
101
|
-
/**
|
|
102
|
-
* Trick to restart an element's animation
|
|
103
|
-
*
|
|
104
|
-
* @param {HTMLElement} element
|
|
105
|
-
* @return void
|
|
106
|
-
*
|
|
107
|
-
* @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
|
|
108
|
-
*/
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
const reflow = element => {
|
|
112
|
-
// eslint-disable-next-line no-unused-expressions
|
|
113
|
-
element.offsetHeight;
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
const getjQuery = () => {
|
|
117
|
-
const {
|
|
118
|
-
jQuery
|
|
119
|
-
} = window;
|
|
120
|
-
|
|
121
|
-
if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
|
|
122
|
-
return jQuery;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
return null;
|
|
126
|
-
};
|
|
127
|
-
|
|
128
|
-
const DOMContentLoadedCallbacks = [];
|
|
129
|
-
|
|
130
|
-
const onDOMContentLoaded = callback => {
|
|
131
|
-
if (document.readyState === 'loading') {
|
|
132
|
-
// add listener on the first call when the document is in loading state
|
|
133
|
-
if (!DOMContentLoadedCallbacks.length) {
|
|
134
|
-
document.addEventListener('DOMContentLoaded', () => {
|
|
135
|
-
DOMContentLoadedCallbacks.forEach(callback => callback());
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
DOMContentLoadedCallbacks.push(callback);
|
|
140
|
-
} else {
|
|
141
|
-
callback();
|
|
142
|
-
}
|
|
143
|
-
};
|
|
144
|
-
|
|
145
|
-
const defineJQueryPlugin = plugin => {
|
|
146
|
-
onDOMContentLoaded(() => {
|
|
147
|
-
const $ = getjQuery();
|
|
148
|
-
/* istanbul ignore if */
|
|
149
|
-
|
|
150
|
-
if ($) {
|
|
151
|
-
const name = plugin.NAME;
|
|
152
|
-
const JQUERY_NO_CONFLICT = $.fn[name];
|
|
153
|
-
$.fn[name] = plugin.jQueryInterface;
|
|
154
|
-
$.fn[name].Constructor = plugin;
|
|
155
|
-
|
|
156
|
-
$.fn[name].noConflict = () => {
|
|
157
|
-
$.fn[name] = JQUERY_NO_CONFLICT;
|
|
158
|
-
return plugin.jQueryInterface;
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
});
|
|
162
|
-
};
|
|
7
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./base-component.js'), require('./dom/event-handler.js'), require('./util/component-functions.js'), require('./util/index.js')) :
|
|
8
|
+
typeof define === 'function' && define.amd ? define(['./base-component', './dom/event-handler', './util/component-functions', './util/index'], factory) :
|
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Toast = factory(global.BaseComponent, global.EventHandler, global.ComponentFunctions, global.Index));
|
|
10
|
+
})(this, (function (BaseComponent, EventHandler, componentFunctions_js, index_js) { 'use strict';
|
|
163
11
|
|
|
164
12
|
/**
|
|
165
13
|
* --------------------------------------------------------------------------
|
|
166
|
-
* Bootstrap
|
|
14
|
+
* Bootstrap toast.js
|
|
167
15
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
168
16
|
* --------------------------------------------------------------------------
|
|
169
17
|
*/
|
|
170
18
|
|
|
171
|
-
const enableDismissTrigger = (component, method = 'hide') => {
|
|
172
|
-
const clickEvent = `click.dismiss${component.EVENT_KEY}`;
|
|
173
|
-
const name = component.NAME;
|
|
174
|
-
EventHandler__default.default.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) {
|
|
175
|
-
if (['A', 'AREA'].includes(this.tagName)) {
|
|
176
|
-
event.preventDefault();
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
if (isDisabled(this)) {
|
|
180
|
-
return;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
const target = getElementFromSelector(this) || this.closest(`.${name}`);
|
|
184
|
-
const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
|
|
185
|
-
|
|
186
|
-
instance[method]();
|
|
187
|
-
});
|
|
188
|
-
};
|
|
189
19
|
|
|
190
20
|
/**
|
|
191
|
-
* --------------------------------------------------------------------------
|
|
192
|
-
* Bootstrap (v5.1.3): toast.js
|
|
193
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
194
|
-
* --------------------------------------------------------------------------
|
|
195
|
-
*/
|
|
196
|
-
/**
|
|
197
|
-
* ------------------------------------------------------------------------
|
|
198
21
|
* Constants
|
|
199
|
-
* ------------------------------------------------------------------------
|
|
200
22
|
*/
|
|
201
23
|
|
|
202
24
|
const NAME = 'toast';
|
|
@@ -212,7 +34,6 @@
|
|
|
212
34
|
const EVENT_SHOWN = `shown${EVENT_KEY}`;
|
|
213
35
|
const CLASS_NAME_FADE = 'fade';
|
|
214
36
|
const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility
|
|
215
|
-
|
|
216
37
|
const CLASS_NAME_SHOW = 'show';
|
|
217
38
|
const CLASS_NAME_SHOWING = 'showing';
|
|
218
39
|
const DefaultType = {
|
|
@@ -225,197 +46,152 @@
|
|
|
225
46
|
autohide: true,
|
|
226
47
|
delay: 5000
|
|
227
48
|
};
|
|
49
|
+
|
|
228
50
|
/**
|
|
229
|
-
*
|
|
230
|
-
* Class Definition
|
|
231
|
-
* ------------------------------------------------------------------------
|
|
51
|
+
* Class definition
|
|
232
52
|
*/
|
|
233
53
|
|
|
234
|
-
class Toast extends
|
|
54
|
+
class Toast extends BaseComponent {
|
|
235
55
|
constructor(element, config) {
|
|
236
|
-
super(element);
|
|
237
|
-
this._config = this._getConfig(config);
|
|
56
|
+
super(element, config);
|
|
238
57
|
this._timeout = null;
|
|
239
58
|
this._hasMouseInteraction = false;
|
|
240
59
|
this._hasKeyboardInteraction = false;
|
|
241
|
-
|
|
242
60
|
this._setListeners();
|
|
243
|
-
} // Getters
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
static get DefaultType() {
|
|
247
|
-
return DefaultType;
|
|
248
61
|
}
|
|
249
62
|
|
|
63
|
+
// Getters
|
|
250
64
|
static get Default() {
|
|
251
65
|
return Default;
|
|
252
66
|
}
|
|
253
|
-
|
|
67
|
+
static get DefaultType() {
|
|
68
|
+
return DefaultType;
|
|
69
|
+
}
|
|
254
70
|
static get NAME() {
|
|
255
71
|
return NAME;
|
|
256
|
-
}
|
|
257
|
-
|
|
72
|
+
}
|
|
258
73
|
|
|
74
|
+
// Public
|
|
259
75
|
show() {
|
|
260
|
-
const showEvent =
|
|
261
|
-
|
|
76
|
+
const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);
|
|
262
77
|
if (showEvent.defaultPrevented) {
|
|
263
78
|
return;
|
|
264
79
|
}
|
|
265
|
-
|
|
266
80
|
this._clearTimeout();
|
|
267
|
-
|
|
268
81
|
if (this._config.animation) {
|
|
269
82
|
this._element.classList.add(CLASS_NAME_FADE);
|
|
270
83
|
}
|
|
271
|
-
|
|
272
84
|
const complete = () => {
|
|
273
85
|
this._element.classList.remove(CLASS_NAME_SHOWING);
|
|
274
|
-
|
|
275
|
-
EventHandler__default.default.trigger(this._element, EVENT_SHOWN);
|
|
276
|
-
|
|
86
|
+
EventHandler.trigger(this._element, EVENT_SHOWN);
|
|
277
87
|
this._maybeScheduleHide();
|
|
278
88
|
};
|
|
279
|
-
|
|
280
89
|
this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
reflow(this._element);
|
|
284
|
-
|
|
285
|
-
this._element.classList.add(CLASS_NAME_SHOW);
|
|
286
|
-
|
|
287
|
-
this._element.classList.add(CLASS_NAME_SHOWING);
|
|
288
|
-
|
|
90
|
+
index_js.reflow(this._element);
|
|
91
|
+
this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);
|
|
289
92
|
this._queueCallback(complete, this._element, this._config.animation);
|
|
290
93
|
}
|
|
291
|
-
|
|
292
94
|
hide() {
|
|
293
|
-
if (!this.
|
|
95
|
+
if (!this.isShown()) {
|
|
294
96
|
return;
|
|
295
97
|
}
|
|
296
|
-
|
|
297
|
-
const hideEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE);
|
|
298
|
-
|
|
98
|
+
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
|
|
299
99
|
if (hideEvent.defaultPrevented) {
|
|
300
100
|
return;
|
|
301
101
|
}
|
|
302
|
-
|
|
303
102
|
const complete = () => {
|
|
304
103
|
this._element.classList.add(CLASS_NAME_HIDE); // @deprecated
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
this._element.classList.remove(CLASS_NAME_SHOWING);
|
|
308
|
-
|
|
309
|
-
this._element.classList.remove(CLASS_NAME_SHOW);
|
|
310
|
-
|
|
311
|
-
EventHandler__default.default.trigger(this._element, EVENT_HIDDEN);
|
|
104
|
+
this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);
|
|
105
|
+
EventHandler.trigger(this._element, EVENT_HIDDEN);
|
|
312
106
|
};
|
|
313
|
-
|
|
314
107
|
this._element.classList.add(CLASS_NAME_SHOWING);
|
|
315
|
-
|
|
316
108
|
this._queueCallback(complete, this._element, this._config.animation);
|
|
317
109
|
}
|
|
318
|
-
|
|
319
110
|
dispose() {
|
|
320
111
|
this._clearTimeout();
|
|
321
|
-
|
|
322
|
-
if (this._element.classList.contains(CLASS_NAME_SHOW)) {
|
|
112
|
+
if (this.isShown()) {
|
|
323
113
|
this._element.classList.remove(CLASS_NAME_SHOW);
|
|
324
114
|
}
|
|
325
|
-
|
|
326
115
|
super.dispose();
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
_getConfig(config) {
|
|
331
|
-
config = { ...Default,
|
|
332
|
-
...Manipulator__default.default.getDataAttributes(this._element),
|
|
333
|
-
...(typeof config === 'object' && config ? config : {})
|
|
334
|
-
};
|
|
335
|
-
typeCheckConfig(NAME, config, this.constructor.DefaultType);
|
|
336
|
-
return config;
|
|
116
|
+
}
|
|
117
|
+
isShown() {
|
|
118
|
+
return this._element.classList.contains(CLASS_NAME_SHOW);
|
|
337
119
|
}
|
|
338
120
|
|
|
121
|
+
// Private
|
|
122
|
+
|
|
339
123
|
_maybeScheduleHide() {
|
|
340
124
|
if (!this._config.autohide) {
|
|
341
125
|
return;
|
|
342
126
|
}
|
|
343
|
-
|
|
344
127
|
if (this._hasMouseInteraction || this._hasKeyboardInteraction) {
|
|
345
128
|
return;
|
|
346
129
|
}
|
|
347
|
-
|
|
348
130
|
this._timeout = setTimeout(() => {
|
|
349
131
|
this.hide();
|
|
350
132
|
}, this._config.delay);
|
|
351
133
|
}
|
|
352
|
-
|
|
353
134
|
_onInteraction(event, isInteracting) {
|
|
354
135
|
switch (event.type) {
|
|
355
136
|
case 'mouseover':
|
|
356
137
|
case 'mouseout':
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
138
|
+
{
|
|
139
|
+
this._hasMouseInteraction = isInteracting;
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
360
142
|
case 'focusin':
|
|
361
143
|
case 'focusout':
|
|
362
|
-
|
|
363
|
-
|
|
144
|
+
{
|
|
145
|
+
this._hasKeyboardInteraction = isInteracting;
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
364
148
|
}
|
|
365
|
-
|
|
366
149
|
if (isInteracting) {
|
|
367
150
|
this._clearTimeout();
|
|
368
|
-
|
|
369
151
|
return;
|
|
370
152
|
}
|
|
371
|
-
|
|
372
153
|
const nextElement = event.relatedTarget;
|
|
373
|
-
|
|
374
154
|
if (this._element === nextElement || this._element.contains(nextElement)) {
|
|
375
155
|
return;
|
|
376
156
|
}
|
|
377
|
-
|
|
378
157
|
this._maybeScheduleHide();
|
|
379
158
|
}
|
|
380
|
-
|
|
381
159
|
_setListeners() {
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
160
|
+
EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
|
|
161
|
+
EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
|
|
162
|
+
EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
|
|
163
|
+
EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));
|
|
386
164
|
}
|
|
387
|
-
|
|
388
165
|
_clearTimeout() {
|
|
389
166
|
clearTimeout(this._timeout);
|
|
390
167
|
this._timeout = null;
|
|
391
|
-
}
|
|
392
|
-
|
|
168
|
+
}
|
|
393
169
|
|
|
170
|
+
// Static
|
|
394
171
|
static jQueryInterface(config) {
|
|
395
172
|
return this.each(function () {
|
|
396
173
|
const data = Toast.getOrCreateInstance(this, config);
|
|
397
|
-
|
|
398
174
|
if (typeof config === 'string') {
|
|
399
175
|
if (typeof data[config] === 'undefined') {
|
|
400
176
|
throw new TypeError(`No method named "${config}"`);
|
|
401
177
|
}
|
|
402
|
-
|
|
403
178
|
data[config](this);
|
|
404
179
|
}
|
|
405
180
|
});
|
|
406
181
|
}
|
|
407
|
-
|
|
408
182
|
}
|
|
409
183
|
|
|
410
|
-
enableDismissTrigger(Toast);
|
|
411
184
|
/**
|
|
412
|
-
*
|
|
185
|
+
* Data API implementation
|
|
186
|
+
*/
|
|
187
|
+
|
|
188
|
+
componentFunctions_js.enableDismissTrigger(Toast);
|
|
189
|
+
|
|
190
|
+
/**
|
|
413
191
|
* jQuery
|
|
414
|
-
* ------------------------------------------------------------------------
|
|
415
|
-
* add .Toast to jQuery only if jQuery is present
|
|
416
192
|
*/
|
|
417
193
|
|
|
418
|
-
defineJQueryPlugin(Toast);
|
|
194
|
+
index_js.defineJQueryPlugin(Toast);
|
|
419
195
|
|
|
420
196
|
return Toast;
|
|
421
197
|
|