bootstrap 4.6.0 → 5.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +61 -0
- data/Gemfile +1 -0
- data/README.md +33 -6
- data/Rakefile +10 -1
- data/assets/javascripts/bootstrap/alert.js +53 -155
- data/assets/javascripts/bootstrap/base-component.js +83 -0
- data/assets/javascripts/bootstrap/button.js +43 -198
- data/assets/javascripts/bootstrap/carousel.js +285 -550
- data/assets/javascripts/bootstrap/collapse.js +169 -323
- data/assets/javascripts/bootstrap/dom/data.js +62 -0
- data/assets/javascripts/bootstrap/dom/event-handler.js +236 -0
- data/assets/javascripts/bootstrap/dom/manipulator.js +71 -0
- data/assets/javascripts/bootstrap/dom/selector-engine.js +103 -0
- data/assets/javascripts/bootstrap/dropdown.js +300 -467
- data/assets/javascripts/bootstrap/modal.js +226 -575
- data/assets/javascripts/bootstrap/offcanvas.js +245 -0
- data/assets/javascripts/bootstrap/popover.js +61 -205
- data/assets/javascripts/bootstrap/scrollspy.js +216 -287
- data/assets/javascripts/bootstrap/tab.js +226 -203
- data/assets/javascripts/bootstrap/toast.js +136 -209
- data/assets/javascripts/bootstrap/tooltip.js +411 -757
- data/assets/javascripts/bootstrap/util/backdrop.js +139 -0
- data/assets/javascripts/bootstrap/util/component-functions.js +41 -0
- data/assets/javascripts/bootstrap/util/config.js +67 -0
- data/assets/javascripts/bootstrap/util/focustrap.js +113 -0
- data/assets/javascripts/bootstrap/util/index.js +281 -0
- data/assets/javascripts/bootstrap/util/sanitizer.js +110 -0
- data/assets/javascripts/bootstrap/util/scrollbar.js +112 -0
- data/assets/javascripts/bootstrap/util/swipe.js +134 -0
- data/assets/javascripts/bootstrap/util/template-factory.js +150 -0
- data/assets/javascripts/bootstrap-global-this-define.js +6 -0
- data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
- data/assets/javascripts/bootstrap-sprockets.js +23 -7
- data/assets/javascripts/bootstrap.js +3649 -3587
- data/assets/javascripts/bootstrap.min.js +3 -3
- data/assets/stylesheets/_bootstrap-grid.scss +53 -21
- data/assets/stylesheets/_bootstrap-reboot.scss +5 -7
- data/assets/stylesheets/_bootstrap-utilities.scss +19 -0
- data/assets/stylesheets/_bootstrap.scss +21 -13
- data/assets/stylesheets/bootstrap/_accordion.scss +158 -0
- data/assets/stylesheets/bootstrap/_alert.scss +32 -16
- data/assets/stylesheets/bootstrap/_badge.scss +15 -31
- data/assets/stylesheets/bootstrap/_breadcrumb.scss +22 -24
- data/assets/stylesheets/bootstrap/_button-group.scss +27 -48
- data/assets/stylesheets/bootstrap/_buttons.scss +136 -71
- data/assets/stylesheets/bootstrap/_card.scss +66 -113
- data/assets/stylesheets/bootstrap/_carousel.scss +83 -36
- data/assets/stylesheets/bootstrap/_close.scss +51 -28
- data/assets/stylesheets/bootstrap/_containers.scss +41 -0
- data/assets/stylesheets/bootstrap/_dropdown.scss +129 -71
- data/assets/stylesheets/bootstrap/_forms.scss +9 -347
- data/assets/stylesheets/bootstrap/_functions.scss +181 -23
- data/assets/stylesheets/bootstrap/_grid.scss +18 -52
- data/assets/stylesheets/bootstrap/_helpers.scss +12 -0
- data/assets/stylesheets/bootstrap/_images.scss +1 -1
- data/assets/stylesheets/bootstrap/_list-group.scss +77 -34
- data/assets/stylesheets/bootstrap/_maps.scss +174 -0
- data/assets/stylesheets/bootstrap/_mixins.scss +10 -15
- data/assets/stylesheets/bootstrap/_modal.scss +107 -110
- data/assets/stylesheets/bootstrap/_nav.scss +102 -25
- data/assets/stylesheets/bootstrap/_navbar.scss +129 -172
- data/assets/stylesheets/bootstrap/_offcanvas.scss +146 -0
- data/assets/stylesheets/bootstrap/_pagination.scss +72 -37
- data/assets/stylesheets/bootstrap/_placeholders.scss +51 -0
- data/assets/stylesheets/bootstrap/_popover.scss +99 -73
- data/assets/stylesheets/bootstrap/_progress.scss +35 -14
- data/assets/stylesheets/bootstrap/_reboot.scss +319 -192
- data/assets/stylesheets/bootstrap/_root.scss +177 -9
- data/assets/stylesheets/bootstrap/_spinners.scss +44 -24
- data/assets/stylesheets/bootstrap/_tables.scss +101 -115
- data/assets/stylesheets/bootstrap/_toasts.scss +54 -27
- data/assets/stylesheets/bootstrap/_tooltip.scss +67 -63
- data/assets/stylesheets/bootstrap/_transitions.scss +8 -1
- data/assets/stylesheets/bootstrap/_type.scss +40 -59
- data/assets/stylesheets/bootstrap/_utilities.scss +806 -18
- data/assets/stylesheets/bootstrap/_variables-dark.scss +87 -0
- data/assets/stylesheets/bootstrap/_variables.scss +1216 -615
- data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +95 -0
- data/assets/stylesheets/bootstrap/forms/_form-check.scss +189 -0
- data/assets/stylesheets/bootstrap/forms/_form-control.scss +214 -0
- data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
- data/assets/stylesheets/bootstrap/forms/_form-select.scss +80 -0
- data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
- data/assets/stylesheets/bootstrap/forms/_input-group.scss +132 -0
- data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
- data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
- data/assets/stylesheets/bootstrap/helpers/_color-bg.scss +7 -0
- data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +30 -0
- data/assets/stylesheets/bootstrap/helpers/_focus-ring.scss +5 -0
- data/assets/stylesheets/bootstrap/helpers/_icon-link.scss +25 -0
- data/assets/stylesheets/bootstrap/helpers/_position.scss +36 -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 +11 -6
- data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
- data/assets/stylesheets/bootstrap/mixins/_banner.scss +7 -0
- 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 +20 -16
- data/assets/stylesheets/bootstrap/mixins/_buttons.scss +60 -100
- data/assets/stylesheets/bootstrap/mixins/_caret.scss +34 -27
- data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
- data/assets/stylesheets/bootstrap/mixins/_color-mode.scss +21 -0
- data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
- data/assets/stylesheets/bootstrap/mixins/_container.scss +11 -0
- data/assets/stylesheets/bootstrap/mixins/_forms.scss +53 -85
- data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +119 -37
- data/assets/stylesheets/bootstrap/mixins/_image.scss +1 -21
- data/assets/stylesheets/bootstrap/mixins/_list-group.scss +7 -2
- data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_pagination.scss +7 -19
- data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +3 -3
- data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +24 -0
- data/assets/stylesheets/bootstrap/mixins/_transition.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_utilities.scss +97 -0
- data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +33 -0
- data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
- data/assets/stylesheets/bootstrap/vendor/_rfs.scss +276 -132
- data/bootstrap.gemspec +6 -7
- data/lib/bootstrap/engine.rb +7 -1
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +31 -7
- data/tasks/updater/network.rb +9 -3
- data/tasks/updater/scss.rb +2 -2
- data/tasks/updater.rb +2 -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_4_2.gemfile +1 -1
- data/test/gemfiles/rails_5_0.gemfile +1 -1
- data/test/gemfiles/rails_5_1.gemfile +1 -1
- data/test/gemfiles/rails_5_2.gemfile +8 -0
- data/test/gemfiles/rails_6_0.gemfile +1 -0
- data/test/gemfiles/rails_6_1.gemfile +8 -0
- data/test/gemfiles/rails_7_0_dartsass.gemfile +8 -0
- data/test/gemfiles/rails_7_0_sassc.gemfile +8 -0
- data/test/test_helper.rb +3 -2
- metadata +97 -85
- data/.travis.yml +0 -31
- 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,261 +1,284 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Bootstrap tab.js
|
|
3
|
-
* Copyright 2011-
|
|
2
|
+
* Bootstrap tab.js v5.3.2 (https://getbootstrap.com/)
|
|
3
|
+
* Copyright 2011-2023 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('./base-component.js'), require('./dom/event-handler.js'), require('./dom/selector-engine.js'), require('./util/index.js')) :
|
|
8
|
+
typeof define === 'function' && define.amd ? define(['./base-component', './dom/event-handler', './dom/selector-engine', './util/index'], factory) :
|
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.BaseComponent, global.EventHandler, global.SelectorEngine, global.Index));
|
|
10
|
+
})(this, (function (BaseComponent, EventHandler, SelectorEngine, index_js) { 'use strict';
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
for (var i = 0; i < props.length; i++) {
|
|
19
|
-
var descriptor = props[i];
|
|
20
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
|
21
|
-
descriptor.configurable = true;
|
|
22
|
-
if ("value" in descriptor) descriptor.writable = true;
|
|
23
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
12
|
+
/**
|
|
13
|
+
* --------------------------------------------------------------------------
|
|
14
|
+
* Bootstrap tab.js
|
|
15
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
16
|
+
* --------------------------------------------------------------------------
|
|
17
|
+
*/
|
|
26
18
|
|
|
27
|
-
function _createClass(Constructor, protoProps, staticProps) {
|
|
28
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
29
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
30
|
-
return Constructor;
|
|
31
|
-
}
|
|
32
19
|
|
|
33
20
|
/**
|
|
34
|
-
* ------------------------------------------------------------------------
|
|
35
21
|
* Constants
|
|
36
|
-
* ------------------------------------------------------------------------
|
|
37
22
|
*/
|
|
38
23
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
24
|
+
const NAME = 'tab';
|
|
25
|
+
const DATA_KEY = 'bs.tab';
|
|
26
|
+
const EVENT_KEY = `.${DATA_KEY}`;
|
|
27
|
+
const EVENT_HIDE = `hide${EVENT_KEY}`;
|
|
28
|
+
const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
|
|
29
|
+
const EVENT_SHOW = `show${EVENT_KEY}`;
|
|
30
|
+
const EVENT_SHOWN = `shown${EVENT_KEY}`;
|
|
31
|
+
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}`;
|
|
32
|
+
const EVENT_KEYDOWN = `keydown${EVENT_KEY}`;
|
|
33
|
+
const EVENT_LOAD_DATA_API = `load${EVENT_KEY}`;
|
|
34
|
+
const ARROW_LEFT_KEY = 'ArrowLeft';
|
|
35
|
+
const ARROW_RIGHT_KEY = 'ArrowRight';
|
|
36
|
+
const ARROW_UP_KEY = 'ArrowUp';
|
|
37
|
+
const ARROW_DOWN_KEY = 'ArrowDown';
|
|
38
|
+
const HOME_KEY = 'Home';
|
|
39
|
+
const END_KEY = 'End';
|
|
40
|
+
const CLASS_NAME_ACTIVE = 'active';
|
|
41
|
+
const CLASS_NAME_FADE = 'fade';
|
|
42
|
+
const CLASS_NAME_SHOW = 'show';
|
|
43
|
+
const CLASS_DROPDOWN = 'dropdown';
|
|
44
|
+
const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
|
|
45
|
+
const SELECTOR_DROPDOWN_MENU = '.dropdown-menu';
|
|
46
|
+
const NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`;
|
|
47
|
+
const SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]';
|
|
48
|
+
const SELECTOR_OUTER = '.nav-item, .list-group-item';
|
|
49
|
+
const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;
|
|
50
|
+
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; // TODO: could only be `tab` in v6
|
|
51
|
+
const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;
|
|
52
|
+
const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle="tab"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="pill"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="list"]`;
|
|
53
|
+
|
|
62
54
|
/**
|
|
63
|
-
*
|
|
64
|
-
* Class Definition
|
|
65
|
-
* ------------------------------------------------------------------------
|
|
55
|
+
* Class definition
|
|
66
56
|
*/
|
|
67
57
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
58
|
+
class Tab extends BaseComponent {
|
|
59
|
+
constructor(element) {
|
|
60
|
+
super(element);
|
|
61
|
+
this._parent = this._element.closest(SELECTOR_TAB_PANEL);
|
|
62
|
+
if (!this._parent) {
|
|
63
|
+
return;
|
|
64
|
+
// TODO: should throw exception in v6
|
|
65
|
+
// throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)
|
|
66
|
+
}
|
|
72
67
|
|
|
68
|
+
// Set up initial aria attributes
|
|
69
|
+
this._setInitialAttributes(this._parent, this._getChildren());
|
|
70
|
+
EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));
|
|
71
|
+
}
|
|
73
72
|
|
|
74
|
-
|
|
73
|
+
// Getters
|
|
74
|
+
static get NAME() {
|
|
75
|
+
return NAME;
|
|
76
|
+
}
|
|
75
77
|
|
|
76
78
|
// Public
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
if (this.
|
|
79
|
+
show() {
|
|
80
|
+
// Shows this elem and deactivate the active sibling if exists
|
|
81
|
+
const innerElem = this._element;
|
|
82
|
+
if (this._elemIsActive(innerElem)) {
|
|
81
83
|
return;
|
|
82
84
|
}
|
|
83
85
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
previous = $__default['default'].makeArray($__default['default'](listElement).find(itemSelector));
|
|
92
|
-
previous = previous[previous.length - 1];
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
var hideEvent = $__default['default'].Event(EVENT_HIDE, {
|
|
96
|
-
relatedTarget: this._element
|
|
97
|
-
});
|
|
98
|
-
var showEvent = $__default['default'].Event(EVENT_SHOW, {
|
|
99
|
-
relatedTarget: previous
|
|
86
|
+
// Search for active tab on same parent to deactivate it
|
|
87
|
+
const active = this._getActiveElem();
|
|
88
|
+
const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE, {
|
|
89
|
+
relatedTarget: innerElem
|
|
90
|
+
}) : null;
|
|
91
|
+
const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, {
|
|
92
|
+
relatedTarget: active
|
|
100
93
|
});
|
|
101
|
-
|
|
102
|
-
if (previous) {
|
|
103
|
-
$__default['default'](previous).trigger(hideEvent);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
$__default['default'](this._element).trigger(showEvent);
|
|
107
|
-
|
|
108
|
-
if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {
|
|
94
|
+
if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {
|
|
109
95
|
return;
|
|
110
96
|
}
|
|
97
|
+
this._deactivate(active, innerElem);
|
|
98
|
+
this._activate(innerElem, active);
|
|
99
|
+
}
|
|
111
100
|
|
|
112
|
-
|
|
113
|
-
|
|
101
|
+
// Private
|
|
102
|
+
_activate(element, relatedElem) {
|
|
103
|
+
if (!element) {
|
|
104
|
+
return;
|
|
114
105
|
}
|
|
106
|
+
element.classList.add(CLASS_NAME_ACTIVE);
|
|
107
|
+
this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section
|
|
115
108
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
109
|
+
const complete = () => {
|
|
110
|
+
if (element.getAttribute('role') !== 'tab') {
|
|
111
|
+
element.classList.add(CLASS_NAME_SHOW);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
element.removeAttribute('tabindex');
|
|
115
|
+
element.setAttribute('aria-selected', true);
|
|
116
|
+
this._toggleDropDown(element, true);
|
|
117
|
+
EventHandler.trigger(element, EVENT_SHOWN, {
|
|
118
|
+
relatedTarget: relatedElem
|
|
124
119
|
});
|
|
125
|
-
$__default['default'](previous).trigger(hiddenEvent);
|
|
126
|
-
$__default['default'](_this._element).trigger(shownEvent);
|
|
127
120
|
};
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
121
|
+
this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));
|
|
122
|
+
}
|
|
123
|
+
_deactivate(element, relatedElem) {
|
|
124
|
+
if (!element) {
|
|
125
|
+
return;
|
|
133
126
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
var complete = function complete() {
|
|
150
|
-
return _this2._transitionComplete(element, active, callback);
|
|
127
|
+
element.classList.remove(CLASS_NAME_ACTIVE);
|
|
128
|
+
element.blur();
|
|
129
|
+
this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too
|
|
130
|
+
|
|
131
|
+
const complete = () => {
|
|
132
|
+
if (element.getAttribute('role') !== 'tab') {
|
|
133
|
+
element.classList.remove(CLASS_NAME_SHOW);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
element.setAttribute('aria-selected', false);
|
|
137
|
+
element.setAttribute('tabindex', '-1');
|
|
138
|
+
this._toggleDropDown(element, false);
|
|
139
|
+
EventHandler.trigger(element, EVENT_HIDDEN, {
|
|
140
|
+
relatedTarget: relatedElem
|
|
141
|
+
});
|
|
151
142
|
};
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
143
|
+
this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));
|
|
144
|
+
}
|
|
145
|
+
_keydown(event) {
|
|
146
|
+
if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key)) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page
|
|
150
|
+
event.preventDefault();
|
|
151
|
+
const children = this._getChildren().filter(element => !index_js.isDisabled(element));
|
|
152
|
+
let nextActiveElement;
|
|
153
|
+
if ([HOME_KEY, END_KEY].includes(event.key)) {
|
|
154
|
+
nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];
|
|
156
155
|
} else {
|
|
157
|
-
|
|
156
|
+
const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);
|
|
157
|
+
nextActiveElement = index_js.getNextActiveElement(children, event.target, isNext, true);
|
|
158
158
|
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
var dropdownChild = $__default['default'](active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0];
|
|
165
|
-
|
|
166
|
-
if (dropdownChild) {
|
|
167
|
-
$__default['default'](dropdownChild).removeClass(CLASS_NAME_ACTIVE);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
if (active.getAttribute('role') === 'tab') {
|
|
171
|
-
active.setAttribute('aria-selected', false);
|
|
172
|
-
}
|
|
159
|
+
if (nextActiveElement) {
|
|
160
|
+
nextActiveElement.focus({
|
|
161
|
+
preventScroll: true
|
|
162
|
+
});
|
|
163
|
+
Tab.getOrCreateInstance(nextActiveElement).show();
|
|
173
164
|
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
165
|
+
}
|
|
166
|
+
_getChildren() {
|
|
167
|
+
// collection of inner elements
|
|
168
|
+
return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);
|
|
169
|
+
}
|
|
170
|
+
_getActiveElem() {
|
|
171
|
+
return this._getChildren().find(child => this._elemIsActive(child)) || null;
|
|
172
|
+
}
|
|
173
|
+
_setInitialAttributes(parent, children) {
|
|
174
|
+
this._setAttributeIfNotExists(parent, 'role', 'tablist');
|
|
175
|
+
for (const child of children) {
|
|
176
|
+
this._setInitialAttributesOnChild(child);
|
|
179
177
|
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
178
|
+
}
|
|
179
|
+
_setInitialAttributesOnChild(child) {
|
|
180
|
+
child = this._getInnerElement(child);
|
|
181
|
+
const isActive = this._elemIsActive(child);
|
|
182
|
+
const outerElem = this._getOuterElement(child);
|
|
183
|
+
child.setAttribute('aria-selected', isActive);
|
|
184
|
+
if (outerElem !== child) {
|
|
185
|
+
this._setAttributeIfNotExists(outerElem, 'role', 'presentation');
|
|
185
186
|
}
|
|
187
|
+
if (!isActive) {
|
|
188
|
+
child.setAttribute('tabindex', '-1');
|
|
189
|
+
}
|
|
190
|
+
this._setAttributeIfNotExists(child, 'role', 'tab');
|
|
186
191
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
192
|
+
// set attributes to the related panel too
|
|
193
|
+
this._setInitialAttributesOnTargetPanel(child);
|
|
194
|
+
}
|
|
195
|
+
_setInitialAttributesOnTargetPanel(child) {
|
|
196
|
+
const target = SelectorEngine.getElementFromSelector(child);
|
|
197
|
+
if (!target) {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
this._setAttributeIfNotExists(target, 'role', 'tabpanel');
|
|
201
|
+
if (child.id) {
|
|
202
|
+
this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
_toggleDropDown(element, open) {
|
|
206
|
+
const outerElem = this._getOuterElement(element);
|
|
207
|
+
if (!outerElem.classList.contains(CLASS_DROPDOWN)) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
const toggle = (selector, className) => {
|
|
211
|
+
const element = SelectorEngine.findOne(selector, outerElem);
|
|
212
|
+
if (element) {
|
|
213
|
+
element.classList.toggle(className, open);
|
|
193
214
|
}
|
|
194
|
-
|
|
195
|
-
|
|
215
|
+
};
|
|
216
|
+
toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);
|
|
217
|
+
toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW);
|
|
218
|
+
outerElem.setAttribute('aria-expanded', open);
|
|
219
|
+
}
|
|
220
|
+
_setAttributeIfNotExists(element, attribute, value) {
|
|
221
|
+
if (!element.hasAttribute(attribute)) {
|
|
222
|
+
element.setAttribute(attribute, value);
|
|
196
223
|
}
|
|
224
|
+
}
|
|
225
|
+
_elemIsActive(elem) {
|
|
226
|
+
return elem.classList.contains(CLASS_NAME_ACTIVE);
|
|
227
|
+
}
|
|
197
228
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
}
|
|
202
|
-
;
|
|
229
|
+
// Try to get the inner element (usually the .nav-link)
|
|
230
|
+
_getInnerElement(elem) {
|
|
231
|
+
return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);
|
|
232
|
+
}
|
|
203
233
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
234
|
+
// Try to get the outer element (usually the .nav-item)
|
|
235
|
+
_getOuterElement(elem) {
|
|
236
|
+
return elem.closest(SELECTOR_OUTER) || elem;
|
|
237
|
+
}
|
|
208
238
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
239
|
+
// Static
|
|
240
|
+
static jQueryInterface(config) {
|
|
241
|
+
return this.each(function () {
|
|
242
|
+
const data = Tab.getOrCreateInstance(this);
|
|
243
|
+
if (typeof config !== 'string') {
|
|
244
|
+
return;
|
|
212
245
|
}
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
if (typeof data[config] === 'undefined') {
|
|
216
|
-
throw new TypeError("No method named \"" + config + "\"");
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
data[config]();
|
|
246
|
+
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
247
|
+
throw new TypeError(`No method named "${config}"`);
|
|
220
248
|
}
|
|
249
|
+
data[config]();
|
|
221
250
|
});
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
_createClass(Tab, null, [{
|
|
225
|
-
key: "VERSION",
|
|
226
|
-
get: function get() {
|
|
227
|
-
return VERSION;
|
|
228
|
-
}
|
|
229
|
-
}]);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
230
253
|
|
|
231
|
-
return Tab;
|
|
232
|
-
}();
|
|
233
254
|
/**
|
|
234
|
-
*
|
|
235
|
-
* Data Api implementation
|
|
236
|
-
* ------------------------------------------------------------------------
|
|
255
|
+
* Data API implementation
|
|
237
256
|
*/
|
|
238
257
|
|
|
258
|
+
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
|
259
|
+
if (['A', 'AREA'].includes(this.tagName)) {
|
|
260
|
+
event.preventDefault();
|
|
261
|
+
}
|
|
262
|
+
if (index_js.isDisabled(this)) {
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
Tab.getOrCreateInstance(this).show();
|
|
266
|
+
});
|
|
239
267
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
268
|
+
/**
|
|
269
|
+
* Initialize on focus
|
|
270
|
+
*/
|
|
271
|
+
EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
|
|
272
|
+
for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {
|
|
273
|
+
Tab.getOrCreateInstance(element);
|
|
274
|
+
}
|
|
244
275
|
});
|
|
245
276
|
/**
|
|
246
|
-
* ------------------------------------------------------------------------
|
|
247
277
|
* jQuery
|
|
248
|
-
* ------------------------------------------------------------------------
|
|
249
278
|
*/
|
|
250
279
|
|
|
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
|
-
};
|
|
280
|
+
index_js.defineJQueryPlugin(Tab);
|
|
258
281
|
|
|
259
282
|
return Tab;
|
|
260
283
|
|
|
261
|
-
}))
|
|
284
|
+
}));
|