diff options
Diffstat (limited to 'js/src')
| -rw-r--r-- | js/src/alert.js | 7 | ||||
| -rw-r--r-- | js/src/base-component.js | 4 | ||||
| -rw-r--r-- | js/src/button.js | 13 | ||||
| -rw-r--r-- | js/src/carousel.js | 26 | ||||
| -rw-r--r-- | js/src/collapse.js | 6 | ||||
| -rw-r--r-- | js/src/dropdown.js | 10 | ||||
| -rw-r--r-- | js/src/modal.js | 6 | ||||
| -rw-r--r-- | js/src/offcanvas.js | 12 | ||||
| -rw-r--r-- | js/src/popover.js | 9 | ||||
| -rw-r--r-- | js/src/scrollspy.js | 2 | ||||
| -rw-r--r-- | js/src/tab.js | 5 | ||||
| -rw-r--r-- | js/src/toast.js | 8 | ||||
| -rw-r--r-- | js/src/tooltip.js | 7 |
13 files changed, 32 insertions, 83 deletions
diff --git a/js/src/alert.js b/js/src/alert.js index 679a90cdb..e5e5e2a5d 100644 --- a/js/src/alert.js +++ b/js/src/alert.js @@ -9,7 +9,6 @@ import { defineJQueryPlugin, getElementFromSelector } from './util/index' -import Data from './dom/data' import EventHandler from './dom/event-handler' import BaseComponent from './base-component' @@ -87,11 +86,7 @@ class Alert extends BaseComponent { static jQueryInterface(config) { return this.each(function () { - let data = Data.get(this, DATA_KEY) - - if (!data) { - data = new Alert(this) - } + const data = Alert.getOrCreateInstance(this) if (config === 'close') { data[config](this) diff --git a/js/src/base-component.js b/js/src/base-component.js index 368cc99c8..cadd53d26 100644 --- a/js/src/base-component.js +++ b/js/src/base-component.js @@ -51,6 +51,10 @@ class BaseComponent { return Data.get(element, this.DATA_KEY) } + static getOrCreateInstance(element, config = {}) { + return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null) + } + static get VERSION() { return VERSION } diff --git a/js/src/button.js b/js/src/button.js index 6ef753136..c0e6b5d2b 100644 --- a/js/src/button.js +++ b/js/src/button.js @@ -6,7 +6,6 @@ */ import { defineJQueryPlugin } from './util/index' -import Data from './dom/data' import EventHandler from './dom/event-handler' import BaseComponent from './base-component' @@ -51,11 +50,7 @@ class Button extends BaseComponent { static jQueryInterface(config) { return this.each(function () { - let data = Data.get(this, DATA_KEY) - - if (!data) { - data = new Button(this) - } + const data = Button.getOrCreateInstance(this) if (config === 'toggle') { data[config]() @@ -74,11 +69,7 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => { event.preventDefault() const button = event.target.closest(SELECTOR_DATA_TOGGLE) - - let data = Data.get(button, DATA_KEY) - if (!data) { - data = new Button(button) - } + const data = Button.getOrCreateInstance(button) data.toggle() }) diff --git a/js/src/carousel.js b/js/src/carousel.js index 7d197ab1e..a956ebc8b 100644 --- a/js/src/carousel.js +++ b/js/src/carousel.js @@ -15,7 +15,6 @@ import { triggerTransitionEnd, typeCheckConfig } from './util/index' -import Data from './dom/data' import EventHandler from './dom/event-handler' import Manipulator from './dom/manipulator' import SelectorEngine from './dom/selector-engine' @@ -219,7 +218,8 @@ class Carousel extends BaseComponent { _getConfig(config) { config = { ...Default, - ...config + ...Manipulator.getDataAttributes(this._element), + ...(typeof config === 'object' ? config : {}) } typeCheckConfig(NAME, config, DefaultType) return config @@ -496,25 +496,11 @@ class Carousel extends BaseComponent { // Static static carouselInterface(element, config) { - let data = Data.get(element, DATA_KEY) - let _config = { - ...Default, - ...Manipulator.getDataAttributes(element) - } - - if (typeof config === 'object') { - _config = { - ..._config, - ...config - } - } + const data = Carousel.getOrCreateInstance(element, config) + const { _config } = data const action = typeof config === 'string' ? config : _config.slide - if (!data) { - data = new Carousel(element, _config) - } - if (typeof config === 'number') { data.to(config) } else if (typeof action === 'string') { @@ -555,7 +541,7 @@ class Carousel extends BaseComponent { Carousel.carouselInterface(target, config) if (slideIndex) { - Data.get(target, DATA_KEY).to(slideIndex) + Carousel.getInstance(target).to(slideIndex) } event.preventDefault() @@ -574,7 +560,7 @@ EventHandler.on(window, EVENT_LOAD_DATA_API, () => { const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE) for (let i = 0, len = carousels.length; i < len; i++) { - Carousel.carouselInterface(carousels[i], Data.get(carousels[i], DATA_KEY)) + Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i])) } }) diff --git a/js/src/collapse.js b/js/src/collapse.js index fd85fbde2..2d12ef57f 100644 --- a/js/src/collapse.js +++ b/js/src/collapse.js @@ -145,7 +145,7 @@ class Collapse extends BaseComponent { const container = SelectorEngine.findOne(this._selector) if (actives) { const tempActiveData = actives.find(elem => container !== elem) - activesData = tempActiveData ? Data.get(tempActiveData, DATA_KEY) : null + activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null if (activesData && activesData._isTransitioning) { return @@ -310,7 +310,7 @@ class Collapse extends BaseComponent { // Static static collapseInterface(element, config) { - let data = Data.get(element, DATA_KEY) + let data = Collapse.getInstance(element) const _config = { ...Default, ...Manipulator.getDataAttributes(element), @@ -358,7 +358,7 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function ( const selectorElements = SelectorEngine.find(selector) selectorElements.forEach(element => { - const data = Data.get(element, DATA_KEY) + const data = Collapse.getInstance(element) let config if (data) { // update parent attribute diff --git a/js/src/dropdown.js b/js/src/dropdown.js index 34beb6512..e79ac4591 100644 --- a/js/src/dropdown.js +++ b/js/src/dropdown.js @@ -19,7 +19,6 @@ import { getNextActiveElement, typeCheckConfig } from './util/index' -import Data from './dom/data' import EventHandler from './dom/event-handler' import Manipulator from './dom/manipulator' import SelectorEngine from './dom/selector-engine' @@ -369,12 +368,7 @@ class Dropdown extends BaseComponent { // Static static dropdownInterface(element, config) { - let data = Data.get(element, DATA_KEY) - const _config = typeof config === 'object' ? config : null - - if (!data) { - data = new Dropdown(element, _config) - } + const data = Dropdown.getOrCreateInstance(element, config) if (typeof config === 'string') { if (typeof data[config] === 'undefined') { @@ -399,7 +393,7 @@ class Dropdown extends BaseComponent { const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE) for (let i = 0, len = toggles.length; i < len; i++) { - const context = Data.get(toggles[i], DATA_KEY) + const context = Dropdown.getInstance(toggles[i]) if (!context || context._config.autoClose === false) { continue } diff --git a/js/src/modal.js b/js/src/modal.js index e8eee3b4d..74b608303 100644 --- a/js/src/modal.js +++ b/js/src/modal.js @@ -209,7 +209,7 @@ class Modal extends BaseComponent { config = { ...Default, ...Manipulator.getDataAttributes(this._element), - ...config + ...(typeof config === 'object' ? config : {}) } typeCheckConfig(NAME, config, DefaultType) return config @@ -389,7 +389,7 @@ class Modal extends BaseComponent { static jQueryInterface(config, relatedTarget) { return this.each(function () { - const data = Modal.getInstance(this) || new Modal(this, typeof config === 'object' ? config : {}) + const data = Modal.getOrCreateInstance(this, config) if (typeof config !== 'string') { return @@ -430,7 +430,7 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function ( }) }) - const data = Modal.getInstance(target) || new Modal(target) + const data = Modal.getOrCreateInstance(target) data.toggle(this) }) diff --git a/js/src/offcanvas.js b/js/src/offcanvas.js index fed892f4c..f990ff199 100644 --- a/js/src/offcanvas.js +++ b/js/src/offcanvas.js @@ -13,7 +13,6 @@ import { typeCheckConfig } from './util/index' import { hide as scrollBarHide, reset as scrollBarReset } from './util/scrollbar' -import Data from './dom/data' import EventHandler from './dom/event-handler' import BaseComponent from './base-component' import SelectorEngine from './dom/selector-engine' @@ -211,7 +210,7 @@ class Offcanvas extends BaseComponent { static jQueryInterface(config) { return this.each(function () { - const data = Data.get(this, DATA_KEY) || new Offcanvas(this, typeof config === 'object' ? config : {}) + const data = Offcanvas.getOrCreateInstance(this, config) if (typeof config !== 'string') { return @@ -256,14 +255,13 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function ( Offcanvas.getInstance(allReadyOpen).hide() } - const data = Data.get(target, DATA_KEY) || new Offcanvas(target) - + const data = Offcanvas.getOrCreateInstance(target) data.toggle(this) }) -EventHandler.on(window, EVENT_LOAD_DATA_API, () => { - SelectorEngine.find(OPEN_SELECTOR).forEach(el => (Data.get(el, DATA_KEY) || new Offcanvas(el)).show()) -}) +EventHandler.on(window, EVENT_LOAD_DATA_API, () => + SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()) +) /** * ------------------------------------------------------------------------ diff --git a/js/src/popover.js b/js/src/popover.js index 929391392..457760c14 100644 --- a/js/src/popover.js +++ b/js/src/popover.js @@ -6,7 +6,6 @@ */ import { defineJQueryPlugin } from './util/index' -import Data from './dom/data' import SelectorEngine from './dom/selector-engine' import Tooltip from './tooltip' @@ -146,13 +145,7 @@ class Popover extends Tooltip { static jQueryInterface(config) { return this.each(function () { - let data = Data.get(this, DATA_KEY) - const _config = typeof config === 'object' ? config : null - - if (!data) { - data = new Popover(this, _config) - Data.set(this, DATA_KEY, data) - } + const data = Popover.getOrCreateInstance(this, config) if (typeof config === 'string') { if (typeof data[config] === 'undefined') { diff --git a/js/src/scrollspy.js b/js/src/scrollspy.js index 3297c45c2..b7ea2a4e5 100644 --- a/js/src/scrollspy.js +++ b/js/src/scrollspy.js @@ -270,7 +270,7 @@ class ScrollSpy extends BaseComponent { static jQueryInterface(config) { return this.each(function () { - const data = ScrollSpy.getInstance(this) || new ScrollSpy(this, typeof config === 'object' ? config : {}) + const data = ScrollSpy.getOrCreateInstance(this, config) if (typeof config !== 'string') { return diff --git a/js/src/tab.js b/js/src/tab.js index 51deb170f..6de48e4cd 100644 --- a/js/src/tab.js +++ b/js/src/tab.js @@ -11,7 +11,6 @@ import { isDisabled, reflow } from './util/index' -import Data from './dom/data' import EventHandler from './dom/event-handler' import SelectorEngine from './dom/selector-engine' import BaseComponent from './base-component' @@ -181,7 +180,7 @@ class Tab extends BaseComponent { static jQueryInterface(config) { return this.each(function () { - const data = Data.get(this, DATA_KEY) || new Tab(this) + const data = Tab.getOrCreateInstance(this) if (typeof config === 'string') { if (typeof data[config] === 'undefined') { @@ -209,7 +208,7 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function ( return } - const data = Data.get(this, DATA_KEY) || new Tab(this) + const data = Tab.getOrCreateInstance(this) data.show() }) diff --git a/js/src/toast.js b/js/src/toast.js index 40cd40d9a..8aeaa0148 100644 --- a/js/src/toast.js +++ b/js/src/toast.js @@ -10,7 +10,6 @@ import { reflow, typeCheckConfig } from './util/index' -import Data from './dom/data' import EventHandler from './dom/event-handler' import Manipulator from './dom/manipulator' import BaseComponent from './base-component' @@ -218,12 +217,7 @@ class Toast extends BaseComponent { static jQueryInterface(config) { return this.each(function () { - let data = Data.get(this, DATA_KEY) - const _config = typeof config === 'object' && config - - if (!data) { - data = new Toast(this, _config) - } + const data = Toast.getOrCreateInstance(this, config) if (typeof config === 'string') { if (typeof data[config] === 'undefined') { diff --git a/js/src/tooltip.js b/js/src/tooltip.js index 2eb91965b..78b7c478b 100644 --- a/js/src/tooltip.js +++ b/js/src/tooltip.js @@ -722,12 +722,7 @@ class Tooltip extends BaseComponent { static jQueryInterface(config) { return this.each(function () { - let data = Data.get(this, DATA_KEY) - const _config = typeof config === 'object' && config - - if (!data) { - data = new Tooltip(this, _config) - } + const data = Tooltip.getOrCreateInstance(this, config) if (typeof config === 'string') { if (typeof data[config] === 'undefined') { |
