aboutsummaryrefslogtreecommitdiff
path: root/js/src/collapse.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/collapse.js')
-rw-r--r--js/src/collapse.js77
1 files changed, 31 insertions, 46 deletions
diff --git a/js/src/collapse.js b/js/src/collapse.js
index 642f7e840..9f0c60cc5 100644
--- a/js/src/collapse.js
+++ b/js/src/collapse.js
@@ -1,22 +1,18 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.1.3): collapse.js
+ * Bootstrap collapse.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+import BaseComponent from './base-component.js'
+import EventHandler from './dom/event-handler.js'
+import SelectorEngine from './dom/selector-engine.js'
import {
defineJQueryPlugin,
getElement,
- getElementFromSelector,
- getSelectorFromElement,
- reflow,
- typeCheckConfig
-} from './util/index'
-import EventHandler from './dom/event-handler'
-import Manipulator from './dom/manipulator'
-import SelectorEngine from './dom/selector-engine'
-import BaseComponent from './base-component'
+ reflow
+} from './util/index.js'
/**
* Constants
@@ -47,13 +43,13 @@ const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="collapse"]'
const Default = {
- toggle: true,
- parent: null
+ parent: null,
+ toggle: true
}
const DefaultType = {
- toggle: 'boolean',
- parent: '(null|element)'
+ parent: '(null|element)',
+ toggle: 'boolean'
}
/**
@@ -62,18 +58,17 @@ const DefaultType = {
class Collapse extends BaseComponent {
constructor(element, config) {
- super(element)
+ super(element, config)
this._isTransitioning = false
- this._config = this._getConfig(config)
this._triggerArray = []
const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)
for (const elem of toggleList) {
- const selector = getSelectorFromElement(elem)
+ const selector = SelectorEngine.getSelectorFromElement(elem)
const filterElement = SelectorEngine.find(selector)
- .filter(foundElem => foundElem === this._element)
+ .filter(foundElement => foundElement === this._element)
if (selector !== null && filterElement.length) {
this._triggerArray.push(elem)
@@ -96,6 +91,10 @@ class Collapse extends BaseComponent {
return Default
}
+ static get DefaultType() {
+ return DefaultType
+ }
+
static get NAME() {
return NAME
}
@@ -184,9 +183,9 @@ class Collapse extends BaseComponent {
this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)
for (const trigger of this._triggerArray) {
- const elem = getElementFromSelector(trigger)
+ const element = SelectorEngine.getElementFromSelector(trigger)
- if (elem && !this._isShown(elem)) {
+ if (element && !this._isShown(element)) {
this._addAriaAndCollapsedClass([trigger], false)
}
}
@@ -210,15 +209,9 @@ class Collapse extends BaseComponent {
}
// Private
- _getConfig(config) {
- config = {
- ...Default,
- ...Manipulator.getDataAttributes(this._element),
- ...config
- }
+ _configAfterMerge(config) {
config.toggle = Boolean(config.toggle) // Coerce string values
config.parent = getElement(config.parent)
- typeCheckConfig(NAME, config, DefaultType)
return config
}
@@ -234,7 +227,7 @@ class Collapse extends BaseComponent {
const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)
for (const element of children) {
- const selected = getElementFromSelector(element)
+ const selected = SelectorEngine.getElementFromSelector(element)
if (selected) {
this._addAriaAndCollapsedClass([element], this._isShown(selected))
@@ -245,7 +238,7 @@ class Collapse extends BaseComponent {
_getFirstLevelChildren(selector) {
const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)
// remove children if greater depth
- return SelectorEngine.find(selector, this._config.parent).filter(elem => !children.includes(elem))
+ return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))
}
_addAriaAndCollapsedClass(triggerArray, isOpen) {
@@ -253,25 +246,20 @@ class Collapse extends BaseComponent {
return
}
- for (const elem of triggerArray) {
- if (isOpen) {
- elem.classList.remove(CLASS_NAME_COLLAPSED)
- } else {
- elem.classList.add(CLASS_NAME_COLLAPSED)
- }
-
- elem.setAttribute('aria-expanded', isOpen)
+ for (const element of triggerArray) {
+ element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)
+ element.setAttribute('aria-expanded', isOpen)
}
}
// Static
static jQueryInterface(config) {
- return this.each(function () {
- const _config = {}
- if (typeof config === 'string' && /show|hide/.test(config)) {
- _config.toggle = false
- }
+ const _config = {}
+ if (typeof config === 'string' && /show|hide/.test(config)) {
+ _config.toggle = false
+ }
+ return this.each(function () {
const data = Collapse.getOrCreateInstance(this, _config)
if (typeof config === 'string') {
@@ -295,10 +283,7 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (
event.preventDefault()
}
- const selector = getSelectorFromElement(this)
- const selectorElements = SelectorEngine.find(selector)
-
- for (const element of selectorElements) {
+ for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {
Collapse.getOrCreateInstance(element, { toggle: false }).toggle()
}
})