bootstrap 4.1.3 → 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 +17 -2
- data/CHANGELOG.md +2 -14
- data/README.md +7 -4
- data/Rakefile +2 -2
- data/assets/javascripts/bootstrap/alert.js +226 -166
- data/assets/javascripts/bootstrap/base-component.js +63 -0
- data/assets/javascripts/bootstrap/button.js +119 -165
- data/assets/javascripts/bootstrap/carousel.js +634 -445
- data/assets/javascripts/bootstrap/collapse.js +447 -327
- 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 +550 -425
- data/assets/javascripts/bootstrap/modal.js +695 -492
- data/assets/javascripts/bootstrap/offcanvas.js +671 -0
- data/assets/javascripts/bootstrap/popover.js +167 -217
- data/assets/javascripts/bootstrap/scrollspy.js +319 -302
- data/assets/javascripts/bootstrap/tab.js +303 -221
- data/assets/javascripts/bootstrap/toast.js +333 -0
- data/assets/javascripts/bootstrap/tooltip.js +896 -577
- 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 -7
- data/assets/javascripts/bootstrap.js +4262 -3163
- data/assets/javascripts/bootstrap.min.js +4 -4
- data/assets/stylesheets/_bootstrap-grid.scss +54 -21
- data/assets/stylesheets/_bootstrap-reboot.scss +7 -4
- data/assets/stylesheets/_bootstrap.scss +21 -11
- data/assets/stylesheets/bootstrap/_accordion.scss +118 -0
- data/assets/stylesheets/bootstrap/_alert.scss +15 -9
- data/assets/stylesheets/bootstrap/_badge.scss +3 -21
- data/assets/stylesheets/bootstrap/_breadcrumb.scss +5 -18
- data/assets/stylesheets/bootstrap/_button-group.scss +29 -62
- data/assets/stylesheets/bootstrap/_buttons.scss +33 -65
- data/assets/stylesheets/bootstrap/_card.scss +55 -141
- data/assets/stylesheets/bootstrap/_carousel.scss +94 -101
- data/assets/stylesheets/bootstrap/_close.scss +33 -28
- data/assets/stylesheets/bootstrap/_containers.scss +41 -0
- data/assets/stylesheets/bootstrap/_dropdown.scss +114 -40
- data/assets/stylesheets/bootstrap/_forms.scss +9 -333
- data/assets/stylesheets/bootstrap/_functions.scss +148 -29
- data/assets/stylesheets/bootstrap/_grid.scss +4 -34
- data/assets/stylesheets/bootstrap/_helpers.scss +7 -0
- data/assets/stylesheets/bootstrap/_images.scss +4 -4
- data/assets/stylesheets/bootstrap/_list-group.scss +86 -27
- data/assets/stylesheets/bootstrap/_mixins.scss +17 -16
- data/assets/stylesheets/bootstrap/_modal.scss +90 -42
- data/assets/stylesheets/bootstrap/_nav.scss +31 -10
- data/assets/stylesheets/bootstrap/_navbar.scss +68 -61
- data/assets/stylesheets/bootstrap/_offcanvas.scss +77 -0
- data/assets/stylesheets/bootstrap/_pagination.scss +13 -27
- data/assets/stylesheets/bootstrap/_popover.scss +63 -88
- data/assets/stylesheets/bootstrap/_progress.scss +20 -6
- data/assets/stylesheets/bootstrap/_reboot.scss +349 -211
- data/assets/stylesheets/bootstrap/_root.scss +5 -8
- data/assets/stylesheets/bootstrap/_spinners.scss +69 -0
- data/assets/stylesheets/bootstrap/_tables.scss +79 -116
- data/assets/stylesheets/bootstrap/_toasts.scss +51 -0
- data/assets/stylesheets/bootstrap/_tooltip.scss +18 -18
- data/assets/stylesheets/bootstrap/_transitions.scss +2 -3
- data/assets/stylesheets/bootstrap/_type.scss +42 -63
- data/assets/stylesheets/bootstrap/_utilities.scss +594 -15
- data/assets/stylesheets/bootstrap/_variables.scss +952 -440
- 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 +57 -14
- data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +14 -1
- data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +13 -9
- data/assets/stylesheets/bootstrap/mixins/_buttons.scss +77 -53
- data/assets/stylesheets/bootstrap/mixins/_caret.scss +14 -16
- 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/_deprecate.scss +10 -0
- data/assets/stylesheets/bootstrap/mixins/_forms.scss +87 -97
- data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +106 -33
- 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 +18 -9
- 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 +19 -6
- 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 +312 -0
- data/bootstrap.gemspec +7 -6
- data/lib/bootstrap/engine.rb +3 -0
- data/lib/bootstrap/version.rb +4 -2
- data/lib/bootstrap.rb +10 -7
- data/tasks/updater/js.rb +20 -5
- 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 +64 -79
- data/assets/javascripts/bootstrap/util.js +0 -143
- data/assets/stylesheets/bootstrap/_code.scss +0 -48
- data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -433
- data/assets/stylesheets/bootstrap/_input-group.scss +0 -173
- data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -16
- 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 -12
- data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -11
- data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -67
- 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 -6
- data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -30
- data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -14
- data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -13
- data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -7
- 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 -59
- data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -38
- data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -52
- data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
- data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -9
- data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -37
- 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 -12
- data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -51
- data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -58
- data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -11
- data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
- /data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
@@ -1,276 +1,358 @@
|
|
1
|
+
/*!
|
2
|
+
* Bootstrap tab.js v5.0.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
|
+
*/
|
1
6
|
(function (global, factory) {
|
2
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('
|
3
|
-
typeof define === 'function' && define.amd ? define(['
|
4
|
-
(global.Tab = factory(global.
|
5
|
-
}(this, (function (
|
6
|
-
|
7
|
-
$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
|
8
|
-
Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
|
9
|
-
|
10
|
-
function _defineProperties(target, props) {
|
11
|
-
for (var i = 0; i < props.length; i++) {
|
12
|
-
var descriptor = props[i];
|
13
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
14
|
-
descriptor.configurable = true;
|
15
|
-
if ("value" in descriptor) descriptor.writable = true;
|
16
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
17
|
-
}
|
18
|
-
}
|
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';
|
19
11
|
|
20
|
-
function
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
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 SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
17
|
+
var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
25
18
|
|
26
19
|
/**
|
27
20
|
* --------------------------------------------------------------------------
|
28
|
-
* Bootstrap (
|
29
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/
|
21
|
+
* Bootstrap (v5.0.0): util/index.js
|
22
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
30
23
|
* --------------------------------------------------------------------------
|
31
24
|
*/
|
25
|
+
const MILLISECONDS_MULTIPLIER = 1000;
|
26
|
+
const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
32
27
|
|
33
|
-
|
34
|
-
|
35
|
-
* ------------------------------------------------------------------------
|
36
|
-
* Constants
|
37
|
-
* ------------------------------------------------------------------------
|
38
|
-
*/
|
39
|
-
var NAME = 'tab';
|
40
|
-
var VERSION = '4.1.3';
|
41
|
-
var DATA_KEY = 'bs.tab';
|
42
|
-
var EVENT_KEY = "." + DATA_KEY;
|
43
|
-
var DATA_API_KEY = '.data-api';
|
44
|
-
var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
|
45
|
-
var Event = {
|
46
|
-
HIDE: "hide" + EVENT_KEY,
|
47
|
-
HIDDEN: "hidden" + EVENT_KEY,
|
48
|
-
SHOW: "show" + EVENT_KEY,
|
49
|
-
SHOWN: "shown" + EVENT_KEY,
|
50
|
-
CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
|
51
|
-
};
|
52
|
-
var ClassName = {
|
53
|
-
DROPDOWN_MENU: 'dropdown-menu',
|
54
|
-
ACTIVE: 'active',
|
55
|
-
DISABLED: 'disabled',
|
56
|
-
FADE: 'fade',
|
57
|
-
SHOW: 'show'
|
58
|
-
};
|
59
|
-
var Selector = {
|
60
|
-
DROPDOWN: '.dropdown',
|
61
|
-
NAV_LIST_GROUP: '.nav, .list-group',
|
62
|
-
ACTIVE: '.active',
|
63
|
-
ACTIVE_UL: '> li > .active',
|
64
|
-
DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',
|
65
|
-
DROPDOWN_TOGGLE: '.dropdown-toggle',
|
66
|
-
DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'
|
67
|
-
/**
|
68
|
-
* ------------------------------------------------------------------------
|
69
|
-
* Class Definition
|
70
|
-
* ------------------------------------------------------------------------
|
71
|
-
*/
|
72
|
-
|
73
|
-
};
|
74
|
-
|
75
|
-
var Tab =
|
76
|
-
/*#__PURE__*/
|
77
|
-
function () {
|
78
|
-
function Tab(element) {
|
79
|
-
this._element = element;
|
80
|
-
} // Getters
|
81
|
-
|
82
|
-
|
83
|
-
var _proto = Tab.prototype;
|
84
|
-
|
85
|
-
// Public
|
86
|
-
_proto.show = function show() {
|
87
|
-
var _this = this;
|
88
|
-
|
89
|
-
if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $$$1(this._element).hasClass(ClassName.ACTIVE) || $$$1(this._element).hasClass(ClassName.DISABLED)) {
|
90
|
-
return;
|
91
|
-
}
|
28
|
+
const getSelector = element => {
|
29
|
+
let selector = element.getAttribute('data-bs-target');
|
92
30
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
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
|
97
36
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
previous = previous[previous.length - 1];
|
102
|
-
}
|
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
|
103
40
|
|
104
|
-
var hideEvent = $$$1.Event(Event.HIDE, {
|
105
|
-
relatedTarget: this._element
|
106
|
-
});
|
107
|
-
var showEvent = $$$1.Event(Event.SHOW, {
|
108
|
-
relatedTarget: previous
|
109
|
-
});
|
110
41
|
|
111
|
-
|
112
|
-
|
113
|
-
|
42
|
+
if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
|
43
|
+
hrefAttr = `#${hrefAttr.split('#')[1]}`;
|
44
|
+
}
|
114
45
|
|
115
|
-
|
46
|
+
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
|
47
|
+
}
|
116
48
|
|
117
|
-
|
118
|
-
|
119
|
-
}
|
49
|
+
return selector;
|
50
|
+
};
|
120
51
|
|
121
|
-
|
122
|
-
|
123
|
-
|
52
|
+
const getElementFromSelector = element => {
|
53
|
+
const selector = getSelector(element);
|
54
|
+
return selector ? document.querySelector(selector) : null;
|
55
|
+
};
|
124
56
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
relatedTarget: _this._element
|
130
|
-
});
|
131
|
-
var shownEvent = $$$1.Event(Event.SHOWN, {
|
132
|
-
relatedTarget: previous
|
133
|
-
});
|
134
|
-
$$$1(previous).trigger(hiddenEvent);
|
135
|
-
$$$1(_this._element).trigger(shownEvent);
|
136
|
-
};
|
57
|
+
const getTransitionDurationFromElement = element => {
|
58
|
+
if (!element) {
|
59
|
+
return 0;
|
60
|
+
} // Get transition-duration of the element
|
137
61
|
|
138
|
-
if (target) {
|
139
|
-
this._activate(target, target.parentNode, complete);
|
140
|
-
} else {
|
141
|
-
complete();
|
142
|
-
}
|
143
|
-
};
|
144
62
|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
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
|
149
69
|
|
70
|
+
if (!floatTransitionDuration && !floatTransitionDelay) {
|
71
|
+
return 0;
|
72
|
+
} // If multiple durations are defined, take the first
|
150
73
|
|
151
|
-
_proto._activate = function _activate(element, container, callback) {
|
152
|
-
var _this2 = this;
|
153
74
|
|
154
|
-
|
75
|
+
transitionDuration = transitionDuration.split(',')[0];
|
76
|
+
transitionDelay = transitionDelay.split(',')[0];
|
77
|
+
return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
|
78
|
+
};
|
155
79
|
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
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
|
+
}
|
161
93
|
|
162
|
-
|
163
|
-
|
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
|
+
};
|
164
131
|
|
165
|
-
|
166
|
-
|
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;
|
167
153
|
};
|
154
|
+
}
|
155
|
+
});
|
156
|
+
};
|
168
157
|
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
158
|
+
/**
|
159
|
+
* --------------------------------------------------------------------------
|
160
|
+
* Bootstrap (v5.0.0): tab.js
|
161
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
162
|
+
* --------------------------------------------------------------------------
|
163
|
+
*/
|
164
|
+
/**
|
165
|
+
* ------------------------------------------------------------------------
|
166
|
+
* Constants
|
167
|
+
* ------------------------------------------------------------------------
|
168
|
+
*/
|
169
|
+
|
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';
|
190
|
+
/**
|
191
|
+
* ------------------------------------------------------------------------
|
192
|
+
* Class Definition
|
193
|
+
* ------------------------------------------------------------------------
|
194
|
+
*/
|
195
|
+
|
196
|
+
class Tab extends BaseComponent__default['default'] {
|
197
|
+
// Getters
|
198
|
+
static get DATA_KEY() {
|
199
|
+
return DATA_KEY;
|
200
|
+
} // Public
|
201
|
+
|
202
|
+
|
203
|
+
show() {
|
204
|
+
if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {
|
205
|
+
return;
|
206
|
+
}
|
207
|
+
|
208
|
+
let previous;
|
209
|
+
const target = getElementFromSelector(this._element);
|
210
|
+
|
211
|
+
const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);
|
212
|
+
|
213
|
+
if (listElement) {
|
214
|
+
const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;
|
215
|
+
previous = SelectorEngine__default['default'].find(itemSelector, listElement);
|
216
|
+
previous = previous[previous.length - 1];
|
217
|
+
}
|
218
|
+
|
219
|
+
const hideEvent = previous ? EventHandler__default['default'].trigger(previous, EVENT_HIDE, {
|
220
|
+
relatedTarget: this._element
|
221
|
+
}) : null;
|
222
|
+
const showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW, {
|
223
|
+
relatedTarget: previous
|
224
|
+
});
|
225
|
+
|
226
|
+
if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {
|
227
|
+
return;
|
228
|
+
}
|
229
|
+
|
230
|
+
this._activate(this._element, listElement);
|
231
|
+
|
232
|
+
const complete = () => {
|
233
|
+
EventHandler__default['default'].trigger(previous, EVENT_HIDDEN, {
|
234
|
+
relatedTarget: this._element
|
235
|
+
});
|
236
|
+
EventHandler__default['default'].trigger(this._element, EVENT_SHOWN, {
|
237
|
+
relatedTarget: previous
|
238
|
+
});
|
175
239
|
};
|
176
240
|
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
241
|
+
if (target) {
|
242
|
+
this._activate(target, target.parentNode, complete);
|
243
|
+
} else {
|
244
|
+
complete();
|
245
|
+
}
|
246
|
+
} // Private
|
247
|
+
|
248
|
+
|
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);
|
253
|
+
|
254
|
+
const complete = () => this._transitionComplete(element, active, callback);
|
255
|
+
|
256
|
+
if (active && isTransitioning) {
|
257
|
+
const transitionDuration = getTransitionDurationFromElement(active);
|
258
|
+
active.classList.remove(CLASS_NAME_SHOW);
|
259
|
+
EventHandler__default['default'].one(active, 'transitionend', complete);
|
260
|
+
emulateTransitionEnd(active, transitionDuration);
|
261
|
+
} else {
|
262
|
+
complete();
|
263
|
+
}
|
264
|
+
}
|
181
265
|
|
182
|
-
|
183
|
-
|
184
|
-
|
266
|
+
_transitionComplete(element, active, callback) {
|
267
|
+
if (active) {
|
268
|
+
active.classList.remove(CLASS_NAME_ACTIVE);
|
269
|
+
const dropdownChild = SelectorEngine__default['default'].findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);
|
185
270
|
|
186
|
-
|
187
|
-
|
188
|
-
}
|
271
|
+
if (dropdownChild) {
|
272
|
+
dropdownChild.classList.remove(CLASS_NAME_ACTIVE);
|
189
273
|
}
|
190
274
|
|
191
|
-
|
192
|
-
|
193
|
-
if (element.getAttribute('role') === 'tab') {
|
194
|
-
element.setAttribute('aria-selected', true);
|
275
|
+
if (active.getAttribute('role') === 'tab') {
|
276
|
+
active.setAttribute('aria-selected', false);
|
195
277
|
}
|
278
|
+
}
|
196
279
|
|
197
|
-
|
198
|
-
$$$1(element).addClass(ClassName.SHOW);
|
280
|
+
element.classList.add(CLASS_NAME_ACTIVE);
|
199
281
|
|
200
|
-
|
201
|
-
|
282
|
+
if (element.getAttribute('role') === 'tab') {
|
283
|
+
element.setAttribute('aria-selected', true);
|
284
|
+
}
|
202
285
|
|
203
|
-
|
204
|
-
var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector.DROPDOWN_TOGGLE));
|
205
|
-
$$$1(dropdownToggleList).addClass(ClassName.ACTIVE);
|
206
|
-
}
|
286
|
+
reflow(element);
|
207
287
|
|
208
|
-
|
209
|
-
|
288
|
+
if (element.classList.contains(CLASS_NAME_FADE)) {
|
289
|
+
element.classList.add(CLASS_NAME_SHOW);
|
290
|
+
}
|
291
|
+
|
292
|
+
let parent = element.parentNode;
|
293
|
+
|
294
|
+
if (parent && parent.nodeName === 'LI') {
|
295
|
+
parent = parent.parentNode;
|
296
|
+
}
|
210
297
|
|
211
|
-
|
212
|
-
|
298
|
+
if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {
|
299
|
+
const dropdownElement = element.closest(SELECTOR_DROPDOWN);
|
300
|
+
|
301
|
+
if (dropdownElement) {
|
302
|
+
SelectorEngine__default['default'].find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));
|
213
303
|
}
|
214
|
-
}; // Static
|
215
304
|
|
305
|
+
element.setAttribute('aria-expanded', true);
|
306
|
+
}
|
216
307
|
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
308
|
+
if (callback) {
|
309
|
+
callback();
|
310
|
+
}
|
311
|
+
} // Static
|
221
312
|
|
222
|
-
if (!data) {
|
223
|
-
data = new Tab(this);
|
224
|
-
$this.data(DATA_KEY, data);
|
225
|
-
}
|
226
313
|
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
}
|
314
|
+
static jQueryInterface(config) {
|
315
|
+
return this.each(function () {
|
316
|
+
const data = Data__default['default'].get(this, DATA_KEY) || new Tab(this);
|
231
317
|
|
232
|
-
|
318
|
+
if (typeof config === 'string') {
|
319
|
+
if (typeof data[config] === 'undefined') {
|
320
|
+
throw new TypeError(`No method named "${config}"`);
|
233
321
|
}
|
234
|
-
});
|
235
|
-
};
|
236
322
|
|
237
|
-
|
238
|
-
key: "VERSION",
|
239
|
-
get: function get() {
|
240
|
-
return VERSION;
|
323
|
+
data[config]();
|
241
324
|
}
|
242
|
-
}
|
325
|
+
});
|
326
|
+
}
|
243
327
|
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
*/
|
328
|
+
}
|
329
|
+
/**
|
330
|
+
* ------------------------------------------------------------------------
|
331
|
+
* Data Api implementation
|
332
|
+
* ------------------------------------------------------------------------
|
333
|
+
*/
|
251
334
|
|
252
335
|
|
253
|
-
|
336
|
+
EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
337
|
+
if (['A', 'AREA'].includes(this.tagName)) {
|
254
338
|
event.preventDefault();
|
339
|
+
}
|
255
340
|
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
return Tab;
|
273
|
-
}($);
|
341
|
+
if (isDisabled(this)) {
|
342
|
+
return;
|
343
|
+
}
|
344
|
+
|
345
|
+
const data = Data__default['default'].get(this, DATA_KEY) || new Tab(this);
|
346
|
+
data.show();
|
347
|
+
});
|
348
|
+
/**
|
349
|
+
* ------------------------------------------------------------------------
|
350
|
+
* jQuery
|
351
|
+
* ------------------------------------------------------------------------
|
352
|
+
* add .Tab to jQuery only if jQuery is present
|
353
|
+
*/
|
354
|
+
|
355
|
+
defineJQueryPlugin(NAME, Tab);
|
274
356
|
|
275
357
|
return Tab;
|
276
358
|
|