From dc5e3328c12058de7fb6404edbe5dcee61f3400f Mon Sep 17 00:00:00 2001 From: Rohit Sharma Date: Mon, 22 Feb 2021 12:31:04 +0530 Subject: Allow constructors to accept a CSS selector (#32245) Co-authored-by: XhmikosR Co-authored-by: Mark Otto --- js/src/base-component.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'js/src/base-component.js') diff --git a/js/src/base-component.js b/js/src/base-component.js index 9de274bd0..989a64156 100644 --- a/js/src/base-component.js +++ b/js/src/base-component.js @@ -17,12 +17,14 @@ const VERSION = '5.0.0-beta2' class BaseComponent { constructor(element) { + element = typeof element === 'string' ? document.querySelector(element) : element + if (!element) { return } this._element = element - Data.setData(element, this.constructor.DATA_KEY, this) + Data.setData(this._element, this.constructor.DATA_KEY, this) } dispose() { -- cgit v1.2.3 From 48a95f7280735d6f8962fe8b17975b03e351710c Mon Sep 17 00:00:00 2001 From: alpadev <2838324+alpadev@users.noreply.github.com> Date: Tue, 2 Mar 2021 15:55:44 +0100 Subject: refactor: use a Map instead of an Object in dom/data (#32180) Co-authored-by: XhmikosR Co-authored-by: Rohit Sharma --- js/src/base-component.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'js/src/base-component.js') diff --git a/js/src/base-component.js b/js/src/base-component.js index 989a64156..2a9e29c2a 100644 --- a/js/src/base-component.js +++ b/js/src/base-component.js @@ -24,18 +24,18 @@ class BaseComponent { } this._element = element - Data.setData(this._element, this.constructor.DATA_KEY, this) + Data.set(this._element, this.constructor.DATA_KEY, this) } dispose() { - Data.removeData(this._element, this.constructor.DATA_KEY) + Data.remove(this._element, this.constructor.DATA_KEY) this._element = null } /** Static */ static getInstance(element) { - return Data.getData(element, this.DATA_KEY) + return Data.get(element, this.DATA_KEY) } static get VERSION() { -- cgit v1.2.3 From 220139a89ffc3864bbb6e1b35471667318eadc1f Mon Sep 17 00:00:00 2001 From: XhmikosR Date: Tue, 23 Mar 2021 18:26:54 +0200 Subject: Release v5.0.0-beta3 (#33439) --- js/src/base-component.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'js/src/base-component.js') diff --git a/js/src/base-component.js b/js/src/base-component.js index 2a9e29c2a..14e13a0eb 100644 --- a/js/src/base-component.js +++ b/js/src/base-component.js @@ -1,6 +1,6 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v5.0.0-beta2): base-component.js + * Bootstrap (v5.0.0-beta3): base-component.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -13,7 +13,7 @@ import Data from './dom/data' * ------------------------------------------------------------------------ */ -const VERSION = '5.0.0-beta2' +const VERSION = '5.0.0-beta3' class BaseComponent { constructor(element) { -- cgit v1.2.3 From 566451230f5c87c3d7515af02995895df610b8ac Mon Sep 17 00:00:00 2001 From: GeoSot Date: Sun, 11 Apr 2021 09:54:48 +0300 Subject: Remove element event listeners through base component (#33429) After some research, I found out that EventHandler saves all the custom events per element using namespace, and is capable of removing handlers using only the element and its namespace (`DATA_KEY`). So, probably is better to utilize the base-component to do the same job. --- js/src/base-component.js | 2 ++ 1 file changed, 2 insertions(+) (limited to 'js/src/base-component.js') diff --git a/js/src/base-component.js b/js/src/base-component.js index 14e13a0eb..77d54faad 100644 --- a/js/src/base-component.js +++ b/js/src/base-component.js @@ -6,6 +6,7 @@ */ import Data from './dom/data' +import EventHandler from './dom/event-handler' /** * ------------------------------------------------------------------------ @@ -29,6 +30,7 @@ class BaseComponent { dispose() { Data.remove(this._element, this.constructor.DATA_KEY) + EventHandler.off(this._element, `.${this.constructor.DATA_KEY}`) this._element = null } -- cgit v1.2.3 From bf0936748602c8109fd916c64b4560799fa1c3f8 Mon Sep 17 00:00:00 2001 From: XhmikosR Date: Wed, 5 May 2021 22:32:12 +0300 Subject: Release v5.0.0 (#33647) * Bump version to 5.0.0 * Fix npm tag * Dist --- js/src/base-component.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'js/src/base-component.js') diff --git a/js/src/base-component.js b/js/src/base-component.js index 77d54faad..a0bb62319 100644 --- a/js/src/base-component.js +++ b/js/src/base-component.js @@ -1,6 +1,6 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v5.0.0-beta3): base-component.js + * Bootstrap (v5.0.0): base-component.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -14,7 +14,7 @@ import EventHandler from './dom/event-handler' * ------------------------------------------------------------------------ */ -const VERSION = '5.0.0-beta3' +const VERSION = '5.0.0' class BaseComponent { constructor(element) { -- cgit v1.2.3 From 90b1a6907ed7bb3397fe6bd223f09eb12122d7a3 Mon Sep 17 00:00:00 2001 From: GeoSot Date: Sun, 11 Apr 2021 02:27:18 +0300 Subject: Merge js-components 'transitionend' listener callbacks into one method --- js/src/base-component.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'js/src/base-component.js') diff --git a/js/src/base-component.js b/js/src/base-component.js index a0bb62319..7d2a5b1e8 100644 --- a/js/src/base-component.js +++ b/js/src/base-component.js @@ -6,6 +6,11 @@ */ import Data from './dom/data' +import { + emulateTransitionEnd, + execute, + getTransitionDurationFromElement +} from './util/index' import EventHandler from './dom/event-handler' /** @@ -34,6 +39,18 @@ class BaseComponent { this._element = 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) { -- cgit v1.2.3 From 03842b5f259d6007db02c465e6c55929e551e9cd Mon Sep 17 00:00:00 2001 From: GeoSot Date: Tue, 11 May 2021 09:04:42 +0300 Subject: Refactor: move disposing properties into the base class (#33740) Moves more functionality to `base-component`, transferring the responsibility of disposal to parent class. Each component, dusting disposal, sets its protected properties to `null`. So the same can be done in one place for all children components . --- js/src/base-component.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'js/src/base-component.js') diff --git a/js/src/base-component.js b/js/src/base-component.js index 7d2a5b1e8..588a59d75 100644 --- a/js/src/base-component.js +++ b/js/src/base-component.js @@ -36,7 +36,10 @@ class BaseComponent { dispose() { Data.remove(this._element, this.constructor.DATA_KEY) EventHandler.off(this._element, `.${this.constructor.DATA_KEY}`) - this._element = null + + Object.getOwnPropertyNames(this).forEach(propertyName => { + this[propertyName] = null + }) } _queueCallback(callback, element, isAnimated = true) { -- cgit v1.2.3 From 9fe36edf683af02574bf6bbd6c9b27de93bd31b1 Mon Sep 17 00:00:00 2001 From: GeoSot Date: Tue, 11 May 2021 10:49:30 +0300 Subject: Extract static `DATA_KEY` & `EVENT_KEY` to base-component (#33635) * Force each plugin that extends base-components to implement a static method `NAME()` * Remove redundant `NAME` argument from 'Utils.defineJQueryPlugin' & fix test --- js/src/base-component.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'js/src/base-component.js') diff --git a/js/src/base-component.js b/js/src/base-component.js index 588a59d75..eacc8420b 100644 --- a/js/src/base-component.js +++ b/js/src/base-component.js @@ -35,7 +35,7 @@ class BaseComponent { dispose() { Data.remove(this._element, this.constructor.DATA_KEY) - EventHandler.off(this._element, `.${this.constructor.DATA_KEY}`) + EventHandler.off(this._element, this.constructor.EVENT_KEY) Object.getOwnPropertyNames(this).forEach(propertyName => { this[propertyName] = null @@ -63,6 +63,18 @@ class BaseComponent { 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 -- cgit v1.2.3 From 6e1c9096f08ed21063fd6ba16aa998a3ac4149f9 Mon Sep 17 00:00:00 2001 From: GeoSot Date: Thu, 13 May 2021 18:17:20 +0300 Subject: Move get element functionality to a helper (#33327) Looking around on js components I found out many checks, different expressed but with same purpose. Some of them are trying to parse string to element, others, jQuery element to js simple nodeElement etc With this Pr, I am trying to give a standard way to parse an element So this pr: * Creates `getElement` helper that tries to parse an argument to element or null * Changes `isElement` to make explicit checks and return Boolean * fixes tests deficiencies --- js/src/base-component.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'js/src/base-component.js') diff --git a/js/src/base-component.js b/js/src/base-component.js index eacc8420b..05b0adcd2 100644 --- a/js/src/base-component.js +++ b/js/src/base-component.js @@ -9,6 +9,7 @@ import Data from './dom/data' import { emulateTransitionEnd, execute, + getElement, getTransitionDurationFromElement } from './util/index' import EventHandler from './dom/event-handler' @@ -23,7 +24,7 @@ const VERSION = '5.0.0' class BaseComponent { constructor(element) { - element = typeof element === 'string' ? document.querySelector(element) : element + element = getElement(element) if (!element) { return -- cgit v1.2.3 From 58b1be927f43c779377e478df2d119f2ddf956ca Mon Sep 17 00:00:00 2001 From: XhmikosR Date: Thu, 13 May 2021 19:22:20 +0300 Subject: Release v5.0.1 (#33972) * Bump version to 5.0.1. * Dist --- js/src/base-component.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'js/src/base-component.js') diff --git a/js/src/base-component.js b/js/src/base-component.js index 05b0adcd2..a5f1b36a0 100644 --- a/js/src/base-component.js +++ b/js/src/base-component.js @@ -1,6 +1,6 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v5.0.0): base-component.js + * Bootstrap (v5.0.1): base-component.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -20,7 +20,7 @@ import EventHandler from './dom/event-handler' * ------------------------------------------------------------------------ */ -const VERSION = '5.0.0' +const VERSION = '5.0.1' class BaseComponent { constructor(element) { -- cgit v1.2.3 From 4a5029ea29ac75243dfec68153051292fc70f5cf Mon Sep 17 00:00:00 2001 From: alpadev <2838324+alpadev@users.noreply.github.com> Date: Thu, 3 Jun 2021 13:44:16 +0200 Subject: Fix handling of transitionend events dispatched by nested elements(#33845) Fix handling of transitionend events dispatched by nested elements Properly handle events from nested elements Change `emulateTransitionEnd` to `executeAfterTransition` && --- js/src/base-component.js | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) (limited to 'js/src/base-component.js') diff --git a/js/src/base-component.js b/js/src/base-component.js index a5f1b36a0..368cc99c8 100644 --- a/js/src/base-component.js +++ b/js/src/base-component.js @@ -7,10 +7,8 @@ import Data from './dom/data' import { - emulateTransitionEnd, - execute, - getElement, - getTransitionDurationFromElement + executeAfterTransition, + getElement } from './util/index' import EventHandler from './dom/event-handler' @@ -44,15 +42,7 @@ class BaseComponent { } _queueCallback(callback, element, isAnimated = true) { - if (!isAnimated) { - execute(callback) - return - } - - const transitionDuration = getTransitionDurationFromElement(element) - EventHandler.one(element, 'transitionend', () => execute(callback)) - - emulateTransitionEnd(element, transitionDuration) + executeAfterTransition(callback, element, isAnimated) } /** Static */ -- cgit v1.2.3 From c98657b8303150bfda3bdea750055b83a29b27a3 Mon Sep 17 00:00:00 2001 From: GeoSot Date: Thu, 3 Jun 2021 18:53:27 +0300 Subject: Add `getOrCreateInstance` method in base-component (#33276) Co-authored-by: Rohit Sharma Co-authored-by: XhmikosR --- js/src/base-component.js | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'js/src/base-component.js') 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 } -- cgit v1.2.3 From 688bce4fa695cc360a0d084e34f029b0c192b223 Mon Sep 17 00:00:00 2001 From: XhmikosR Date: Tue, 22 Jun 2021 21:29:16 +0300 Subject: Release v5.0.2 (#34276) * Bump version to v5.0.2. * Dist --- js/src/base-component.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'js/src/base-component.js') diff --git a/js/src/base-component.js b/js/src/base-component.js index cadd53d26..62aa4adf1 100644 --- a/js/src/base-component.js +++ b/js/src/base-component.js @@ -1,6 +1,6 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v5.0.1): base-component.js + * Bootstrap (v5.0.2): base-component.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -18,7 +18,7 @@ import EventHandler from './dom/event-handler' * ------------------------------------------------------------------------ */ -const VERSION = '5.0.1' +const VERSION = '5.0.2' class BaseComponent { constructor(element) { -- cgit v1.2.3 From d314466a4dd00006ce72f46418a98cce3cfccdb2 Mon Sep 17 00:00:00 2001 From: Jeremy Jackson Date: Tue, 29 Jun 2021 09:45:45 -0500 Subject: Accept argument of different types in the `getInstance` method (#34333) --- js/src/base-component.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'js/src/base-component.js') diff --git a/js/src/base-component.js b/js/src/base-component.js index 62aa4adf1..ea0ad6c24 100644 --- a/js/src/base-component.js +++ b/js/src/base-component.js @@ -48,7 +48,7 @@ class BaseComponent { /** Static */ static getInstance(element) { - return Data.get(element, this.DATA_KEY) + return Data.get(getElement(element), this.DATA_KEY) } static getOrCreateInstance(element, config = {}) { -- cgit v1.2.3 From f20fece3a8cdd0e76a42c2737524b7652bf54d26 Mon Sep 17 00:00:00 2001 From: XhmikosR Date: Wed, 4 Aug 2021 18:41:51 +0300 Subject: Prepare v5.1.0. (#34674) --- js/src/base-component.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'js/src/base-component.js') diff --git a/js/src/base-component.js b/js/src/base-component.js index ea0ad6c24..e7b4112a9 100644 --- a/js/src/base-component.js +++ b/js/src/base-component.js @@ -1,6 +1,6 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v5.0.2): base-component.js + * Bootstrap (v5.1.0): base-component.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -18,7 +18,7 @@ import EventHandler from './dom/event-handler' * ------------------------------------------------------------------------ */ -const VERSION = '5.0.2' +const VERSION = '5.1.0' class BaseComponent { constructor(element) { -- cgit v1.2.3