bootstrap 4.5.3 → 5.2.3
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 +55 -0
- data/README.md +28 -5
- data/assets/javascripts/bootstrap/alert.js +54 -133
- data/assets/javascripts/bootstrap/base-component.js +99 -0
- data/assets/javascripts/bootstrap/button.js +44 -183
- data/assets/javascripts/bootstrap/carousel.js +308 -450
- data/assets/javascripts/bootstrap/collapse.js +180 -243
- data/assets/javascripts/bootstrap/dom/data.js +66 -0
- data/assets/javascripts/bootstrap/dom/event-handler.js +283 -0
- data/assets/javascripts/bootstrap/dom/manipulator.js +84 -0
- data/assets/javascripts/bootstrap/dom/selector-engine.js +85 -0
- data/assets/javascripts/bootstrap/dropdown.js +320 -387
- data/assets/javascripts/bootstrap/modal.js +238 -478
- data/assets/javascripts/bootstrap/offcanvas.js +297 -0
- data/assets/javascripts/bootstrap/popover.js +58 -163
- data/assets/javascripts/bootstrap/scrollspy.js +223 -228
- data/assets/javascripts/bootstrap/tab.js +251 -166
- data/assets/javascripts/bootstrap/toast.js +147 -149
- data/assets/javascripts/bootstrap/tooltip.js +434 -646
- data/assets/javascripts/bootstrap/util/backdrop.js +165 -0
- data/assets/javascripts/bootstrap/util/component-functions.js +46 -0
- data/assets/javascripts/bootstrap/util/config.js +79 -0
- data/assets/javascripts/bootstrap/util/focustrap.js +129 -0
- data/assets/javascripts/bootstrap/util/index.js +350 -0
- data/assets/javascripts/bootstrap/util/sanitizer.js +122 -0
- data/assets/javascripts/bootstrap/util/scrollbar.js +138 -0
- data/assets/javascripts/bootstrap/util/swipe.js +155 -0
- data/assets/javascripts/bootstrap/util/template-factory.js +177 -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 +24 -8
- data/assets/javascripts/bootstrap.js +4037 -3206
- data/assets/javascripts/bootstrap.min.js +3 -3
- data/assets/stylesheets/_bootstrap-grid.scss +56 -21
- data/assets/stylesheets/_bootstrap-reboot.scss +4 -7
- data/assets/stylesheets/_bootstrap.scss +20 -13
- data/assets/stylesheets/bootstrap/_accordion.scss +149 -0
- data/assets/stylesheets/bootstrap/_alert.scss +33 -14
- data/assets/stylesheets/bootstrap/_badge.scss +15 -31
- data/assets/stylesheets/bootstrap/_breadcrumb.scss +23 -27
- data/assets/stylesheets/bootstrap/_button-group.scss +25 -46
- data/assets/stylesheets/bootstrap/_buttons.scss +136 -71
- data/assets/stylesheets/bootstrap/_card.scss +61 -113
- data/assets/stylesheets/bootstrap/_carousel.scss +64 -35
- data/assets/stylesheets/bootstrap/_close.scss +30 -30
- data/assets/stylesheets/bootstrap/_containers.scss +41 -0
- data/assets/stylesheets/bootstrap/_dropdown.scss +128 -71
- data/assets/stylesheets/bootstrap/_forms.scss +9 -347
- data/assets/stylesheets/bootstrap/_functions.scss +181 -23
- data/assets/stylesheets/bootstrap/_grid.scss +13 -53
- data/assets/stylesheets/bootstrap/_helpers.scss +10 -0
- data/assets/stylesheets/bootstrap/_images.scss +1 -1
- data/assets/stylesheets/bootstrap/_list-group.scss +72 -34
- data/assets/stylesheets/bootstrap/_maps.scss +54 -0
- data/assets/stylesheets/bootstrap/_mixins.scss +9 -13
- data/assets/stylesheets/bootstrap/_modal.scss +107 -110
- data/assets/stylesheets/bootstrap/_nav.scss +72 -23
- data/assets/stylesheets/bootstrap/_navbar.scss +127 -173
- data/assets/stylesheets/bootstrap/_offcanvas.scss +144 -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 +26 -14
- data/assets/stylesheets/bootstrap/_reboot.scss +326 -200
- data/assets/stylesheets/bootstrap/_root.scss +62 -9
- data/assets/stylesheets/bootstrap/_spinners.scss +51 -22
- data/assets/stylesheets/bootstrap/_tables.scss +94 -115
- data/assets/stylesheets/bootstrap/_toasts.scss +54 -27
- data/assets/stylesheets/bootstrap/_tooltip.scss +68 -63
- data/assets/stylesheets/bootstrap/_transitions.scss +8 -1
- data/assets/stylesheets/bootstrap/_type.scss +40 -59
- data/assets/stylesheets/bootstrap/_utilities.scss +647 -18
- data/assets/stylesheets/bootstrap/_variables.scss +1018 -526
- data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +18 -0
- data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +75 -0
- data/assets/stylesheets/bootstrap/forms/_form-check.scss +175 -0
- data/assets/stylesheets/bootstrap/forms/_form-control.scss +194 -0
- data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
- data/assets/stylesheets/bootstrap/forms/_form-select.scss +71 -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 +10 -0
- data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +12 -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 +8 -6
- data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
- data/assets/stylesheets/bootstrap/mixins/_banner.scss +9 -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 +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 +11 -0
- data/assets/stylesheets/bootstrap/mixins/_forms.scss +48 -74
- 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 +5 -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 +29 -0
- data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
- data/assets/stylesheets/bootstrap/vendor/_rfs.scss +278 -128
- data/bootstrap.gemspec +3 -5
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +31 -7
- data/tasks/updater/network.rb +9 -3
- 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_5_2.gemfile +8 -0
- data/test/gemfiles/rails_6_1.gemfile +7 -0
- data/test/gemfiles/rails_7_0.gemfile +7 -0
- data/test/test_helper.rb +3 -2
- metadata +70 -78
- 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 -524
- data/assets/stylesheets/bootstrap/_input-group.scss +0 -192
- 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,248 +1,333 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Bootstrap tab.js
|
|
3
|
-
* Copyright 2011-
|
|
2
|
+
* Bootstrap tab.js v5.2.3 (https://getbootstrap.com/)
|
|
3
|
+
* Copyright 2011-2022 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('./util/index'), require('./dom/event-handler'), require('./dom/selector-engine'), require('./base-component')) :
|
|
8
|
+
typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './dom/selector-engine', './base-component'], factory) :
|
|
9
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.Index, global.EventHandler, global.SelectorEngine, global.BaseComponent));
|
|
10
|
+
})(this, (function (index, EventHandler, SelectorEngine, BaseComponent) { 'use strict';
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
|
|
15
|
+
const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
|
|
16
|
+
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
|
|
16
17
|
|
|
17
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
18
|
-
|
|
19
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
|
20
18
|
/**
|
|
21
|
-
*
|
|
19
|
+
* --------------------------------------------------------------------------
|
|
20
|
+
* Bootstrap (v5.2.3): tab.js
|
|
21
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
22
|
+
* --------------------------------------------------------------------------
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
22
25
|
* Constants
|
|
23
|
-
* ------------------------------------------------------------------------
|
|
24
26
|
*/
|
|
25
27
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
28
|
+
const NAME = 'tab';
|
|
29
|
+
const DATA_KEY = 'bs.tab';
|
|
30
|
+
const EVENT_KEY = `.${DATA_KEY}`;
|
|
31
|
+
const EVENT_HIDE = `hide${EVENT_KEY}`;
|
|
32
|
+
const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
|
|
33
|
+
const EVENT_SHOW = `show${EVENT_KEY}`;
|
|
34
|
+
const EVENT_SHOWN = `shown${EVENT_KEY}`;
|
|
35
|
+
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}`;
|
|
36
|
+
const EVENT_KEYDOWN = `keydown${EVENT_KEY}`;
|
|
37
|
+
const EVENT_LOAD_DATA_API = `load${EVENT_KEY}`;
|
|
38
|
+
const ARROW_LEFT_KEY = 'ArrowLeft';
|
|
39
|
+
const ARROW_RIGHT_KEY = 'ArrowRight';
|
|
40
|
+
const ARROW_UP_KEY = 'ArrowUp';
|
|
41
|
+
const ARROW_DOWN_KEY = 'ArrowDown';
|
|
42
|
+
const CLASS_NAME_ACTIVE = 'active';
|
|
43
|
+
const CLASS_NAME_FADE = 'fade';
|
|
44
|
+
const CLASS_NAME_SHOW = 'show';
|
|
45
|
+
const CLASS_DROPDOWN = 'dropdown';
|
|
46
|
+
const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
|
|
47
|
+
const SELECTOR_DROPDOWN_MENU = '.dropdown-menu';
|
|
48
|
+
const NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)';
|
|
49
|
+
const SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]';
|
|
50
|
+
const SELECTOR_OUTER = '.nav-item, .list-group-item';
|
|
51
|
+
const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;
|
|
52
|
+
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; // todo:v6: could be only `tab`
|
|
53
|
+
|
|
54
|
+
const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;
|
|
55
|
+
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"]`;
|
|
49
56
|
/**
|
|
50
|
-
*
|
|
51
|
-
* Class Definition
|
|
52
|
-
* ------------------------------------------------------------------------
|
|
57
|
+
* Class definition
|
|
53
58
|
*/
|
|
54
59
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
60
|
+
class Tab extends BaseComponent__default.default {
|
|
61
|
+
constructor(element) {
|
|
62
|
+
super(element);
|
|
63
|
+
this._parent = this._element.closest(SELECTOR_TAB_PANEL);
|
|
64
|
+
|
|
65
|
+
if (!this._parent) {
|
|
66
|
+
return; // todo: should Throw exception on v6
|
|
67
|
+
// throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)
|
|
68
|
+
} // Set up initial aria attributes
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
this._setInitialAttributes(this._parent, this._getChildren());
|
|
72
|
+
|
|
73
|
+
EventHandler__default.default.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));
|
|
58
74
|
} // Getters
|
|
59
75
|
|
|
60
76
|
|
|
61
|
-
|
|
77
|
+
static get NAME() {
|
|
78
|
+
return NAME;
|
|
79
|
+
} // Public
|
|
80
|
+
|
|
62
81
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
82
|
+
show() {
|
|
83
|
+
// Shows this elem and deactivate the active sibling if exists
|
|
84
|
+
const innerElem = this._element;
|
|
66
85
|
|
|
67
|
-
if (this.
|
|
86
|
+
if (this._elemIsActive(innerElem)) {
|
|
68
87
|
return;
|
|
69
|
-
}
|
|
88
|
+
} // Search for active tab on same parent to deactivate it
|
|
70
89
|
|
|
71
|
-
var target;
|
|
72
|
-
var previous;
|
|
73
|
-
var listElement = $__default['default'](this._element).closest(SELECTOR_NAV_LIST_GROUP)[0];
|
|
74
|
-
var selector = Util__default['default'].getSelectorFromElement(this._element);
|
|
75
90
|
|
|
76
|
-
|
|
77
|
-
var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;
|
|
78
|
-
previous = $__default['default'].makeArray($__default['default'](listElement).find(itemSelector));
|
|
79
|
-
previous = previous[previous.length - 1];
|
|
80
|
-
}
|
|
91
|
+
const active = this._getActiveElem();
|
|
81
92
|
|
|
82
|
-
|
|
83
|
-
relatedTarget:
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
relatedTarget:
|
|
93
|
+
const hideEvent = active ? EventHandler__default.default.trigger(active, EVENT_HIDE, {
|
|
94
|
+
relatedTarget: innerElem
|
|
95
|
+
}) : null;
|
|
96
|
+
const showEvent = EventHandler__default.default.trigger(innerElem, EVENT_SHOW, {
|
|
97
|
+
relatedTarget: active
|
|
87
98
|
});
|
|
88
99
|
|
|
89
|
-
if (
|
|
90
|
-
|
|
100
|
+
if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {
|
|
101
|
+
return;
|
|
91
102
|
}
|
|
92
103
|
|
|
93
|
-
|
|
104
|
+
this._deactivate(active, innerElem);
|
|
105
|
+
|
|
106
|
+
this._activate(innerElem, active);
|
|
107
|
+
} // Private
|
|
108
|
+
|
|
94
109
|
|
|
95
|
-
|
|
110
|
+
_activate(element, relatedElem) {
|
|
111
|
+
if (!element) {
|
|
96
112
|
return;
|
|
97
113
|
}
|
|
98
114
|
|
|
99
|
-
|
|
100
|
-
target = document.querySelector(selector);
|
|
101
|
-
}
|
|
115
|
+
element.classList.add(CLASS_NAME_ACTIVE);
|
|
102
116
|
|
|
103
|
-
this._activate(
|
|
117
|
+
this._activate(index.getElementFromSelector(element)); // Search and activate/show the proper section
|
|
104
118
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
119
|
+
|
|
120
|
+
const complete = () => {
|
|
121
|
+
if (element.getAttribute('role') !== 'tab') {
|
|
122
|
+
element.classList.add(CLASS_NAME_SHOW);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
element.removeAttribute('tabindex');
|
|
127
|
+
element.setAttribute('aria-selected', true);
|
|
128
|
+
|
|
129
|
+
this._toggleDropDown(element, true);
|
|
130
|
+
|
|
131
|
+
EventHandler__default.default.trigger(element, EVENT_SHOWN, {
|
|
132
|
+
relatedTarget: relatedElem
|
|
111
133
|
});
|
|
112
|
-
$__default['default'](previous).trigger(hiddenEvent);
|
|
113
|
-
$__default['default'](_this._element).trigger(shownEvent);
|
|
114
134
|
};
|
|
115
135
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
136
|
+
this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
_deactivate(element, relatedElem) {
|
|
140
|
+
if (!element) {
|
|
141
|
+
return;
|
|
120
142
|
}
|
|
121
|
-
};
|
|
122
143
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
;
|
|
144
|
+
element.classList.remove(CLASS_NAME_ACTIVE);
|
|
145
|
+
element.blur();
|
|
146
|
+
|
|
147
|
+
this._deactivate(index.getElementFromSelector(element)); // Search and deactivate the shown section too
|
|
128
148
|
|
|
129
|
-
_proto._activate = function _activate(element, container, callback) {
|
|
130
|
-
var _this2 = this;
|
|
131
149
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
150
|
+
const complete = () => {
|
|
151
|
+
if (element.getAttribute('role') !== 'tab') {
|
|
152
|
+
element.classList.remove(CLASS_NAME_SHOW);
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
element.setAttribute('aria-selected', false);
|
|
157
|
+
element.setAttribute('tabindex', '-1');
|
|
135
158
|
|
|
136
|
-
|
|
137
|
-
|
|
159
|
+
this._toggleDropDown(element, false);
|
|
160
|
+
|
|
161
|
+
EventHandler__default.default.trigger(element, EVENT_HIDDEN, {
|
|
162
|
+
relatedTarget: relatedElem
|
|
163
|
+
});
|
|
138
164
|
};
|
|
139
165
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
166
|
+
this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
_keydown(event) {
|
|
170
|
+
if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)) {
|
|
171
|
+
return;
|
|
145
172
|
}
|
|
146
|
-
};
|
|
147
173
|
|
|
148
|
-
|
|
149
|
-
if (active) {
|
|
150
|
-
$__default['default'](active).removeClass(CLASS_NAME_ACTIVE);
|
|
151
|
-
var dropdownChild = $__default['default'](active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0];
|
|
174
|
+
event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page
|
|
152
175
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
176
|
+
event.preventDefault();
|
|
177
|
+
const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);
|
|
178
|
+
const nextActiveElement = index.getNextActiveElement(this._getChildren().filter(element => !index.isDisabled(element)), event.target, isNext, true);
|
|
156
179
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
180
|
+
if (nextActiveElement) {
|
|
181
|
+
nextActiveElement.focus({
|
|
182
|
+
preventScroll: true
|
|
183
|
+
});
|
|
184
|
+
Tab.getOrCreateInstance(nextActiveElement).show();
|
|
160
185
|
}
|
|
186
|
+
}
|
|
161
187
|
|
|
162
|
-
|
|
188
|
+
_getChildren() {
|
|
189
|
+
// collection of inner elements
|
|
190
|
+
return SelectorEngine__default.default.find(SELECTOR_INNER_ELEM, this._parent);
|
|
191
|
+
}
|
|
163
192
|
|
|
164
|
-
|
|
165
|
-
|
|
193
|
+
_getActiveElem() {
|
|
194
|
+
return this._getChildren().find(child => this._elemIsActive(child)) || null;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
_setInitialAttributes(parent, children) {
|
|
198
|
+
this._setAttributeIfNotExists(parent, 'role', 'tablist');
|
|
199
|
+
|
|
200
|
+
for (const child of children) {
|
|
201
|
+
this._setInitialAttributesOnChild(child);
|
|
166
202
|
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
_setInitialAttributesOnChild(child) {
|
|
206
|
+
child = this._getInnerElement(child);
|
|
207
|
+
|
|
208
|
+
const isActive = this._elemIsActive(child);
|
|
209
|
+
|
|
210
|
+
const outerElem = this._getOuterElement(child);
|
|
211
|
+
|
|
212
|
+
child.setAttribute('aria-selected', isActive);
|
|
167
213
|
|
|
168
|
-
|
|
214
|
+
if (outerElem !== child) {
|
|
215
|
+
this._setAttributeIfNotExists(outerElem, 'role', 'presentation');
|
|
216
|
+
}
|
|
169
217
|
|
|
170
|
-
if (
|
|
171
|
-
|
|
218
|
+
if (!isActive) {
|
|
219
|
+
child.setAttribute('tabindex', '-1');
|
|
172
220
|
}
|
|
173
221
|
|
|
174
|
-
|
|
175
|
-
var dropdownElement = $__default['default'](element).closest(SELECTOR_DROPDOWN)[0];
|
|
222
|
+
this._setAttributeIfNotExists(child, 'role', 'tab'); // set attributes to the related panel too
|
|
176
223
|
|
|
177
|
-
if (dropdownElement) {
|
|
178
|
-
var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE));
|
|
179
|
-
$__default['default'](dropdownToggleList).addClass(CLASS_NAME_ACTIVE);
|
|
180
|
-
}
|
|
181
224
|
|
|
182
|
-
|
|
225
|
+
this._setInitialAttributesOnTargetPanel(child);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
_setInitialAttributesOnTargetPanel(child) {
|
|
229
|
+
const target = index.getElementFromSelector(child);
|
|
230
|
+
|
|
231
|
+
if (!target) {
|
|
232
|
+
return;
|
|
183
233
|
}
|
|
184
234
|
|
|
185
|
-
|
|
186
|
-
|
|
235
|
+
this._setAttributeIfNotExists(target, 'role', 'tabpanel');
|
|
236
|
+
|
|
237
|
+
if (child.id) {
|
|
238
|
+
this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
_toggleDropDown(element, open) {
|
|
243
|
+
const outerElem = this._getOuterElement(element);
|
|
244
|
+
|
|
245
|
+
if (!outerElem.classList.contains(CLASS_DROPDOWN)) {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
const toggle = (selector, className) => {
|
|
250
|
+
const element = SelectorEngine__default.default.findOne(selector, outerElem);
|
|
251
|
+
|
|
252
|
+
if (element) {
|
|
253
|
+
element.classList.toggle(className, open);
|
|
254
|
+
}
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);
|
|
258
|
+
toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW);
|
|
259
|
+
outerElem.setAttribute('aria-expanded', open);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
_setAttributeIfNotExists(element, attribute, value) {
|
|
263
|
+
if (!element.hasAttribute(attribute)) {
|
|
264
|
+
element.setAttribute(attribute, value);
|
|
187
265
|
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
_elemIsActive(elem) {
|
|
269
|
+
return elem.classList.contains(CLASS_NAME_ACTIVE);
|
|
270
|
+
} // Try to get the inner element (usually the .nav-link)
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
_getInnerElement(elem) {
|
|
274
|
+
return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine__default.default.findOne(SELECTOR_INNER_ELEM, elem);
|
|
275
|
+
} // Try to get the outer element (usually the .nav-item)
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
_getOuterElement(elem) {
|
|
279
|
+
return elem.closest(SELECTOR_OUTER) || elem;
|
|
188
280
|
} // Static
|
|
189
|
-
;
|
|
190
281
|
|
|
191
|
-
|
|
282
|
+
|
|
283
|
+
static jQueryInterface(config) {
|
|
192
284
|
return this.each(function () {
|
|
193
|
-
|
|
194
|
-
var data = $this.data(DATA_KEY);
|
|
285
|
+
const data = Tab.getOrCreateInstance(this);
|
|
195
286
|
|
|
196
|
-
if (
|
|
197
|
-
|
|
198
|
-
$this.data(DATA_KEY, data);
|
|
287
|
+
if (typeof config !== 'string') {
|
|
288
|
+
return;
|
|
199
289
|
}
|
|
200
290
|
|
|
201
|
-
if (
|
|
202
|
-
|
|
203
|
-
throw new TypeError("No method named \"" + config + "\"");
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
data[config]();
|
|
291
|
+
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
|
292
|
+
throw new TypeError(`No method named "${config}"`);
|
|
207
293
|
}
|
|
208
|
-
});
|
|
209
|
-
};
|
|
210
294
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
return VERSION;
|
|
215
|
-
}
|
|
216
|
-
}]);
|
|
295
|
+
data[config]();
|
|
296
|
+
});
|
|
297
|
+
}
|
|
217
298
|
|
|
218
|
-
|
|
219
|
-
}();
|
|
299
|
+
}
|
|
220
300
|
/**
|
|
221
|
-
*
|
|
222
|
-
* Data Api implementation
|
|
223
|
-
* ------------------------------------------------------------------------
|
|
301
|
+
* Data API implementation
|
|
224
302
|
*/
|
|
225
303
|
|
|
226
304
|
|
|
227
|
-
|
|
228
|
-
|
|
305
|
+
EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
|
306
|
+
if (['A', 'AREA'].includes(this.tagName)) {
|
|
307
|
+
event.preventDefault();
|
|
308
|
+
}
|
|
229
309
|
|
|
230
|
-
|
|
310
|
+
if (index.isDisabled(this)) {
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
Tab.getOrCreateInstance(this).show();
|
|
231
315
|
});
|
|
232
316
|
/**
|
|
233
|
-
*
|
|
234
|
-
* jQuery
|
|
235
|
-
* ------------------------------------------------------------------------
|
|
317
|
+
* Initialize on focus
|
|
236
318
|
*/
|
|
237
319
|
|
|
238
|
-
|
|
239
|
-
|
|
320
|
+
EventHandler__default.default.on(window, EVENT_LOAD_DATA_API, () => {
|
|
321
|
+
for (const element of SelectorEngine__default.default.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {
|
|
322
|
+
Tab.getOrCreateInstance(element);
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
/**
|
|
326
|
+
* jQuery
|
|
327
|
+
*/
|
|
240
328
|
|
|
241
|
-
|
|
242
|
-
$__default['default'].fn[NAME] = JQUERY_NO_CONFLICT;
|
|
243
|
-
return Tab._jQueryInterface;
|
|
244
|
-
};
|
|
329
|
+
index.defineJQueryPlugin(Tab);
|
|
245
330
|
|
|
246
331
|
return Tab;
|
|
247
332
|
|
|
248
|
-
}))
|
|
333
|
+
}));
|