bootstrap 4.4.1 → 5.0.1
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/.travis.yml +13 -2
- data/README.md +7 -4
- data/assets/javascripts/bootstrap-global-this-define.js +6 -0
- data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
- data/assets/javascripts/bootstrap-sprockets.js +15 -8
- data/assets/javascripts/bootstrap.js +3244 -2770
- data/assets/javascripts/bootstrap.min.js +4 -4
- data/assets/javascripts/bootstrap/alert.js +130 -124
- data/assets/javascripts/bootstrap/base-component.js +168 -0
- data/assets/javascripts/bootstrap/button.js +85 -179
- data/assets/javascripts/bootstrap/carousel.js +430 -405
- data/assets/javascripts/bootstrap/collapse.js +325 -264
- data/assets/javascripts/bootstrap/dom/data.js +68 -0
- data/assets/javascripts/bootstrap/dom/event-handler.js +315 -0
- data/assets/javascripts/bootstrap/dom/manipulator.js +88 -0
- data/assets/javascripts/bootstrap/dom/selector-engine.js +85 -0
- data/assets/javascripts/bootstrap/dropdown.js +464 -400
- data/assets/javascripts/bootstrap/modal.js +604 -464
- data/assets/javascripts/bootstrap/offcanvas.js +671 -0
- data/assets/javascripts/bootstrap/popover.js +119 -192
- data/assets/javascripts/bootstrap/scrollspy.js +250 -238
- data/assets/javascripts/bootstrap/tab.js +189 -151
- data/assets/javascripts/bootstrap/toast.js +215 -192
- data/assets/javascripts/bootstrap/tooltip.js +604 -544
- data/assets/stylesheets/_bootstrap-grid.scss +54 -18
- data/assets/stylesheets/_bootstrap-reboot.scss +7 -4
- data/assets/stylesheets/_bootstrap.scss +19 -11
- data/assets/stylesheets/bootstrap/_accordion.scss +118 -0
- data/assets/stylesheets/bootstrap/_alert.scss +15 -9
- data/assets/stylesheets/bootstrap/_badge.scss +2 -27
- data/assets/stylesheets/bootstrap/_breadcrumb.scss +4 -18
- data/assets/stylesheets/bootstrap/_button-group.scss +21 -45
- data/assets/stylesheets/bootstrap/_buttons.scss +27 -55
- data/assets/stylesheets/bootstrap/_card.scss +43 -106
- data/assets/stylesheets/bootstrap/_carousel.scss +65 -33
- data/assets/stylesheets/bootstrap/_close.scss +30 -31
- data/assets/stylesheets/bootstrap/_containers.scss +41 -0
- data/assets/stylesheets/bootstrap/_dropdown.scss +87 -38
- data/assets/stylesheets/bootstrap/_forms.scss +9 -338
- data/assets/stylesheets/bootstrap/_functions.scss +99 -28
- data/assets/stylesheets/bootstrap/_grid.scss +3 -50
- data/assets/stylesheets/bootstrap/_helpers.scss +7 -0
- data/assets/stylesheets/bootstrap/_list-group.scss +38 -22
- data/assets/stylesheets/bootstrap/_mixins.scss +8 -13
- data/assets/stylesheets/bootstrap/_modal.scss +45 -65
- data/assets/stylesheets/bootstrap/_nav.scss +28 -9
- data/assets/stylesheets/bootstrap/_navbar.scss +51 -69
- data/assets/stylesheets/bootstrap/_offcanvas.scss +77 -0
- data/assets/stylesheets/bootstrap/_pagination.scss +11 -20
- data/assets/stylesheets/bootstrap/_popover.scss +15 -27
- data/assets/stylesheets/bootstrap/_progress.scss +6 -4
- data/assets/stylesheets/bootstrap/_reboot.scss +339 -200
- data/assets/stylesheets/bootstrap/_root.scss +5 -9
- data/assets/stylesheets/bootstrap/_spinners.scss +21 -7
- data/assets/stylesheets/bootstrap/_tables.scss +80 -114
- data/assets/stylesheets/bootstrap/_toasts.scss +21 -14
- data/assets/stylesheets/bootstrap/_tooltip.scss +17 -17
- data/assets/stylesheets/bootstrap/_transitions.scss +2 -1
- data/assets/stylesheets/bootstrap/_type.scss +38 -59
- data/assets/stylesheets/bootstrap/_utilities.scss +594 -17
- data/assets/stylesheets/bootstrap/_variables.scss +810 -489
- data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +18 -0
- data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +61 -0
- data/assets/stylesheets/bootstrap/forms/_form-check.scss +152 -0
- data/assets/stylesheets/bootstrap/forms/_form-control.scss +219 -0
- data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
- data/assets/stylesheets/bootstrap/forms/_form-select.scss +67 -0
- data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
- data/assets/stylesheets/bootstrap/forms/_input-group.scss +121 -0
- data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
- data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
- data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
- data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +12 -0
- data/assets/stylesheets/bootstrap/helpers/_position.scss +30 -0
- data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
- data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
- data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
- data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
- data/assets/stylesheets/bootstrap/mixins/_alert.scss +3 -5
- data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +37 -22
- data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +7 -9
- data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +14 -10
- data/assets/stylesheets/bootstrap/mixins/_buttons.scss +75 -52
- data/assets/stylesheets/bootstrap/mixins/_caret.scss +10 -8
- data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
- data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
- data/assets/stylesheets/bootstrap/mixins/_container.scss +9 -0
- data/assets/stylesheets/bootstrap/mixins/_forms.scss +42 -75
- data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +90 -34
- data/assets/stylesheets/bootstrap/mixins/_image.scss +1 -21
- data/assets/stylesheets/bootstrap/mixins/_list-group.scss +5 -2
- data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_pagination.scss +17 -8
- data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +2 -2
- data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +21 -0
- data/assets/stylesheets/bootstrap/mixins/_transition.scss +18 -8
- data/assets/stylesheets/bootstrap/mixins/_utilities.scss +68 -0
- data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +29 -0
- data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
- data/assets/stylesheets/bootstrap/vendor/_rfs.scss +234 -126
- data/bootstrap.gemspec +1 -3
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +20 -5
- data/tasks/updater/network.rb +8 -2
- data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
- data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
- data/test/dummy_rails/app/views/pages/root.html +89 -0
- data/test/dummy_rails/config/application.rb +0 -3
- data/test/gemfiles/rails_6_0.gemfile +7 -0
- data/test/gemfiles/rails_6_1.gemfile +7 -0
- metadata +48 -73
- data/assets/javascripts/bootstrap/util.js +0 -188
- data/assets/stylesheets/bootstrap/_code.scss +0 -48
- data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -521
- data/assets/stylesheets/bootstrap/_input-group.scss +0 -191
- data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
- data/assets/stylesheets/bootstrap/_media.scss +0 -8
- data/assets/stylesheets/bootstrap/_print.scss +0 -141
- data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -22
- data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
- data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
- data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -71
- data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
- data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -11
- data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -34
- data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
- data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
- data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -17
- data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
- data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
- data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
- data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
- data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
- data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
- data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
- data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
- data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
- data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
- data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
- data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
- data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
- data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
- data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
- data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
- data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
- data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -13
- data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
|
@@ -1,159 +1,112 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Bootstrap button.js
|
|
3
|
-
* Copyright 2011-
|
|
4
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/
|
|
2
|
+
* Bootstrap button.js v5.0.1 (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
5
|
*/
|
|
6
6
|
(function (global, factory) {
|
|
7
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('
|
|
8
|
-
typeof define === 'function' && define.amd ? define(['
|
|
9
|
-
(global = global || self, global.Button = factory(global.
|
|
10
|
-
}(this, (function (
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
7
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/selector-engine.js'), require('./dom/data.js'), require('./dom/event-handler.js'), require('./base-component.js')) :
|
|
8
|
+
typeof define === 'function' && define.amd ? define(['./dom/selector-engine', './dom/data', './dom/event-handler', './base-component'], factory) :
|
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Button = factory(global.SelectorEngine, global.Data, global.EventHandler, global.Base));
|
|
10
|
+
}(this, (function (SelectorEngine, Data, EventHandler, BaseComponent) { 'use strict';
|
|
11
|
+
|
|
12
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
13
|
+
|
|
14
|
+
var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
|
|
15
|
+
var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
|
16
|
+
var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
|
17
|
+
|
|
18
|
+
const getjQuery = () => {
|
|
19
|
+
const {
|
|
20
|
+
jQuery
|
|
21
|
+
} = window;
|
|
22
|
+
|
|
23
|
+
if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
|
|
24
|
+
return jQuery;
|
|
21
25
|
}
|
|
22
|
-
}
|
|
23
26
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
return null;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
const onDOMContentLoaded = callback => {
|
|
31
|
+
if (document.readyState === 'loading') {
|
|
32
|
+
document.addEventListener('DOMContentLoaded', callback);
|
|
33
|
+
} else {
|
|
34
|
+
callback();
|
|
35
|
+
}
|
|
36
|
+
};
|
|
29
37
|
|
|
38
|
+
const defineJQueryPlugin = plugin => {
|
|
39
|
+
onDOMContentLoaded(() => {
|
|
40
|
+
const $ = getjQuery();
|
|
41
|
+
/* istanbul ignore if */
|
|
42
|
+
|
|
43
|
+
if ($) {
|
|
44
|
+
const name = plugin.NAME;
|
|
45
|
+
const JQUERY_NO_CONFLICT = $.fn[name];
|
|
46
|
+
$.fn[name] = plugin.jQueryInterface;
|
|
47
|
+
$.fn[name].Constructor = plugin;
|
|
48
|
+
|
|
49
|
+
$.fn[name].noConflict = () => {
|
|
50
|
+
$.fn[name] = JQUERY_NO_CONFLICT;
|
|
51
|
+
return plugin.jQueryInterface;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* --------------------------------------------------------------------------
|
|
59
|
+
* Bootstrap (v5.0.1): button.js
|
|
60
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
61
|
+
* --------------------------------------------------------------------------
|
|
62
|
+
*/
|
|
30
63
|
/**
|
|
31
64
|
* ------------------------------------------------------------------------
|
|
32
65
|
* Constants
|
|
33
66
|
* ------------------------------------------------------------------------
|
|
34
67
|
*/
|
|
35
68
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
ACTIVE: 'active',
|
|
44
|
-
BUTTON: 'btn',
|
|
45
|
-
FOCUS: 'focus'
|
|
46
|
-
};
|
|
47
|
-
var Selector = {
|
|
48
|
-
DATA_TOGGLE_CARROT: '[data-toggle^="button"]',
|
|
49
|
-
DATA_TOGGLES: '[data-toggle="buttons"]',
|
|
50
|
-
DATA_TOGGLE: '[data-toggle="button"]',
|
|
51
|
-
DATA_TOGGLES_BUTTONS: '[data-toggle="buttons"] .btn',
|
|
52
|
-
INPUT: 'input:not([type="hidden"])',
|
|
53
|
-
ACTIVE: '.active',
|
|
54
|
-
BUTTON: '.btn'
|
|
55
|
-
};
|
|
56
|
-
var Event = {
|
|
57
|
-
CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY,
|
|
58
|
-
FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY + DATA_API_KEY + " " + ("blur" + EVENT_KEY + DATA_API_KEY),
|
|
59
|
-
LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY
|
|
60
|
-
};
|
|
69
|
+
const NAME = 'button';
|
|
70
|
+
const DATA_KEY = 'bs.button';
|
|
71
|
+
const EVENT_KEY = `.${DATA_KEY}`;
|
|
72
|
+
const DATA_API_KEY = '.data-api';
|
|
73
|
+
const CLASS_NAME_ACTIVE = 'active';
|
|
74
|
+
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="button"]';
|
|
75
|
+
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
|
|
61
76
|
/**
|
|
62
77
|
* ------------------------------------------------------------------------
|
|
63
78
|
* Class Definition
|
|
64
79
|
* ------------------------------------------------------------------------
|
|
65
80
|
*/
|
|
66
81
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
} // Getters
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
var _proto = Button.prototype;
|
|
76
|
-
|
|
77
|
-
// Public
|
|
78
|
-
_proto.toggle = function toggle() {
|
|
79
|
-
var triggerChangeEvent = true;
|
|
80
|
-
var addAriaPressed = true;
|
|
81
|
-
var rootElement = $(this._element).closest(Selector.DATA_TOGGLES)[0];
|
|
82
|
-
|
|
83
|
-
if (rootElement) {
|
|
84
|
-
var input = this._element.querySelector(Selector.INPUT);
|
|
85
|
-
|
|
86
|
-
if (input) {
|
|
87
|
-
if (input.type === 'radio') {
|
|
88
|
-
if (input.checked && this._element.classList.contains(ClassName.ACTIVE)) {
|
|
89
|
-
triggerChangeEvent = false;
|
|
90
|
-
} else {
|
|
91
|
-
var activeElement = rootElement.querySelector(Selector.ACTIVE);
|
|
92
|
-
|
|
93
|
-
if (activeElement) {
|
|
94
|
-
$(activeElement).removeClass(ClassName.ACTIVE);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
} else if (input.type === 'checkbox') {
|
|
98
|
-
if (this._element.tagName === 'LABEL' && input.checked === this._element.classList.contains(ClassName.ACTIVE)) {
|
|
99
|
-
triggerChangeEvent = false;
|
|
100
|
-
}
|
|
101
|
-
} else {
|
|
102
|
-
// if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input
|
|
103
|
-
triggerChangeEvent = false;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
if (triggerChangeEvent) {
|
|
107
|
-
input.checked = !this._element.classList.contains(ClassName.ACTIVE);
|
|
108
|
-
$(input).trigger('change');
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
input.focus();
|
|
112
|
-
addAriaPressed = false;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {
|
|
117
|
-
if (addAriaPressed) {
|
|
118
|
-
this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName.ACTIVE));
|
|
119
|
-
}
|
|
82
|
+
class Button extends BaseComponent__default['default'] {
|
|
83
|
+
// Getters
|
|
84
|
+
static get NAME() {
|
|
85
|
+
return NAME;
|
|
86
|
+
} // Public
|
|
120
87
|
|
|
121
|
-
if (triggerChangeEvent) {
|
|
122
|
-
$(this._element).toggleClass(ClassName.ACTIVE);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
};
|
|
126
88
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
this._element
|
|
89
|
+
toggle() {
|
|
90
|
+
// Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
|
|
91
|
+
this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE));
|
|
130
92
|
} // Static
|
|
131
|
-
;
|
|
132
93
|
|
|
133
|
-
|
|
94
|
+
|
|
95
|
+
static jQueryInterface(config) {
|
|
134
96
|
return this.each(function () {
|
|
135
|
-
|
|
97
|
+
let data = Data__default['default'].get(this, DATA_KEY);
|
|
136
98
|
|
|
137
99
|
if (!data) {
|
|
138
100
|
data = new Button(this);
|
|
139
|
-
$(this).data(DATA_KEY, data);
|
|
140
101
|
}
|
|
141
102
|
|
|
142
103
|
if (config === 'toggle') {
|
|
143
104
|
data[config]();
|
|
144
105
|
}
|
|
145
106
|
});
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
_createClass(Button, null, [{
|
|
149
|
-
key: "VERSION",
|
|
150
|
-
get: function get() {
|
|
151
|
-
return VERSION;
|
|
152
|
-
}
|
|
153
|
-
}]);
|
|
107
|
+
}
|
|
154
108
|
|
|
155
|
-
|
|
156
|
-
}();
|
|
109
|
+
}
|
|
157
110
|
/**
|
|
158
111
|
* ------------------------------------------------------------------------
|
|
159
112
|
* Data Api implementation
|
|
@@ -161,72 +114,25 @@
|
|
|
161
114
|
*/
|
|
162
115
|
|
|
163
116
|
|
|
164
|
-
|
|
165
|
-
|
|
117
|
+
EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {
|
|
118
|
+
event.preventDefault();
|
|
119
|
+
const button = event.target.closest(SELECTOR_DATA_TOGGLE);
|
|
120
|
+
let data = Data__default['default'].get(button, DATA_KEY);
|
|
166
121
|
|
|
167
|
-
if (
|
|
168
|
-
|
|
122
|
+
if (!data) {
|
|
123
|
+
data = new Button(button);
|
|
169
124
|
}
|
|
170
125
|
|
|
171
|
-
|
|
172
|
-
event.preventDefault(); // work around Firefox bug #1540995
|
|
173
|
-
} else {
|
|
174
|
-
var inputBtn = button.querySelector(Selector.INPUT);
|
|
175
|
-
|
|
176
|
-
if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {
|
|
177
|
-
event.preventDefault(); // work around Firefox bug #1540995
|
|
178
|
-
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
Button._jQueryInterface.call($(button), 'toggle');
|
|
183
|
-
}
|
|
184
|
-
}).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
|
|
185
|
-
var button = $(event.target).closest(Selector.BUTTON)[0];
|
|
186
|
-
$(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type));
|
|
187
|
-
});
|
|
188
|
-
$(window).on(Event.LOAD_DATA_API, function () {
|
|
189
|
-
// ensure correct active class is set to match the controls' actual values/states
|
|
190
|
-
// find all checkboxes/readio buttons inside data-toggle groups
|
|
191
|
-
var buttons = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLES_BUTTONS));
|
|
192
|
-
|
|
193
|
-
for (var i = 0, len = buttons.length; i < len; i++) {
|
|
194
|
-
var button = buttons[i];
|
|
195
|
-
var input = button.querySelector(Selector.INPUT);
|
|
196
|
-
|
|
197
|
-
if (input.checked || input.hasAttribute('checked')) {
|
|
198
|
-
button.classList.add(ClassName.ACTIVE);
|
|
199
|
-
} else {
|
|
200
|
-
button.classList.remove(ClassName.ACTIVE);
|
|
201
|
-
}
|
|
202
|
-
} // find all button toggles
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
buttons = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE));
|
|
206
|
-
|
|
207
|
-
for (var _i = 0, _len = buttons.length; _i < _len; _i++) {
|
|
208
|
-
var _button = buttons[_i];
|
|
209
|
-
|
|
210
|
-
if (_button.getAttribute('aria-pressed') === 'true') {
|
|
211
|
-
_button.classList.add(ClassName.ACTIVE);
|
|
212
|
-
} else {
|
|
213
|
-
_button.classList.remove(ClassName.ACTIVE);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
126
|
+
data.toggle();
|
|
216
127
|
});
|
|
217
128
|
/**
|
|
218
129
|
* ------------------------------------------------------------------------
|
|
219
130
|
* jQuery
|
|
220
131
|
* ------------------------------------------------------------------------
|
|
132
|
+
* add .Button to jQuery only if jQuery is present
|
|
221
133
|
*/
|
|
222
134
|
|
|
223
|
-
|
|
224
|
-
$.fn[NAME].Constructor = Button;
|
|
225
|
-
|
|
226
|
-
$.fn[NAME].noConflict = function () {
|
|
227
|
-
$.fn[NAME] = JQUERY_NO_CONFLICT;
|
|
228
|
-
return Button._jQueryInterface;
|
|
229
|
-
};
|
|
135
|
+
defineJQueryPlugin(Button);
|
|
230
136
|
|
|
231
137
|
return Button;
|
|
232
138
|
|
|
@@ -1,102 +1,168 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Bootstrap carousel.js
|
|
3
|
-
* Copyright 2011-
|
|
4
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/
|
|
2
|
+
* Bootstrap carousel.js v5.0.1 (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
5
|
*/
|
|
6
6
|
(function (global, factory) {
|
|
7
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('
|
|
8
|
-
typeof define === 'function' && define.amd ? define(['
|
|
9
|
-
(global = global || self, global.Carousel = factory(global.
|
|
10
|
-
}(this, (function (
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
7
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/selector-engine.js'), require('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./base-component.js')) :
|
|
8
|
+
typeof define === 'function' && define.amd ? define(['./dom/selector-engine', './dom/data', './dom/event-handler', './dom/manipulator', './base-component'], factory) :
|
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Carousel = factory(global.SelectorEngine, global.Data, global.EventHandler, global.Manipulator, global.Base));
|
|
10
|
+
}(this, (function (SelectorEngine, Data, EventHandler, Manipulator, BaseComponent) { 'use strict';
|
|
11
|
+
|
|
12
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
13
|
+
|
|
14
|
+
var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
|
15
|
+
var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
|
|
16
|
+
var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
|
17
|
+
var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
|
|
18
|
+
var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
|
19
|
+
|
|
20
|
+
const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
|
21
|
+
|
|
22
|
+
const toType = obj => {
|
|
23
|
+
if (obj === null || obj === undefined) {
|
|
24
|
+
return `${obj}`;
|
|
22
25
|
}
|
|
23
|
-
}
|
|
24
26
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
28
|
-
return Constructor;
|
|
29
|
-
}
|
|
27
|
+
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
|
28
|
+
};
|
|
30
29
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
30
|
+
const getSelector = element => {
|
|
31
|
+
let selector = element.getAttribute('data-bs-target');
|
|
32
|
+
|
|
33
|
+
if (!selector || selector === '#') {
|
|
34
|
+
let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
|
|
35
|
+
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
|
|
36
|
+
// `document.querySelector` will rightfully complain it is invalid.
|
|
37
|
+
// See https://github.com/twbs/bootstrap/issues/32273
|
|
38
|
+
|
|
39
|
+
if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
|
|
40
|
+
return null;
|
|
41
|
+
} // Just in case some CMS puts out a full URL with the anchor appended
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
|
|
45
|
+
hrefAttr = `#${hrefAttr.split('#')[1]}`;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
|
|
41
49
|
}
|
|
42
50
|
|
|
43
|
-
return
|
|
44
|
-
}
|
|
51
|
+
return selector;
|
|
52
|
+
};
|
|
45
53
|
|
|
46
|
-
|
|
47
|
-
|
|
54
|
+
const getElementFromSelector = element => {
|
|
55
|
+
const selector = getSelector(element);
|
|
56
|
+
return selector ? document.querySelector(selector) : null;
|
|
57
|
+
};
|
|
48
58
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
59
|
+
const triggerTransitionEnd = element => {
|
|
60
|
+
element.dispatchEvent(new Event(TRANSITION_END));
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
const isElement = obj => {
|
|
64
|
+
if (!obj || typeof obj !== 'object') {
|
|
65
|
+
return false;
|
|
55
66
|
}
|
|
56
67
|
|
|
57
|
-
|
|
58
|
-
|
|
68
|
+
if (typeof obj.jquery !== 'undefined') {
|
|
69
|
+
obj = obj[0];
|
|
70
|
+
}
|
|
59
71
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
var source = arguments[i] != null ? arguments[i] : {};
|
|
72
|
+
return typeof obj.nodeType !== 'undefined';
|
|
73
|
+
};
|
|
63
74
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
73
|
-
});
|
|
75
|
+
const typeCheckConfig = (componentName, config, configTypes) => {
|
|
76
|
+
Object.keys(configTypes).forEach(property => {
|
|
77
|
+
const expectedTypes = configTypes[property];
|
|
78
|
+
const value = config[property];
|
|
79
|
+
const valueType = value && isElement(value) ? 'element' : toType(value);
|
|
80
|
+
|
|
81
|
+
if (!new RegExp(expectedTypes).test(valueType)) {
|
|
82
|
+
throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
|
|
74
83
|
}
|
|
84
|
+
});
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const isVisible = element => {
|
|
88
|
+
if (!element) {
|
|
89
|
+
return false;
|
|
75
90
|
}
|
|
76
91
|
|
|
77
|
-
|
|
78
|
-
|
|
92
|
+
if (element.style && element.parentNode && element.parentNode.style) {
|
|
93
|
+
const elementStyle = getComputedStyle(element);
|
|
94
|
+
const parentNodeStyle = getComputedStyle(element.parentNode);
|
|
95
|
+
return elementStyle.display !== 'none' && parentNodeStyle.display !== 'none' && elementStyle.visibility !== 'hidden';
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return false;
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
const reflow = element => element.offsetHeight;
|
|
102
|
+
|
|
103
|
+
const getjQuery = () => {
|
|
104
|
+
const {
|
|
105
|
+
jQuery
|
|
106
|
+
} = window;
|
|
107
|
+
|
|
108
|
+
if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
|
|
109
|
+
return jQuery;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return null;
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
const onDOMContentLoaded = callback => {
|
|
116
|
+
if (document.readyState === 'loading') {
|
|
117
|
+
document.addEventListener('DOMContentLoaded', callback);
|
|
118
|
+
} else {
|
|
119
|
+
callback();
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
const isRTL = () => document.documentElement.dir === 'rtl';
|
|
124
|
+
|
|
125
|
+
const defineJQueryPlugin = plugin => {
|
|
126
|
+
onDOMContentLoaded(() => {
|
|
127
|
+
const $ = getjQuery();
|
|
128
|
+
/* istanbul ignore if */
|
|
129
|
+
|
|
130
|
+
if ($) {
|
|
131
|
+
const name = plugin.NAME;
|
|
132
|
+
const JQUERY_NO_CONFLICT = $.fn[name];
|
|
133
|
+
$.fn[name] = plugin.jQueryInterface;
|
|
134
|
+
$.fn[name].Constructor = plugin;
|
|
135
|
+
|
|
136
|
+
$.fn[name].noConflict = () => {
|
|
137
|
+
$.fn[name] = JQUERY_NO_CONFLICT;
|
|
138
|
+
return plugin.jQueryInterface;
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
};
|
|
79
143
|
|
|
144
|
+
/**
|
|
145
|
+
* --------------------------------------------------------------------------
|
|
146
|
+
* Bootstrap (v5.0.1): carousel.js
|
|
147
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
148
|
+
* --------------------------------------------------------------------------
|
|
149
|
+
*/
|
|
80
150
|
/**
|
|
81
151
|
* ------------------------------------------------------------------------
|
|
82
152
|
* Constants
|
|
83
153
|
* ------------------------------------------------------------------------
|
|
84
154
|
*/
|
|
85
155
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key
|
|
156
|
+
const NAME = 'carousel';
|
|
157
|
+
const DATA_KEY = 'bs.carousel';
|
|
158
|
+
const EVENT_KEY = `.${DATA_KEY}`;
|
|
159
|
+
const DATA_API_KEY = '.data-api';
|
|
160
|
+
const ARROW_LEFT_KEY = 'ArrowLeft';
|
|
161
|
+
const ARROW_RIGHT_KEY = 'ArrowRight';
|
|
162
|
+
const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
|
|
95
163
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
var SWIPE_THRESHOLD = 40;
|
|
99
|
-
var Default = {
|
|
164
|
+
const SWIPE_THRESHOLD = 40;
|
|
165
|
+
const Default = {
|
|
100
166
|
interval: 5000,
|
|
101
167
|
keyboard: true,
|
|
102
168
|
slide: false,
|
|
@@ -104,7 +170,7 @@
|
|
|
104
170
|
wrap: true,
|
|
105
171
|
touch: true
|
|
106
172
|
};
|
|
107
|
-
|
|
173
|
+
const DefaultType = {
|
|
108
174
|
interval: '(number|boolean)',
|
|
109
175
|
keyboard: 'boolean',
|
|
110
176
|
slide: '(boolean|string)',
|
|
@@ -112,62 +178,51 @@
|
|
|
112
178
|
wrap: 'boolean',
|
|
113
179
|
touch: 'boolean'
|
|
114
180
|
};
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
ITEM_IMG: '.carousel-item img',
|
|
152
|
-
NEXT_PREV: '.carousel-item-next, .carousel-item-prev',
|
|
153
|
-
INDICATORS: '.carousel-indicators',
|
|
154
|
-
DATA_SLIDE: '[data-slide], [data-slide-to]',
|
|
155
|
-
DATA_RIDE: '[data-ride="carousel"]'
|
|
156
|
-
};
|
|
157
|
-
var PointerType = {
|
|
158
|
-
TOUCH: 'touch',
|
|
159
|
-
PEN: 'pen'
|
|
160
|
-
};
|
|
181
|
+
const ORDER_NEXT = 'next';
|
|
182
|
+
const ORDER_PREV = 'prev';
|
|
183
|
+
const DIRECTION_LEFT = 'left';
|
|
184
|
+
const DIRECTION_RIGHT = 'right';
|
|
185
|
+
const EVENT_SLIDE = `slide${EVENT_KEY}`;
|
|
186
|
+
const EVENT_SLID = `slid${EVENT_KEY}`;
|
|
187
|
+
const EVENT_KEYDOWN = `keydown${EVENT_KEY}`;
|
|
188
|
+
const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`;
|
|
189
|
+
const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`;
|
|
190
|
+
const EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`;
|
|
191
|
+
const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`;
|
|
192
|
+
const EVENT_TOUCHEND = `touchend${EVENT_KEY}`;
|
|
193
|
+
const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`;
|
|
194
|
+
const EVENT_POINTERUP = `pointerup${EVENT_KEY}`;
|
|
195
|
+
const EVENT_DRAG_START = `dragstart${EVENT_KEY}`;
|
|
196
|
+
const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`;
|
|
197
|
+
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
|
|
198
|
+
const CLASS_NAME_CAROUSEL = 'carousel';
|
|
199
|
+
const CLASS_NAME_ACTIVE = 'active';
|
|
200
|
+
const CLASS_NAME_SLIDE = 'slide';
|
|
201
|
+
const CLASS_NAME_END = 'carousel-item-end';
|
|
202
|
+
const CLASS_NAME_START = 'carousel-item-start';
|
|
203
|
+
const CLASS_NAME_NEXT = 'carousel-item-next';
|
|
204
|
+
const CLASS_NAME_PREV = 'carousel-item-prev';
|
|
205
|
+
const CLASS_NAME_POINTER_EVENT = 'pointer-event';
|
|
206
|
+
const SELECTOR_ACTIVE = '.active';
|
|
207
|
+
const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';
|
|
208
|
+
const SELECTOR_ITEM = '.carousel-item';
|
|
209
|
+
const SELECTOR_ITEM_IMG = '.carousel-item img';
|
|
210
|
+
const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';
|
|
211
|
+
const SELECTOR_INDICATORS = '.carousel-indicators';
|
|
212
|
+
const SELECTOR_INDICATOR = '[data-bs-target]';
|
|
213
|
+
const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';
|
|
214
|
+
const SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]';
|
|
215
|
+
const POINTER_TYPE_TOUCH = 'touch';
|
|
216
|
+
const POINTER_TYPE_PEN = 'pen';
|
|
161
217
|
/**
|
|
162
218
|
* ------------------------------------------------------------------------
|
|
163
219
|
* Class Definition
|
|
164
220
|
* ------------------------------------------------------------------------
|
|
165
221
|
*/
|
|
166
222
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
function Carousel(element, config) {
|
|
223
|
+
class Carousel extends BaseComponent__default['default'] {
|
|
224
|
+
constructor(element, config) {
|
|
225
|
+
super(element);
|
|
171
226
|
this._items = null;
|
|
172
227
|
this._interval = null;
|
|
173
228
|
this._activeElement = null;
|
|
@@ -177,53 +232,58 @@
|
|
|
177
232
|
this.touchStartX = 0;
|
|
178
233
|
this.touchDeltaX = 0;
|
|
179
234
|
this._config = this._getConfig(config);
|
|
180
|
-
this.
|
|
181
|
-
this._indicatorsElement = this._element.querySelector(Selector.INDICATORS);
|
|
235
|
+
this._indicatorsElement = SelectorEngine__default['default'].findOne(SELECTOR_INDICATORS, this._element);
|
|
182
236
|
this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
|
|
183
|
-
this._pointerEvent = Boolean(window.PointerEvent
|
|
237
|
+
this._pointerEvent = Boolean(window.PointerEvent);
|
|
184
238
|
|
|
185
239
|
this._addEventListeners();
|
|
186
240
|
} // Getters
|
|
187
241
|
|
|
188
242
|
|
|
189
|
-
|
|
243
|
+
static get Default() {
|
|
244
|
+
return Default;
|
|
245
|
+
}
|
|
190
246
|
|
|
191
|
-
|
|
192
|
-
|
|
247
|
+
static get NAME() {
|
|
248
|
+
return NAME;
|
|
249
|
+
} // Public
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
next() {
|
|
193
253
|
if (!this._isSliding) {
|
|
194
|
-
this._slide(
|
|
254
|
+
this._slide(ORDER_NEXT);
|
|
195
255
|
}
|
|
196
|
-
}
|
|
256
|
+
}
|
|
197
257
|
|
|
198
|
-
|
|
258
|
+
nextWhenVisible() {
|
|
199
259
|
// Don't call next when the page isn't visible
|
|
200
260
|
// or the carousel or its parent isn't visible
|
|
201
|
-
if (!document.hidden &&
|
|
261
|
+
if (!document.hidden && isVisible(this._element)) {
|
|
202
262
|
this.next();
|
|
203
263
|
}
|
|
204
|
-
}
|
|
264
|
+
}
|
|
205
265
|
|
|
206
|
-
|
|
266
|
+
prev() {
|
|
207
267
|
if (!this._isSliding) {
|
|
208
|
-
this._slide(
|
|
268
|
+
this._slide(ORDER_PREV);
|
|
209
269
|
}
|
|
210
|
-
}
|
|
270
|
+
}
|
|
211
271
|
|
|
212
|
-
|
|
272
|
+
pause(event) {
|
|
213
273
|
if (!event) {
|
|
214
274
|
this._isPaused = true;
|
|
215
275
|
}
|
|
216
276
|
|
|
217
|
-
if (this._element
|
|
218
|
-
|
|
277
|
+
if (SelectorEngine__default['default'].findOne(SELECTOR_NEXT_PREV, this._element)) {
|
|
278
|
+
triggerTransitionEnd(this._element);
|
|
219
279
|
this.cycle(true);
|
|
220
280
|
}
|
|
221
281
|
|
|
222
282
|
clearInterval(this._interval);
|
|
223
283
|
this._interval = null;
|
|
224
|
-
}
|
|
284
|
+
}
|
|
225
285
|
|
|
226
|
-
|
|
286
|
+
cycle(event) {
|
|
227
287
|
if (!event) {
|
|
228
288
|
this._isPaused = false;
|
|
229
289
|
}
|
|
@@ -233,26 +293,24 @@
|
|
|
233
293
|
this._interval = null;
|
|
234
294
|
}
|
|
235
295
|
|
|
236
|
-
if (this._config.interval && !this._isPaused) {
|
|
296
|
+
if (this._config && this._config.interval && !this._isPaused) {
|
|
297
|
+
this._updateInterval();
|
|
298
|
+
|
|
237
299
|
this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);
|
|
238
300
|
}
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
_proto.to = function to(index) {
|
|
242
|
-
var _this = this;
|
|
301
|
+
}
|
|
243
302
|
|
|
244
|
-
|
|
303
|
+
to(index) {
|
|
304
|
+
this._activeElement = SelectorEngine__default['default'].findOne(SELECTOR_ACTIVE_ITEM, this._element);
|
|
245
305
|
|
|
246
|
-
|
|
306
|
+
const activeIndex = this._getItemIndex(this._activeElement);
|
|
247
307
|
|
|
248
308
|
if (index > this._items.length - 1 || index < 0) {
|
|
249
309
|
return;
|
|
250
310
|
}
|
|
251
311
|
|
|
252
312
|
if (this._isSliding) {
|
|
253
|
-
|
|
254
|
-
return _this.to(index);
|
|
255
|
-
});
|
|
313
|
+
EventHandler__default['default'].one(this._element, EVENT_SLID, () => this.to(index));
|
|
256
314
|
return;
|
|
257
315
|
}
|
|
258
316
|
|
|
@@ -262,105 +320,74 @@
|
|
|
262
320
|
return;
|
|
263
321
|
}
|
|
264
322
|
|
|
265
|
-
|
|
323
|
+
const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;
|
|
266
324
|
|
|
267
|
-
this._slide(
|
|
268
|
-
};
|
|
269
|
-
|
|
270
|
-
_proto.dispose = function dispose() {
|
|
271
|
-
$(this._element).off(EVENT_KEY);
|
|
272
|
-
$.removeData(this._element, DATA_KEY);
|
|
273
|
-
this._items = null;
|
|
274
|
-
this._config = null;
|
|
275
|
-
this._element = null;
|
|
276
|
-
this._interval = null;
|
|
277
|
-
this._isPaused = null;
|
|
278
|
-
this._isSliding = null;
|
|
279
|
-
this._activeElement = null;
|
|
280
|
-
this._indicatorsElement = null;
|
|
325
|
+
this._slide(order, this._items[index]);
|
|
281
326
|
} // Private
|
|
282
|
-
;
|
|
283
327
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
328
|
+
|
|
329
|
+
_getConfig(config) {
|
|
330
|
+
config = { ...Default,
|
|
331
|
+
...config
|
|
332
|
+
};
|
|
333
|
+
typeCheckConfig(NAME, config, DefaultType);
|
|
287
334
|
return config;
|
|
288
|
-
}
|
|
335
|
+
}
|
|
289
336
|
|
|
290
|
-
|
|
291
|
-
|
|
337
|
+
_handleSwipe() {
|
|
338
|
+
const absDeltax = Math.abs(this.touchDeltaX);
|
|
292
339
|
|
|
293
340
|
if (absDeltax <= SWIPE_THRESHOLD) {
|
|
294
341
|
return;
|
|
295
342
|
}
|
|
296
343
|
|
|
297
|
-
|
|
298
|
-
this.touchDeltaX = 0;
|
|
299
|
-
|
|
300
|
-
if (direction > 0) {
|
|
301
|
-
this.prev();
|
|
302
|
-
} // swipe right
|
|
303
|
-
|
|
344
|
+
const direction = absDeltax / this.touchDeltaX;
|
|
345
|
+
this.touchDeltaX = 0;
|
|
304
346
|
|
|
305
|
-
if (direction
|
|
306
|
-
|
|
347
|
+
if (!direction) {
|
|
348
|
+
return;
|
|
307
349
|
}
|
|
308
|
-
};
|
|
309
350
|
|
|
310
|
-
|
|
311
|
-
|
|
351
|
+
this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);
|
|
352
|
+
}
|
|
312
353
|
|
|
354
|
+
_addEventListeners() {
|
|
313
355
|
if (this._config.keyboard) {
|
|
314
|
-
|
|
315
|
-
return _this2._keydown(event);
|
|
316
|
-
});
|
|
356
|
+
EventHandler__default['default'].on(this._element, EVENT_KEYDOWN, event => this._keydown(event));
|
|
317
357
|
}
|
|
318
358
|
|
|
319
359
|
if (this._config.pause === 'hover') {
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
}).on(Event.MOUSELEAVE, function (event) {
|
|
323
|
-
return _this2.cycle(event);
|
|
324
|
-
});
|
|
360
|
+
EventHandler__default['default'].on(this._element, EVENT_MOUSEENTER, event => this.pause(event));
|
|
361
|
+
EventHandler__default['default'].on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));
|
|
325
362
|
}
|
|
326
363
|
|
|
327
|
-
if (this._config.touch) {
|
|
364
|
+
if (this._config.touch && this._touchSupported) {
|
|
328
365
|
this._addTouchEventListeners();
|
|
329
366
|
}
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
_proto._addTouchEventListeners = function _addTouchEventListeners() {
|
|
333
|
-
var _this3 = this;
|
|
334
|
-
|
|
335
|
-
if (!this._touchSupported) {
|
|
336
|
-
return;
|
|
337
|
-
}
|
|
367
|
+
}
|
|
338
368
|
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
369
|
+
_addTouchEventListeners() {
|
|
370
|
+
const start = event => {
|
|
371
|
+
if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {
|
|
372
|
+
this.touchStartX = event.clientX;
|
|
373
|
+
} else if (!this._pointerEvent) {
|
|
374
|
+
this.touchStartX = event.touches[0].clientX;
|
|
344
375
|
}
|
|
345
376
|
};
|
|
346
377
|
|
|
347
|
-
|
|
378
|
+
const move = event => {
|
|
348
379
|
// ensure swiping with one touch and not pinching
|
|
349
|
-
|
|
350
|
-
_this3.touchDeltaX = 0;
|
|
351
|
-
} else {
|
|
352
|
-
_this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX;
|
|
353
|
-
}
|
|
380
|
+
this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;
|
|
354
381
|
};
|
|
355
382
|
|
|
356
|
-
|
|
357
|
-
if (
|
|
358
|
-
|
|
383
|
+
const end = event => {
|
|
384
|
+
if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {
|
|
385
|
+
this.touchDeltaX = event.clientX - this.touchStartX;
|
|
359
386
|
}
|
|
360
387
|
|
|
361
|
-
|
|
388
|
+
this._handleSwipe();
|
|
362
389
|
|
|
363
|
-
if (
|
|
390
|
+
if (this._config.pause === 'hover') {
|
|
364
391
|
// If it's a touch-enabled device, mouseenter/leave are fired as
|
|
365
392
|
// part of the mouse compatibility events on first tap - the carousel
|
|
366
393
|
// would stop cycling until user tapped out of it;
|
|
@@ -368,147 +395,144 @@
|
|
|
368
395
|
// (as if it's the second time we tap on it, mouseenter compat event
|
|
369
396
|
// is NOT fired) and after a timeout (to allow for mouse compatibility
|
|
370
397
|
// events to fire) we explicitly restart cycling
|
|
371
|
-
|
|
398
|
+
this.pause();
|
|
372
399
|
|
|
373
|
-
if (
|
|
374
|
-
clearTimeout(
|
|
400
|
+
if (this.touchTimeout) {
|
|
401
|
+
clearTimeout(this.touchTimeout);
|
|
375
402
|
}
|
|
376
403
|
|
|
377
|
-
|
|
378
|
-
return _this3.cycle(event);
|
|
379
|
-
}, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);
|
|
404
|
+
this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);
|
|
380
405
|
}
|
|
381
406
|
};
|
|
382
407
|
|
|
383
|
-
|
|
384
|
-
|
|
408
|
+
SelectorEngine__default['default'].find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {
|
|
409
|
+
EventHandler__default['default'].on(itemImg, EVENT_DRAG_START, e => e.preventDefault());
|
|
385
410
|
});
|
|
386
411
|
|
|
387
412
|
if (this._pointerEvent) {
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
});
|
|
391
|
-
$(this._element).on(Event.POINTERUP, function (event) {
|
|
392
|
-
return end(event);
|
|
393
|
-
});
|
|
413
|
+
EventHandler__default['default'].on(this._element, EVENT_POINTERDOWN, event => start(event));
|
|
414
|
+
EventHandler__default['default'].on(this._element, EVENT_POINTERUP, event => end(event));
|
|
394
415
|
|
|
395
|
-
this._element.classList.add(
|
|
416
|
+
this._element.classList.add(CLASS_NAME_POINTER_EVENT);
|
|
396
417
|
} else {
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
$(this._element).on(Event.TOUCHMOVE, function (event) {
|
|
401
|
-
return move(event);
|
|
402
|
-
});
|
|
403
|
-
$(this._element).on(Event.TOUCHEND, function (event) {
|
|
404
|
-
return end(event);
|
|
405
|
-
});
|
|
418
|
+
EventHandler__default['default'].on(this._element, EVENT_TOUCHSTART, event => start(event));
|
|
419
|
+
EventHandler__default['default'].on(this._element, EVENT_TOUCHMOVE, event => move(event));
|
|
420
|
+
EventHandler__default['default'].on(this._element, EVENT_TOUCHEND, event => end(event));
|
|
406
421
|
}
|
|
407
|
-
}
|
|
422
|
+
}
|
|
408
423
|
|
|
409
|
-
|
|
424
|
+
_keydown(event) {
|
|
410
425
|
if (/input|textarea/i.test(event.target.tagName)) {
|
|
411
426
|
return;
|
|
412
427
|
}
|
|
413
428
|
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
event.preventDefault();
|
|
417
|
-
this.prev();
|
|
418
|
-
break;
|
|
429
|
+
if (event.key === ARROW_LEFT_KEY) {
|
|
430
|
+
event.preventDefault();
|
|
419
431
|
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
432
|
+
this._slide(DIRECTION_RIGHT);
|
|
433
|
+
} else if (event.key === ARROW_RIGHT_KEY) {
|
|
434
|
+
event.preventDefault();
|
|
435
|
+
|
|
436
|
+
this._slide(DIRECTION_LEFT);
|
|
424
437
|
}
|
|
425
|
-
}
|
|
438
|
+
}
|
|
426
439
|
|
|
427
|
-
|
|
428
|
-
this._items = element && element.parentNode ? [].
|
|
440
|
+
_getItemIndex(element) {
|
|
441
|
+
this._items = element && element.parentNode ? SelectorEngine__default['default'].find(SELECTOR_ITEM, element.parentNode) : [];
|
|
429
442
|
return this._items.indexOf(element);
|
|
430
|
-
}
|
|
443
|
+
}
|
|
431
444
|
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
445
|
+
_getItemByOrder(order, activeElement) {
|
|
446
|
+
const isNext = order === ORDER_NEXT;
|
|
447
|
+
const isPrev = order === ORDER_PREV;
|
|
435
448
|
|
|
436
|
-
|
|
449
|
+
const activeIndex = this._getItemIndex(activeElement);
|
|
437
450
|
|
|
438
|
-
|
|
439
|
-
|
|
451
|
+
const lastItemIndex = this._items.length - 1;
|
|
452
|
+
const isGoingToWrap = isPrev && activeIndex === 0 || isNext && activeIndex === lastItemIndex;
|
|
440
453
|
|
|
441
454
|
if (isGoingToWrap && !this._config.wrap) {
|
|
442
455
|
return activeElement;
|
|
443
456
|
}
|
|
444
457
|
|
|
445
|
-
|
|
446
|
-
|
|
458
|
+
const delta = isPrev ? -1 : 1;
|
|
459
|
+
const itemIndex = (activeIndex + delta) % this._items.length;
|
|
447
460
|
return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
|
|
448
|
-
}
|
|
461
|
+
}
|
|
449
462
|
|
|
450
|
-
|
|
451
|
-
|
|
463
|
+
_triggerSlideEvent(relatedTarget, eventDirectionName) {
|
|
464
|
+
const targetIndex = this._getItemIndex(relatedTarget);
|
|
452
465
|
|
|
453
|
-
|
|
466
|
+
const fromIndex = this._getItemIndex(SelectorEngine__default['default'].findOne(SELECTOR_ACTIVE_ITEM, this._element));
|
|
454
467
|
|
|
455
|
-
|
|
456
|
-
relatedTarget
|
|
468
|
+
return EventHandler__default['default'].trigger(this._element, EVENT_SLIDE, {
|
|
469
|
+
relatedTarget,
|
|
457
470
|
direction: eventDirectionName,
|
|
458
471
|
from: fromIndex,
|
|
459
472
|
to: targetIndex
|
|
460
473
|
});
|
|
461
|
-
|
|
462
|
-
return slideEvent;
|
|
463
|
-
};
|
|
474
|
+
}
|
|
464
475
|
|
|
465
|
-
|
|
476
|
+
_setActiveIndicatorElement(element) {
|
|
466
477
|
if (this._indicatorsElement) {
|
|
467
|
-
|
|
468
|
-
|
|
478
|
+
const activeIndicator = SelectorEngine__default['default'].findOne(SELECTOR_ACTIVE, this._indicatorsElement);
|
|
479
|
+
activeIndicator.classList.remove(CLASS_NAME_ACTIVE);
|
|
480
|
+
activeIndicator.removeAttribute('aria-current');
|
|
481
|
+
const indicators = SelectorEngine__default['default'].find(SELECTOR_INDICATOR, this._indicatorsElement);
|
|
482
|
+
|
|
483
|
+
for (let i = 0; i < indicators.length; i++) {
|
|
484
|
+
if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {
|
|
485
|
+
indicators[i].classList.add(CLASS_NAME_ACTIVE);
|
|
486
|
+
indicators[i].setAttribute('aria-current', 'true');
|
|
487
|
+
break;
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
}
|
|
469
492
|
|
|
470
|
-
|
|
493
|
+
_updateInterval() {
|
|
494
|
+
const element = this._activeElement || SelectorEngine__default['default'].findOne(SELECTOR_ACTIVE_ITEM, this._element);
|
|
471
495
|
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
496
|
+
if (!element) {
|
|
497
|
+
return;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);
|
|
501
|
+
|
|
502
|
+
if (elementInterval) {
|
|
503
|
+
this._config.defaultInterval = this._config.defaultInterval || this._config.interval;
|
|
504
|
+
this._config.interval = elementInterval;
|
|
505
|
+
} else {
|
|
506
|
+
this._config.interval = this._config.defaultInterval || this._config.interval;
|
|
475
507
|
}
|
|
476
|
-
}
|
|
508
|
+
}
|
|
477
509
|
|
|
478
|
-
|
|
479
|
-
|
|
510
|
+
_slide(directionOrOrder, element) {
|
|
511
|
+
const order = this._directionToOrder(directionOrOrder);
|
|
480
512
|
|
|
481
|
-
|
|
513
|
+
const activeElement = SelectorEngine__default['default'].findOne(SELECTOR_ACTIVE_ITEM, this._element);
|
|
482
514
|
|
|
483
|
-
|
|
515
|
+
const activeElementIndex = this._getItemIndex(activeElement);
|
|
484
516
|
|
|
485
|
-
|
|
517
|
+
const nextElement = element || this._getItemByOrder(order, activeElement);
|
|
486
518
|
|
|
487
|
-
|
|
519
|
+
const nextElementIndex = this._getItemIndex(nextElement);
|
|
488
520
|
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
521
|
+
const isCycling = Boolean(this._interval);
|
|
522
|
+
const isNext = order === ORDER_NEXT;
|
|
523
|
+
const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;
|
|
524
|
+
const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;
|
|
493
525
|
|
|
494
|
-
|
|
495
|
-
directionalClassName = ClassName.LEFT;
|
|
496
|
-
orderClassName = ClassName.NEXT;
|
|
497
|
-
eventDirectionName = Direction.LEFT;
|
|
498
|
-
} else {
|
|
499
|
-
directionalClassName = ClassName.RIGHT;
|
|
500
|
-
orderClassName = ClassName.PREV;
|
|
501
|
-
eventDirectionName = Direction.RIGHT;
|
|
502
|
-
}
|
|
526
|
+
const eventDirectionName = this._orderToDirection(order);
|
|
503
527
|
|
|
504
|
-
if (nextElement &&
|
|
528
|
+
if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE)) {
|
|
505
529
|
this._isSliding = false;
|
|
506
530
|
return;
|
|
507
531
|
}
|
|
508
532
|
|
|
509
|
-
|
|
533
|
+
const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);
|
|
510
534
|
|
|
511
|
-
if (slideEvent.
|
|
535
|
+
if (slideEvent.defaultPrevented) {
|
|
512
536
|
return;
|
|
513
537
|
}
|
|
514
538
|
|
|
@@ -525,125 +549,133 @@
|
|
|
525
549
|
|
|
526
550
|
this._setActiveIndicatorElement(nextElement);
|
|
527
551
|
|
|
528
|
-
|
|
529
|
-
relatedTarget: nextElement,
|
|
530
|
-
direction: eventDirectionName,
|
|
531
|
-
from: activeElementIndex,
|
|
532
|
-
to: nextElementIndex
|
|
533
|
-
});
|
|
552
|
+
this._activeElement = nextElement;
|
|
534
553
|
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
this._config.defaultInterval = this._config.defaultInterval || this._config.interval;
|
|
544
|
-
this._config.interval = nextElementInterval;
|
|
545
|
-
} else {
|
|
546
|
-
this._config.interval = this._config.defaultInterval || this._config.interval;
|
|
547
|
-
}
|
|
554
|
+
const triggerSlidEvent = () => {
|
|
555
|
+
EventHandler__default['default'].trigger(this._element, EVENT_SLID, {
|
|
556
|
+
relatedTarget: nextElement,
|
|
557
|
+
direction: eventDirectionName,
|
|
558
|
+
from: activeElementIndex,
|
|
559
|
+
to: nextElementIndex
|
|
560
|
+
});
|
|
561
|
+
};
|
|
548
562
|
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
563
|
+
if (this._element.classList.contains(CLASS_NAME_SLIDE)) {
|
|
564
|
+
nextElement.classList.add(orderClassName);
|
|
565
|
+
reflow(nextElement);
|
|
566
|
+
activeElement.classList.add(directionalClassName);
|
|
567
|
+
nextElement.classList.add(directionalClassName);
|
|
568
|
+
|
|
569
|
+
const completeCallBack = () => {
|
|
570
|
+
nextElement.classList.remove(directionalClassName, orderClassName);
|
|
571
|
+
nextElement.classList.add(CLASS_NAME_ACTIVE);
|
|
572
|
+
activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName);
|
|
573
|
+
this._isSliding = false;
|
|
574
|
+
setTimeout(triggerSlidEvent, 0);
|
|
575
|
+
};
|
|
576
|
+
|
|
577
|
+
this._queueCallback(completeCallBack, activeElement, true);
|
|
558
578
|
} else {
|
|
559
|
-
|
|
560
|
-
|
|
579
|
+
activeElement.classList.remove(CLASS_NAME_ACTIVE);
|
|
580
|
+
nextElement.classList.add(CLASS_NAME_ACTIVE);
|
|
561
581
|
this._isSliding = false;
|
|
562
|
-
|
|
582
|
+
triggerSlidEvent();
|
|
563
583
|
}
|
|
564
584
|
|
|
565
585
|
if (isCycling) {
|
|
566
586
|
this.cycle();
|
|
567
587
|
}
|
|
568
|
-
}
|
|
569
|
-
;
|
|
588
|
+
}
|
|
570
589
|
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
590
|
+
_directionToOrder(direction) {
|
|
591
|
+
if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {
|
|
592
|
+
return direction;
|
|
593
|
+
}
|
|
574
594
|
|
|
575
|
-
|
|
595
|
+
if (isRTL()) {
|
|
596
|
+
return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;
|
|
597
|
+
}
|
|
576
598
|
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
}
|
|
599
|
+
return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;
|
|
600
|
+
}
|
|
580
601
|
|
|
581
|
-
|
|
602
|
+
_orderToDirection(order) {
|
|
603
|
+
if (![ORDER_NEXT, ORDER_PREV].includes(order)) {
|
|
604
|
+
return order;
|
|
605
|
+
}
|
|
582
606
|
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
}
|
|
607
|
+
if (isRTL()) {
|
|
608
|
+
return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;
|
|
609
|
+
}
|
|
587
610
|
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
} else if (typeof action === 'string') {
|
|
591
|
-
if (typeof data[action] === 'undefined') {
|
|
592
|
-
throw new TypeError("No method named \"" + action + "\"");
|
|
593
|
-
}
|
|
611
|
+
return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
|
|
612
|
+
} // Static
|
|
594
613
|
|
|
595
|
-
data[action]();
|
|
596
|
-
} else if (_config.interval && _config.ride) {
|
|
597
|
-
data.pause();
|
|
598
|
-
data.cycle();
|
|
599
|
-
}
|
|
600
|
-
});
|
|
601
|
-
};
|
|
602
614
|
|
|
603
|
-
|
|
604
|
-
|
|
615
|
+
static carouselInterface(element, config) {
|
|
616
|
+
let data = Data__default['default'].get(element, DATA_KEY);
|
|
617
|
+
let _config = { ...Default,
|
|
618
|
+
...Manipulator__default['default'].getDataAttributes(element)
|
|
619
|
+
};
|
|
605
620
|
|
|
606
|
-
if (
|
|
607
|
-
|
|
621
|
+
if (typeof config === 'object') {
|
|
622
|
+
_config = { ..._config,
|
|
623
|
+
...config
|
|
624
|
+
};
|
|
608
625
|
}
|
|
609
626
|
|
|
610
|
-
|
|
627
|
+
const action = typeof config === 'string' ? config : _config.slide;
|
|
611
628
|
|
|
612
|
-
if (!
|
|
613
|
-
|
|
629
|
+
if (!data) {
|
|
630
|
+
data = new Carousel(element, _config);
|
|
614
631
|
}
|
|
615
632
|
|
|
616
|
-
|
|
633
|
+
if (typeof config === 'number') {
|
|
634
|
+
data.to(config);
|
|
635
|
+
} else if (typeof action === 'string') {
|
|
636
|
+
if (typeof data[action] === 'undefined') {
|
|
637
|
+
throw new TypeError(`No method named "${action}"`);
|
|
638
|
+
}
|
|
617
639
|
|
|
618
|
-
|
|
640
|
+
data[action]();
|
|
641
|
+
} else if (_config.interval && _config.ride) {
|
|
642
|
+
data.pause();
|
|
643
|
+
data.cycle();
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
static jQueryInterface(config) {
|
|
648
|
+
return this.each(function () {
|
|
649
|
+
Carousel.carouselInterface(this, config);
|
|
650
|
+
});
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
static dataApiClickHandler(event) {
|
|
654
|
+
const target = getElementFromSelector(this);
|
|
655
|
+
|
|
656
|
+
if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {
|
|
657
|
+
return;
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
const config = { ...Manipulator__default['default'].getDataAttributes(target),
|
|
661
|
+
...Manipulator__default['default'].getDataAttributes(this)
|
|
662
|
+
};
|
|
663
|
+
const slideIndex = this.getAttribute('data-bs-slide-to');
|
|
619
664
|
|
|
620
665
|
if (slideIndex) {
|
|
621
666
|
config.interval = false;
|
|
622
667
|
}
|
|
623
668
|
|
|
624
|
-
Carousel.
|
|
669
|
+
Carousel.carouselInterface(target, config);
|
|
625
670
|
|
|
626
671
|
if (slideIndex) {
|
|
627
|
-
|
|
672
|
+
Data__default['default'].get(target, DATA_KEY).to(slideIndex);
|
|
628
673
|
}
|
|
629
674
|
|
|
630
675
|
event.preventDefault();
|
|
631
|
-
}
|
|
632
|
-
|
|
633
|
-
_createClass(Carousel, null, [{
|
|
634
|
-
key: "VERSION",
|
|
635
|
-
get: function get() {
|
|
636
|
-
return VERSION;
|
|
637
|
-
}
|
|
638
|
-
}, {
|
|
639
|
-
key: "Default",
|
|
640
|
-
get: function get() {
|
|
641
|
-
return Default;
|
|
642
|
-
}
|
|
643
|
-
}]);
|
|
676
|
+
}
|
|
644
677
|
|
|
645
|
-
|
|
646
|
-
}();
|
|
678
|
+
}
|
|
647
679
|
/**
|
|
648
680
|
* ------------------------------------------------------------------------
|
|
649
681
|
* Data Api implementation
|
|
@@ -651,29 +683,22 @@
|
|
|
651
683
|
*/
|
|
652
684
|
|
|
653
685
|
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
for (var i = 0, len = carousels.length; i < len; i++) {
|
|
659
|
-
var $carousel = $(carousels[i]);
|
|
686
|
+
EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);
|
|
687
|
+
EventHandler__default['default'].on(window, EVENT_LOAD_DATA_API, () => {
|
|
688
|
+
const carousels = SelectorEngine__default['default'].find(SELECTOR_DATA_RIDE);
|
|
660
689
|
|
|
661
|
-
|
|
690
|
+
for (let i = 0, len = carousels.length; i < len; i++) {
|
|
691
|
+
Carousel.carouselInterface(carousels[i], Data__default['default'].get(carousels[i], DATA_KEY));
|
|
662
692
|
}
|
|
663
693
|
});
|
|
664
694
|
/**
|
|
665
695
|
* ------------------------------------------------------------------------
|
|
666
696
|
* jQuery
|
|
667
697
|
* ------------------------------------------------------------------------
|
|
698
|
+
* add .Carousel to jQuery only if jQuery is present
|
|
668
699
|
*/
|
|
669
700
|
|
|
670
|
-
|
|
671
|
-
$.fn[NAME].Constructor = Carousel;
|
|
672
|
-
|
|
673
|
-
$.fn[NAME].noConflict = function () {
|
|
674
|
-
$.fn[NAME] = JQUERY_NO_CONFLICT;
|
|
675
|
-
return Carousel._jQueryInterface;
|
|
676
|
-
};
|
|
701
|
+
defineJQueryPlugin(Carousel);
|
|
677
702
|
|
|
678
703
|
return Carousel;
|
|
679
704
|
|