bootstrap 4.3.0 → 5.1.0
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 +17 -2
- data/CHANGELOG.md +2 -14
- data/README.md +7 -4
- data/assets/javascripts/bootstrap/alert.js +173 -137
- data/assets/javascripts/bootstrap/base-component.js +182 -0
- data/assets/javascripts/bootstrap/button.js +102 -143
- data/assets/javascripts/bootstrap/carousel.js +481 -410
- data/assets/javascripts/bootstrap/collapse.js +340 -274
- data/assets/javascripts/bootstrap/dom/data.js +68 -0
- data/assets/javascripts/bootstrap/dom/event-handler.js +322 -0
- data/assets/javascripts/bootstrap/dom/manipulator.js +88 -0
- data/assets/javascripts/bootstrap/dom/selector-engine.js +127 -0
- data/assets/javascripts/bootstrap/dropdown.js +494 -400
- data/assets/javascripts/bootstrap/modal.js +834 -450
- data/assets/javascripts/bootstrap/offcanvas.js +866 -0
- data/assets/javascripts/bootstrap/popover.js +122 -199
- data/assets/javascripts/bootstrap/scrollspy.js +257 -241
- data/assets/javascripts/bootstrap/tab.js +219 -155
- data/assets/javascripts/bootstrap/toast.js +330 -190
- data/assets/javascripts/bootstrap/tooltip.js +710 -472
- 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 +8 -1
- data/assets/javascripts/bootstrap.js +3547 -2809
- data/assets/javascripts/bootstrap.min.js +4 -4
- data/assets/stylesheets/_bootstrap-grid.scss +54 -18
- data/assets/stylesheets/_bootstrap-reboot.scss +7 -4
- data/assets/stylesheets/_bootstrap.scss +20 -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 +5 -18
- data/assets/stylesheets/bootstrap/_button-group.scss +21 -45
- data/assets/stylesheets/bootstrap/_buttons.scss +28 -54
- data/assets/stylesheets/bootstrap/_card.scss +52 -125
- data/assets/stylesheets/bootstrap/_carousel.scss +70 -38
- data/assets/stylesheets/bootstrap/_close.scss +30 -31
- data/assets/stylesheets/bootstrap/_containers.scss +41 -0
- data/assets/stylesheets/bootstrap/_dropdown.scss +88 -39
- data/assets/stylesheets/bootstrap/_forms.scss +9 -330
- data/assets/stylesheets/bootstrap/_functions.scss +237 -27
- data/assets/stylesheets/bootstrap/_grid.scss +14 -33
- data/assets/stylesheets/bootstrap/_helpers.scss +9 -0
- data/assets/stylesheets/bootstrap/_images.scss +3 -3
- data/assets/stylesheets/bootstrap/_list-group.scss +61 -36
- data/assets/stylesheets/bootstrap/_mixins.scss +12 -16
- data/assets/stylesheets/bootstrap/_modal.scss +64 -84
- data/assets/stylesheets/bootstrap/_nav.scss +29 -10
- data/assets/stylesheets/bootstrap/_navbar.scss +93 -52
- data/assets/stylesheets/bootstrap/_offcanvas.scss +83 -0
- data/assets/stylesheets/bootstrap/_pagination.scss +13 -22
- data/assets/stylesheets/bootstrap/_placeholders.scss +51 -0
- data/assets/stylesheets/bootstrap/_popover.scss +29 -42
- data/assets/stylesheets/bootstrap/_progress.scss +10 -5
- data/assets/stylesheets/bootstrap/_reboot.scss +350 -208
- data/assets/stylesheets/bootstrap/_root.scss +42 -8
- 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 +21 -21
- data/assets/stylesheets/bootstrap/_transitions.scss +8 -1
- data/assets/stylesheets/bootstrap/_type.scss +40 -61
- data/assets/stylesheets/bootstrap/_utilities.scss +630 -17
- data/assets/stylesheets/bootstrap/_variables.scss +993 -487
- data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +18 -0
- data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +63 -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 +70 -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/_stacks.scss +15 -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/helpers/_vr.scss +8 -0
- data/assets/stylesheets/bootstrap/mixins/_alert.scss +3 -5
- data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
- 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 +77 -51
- 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 +67 -115
- data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +131 -32
- data/assets/stylesheets/bootstrap/mixins/_image.scss +0 -20
- data/assets/stylesheets/bootstrap/mixins/_list-group.scss +5 -2
- data/assets/stylesheets/bootstrap/mixins/_pagination.scss +17 -8
- data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +1 -1
- 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 +89 -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 +274 -132
- data/bootstrap.gemspec +4 -6
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +25 -6
- data/tasks/updater/network.rb +8 -2
- data/test/dummy_rails/app/assets/config/manifest.js +3 -0
- data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
- data/test/dummy_rails/app/assets/stylesheets/.browserslistrc +1 -0
- 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
- data/test/support/dummy_rails_integration.rb +3 -1
- data/test/test_helper.rb +18 -13
- metadata +61 -79
- data/assets/javascripts/bootstrap/util.js +0 -171
- data/assets/stylesheets/bootstrap/_code.scss +0 -48
- data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -507
- data/assets/stylesheets/bootstrap/_input-group.scss +0 -193
- 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 -21
- 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 -66
- data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
- data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -10
- data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -33
- 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 -16
- 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,136 +1,215 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Bootstrap tab.js
|
|
3
|
-
* Copyright 2011-
|
|
4
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/
|
|
2
|
+
* Bootstrap tab.js v5.1.0 (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.Tab = 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/event-handler.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
|
|
8
|
+
typeof define === 'function' && define.amd ? define(['./dom/event-handler', './dom/selector-engine', './base-component'], factory) :
|
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.EventHandler, global.SelectorEngine, global.Base));
|
|
10
|
+
}(this, (function (EventHandler, SelectorEngine, BaseComponent) { 'use strict';
|
|
11
|
+
|
|
12
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
13
|
+
|
|
14
|
+
var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
|
15
|
+
var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
|
16
|
+
var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* --------------------------------------------------------------------------
|
|
20
|
+
* Bootstrap (v5.1.0): util/index.js
|
|
21
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
22
|
+
* --------------------------------------------------------------------------
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
const getSelector = element => {
|
|
26
|
+
let selector = element.getAttribute('data-bs-target');
|
|
27
|
+
|
|
28
|
+
if (!selector || selector === '#') {
|
|
29
|
+
let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
|
|
30
|
+
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
|
|
31
|
+
// `document.querySelector` will rightfully complain it is invalid.
|
|
32
|
+
// See https://github.com/twbs/bootstrap/issues/32273
|
|
33
|
+
|
|
34
|
+
if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
|
|
35
|
+
return null;
|
|
36
|
+
} // Just in case some CMS puts out a full URL with the anchor appended
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
|
|
40
|
+
hrefAttr = `#${hrefAttr.split('#')[1]}`;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
|
|
22
44
|
}
|
|
23
|
-
}
|
|
24
45
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
28
|
-
return Constructor;
|
|
29
|
-
}
|
|
46
|
+
return selector;
|
|
47
|
+
};
|
|
30
48
|
|
|
49
|
+
const getElementFromSelector = element => {
|
|
50
|
+
const selector = getSelector(element);
|
|
51
|
+
return selector ? document.querySelector(selector) : null;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const isDisabled = element => {
|
|
55
|
+
if (!element || element.nodeType !== Node.ELEMENT_NODE) {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (element.classList.contains('disabled')) {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (typeof element.disabled !== 'undefined') {
|
|
64
|
+
return element.disabled;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
|
|
68
|
+
};
|
|
31
69
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
70
|
+
* Trick to restart an element's animation
|
|
71
|
+
*
|
|
72
|
+
* @param {HTMLElement} element
|
|
73
|
+
* @return void
|
|
74
|
+
*
|
|
75
|
+
* @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
|
|
35
76
|
*/
|
|
36
77
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
var DATA_API_KEY = '.data-api';
|
|
42
|
-
var JQUERY_NO_CONFLICT = $.fn[NAME];
|
|
43
|
-
var Event = {
|
|
44
|
-
HIDE: "hide" + EVENT_KEY,
|
|
45
|
-
HIDDEN: "hidden" + EVENT_KEY,
|
|
46
|
-
SHOW: "show" + EVENT_KEY,
|
|
47
|
-
SHOWN: "shown" + EVENT_KEY,
|
|
48
|
-
CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
|
|
78
|
+
|
|
79
|
+
const reflow = element => {
|
|
80
|
+
// eslint-disable-next-line no-unused-expressions
|
|
81
|
+
element.offsetHeight;
|
|
49
82
|
};
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
83
|
+
|
|
84
|
+
const getjQuery = () => {
|
|
85
|
+
const {
|
|
86
|
+
jQuery
|
|
87
|
+
} = window;
|
|
88
|
+
|
|
89
|
+
if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
|
|
90
|
+
return jQuery;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return null;
|
|
56
94
|
};
|
|
57
|
-
var Selector = {
|
|
58
|
-
DROPDOWN: '.dropdown',
|
|
59
|
-
NAV_LIST_GROUP: '.nav, .list-group',
|
|
60
|
-
ACTIVE: '.active',
|
|
61
|
-
ACTIVE_UL: '> li > .active',
|
|
62
|
-
DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',
|
|
63
|
-
DROPDOWN_TOGGLE: '.dropdown-toggle',
|
|
64
|
-
DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'
|
|
65
|
-
/**
|
|
66
|
-
* ------------------------------------------------------------------------
|
|
67
|
-
* Class Definition
|
|
68
|
-
* ------------------------------------------------------------------------
|
|
69
|
-
*/
|
|
70
95
|
|
|
96
|
+
const DOMContentLoadedCallbacks = [];
|
|
97
|
+
|
|
98
|
+
const onDOMContentLoaded = callback => {
|
|
99
|
+
if (document.readyState === 'loading') {
|
|
100
|
+
// add listener on the first call when the document is in loading state
|
|
101
|
+
if (!DOMContentLoadedCallbacks.length) {
|
|
102
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
103
|
+
DOMContentLoadedCallbacks.forEach(callback => callback());
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
DOMContentLoadedCallbacks.push(callback);
|
|
108
|
+
} else {
|
|
109
|
+
callback();
|
|
110
|
+
}
|
|
71
111
|
};
|
|
72
112
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
113
|
+
const defineJQueryPlugin = plugin => {
|
|
114
|
+
onDOMContentLoaded(() => {
|
|
115
|
+
const $ = getjQuery();
|
|
116
|
+
/* istanbul ignore if */
|
|
117
|
+
|
|
118
|
+
if ($) {
|
|
119
|
+
const name = plugin.NAME;
|
|
120
|
+
const JQUERY_NO_CONFLICT = $.fn[name];
|
|
121
|
+
$.fn[name] = plugin.jQueryInterface;
|
|
122
|
+
$.fn[name].Constructor = plugin;
|
|
123
|
+
|
|
124
|
+
$.fn[name].noConflict = () => {
|
|
125
|
+
$.fn[name] = JQUERY_NO_CONFLICT;
|
|
126
|
+
return plugin.jQueryInterface;
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
};
|
|
79
131
|
|
|
132
|
+
/**
|
|
133
|
+
* --------------------------------------------------------------------------
|
|
134
|
+
* Bootstrap (v5.1.0): tab.js
|
|
135
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
136
|
+
* --------------------------------------------------------------------------
|
|
137
|
+
*/
|
|
138
|
+
/**
|
|
139
|
+
* ------------------------------------------------------------------------
|
|
140
|
+
* Constants
|
|
141
|
+
* ------------------------------------------------------------------------
|
|
142
|
+
*/
|
|
80
143
|
|
|
81
|
-
|
|
144
|
+
const NAME = 'tab';
|
|
145
|
+
const DATA_KEY = 'bs.tab';
|
|
146
|
+
const EVENT_KEY = `.${DATA_KEY}`;
|
|
147
|
+
const DATA_API_KEY = '.data-api';
|
|
148
|
+
const EVENT_HIDE = `hide${EVENT_KEY}`;
|
|
149
|
+
const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
|
|
150
|
+
const EVENT_SHOW = `show${EVENT_KEY}`;
|
|
151
|
+
const EVENT_SHOWN = `shown${EVENT_KEY}`;
|
|
152
|
+
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
|
|
153
|
+
const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';
|
|
154
|
+
const CLASS_NAME_ACTIVE = 'active';
|
|
155
|
+
const CLASS_NAME_FADE = 'fade';
|
|
156
|
+
const CLASS_NAME_SHOW = 'show';
|
|
157
|
+
const SELECTOR_DROPDOWN = '.dropdown';
|
|
158
|
+
const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
|
|
159
|
+
const SELECTOR_ACTIVE = '.active';
|
|
160
|
+
const SELECTOR_ACTIVE_UL = ':scope > li > .active';
|
|
161
|
+
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]';
|
|
162
|
+
const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
|
|
163
|
+
const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';
|
|
164
|
+
/**
|
|
165
|
+
* ------------------------------------------------------------------------
|
|
166
|
+
* Class Definition
|
|
167
|
+
* ------------------------------------------------------------------------
|
|
168
|
+
*/
|
|
169
|
+
|
|
170
|
+
class Tab extends BaseComponent__default['default'] {
|
|
171
|
+
// Getters
|
|
172
|
+
static get NAME() {
|
|
173
|
+
return NAME;
|
|
174
|
+
} // Public
|
|
82
175
|
|
|
83
|
-
// Public
|
|
84
|
-
_proto.show = function show() {
|
|
85
|
-
var _this = this;
|
|
86
176
|
|
|
87
|
-
|
|
177
|
+
show() {
|
|
178
|
+
if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {
|
|
88
179
|
return;
|
|
89
180
|
}
|
|
90
181
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
182
|
+
let previous;
|
|
183
|
+
const target = getElementFromSelector(this._element);
|
|
184
|
+
|
|
185
|
+
const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);
|
|
95
186
|
|
|
96
187
|
if (listElement) {
|
|
97
|
-
|
|
98
|
-
previous =
|
|
188
|
+
const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;
|
|
189
|
+
previous = SelectorEngine__default['default'].find(itemSelector, listElement);
|
|
99
190
|
previous = previous[previous.length - 1];
|
|
100
191
|
}
|
|
101
192
|
|
|
102
|
-
|
|
193
|
+
const hideEvent = previous ? EventHandler__default['default'].trigger(previous, EVENT_HIDE, {
|
|
103
194
|
relatedTarget: this._element
|
|
104
|
-
});
|
|
105
|
-
|
|
195
|
+
}) : null;
|
|
196
|
+
const showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW, {
|
|
106
197
|
relatedTarget: previous
|
|
107
198
|
});
|
|
108
199
|
|
|
109
|
-
if (
|
|
110
|
-
$(previous).trigger(hideEvent);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
$(this._element).trigger(showEvent);
|
|
114
|
-
|
|
115
|
-
if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {
|
|
200
|
+
if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {
|
|
116
201
|
return;
|
|
117
202
|
}
|
|
118
203
|
|
|
119
|
-
if (selector) {
|
|
120
|
-
target = document.querySelector(selector);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
204
|
this._activate(this._element, listElement);
|
|
124
205
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
relatedTarget:
|
|
206
|
+
const complete = () => {
|
|
207
|
+
EventHandler__default['default'].trigger(previous, EVENT_HIDDEN, {
|
|
208
|
+
relatedTarget: this._element
|
|
128
209
|
});
|
|
129
|
-
|
|
210
|
+
EventHandler__default['default'].trigger(this._element, EVENT_SHOWN, {
|
|
130
211
|
relatedTarget: previous
|
|
131
212
|
});
|
|
132
|
-
$(previous).trigger(hiddenEvent);
|
|
133
|
-
$(_this._element).trigger(shownEvent);
|
|
134
213
|
};
|
|
135
214
|
|
|
136
215
|
if (target) {
|
|
@@ -138,40 +217,32 @@
|
|
|
138
217
|
} else {
|
|
139
218
|
complete();
|
|
140
219
|
}
|
|
141
|
-
};
|
|
142
|
-
|
|
143
|
-
_proto.dispose = function dispose() {
|
|
144
|
-
$.removeData(this._element, DATA_KEY);
|
|
145
|
-
this._element = null;
|
|
146
220
|
} // Private
|
|
147
|
-
;
|
|
148
221
|
|
|
149
|
-
_proto._activate = function _activate(element, container, callback) {
|
|
150
|
-
var _this2 = this;
|
|
151
222
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
223
|
+
_activate(element, container, callback) {
|
|
224
|
+
const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine__default['default'].find(SELECTOR_ACTIVE_UL, container) : SelectorEngine__default['default'].children(container, SELECTOR_ACTIVE);
|
|
225
|
+
const active = activeElements[0];
|
|
226
|
+
const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE);
|
|
155
227
|
|
|
156
|
-
|
|
157
|
-
return _this2._transitionComplete(element, active, callback);
|
|
158
|
-
};
|
|
228
|
+
const complete = () => this._transitionComplete(element, active, callback);
|
|
159
229
|
|
|
160
230
|
if (active && isTransitioning) {
|
|
161
|
-
|
|
162
|
-
|
|
231
|
+
active.classList.remove(CLASS_NAME_SHOW);
|
|
232
|
+
|
|
233
|
+
this._queueCallback(complete, element, true);
|
|
163
234
|
} else {
|
|
164
235
|
complete();
|
|
165
236
|
}
|
|
166
|
-
}
|
|
237
|
+
}
|
|
167
238
|
|
|
168
|
-
|
|
239
|
+
_transitionComplete(element, active, callback) {
|
|
169
240
|
if (active) {
|
|
170
|
-
|
|
171
|
-
|
|
241
|
+
active.classList.remove(CLASS_NAME_ACTIVE);
|
|
242
|
+
const dropdownChild = SelectorEngine__default['default'].findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);
|
|
172
243
|
|
|
173
244
|
if (dropdownChild) {
|
|
174
|
-
|
|
245
|
+
dropdownChild.classList.remove(CLASS_NAME_ACTIVE);
|
|
175
246
|
}
|
|
176
247
|
|
|
177
248
|
if (active.getAttribute('role') === 'tab') {
|
|
@@ -179,24 +250,29 @@
|
|
|
179
250
|
}
|
|
180
251
|
}
|
|
181
252
|
|
|
182
|
-
|
|
253
|
+
element.classList.add(CLASS_NAME_ACTIVE);
|
|
183
254
|
|
|
184
255
|
if (element.getAttribute('role') === 'tab') {
|
|
185
256
|
element.setAttribute('aria-selected', true);
|
|
186
257
|
}
|
|
187
258
|
|
|
188
|
-
|
|
259
|
+
reflow(element);
|
|
260
|
+
|
|
261
|
+
if (element.classList.contains(CLASS_NAME_FADE)) {
|
|
262
|
+
element.classList.add(CLASS_NAME_SHOW);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
let parent = element.parentNode;
|
|
189
266
|
|
|
190
|
-
if (
|
|
191
|
-
|
|
267
|
+
if (parent && parent.nodeName === 'LI') {
|
|
268
|
+
parent = parent.parentNode;
|
|
192
269
|
}
|
|
193
270
|
|
|
194
|
-
if (
|
|
195
|
-
|
|
271
|
+
if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {
|
|
272
|
+
const dropdownElement = element.closest(SELECTOR_DROPDOWN);
|
|
196
273
|
|
|
197
274
|
if (dropdownElement) {
|
|
198
|
-
|
|
199
|
-
$(dropdownToggleList).addClass(ClassName.ACTIVE);
|
|
275
|
+
SelectorEngine__default['default'].find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));
|
|
200
276
|
}
|
|
201
277
|
|
|
202
278
|
element.setAttribute('aria-expanded', true);
|
|
@@ -206,37 +282,23 @@
|
|
|
206
282
|
callback();
|
|
207
283
|
}
|
|
208
284
|
} // Static
|
|
209
|
-
;
|
|
210
285
|
|
|
211
|
-
Tab._jQueryInterface = function _jQueryInterface(config) {
|
|
212
|
-
return this.each(function () {
|
|
213
|
-
var $this = $(this);
|
|
214
|
-
var data = $this.data(DATA_KEY);
|
|
215
286
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
}
|
|
287
|
+
static jQueryInterface(config) {
|
|
288
|
+
return this.each(function () {
|
|
289
|
+
const data = Tab.getOrCreateInstance(this);
|
|
220
290
|
|
|
221
291
|
if (typeof config === 'string') {
|
|
222
292
|
if (typeof data[config] === 'undefined') {
|
|
223
|
-
throw new TypeError(
|
|
293
|
+
throw new TypeError(`No method named "${config}"`);
|
|
224
294
|
}
|
|
225
295
|
|
|
226
296
|
data[config]();
|
|
227
297
|
}
|
|
228
298
|
});
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
_createClass(Tab, null, [{
|
|
232
|
-
key: "VERSION",
|
|
233
|
-
get: function get() {
|
|
234
|
-
return VERSION;
|
|
235
|
-
}
|
|
236
|
-
}]);
|
|
299
|
+
}
|
|
237
300
|
|
|
238
|
-
|
|
239
|
-
}();
|
|
301
|
+
}
|
|
240
302
|
/**
|
|
241
303
|
* ------------------------------------------------------------------------
|
|
242
304
|
* Data Api implementation
|
|
@@ -244,25 +306,27 @@
|
|
|
244
306
|
*/
|
|
245
307
|
|
|
246
308
|
|
|
247
|
-
|
|
248
|
-
|
|
309
|
+
EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
|
310
|
+
if (['A', 'AREA'].includes(this.tagName)) {
|
|
311
|
+
event.preventDefault();
|
|
312
|
+
}
|
|
249
313
|
|
|
250
|
-
|
|
314
|
+
if (isDisabled(this)) {
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
const data = Tab.getOrCreateInstance(this);
|
|
319
|
+
data.show();
|
|
251
320
|
});
|
|
252
321
|
/**
|
|
253
322
|
* ------------------------------------------------------------------------
|
|
254
323
|
* jQuery
|
|
255
324
|
* ------------------------------------------------------------------------
|
|
325
|
+
* add .Tab to jQuery only if jQuery is present
|
|
256
326
|
*/
|
|
257
327
|
|
|
258
|
-
|
|
259
|
-
$.fn[NAME].Constructor = Tab;
|
|
260
|
-
|
|
261
|
-
$.fn[NAME].noConflict = function () {
|
|
262
|
-
$.fn[NAME] = JQUERY_NO_CONFLICT;
|
|
263
|
-
return Tab._jQueryInterface;
|
|
264
|
-
};
|
|
328
|
+
defineJQueryPlugin(Tab);
|
|
265
329
|
|
|
266
330
|
return Tab;
|
|
267
331
|
|
|
268
|
-
}));
|
|
332
|
+
})));
|