bootstrap 4.6.0 → 5.0.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 +2 -1
- data/README.md +7 -4
- data/assets/javascripts/bootstrap/alert.js +181 -109
- data/assets/javascripts/bootstrap/base-component.js +63 -0
- data/assets/javascripts/bootstrap/button.js +85 -173
- data/assets/javascripts/bootstrap/carousel.js +458 -355
- data/assets/javascripts/bootstrap/collapse.js +366 -218
- 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 +85 -0
- data/assets/javascripts/bootstrap/dropdown.js +459 -351
- data/assets/javascripts/bootstrap/modal.js +597 -429
- data/assets/javascripts/bootstrap/offcanvas.js +671 -0
- data/assets/javascripts/bootstrap/popover.js +130 -154
- data/assets/javascripts/bootstrap/scrollspy.js +238 -188
- data/assets/javascripts/bootstrap/tab.js +235 -137
- data/assets/javascripts/bootstrap/toast.js +210 -148
- data/assets/javascripts/bootstrap/tooltip.js +627 -466
- 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 +3174 -2563
- data/assets/javascripts/bootstrap.min.js +2 -2
- data/assets/stylesheets/_bootstrap-grid.scss +51 -16
- data/assets/stylesheets/_bootstrap-reboot.scss +4 -1
- data/assets/stylesheets/_bootstrap.scss +16 -8
- data/assets/stylesheets/bootstrap/_accordion.scss +118 -0
- data/assets/stylesheets/bootstrap/_alert.scss +15 -10
- data/assets/stylesheets/bootstrap/_badge.scss +2 -27
- data/assets/stylesheets/bootstrap/_breadcrumb.scss +3 -17
- data/assets/stylesheets/bootstrap/_button-group.scss +21 -45
- data/assets/stylesheets/bootstrap/_buttons.scss +29 -60
- data/assets/stylesheets/bootstrap/_card.scss +20 -91
- data/assets/stylesheets/bootstrap/_carousel.scss +65 -33
- data/assets/stylesheets/bootstrap/_close.scss +30 -30
- data/assets/stylesheets/bootstrap/_containers.scss +41 -0
- data/assets/stylesheets/bootstrap/_dropdown.scss +84 -36
- data/assets/stylesheets/bootstrap/_forms.scss +9 -347
- data/assets/stylesheets/bootstrap/_functions.scss +84 -23
- data/assets/stylesheets/bootstrap/_grid.scss +3 -54
- data/assets/stylesheets/bootstrap/_helpers.scss +7 -0
- data/assets/stylesheets/bootstrap/_list-group.scss +28 -8
- data/assets/stylesheets/bootstrap/_mixins.scss +8 -13
- data/assets/stylesheets/bootstrap/_modal.scss +43 -55
- data/assets/stylesheets/bootstrap/_nav.scss +23 -4
- data/assets/stylesheets/bootstrap/_navbar.scss +45 -71
- data/assets/stylesheets/bootstrap/_offcanvas.scss +77 -0
- data/assets/stylesheets/bootstrap/_pagination.scss +10 -20
- data/assets/stylesheets/bootstrap/_popover.scss +15 -27
- data/assets/stylesheets/bootstrap/_progress.scss +5 -4
- data/assets/stylesheets/bootstrap/_reboot.scss +316 -179
- data/assets/stylesheets/bootstrap/_root.scss +5 -8
- data/assets/stylesheets/bootstrap/_spinners.scss +11 -7
- data/assets/stylesheets/bootstrap/_tables.scss +79 -114
- data/assets/stylesheets/bootstrap/_toasts.scss +20 -15
- 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 -18
- data/assets/stylesheets/bootstrap/_variables.scss +800 -482
- 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/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 +10 -8
- 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 +71 -48
- 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 +38 -86
- data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +89 -33
- 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 +1 -1
- 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 +7 -1
- 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_1.gemfile +7 -0
- metadata +45 -73
- data/assets/javascripts/bootstrap/util.js +0 -192
- data/assets/stylesheets/bootstrap/_code.scss +0 -48
- data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -526
- data/assets/stylesheets/bootstrap/_input-group.scss +0 -208
- 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 -23
- 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 -80
- 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/_interactions.scss +0 -5
- 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
- /data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
|
@@ -1,129 +1,241 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Bootstrap tab.js
|
|
2
|
+
* Bootstrap tab.js v5.0.0 (https://getbootstrap.com/)
|
|
3
3
|
* Copyright 2011-2021 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('
|
|
8
|
-
typeof define === 'function' && define.amd ? define(['
|
|
9
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.
|
|
10
|
-
}(this, (function (
|
|
7
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
|
|
8
|
+
typeof define === 'function' && define.amd ? define(['./dom/data', './dom/event-handler', './dom/selector-engine', './base-component'], factory) :
|
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.Data, global.EventHandler, global.SelectorEngine, global.Base));
|
|
10
|
+
}(this, (function (Data, EventHandler, SelectorEngine, BaseComponent) { 'use strict';
|
|
11
11
|
|
|
12
12
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
13
13
|
|
|
14
|
-
var
|
|
15
|
-
var
|
|
14
|
+
var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
|
|
15
|
+
var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
|
16
|
+
var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
|
17
|
+
var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
/**
|
|
20
|
+
* --------------------------------------------------------------------------
|
|
21
|
+
* Bootstrap (v5.0.0): util/index.js
|
|
22
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
23
|
+
* --------------------------------------------------------------------------
|
|
24
|
+
*/
|
|
25
|
+
const MILLISECONDS_MULTIPLIER = 1000;
|
|
26
|
+
const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
|
27
|
+
|
|
28
|
+
const getSelector = element => {
|
|
29
|
+
let selector = element.getAttribute('data-bs-target');
|
|
30
|
+
|
|
31
|
+
if (!selector || selector === '#') {
|
|
32
|
+
let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
|
|
33
|
+
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
|
|
34
|
+
// `document.querySelector` will rightfully complain it is invalid.
|
|
35
|
+
// See https://github.com/twbs/bootstrap/issues/32273
|
|
36
|
+
|
|
37
|
+
if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
|
|
38
|
+
return null;
|
|
39
|
+
} // Just in case some CMS puts out a full URL with the anchor appended
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
|
|
43
|
+
hrefAttr = `#${hrefAttr.split('#')[1]}`;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
|
|
24
47
|
}
|
|
25
|
-
}
|
|
26
48
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
49
|
+
return selector;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
const getElementFromSelector = element => {
|
|
53
|
+
const selector = getSelector(element);
|
|
54
|
+
return selector ? document.querySelector(selector) : null;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const getTransitionDurationFromElement = element => {
|
|
58
|
+
if (!element) {
|
|
59
|
+
return 0;
|
|
60
|
+
} // Get transition-duration of the element
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
let {
|
|
64
|
+
transitionDuration,
|
|
65
|
+
transitionDelay
|
|
66
|
+
} = window.getComputedStyle(element);
|
|
67
|
+
const floatTransitionDuration = Number.parseFloat(transitionDuration);
|
|
68
|
+
const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
|
|
69
|
+
|
|
70
|
+
if (!floatTransitionDuration && !floatTransitionDelay) {
|
|
71
|
+
return 0;
|
|
72
|
+
} // If multiple durations are defined, take the first
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
transitionDuration = transitionDuration.split(',')[0];
|
|
76
|
+
transitionDelay = transitionDelay.split(',')[0];
|
|
77
|
+
return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
const triggerTransitionEnd = element => {
|
|
81
|
+
element.dispatchEvent(new Event(TRANSITION_END));
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
const emulateTransitionEnd = (element, duration) => {
|
|
85
|
+
let called = false;
|
|
86
|
+
const durationPadding = 5;
|
|
87
|
+
const emulatedDuration = duration + durationPadding;
|
|
88
|
+
|
|
89
|
+
function listener() {
|
|
90
|
+
called = true;
|
|
91
|
+
element.removeEventListener(TRANSITION_END, listener);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
element.addEventListener(TRANSITION_END, listener);
|
|
95
|
+
setTimeout(() => {
|
|
96
|
+
if (!called) {
|
|
97
|
+
triggerTransitionEnd(element);
|
|
98
|
+
}
|
|
99
|
+
}, emulatedDuration);
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
const isDisabled = element => {
|
|
103
|
+
if (!element || element.nodeType !== Node.ELEMENT_NODE) {
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (element.classList.contains('disabled')) {
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (typeof element.disabled !== 'undefined') {
|
|
112
|
+
return element.disabled;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
const reflow = element => element.offsetHeight;
|
|
119
|
+
|
|
120
|
+
const getjQuery = () => {
|
|
121
|
+
const {
|
|
122
|
+
jQuery
|
|
123
|
+
} = window;
|
|
124
|
+
|
|
125
|
+
if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
|
|
126
|
+
return jQuery;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return null;
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
const onDOMContentLoaded = callback => {
|
|
133
|
+
if (document.readyState === 'loading') {
|
|
134
|
+
document.addEventListener('DOMContentLoaded', callback);
|
|
135
|
+
} else {
|
|
136
|
+
callback();
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
const defineJQueryPlugin = (name, plugin) => {
|
|
141
|
+
onDOMContentLoaded(() => {
|
|
142
|
+
const $ = getjQuery();
|
|
143
|
+
/* istanbul ignore if */
|
|
144
|
+
|
|
145
|
+
if ($) {
|
|
146
|
+
const JQUERY_NO_CONFLICT = $.fn[name];
|
|
147
|
+
$.fn[name] = plugin.jQueryInterface;
|
|
148
|
+
$.fn[name].Constructor = plugin;
|
|
149
|
+
|
|
150
|
+
$.fn[name].noConflict = () => {
|
|
151
|
+
$.fn[name] = JQUERY_NO_CONFLICT;
|
|
152
|
+
return plugin.jQueryInterface;
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
};
|
|
32
157
|
|
|
158
|
+
/**
|
|
159
|
+
* --------------------------------------------------------------------------
|
|
160
|
+
* Bootstrap (v5.0.0): tab.js
|
|
161
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
162
|
+
* --------------------------------------------------------------------------
|
|
163
|
+
*/
|
|
33
164
|
/**
|
|
34
165
|
* ------------------------------------------------------------------------
|
|
35
166
|
* Constants
|
|
36
167
|
* ------------------------------------------------------------------------
|
|
37
168
|
*/
|
|
38
169
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
var SELECTOR_DATA_TOGGLE = '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]';
|
|
60
|
-
var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
|
|
61
|
-
var SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active';
|
|
170
|
+
const NAME = 'tab';
|
|
171
|
+
const DATA_KEY = 'bs.tab';
|
|
172
|
+
const EVENT_KEY = `.${DATA_KEY}`;
|
|
173
|
+
const DATA_API_KEY = '.data-api';
|
|
174
|
+
const EVENT_HIDE = `hide${EVENT_KEY}`;
|
|
175
|
+
const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
|
|
176
|
+
const EVENT_SHOW = `show${EVENT_KEY}`;
|
|
177
|
+
const EVENT_SHOWN = `shown${EVENT_KEY}`;
|
|
178
|
+
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
|
|
179
|
+
const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';
|
|
180
|
+
const CLASS_NAME_ACTIVE = 'active';
|
|
181
|
+
const CLASS_NAME_FADE = 'fade';
|
|
182
|
+
const CLASS_NAME_SHOW = 'show';
|
|
183
|
+
const SELECTOR_DROPDOWN = '.dropdown';
|
|
184
|
+
const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
|
|
185
|
+
const SELECTOR_ACTIVE = '.active';
|
|
186
|
+
const SELECTOR_ACTIVE_UL = ':scope > li > .active';
|
|
187
|
+
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]';
|
|
188
|
+
const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
|
|
189
|
+
const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';
|
|
62
190
|
/**
|
|
63
191
|
* ------------------------------------------------------------------------
|
|
64
192
|
* Class Definition
|
|
65
193
|
* ------------------------------------------------------------------------
|
|
66
194
|
*/
|
|
67
195
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
var _proto = Tab.prototype;
|
|
196
|
+
class Tab extends BaseComponent__default['default'] {
|
|
197
|
+
// Getters
|
|
198
|
+
static get DATA_KEY() {
|
|
199
|
+
return DATA_KEY;
|
|
200
|
+
} // Public
|
|
75
201
|
|
|
76
|
-
// Public
|
|
77
|
-
_proto.show = function show() {
|
|
78
|
-
var _this = this;
|
|
79
202
|
|
|
80
|
-
|
|
203
|
+
show() {
|
|
204
|
+
if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {
|
|
81
205
|
return;
|
|
82
206
|
}
|
|
83
207
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
208
|
+
let previous;
|
|
209
|
+
const target = getElementFromSelector(this._element);
|
|
210
|
+
|
|
211
|
+
const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);
|
|
88
212
|
|
|
89
213
|
if (listElement) {
|
|
90
|
-
|
|
91
|
-
previous =
|
|
214
|
+
const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;
|
|
215
|
+
previous = SelectorEngine__default['default'].find(itemSelector, listElement);
|
|
92
216
|
previous = previous[previous.length - 1];
|
|
93
217
|
}
|
|
94
218
|
|
|
95
|
-
|
|
219
|
+
const hideEvent = previous ? EventHandler__default['default'].trigger(previous, EVENT_HIDE, {
|
|
96
220
|
relatedTarget: this._element
|
|
97
|
-
});
|
|
98
|
-
|
|
221
|
+
}) : null;
|
|
222
|
+
const showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW, {
|
|
99
223
|
relatedTarget: previous
|
|
100
224
|
});
|
|
101
225
|
|
|
102
|
-
if (
|
|
103
|
-
$__default['default'](previous).trigger(hideEvent);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
$__default['default'](this._element).trigger(showEvent);
|
|
107
|
-
|
|
108
|
-
if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {
|
|
226
|
+
if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {
|
|
109
227
|
return;
|
|
110
228
|
}
|
|
111
229
|
|
|
112
|
-
if (selector) {
|
|
113
|
-
target = document.querySelector(selector);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
230
|
this._activate(this._element, listElement);
|
|
117
231
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
relatedTarget:
|
|
232
|
+
const complete = () => {
|
|
233
|
+
EventHandler__default['default'].trigger(previous, EVENT_HIDDEN, {
|
|
234
|
+
relatedTarget: this._element
|
|
121
235
|
});
|
|
122
|
-
|
|
236
|
+
EventHandler__default['default'].trigger(this._element, EVENT_SHOWN, {
|
|
123
237
|
relatedTarget: previous
|
|
124
238
|
});
|
|
125
|
-
$__default['default'](previous).trigger(hiddenEvent);
|
|
126
|
-
$__default['default'](_this._element).trigger(shownEvent);
|
|
127
239
|
};
|
|
128
240
|
|
|
129
241
|
if (target) {
|
|
@@ -131,40 +243,33 @@
|
|
|
131
243
|
} else {
|
|
132
244
|
complete();
|
|
133
245
|
}
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
_proto.dispose = function dispose() {
|
|
137
|
-
$__default['default'].removeData(this._element, DATA_KEY);
|
|
138
|
-
this._element = null;
|
|
139
246
|
} // Private
|
|
140
|
-
;
|
|
141
247
|
|
|
142
|
-
_proto._activate = function _activate(element, container, callback) {
|
|
143
|
-
var _this2 = this;
|
|
144
248
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
249
|
+
_activate(element, container, callback) {
|
|
250
|
+
const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine__default['default'].find(SELECTOR_ACTIVE_UL, container) : SelectorEngine__default['default'].children(container, SELECTOR_ACTIVE);
|
|
251
|
+
const active = activeElements[0];
|
|
252
|
+
const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE);
|
|
148
253
|
|
|
149
|
-
|
|
150
|
-
return _this2._transitionComplete(element, active, callback);
|
|
151
|
-
};
|
|
254
|
+
const complete = () => this._transitionComplete(element, active, callback);
|
|
152
255
|
|
|
153
256
|
if (active && isTransitioning) {
|
|
154
|
-
|
|
155
|
-
|
|
257
|
+
const transitionDuration = getTransitionDurationFromElement(active);
|
|
258
|
+
active.classList.remove(CLASS_NAME_SHOW);
|
|
259
|
+
EventHandler__default['default'].one(active, 'transitionend', complete);
|
|
260
|
+
emulateTransitionEnd(active, transitionDuration);
|
|
156
261
|
} else {
|
|
157
262
|
complete();
|
|
158
263
|
}
|
|
159
|
-
}
|
|
264
|
+
}
|
|
160
265
|
|
|
161
|
-
|
|
266
|
+
_transitionComplete(element, active, callback) {
|
|
162
267
|
if (active) {
|
|
163
|
-
|
|
164
|
-
|
|
268
|
+
active.classList.remove(CLASS_NAME_ACTIVE);
|
|
269
|
+
const dropdownChild = SelectorEngine__default['default'].findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);
|
|
165
270
|
|
|
166
271
|
if (dropdownChild) {
|
|
167
|
-
|
|
272
|
+
dropdownChild.classList.remove(CLASS_NAME_ACTIVE);
|
|
168
273
|
}
|
|
169
274
|
|
|
170
275
|
if (active.getAttribute('role') === 'tab') {
|
|
@@ -172,24 +277,29 @@
|
|
|
172
277
|
}
|
|
173
278
|
}
|
|
174
279
|
|
|
175
|
-
|
|
280
|
+
element.classList.add(CLASS_NAME_ACTIVE);
|
|
176
281
|
|
|
177
282
|
if (element.getAttribute('role') === 'tab') {
|
|
178
283
|
element.setAttribute('aria-selected', true);
|
|
179
284
|
}
|
|
180
285
|
|
|
181
|
-
|
|
286
|
+
reflow(element);
|
|
182
287
|
|
|
183
288
|
if (element.classList.contains(CLASS_NAME_FADE)) {
|
|
184
289
|
element.classList.add(CLASS_NAME_SHOW);
|
|
185
290
|
}
|
|
186
291
|
|
|
187
|
-
|
|
188
|
-
|
|
292
|
+
let parent = element.parentNode;
|
|
293
|
+
|
|
294
|
+
if (parent && parent.nodeName === 'LI') {
|
|
295
|
+
parent = parent.parentNode;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {
|
|
299
|
+
const dropdownElement = element.closest(SELECTOR_DROPDOWN);
|
|
189
300
|
|
|
190
301
|
if (dropdownElement) {
|
|
191
|
-
|
|
192
|
-
$__default['default'](dropdownToggleList).addClass(CLASS_NAME_ACTIVE);
|
|
302
|
+
SelectorEngine__default['default'].find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));
|
|
193
303
|
}
|
|
194
304
|
|
|
195
305
|
element.setAttribute('aria-expanded', true);
|
|
@@ -199,37 +309,23 @@
|
|
|
199
309
|
callback();
|
|
200
310
|
}
|
|
201
311
|
} // Static
|
|
202
|
-
;
|
|
203
312
|
|
|
204
|
-
Tab._jQueryInterface = function _jQueryInterface(config) {
|
|
205
|
-
return this.each(function () {
|
|
206
|
-
var $this = $__default['default'](this);
|
|
207
|
-
var data = $this.data(DATA_KEY);
|
|
208
313
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
}
|
|
314
|
+
static jQueryInterface(config) {
|
|
315
|
+
return this.each(function () {
|
|
316
|
+
const data = Data__default['default'].get(this, DATA_KEY) || new Tab(this);
|
|
213
317
|
|
|
214
318
|
if (typeof config === 'string') {
|
|
215
319
|
if (typeof data[config] === 'undefined') {
|
|
216
|
-
throw new TypeError(
|
|
320
|
+
throw new TypeError(`No method named "${config}"`);
|
|
217
321
|
}
|
|
218
322
|
|
|
219
323
|
data[config]();
|
|
220
324
|
}
|
|
221
325
|
});
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
_createClass(Tab, null, [{
|
|
225
|
-
key: "VERSION",
|
|
226
|
-
get: function get() {
|
|
227
|
-
return VERSION;
|
|
228
|
-
}
|
|
229
|
-
}]);
|
|
326
|
+
}
|
|
230
327
|
|
|
231
|
-
|
|
232
|
-
}();
|
|
328
|
+
}
|
|
233
329
|
/**
|
|
234
330
|
* ------------------------------------------------------------------------
|
|
235
331
|
* Data Api implementation
|
|
@@ -237,24 +333,26 @@
|
|
|
237
333
|
*/
|
|
238
334
|
|
|
239
335
|
|
|
240
|
-
|
|
241
|
-
|
|
336
|
+
EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
|
337
|
+
if (['A', 'AREA'].includes(this.tagName)) {
|
|
338
|
+
event.preventDefault();
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
if (isDisabled(this)) {
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
242
344
|
|
|
243
|
-
|
|
345
|
+
const data = Data__default['default'].get(this, DATA_KEY) || new Tab(this);
|
|
346
|
+
data.show();
|
|
244
347
|
});
|
|
245
348
|
/**
|
|
246
349
|
* ------------------------------------------------------------------------
|
|
247
350
|
* jQuery
|
|
248
351
|
* ------------------------------------------------------------------------
|
|
352
|
+
* add .Tab to jQuery only if jQuery is present
|
|
249
353
|
*/
|
|
250
354
|
|
|
251
|
-
|
|
252
|
-
$__default['default'].fn[NAME].Constructor = Tab;
|
|
253
|
-
|
|
254
|
-
$__default['default'].fn[NAME].noConflict = function () {
|
|
255
|
-
$__default['default'].fn[NAME] = JQUERY_NO_CONFLICT;
|
|
256
|
-
return Tab._jQueryInterface;
|
|
257
|
-
};
|
|
355
|
+
defineJQueryPlugin(NAME, Tab);
|
|
258
356
|
|
|
259
357
|
return Tab;
|
|
260
358
|
|