aboutsummaryrefslogtreecommitdiff
path: root/js/src/tab.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tab.js')
-rw-r--r--js/src/tab.js58
1 files changed, 26 insertions, 32 deletions
diff --git a/js/src/tab.js b/js/src/tab.js
index c8aac3be7..7301779d6 100644
--- a/js/src/tab.js
+++ b/js/src/tab.js
@@ -1,17 +1,16 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.0.0-alpha3): tab.js
+ * Bootstrap (v5.0.0-beta3): tab.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
import {
- getjQuery,
- onDOMContentLoaded,
- TRANSITION_END,
+ defineJQueryPlugin,
emulateTransitionEnd,
getElementFromSelector,
getTransitionDurationFromElement,
+ isDisabled,
reflow
} from './util/index'
import Data from './dom/data'
@@ -38,7 +37,6 @@ const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'
const CLASS_NAME_ACTIVE = 'active'
-const CLASS_NAME_DISABLED = 'disabled'
const CLASS_NAME_FADE = 'fade'
const CLASS_NAME_SHOW = 'show'
@@ -68,8 +66,7 @@ class Tab extends BaseComponent {
show() {
if ((this._element.parentNode &&
this._element.parentNode.nodeType === Node.ELEMENT_NODE &&
- this._element.classList.contains(CLASS_NAME_ACTIVE)) ||
- this._element.classList.contains(CLASS_NAME_DISABLED)) {
+ this._element.classList.contains(CLASS_NAME_ACTIVE))) {
return
}
@@ -83,13 +80,11 @@ class Tab extends BaseComponent {
previous = previous[previous.length - 1]
}
- let hideEvent = null
-
- if (previous) {
- hideEvent = EventHandler.trigger(previous, EVENT_HIDE, {
+ const hideEvent = previous ?
+ EventHandler.trigger(previous, EVENT_HIDE, {
relatedTarget: this._element
- })
- }
+ }) :
+ null
const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {
relatedTarget: previous
@@ -133,7 +128,7 @@ class Tab extends BaseComponent {
const transitionDuration = getTransitionDurationFromElement(active)
active.classList.remove(CLASS_NAME_SHOW)
- EventHandler.one(active, TRANSITION_END, complete)
+ EventHandler.one(active, 'transitionend', complete)
emulateTransitionEnd(active, transitionDuration)
} else {
complete()
@@ -166,11 +161,16 @@ class Tab extends BaseComponent {
element.classList.add(CLASS_NAME_SHOW)
}
- if (element.parentNode && element.parentNode.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {
+ let parent = element.parentNode
+ if (parent && parent.nodeName === 'LI') {
+ parent = parent.parentNode
+ }
+
+ if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {
const dropdownElement = element.closest(SELECTOR_DROPDOWN)
if (dropdownElement) {
- SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE)
+ SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement)
.forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE))
}
@@ -186,7 +186,7 @@ class Tab extends BaseComponent {
static jQueryInterface(config) {
return this.each(function () {
- const data = Data.getData(this, DATA_KEY) || new Tab(this)
+ const data = Data.get(this, DATA_KEY) || new Tab(this)
if (typeof config === 'string') {
if (typeof data[config] === 'undefined') {
@@ -206,9 +206,15 @@ class Tab extends BaseComponent {
*/
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
- event.preventDefault()
+ if (['A', 'AREA'].includes(this.tagName)) {
+ event.preventDefault()
+ }
- const data = Data.getData(this, DATA_KEY) || new Tab(this)
+ if (isDisabled(this)) {
+ return
+ }
+
+ const data = Data.get(this, DATA_KEY) || new Tab(this)
data.show()
})
@@ -219,18 +225,6 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (
* add .Tab to jQuery only if jQuery is present
*/
-onDOMContentLoaded(() => {
- const $ = getjQuery()
- /* istanbul ignore if */
- if ($) {
- const JQUERY_NO_CONFLICT = $.fn[NAME]
- $.fn[NAME] = Tab.jQueryInterface
- $.fn[NAME].Constructor = Tab
- $.fn[NAME].noConflict = () => {
- $.fn[NAME] = JQUERY_NO_CONFLICT
- return Tab.jQueryInterface
- }
- }
-})
+defineJQueryPlugin(NAME, Tab)
export default Tab