mirror of
https://github.com/twbs/bootstrap.git
synced 2025-12-09 00:03:29 -05:00
* Force each plugin that extends base-components to implement a static method `NAME()` * Remove redundant `NAME` argument from 'Utils.defineJQueryPlugin' & fix test
81 lines
1.9 KiB
JavaScript
81 lines
1.9 KiB
JavaScript
/**
|
|
* --------------------------------------------------------------------------
|
|
* Bootstrap (v5.0.0): base-component.js
|
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
* --------------------------------------------------------------------------
|
|
*/
|
|
|
|
import Data from './dom/data'
|
|
import {
|
|
emulateTransitionEnd,
|
|
execute,
|
|
getTransitionDurationFromElement
|
|
} from './util/index'
|
|
import EventHandler from './dom/event-handler'
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------
|
|
* Constants
|
|
* ------------------------------------------------------------------------
|
|
*/
|
|
|
|
const VERSION = '5.0.0'
|
|
|
|
class BaseComponent {
|
|
constructor(element) {
|
|
element = typeof element === 'string' ? document.querySelector(element) : element
|
|
|
|
if (!element) {
|
|
return
|
|
}
|
|
|
|
this._element = element
|
|
Data.set(this._element, this.constructor.DATA_KEY, this)
|
|
}
|
|
|
|
dispose() {
|
|
Data.remove(this._element, this.constructor.DATA_KEY)
|
|
EventHandler.off(this._element, this.constructor.EVENT_KEY)
|
|
|
|
Object.getOwnPropertyNames(this).forEach(propertyName => {
|
|
this[propertyName] = null
|
|
})
|
|
}
|
|
|
|
_queueCallback(callback, element, isAnimated = true) {
|
|
if (!isAnimated) {
|
|
execute(callback)
|
|
return
|
|
}
|
|
|
|
const transitionDuration = getTransitionDurationFromElement(element)
|
|
EventHandler.one(element, 'transitionend', () => execute(callback))
|
|
|
|
emulateTransitionEnd(element, transitionDuration)
|
|
}
|
|
|
|
/** Static */
|
|
|
|
static getInstance(element) {
|
|
return Data.get(element, this.DATA_KEY)
|
|
}
|
|
|
|
static get VERSION() {
|
|
return VERSION
|
|
}
|
|
|
|
static get NAME() {
|
|
throw new Error('You have to implement the static method "NAME", for each component!')
|
|
}
|
|
|
|
static get DATA_KEY() {
|
|
return `bs.${this.NAME}`
|
|
}
|
|
|
|
static get EVENT_KEY() {
|
|
return `.${this.DATA_KEY}`
|
|
}
|
|
}
|
|
|
|
export default BaseComponent
|