aboutsummaryrefslogtreecommitdiff
path: root/js/src
diff options
context:
space:
mode:
authorPriyansh <[email protected]>2021-10-06 14:40:59 -0400
committerGitHub <[email protected]>2021-10-06 14:40:59 -0400
commit52cd86f8710f8049a744b5bcb9f4a7ce19114b6e (patch)
tree8956dbd6f94ae25d273d496e64840ed30b6d88a5 /js/src
parentd065706ce4b439b5c77d9a68e708212e91cc4f0b (diff)
parentc331a150cdc2834f08bcf458cdb1b104cc510b67 (diff)
downloadbootstrap-52cd86f8710f8049a744b5bcb9f4a7ce19114b6e.tar.xz
bootstrap-52cd86f8710f8049a744b5bcb9f4a7ce19114b6e.zip
Merge branch 'twbs:main' into main
Diffstat (limited to 'js/src')
-rw-r--r--js/src/alert.js2
-rw-r--r--js/src/base-component.js8
-rw-r--r--js/src/button.js2
-rw-r--r--js/src/carousel.js18
-rw-r--r--js/src/collapse.js39
-rw-r--r--js/src/dom/data.js2
-rw-r--r--js/src/dom/event-handler.js22
-rw-r--r--js/src/dom/manipulator.js15
-rw-r--r--js/src/dom/selector-engine.js2
-rw-r--r--js/src/dropdown.js21
-rw-r--r--js/src/modal.js7
-rw-r--r--js/src/offcanvas.js10
-rw-r--r--js/src/popover.js2
-rw-r--r--js/src/scrollspy.js53
-rw-r--r--js/src/tab.js7
-rw-r--r--js/src/toast.js2
-rw-r--r--js/src/tooltip.js24
-rw-r--r--js/src/util/backdrop.js2
-rw-r--r--js/src/util/component-functions.js2
-rw-r--r--js/src/util/focustrap.js2
-rw-r--r--js/src/util/index.js14
-rw-r--r--js/src/util/sanitizer.js20
-rw-r--r--js/src/util/scrollbar.js6
23 files changed, 143 insertions, 139 deletions
diff --git a/js/src/alert.js b/js/src/alert.js
index 97b305138..9b4cba4cf 100644
--- a/js/src/alert.js
+++ b/js/src/alert.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.1.1): alert.js
+ * Bootstrap (v5.1.2): alert.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
diff --git a/js/src/base-component.js b/js/src/base-component.js
index cb65bed8e..0a1c17357 100644
--- a/js/src/base-component.js
+++ b/js/src/base-component.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.1.1): base-component.js
+ * Bootstrap (v5.1.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.1.1'
+const VERSION = '5.1.2'
class BaseComponent {
constructor(element) {
@@ -36,9 +36,9 @@ class BaseComponent {
Data.remove(this._element, this.constructor.DATA_KEY)
EventHandler.off(this._element, this.constructor.EVENT_KEY)
- Object.getOwnPropertyNames(this).forEach(propertyName => {
+ for (const propertyName of Object.getOwnPropertyNames(this)) {
this[propertyName] = null
- })
+ }
}
_queueCallback(callback, element, isAnimated = true) {
diff --git a/js/src/button.js b/js/src/button.js
index 0578ed6b9..c4e7c296d 100644
--- a/js/src/button.js
+++ b/js/src/button.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.1.1): button.js
+ * Bootstrap (v5.1.2): button.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
diff --git a/js/src/carousel.js b/js/src/carousel.js
index 86daa0795..3f49ded40 100644
--- a/js/src/carousel.js
+++ b/js/src/carousel.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.1.1): carousel.js
+ * Bootstrap (v5.1.2): carousel.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -304,9 +304,9 @@ class Carousel extends BaseComponent {
}
}
- SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {
+ for (const itemImg of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {
EventHandler.on(itemImg, EVENT_DRAG_START, event => event.preventDefault())
- })
+ }
if (this._pointerEvent) {
EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event))
@@ -366,10 +366,10 @@ class Carousel extends BaseComponent {
const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement)
- for (let i = 0; i < indicators.length; i++) {
- if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {
- indicators[i].classList.add(CLASS_NAME_ACTIVE)
- indicators[i].setAttribute('aria-current', 'true')
+ for (const indicator of indicators) {
+ if (Number.parseInt(indicator.getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {
+ indicator.classList.add(CLASS_NAME_ACTIVE)
+ indicator.setAttribute('aria-current', 'true')
break
}
}
@@ -574,8 +574,8 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel.da
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], Carousel.getInstance(carousels[i]))
+ for (const carousel of carousels) {
+ Carousel.carouselInterface(carousel, Carousel.getInstance(carousel))
}
})
diff --git a/js/src/collapse.js b/js/src/collapse.js
index edfc7ea85..b7f200d56 100644
--- a/js/src/collapse.js
+++ b/js/src/collapse.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.1.1): collapse.js
+ * Bootstrap (v5.1.2): collapse.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -75,8 +75,7 @@ class Collapse extends BaseComponent {
const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)
- for (let i = 0, len = toggleList.length; i < len; i++) {
- const elem = toggleList[i]
+ for (const elem of toggleList) {
const selector = getSelectorFromElement(elem)
const filterElement = SelectorEngine.find(selector)
.filter(foundElem => foundElem === this._element)
@@ -128,7 +127,8 @@ class Collapse extends BaseComponent {
if (this._config.parent) {
const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)
- actives = SelectorEngine.find(SELECTOR_ACTIVES, this._config.parent).filter(elem => !children.includes(elem)) // remove children if greater depth
+ // remove children if greater depth
+ actives = SelectorEngine.find(SELECTOR_ACTIVES, this._config.parent).filter(elem => !children.includes(elem))
}
const container = SelectorEngine.findOne(this._selector)
@@ -146,7 +146,7 @@ class Collapse extends BaseComponent {
return
}
- actives.forEach(elemActive => {
+ for (const elemActive of actives) {
if (container !== elemActive) {
Collapse.getOrCreateInstance(elemActive, { toggle: false }).hide()
}
@@ -154,7 +154,7 @@ class Collapse extends BaseComponent {
if (!activesData) {
Data.set(elemActive, DATA_KEY, null)
}
- })
+ }
const dimension = this._getDimension()
@@ -203,9 +203,7 @@ class Collapse extends BaseComponent {
this._element.classList.add(CLASS_NAME_COLLAPSING)
this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)
- const triggerArrayLength = this._triggerArray.length
- for (let i = 0; i < triggerArrayLength; i++) {
- const trigger = this._triggerArray[i]
+ for (const trigger of this._triggerArray) {
const elem = getElementFromSelector(trigger)
if (elem && !this._isShown(elem)) {
@@ -255,14 +253,15 @@ class Collapse extends BaseComponent {
}
const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)
- SelectorEngine.find(SELECTOR_DATA_TOGGLE, this._config.parent).filter(elem => !children.includes(elem))
- .forEach(element => {
- const selected = getElementFromSelector(element)
+ const elements = SelectorEngine.find(SELECTOR_DATA_TOGGLE, this._config.parent).filter(elem => !children.includes(elem))
- if (selected) {
- this._addAriaAndCollapsedClass([element], this._isShown(selected))
- }
- })
+ for (const element of elements) {
+ const selected = getElementFromSelector(element)
+
+ if (selected) {
+ this._addAriaAndCollapsedClass([element], this._isShown(selected))
+ }
+ }
}
_addAriaAndCollapsedClass(triggerArray, isOpen) {
@@ -270,7 +269,7 @@ class Collapse extends BaseComponent {
return
}
- triggerArray.forEach(elem => {
+ for (const elem of triggerArray) {
if (isOpen) {
elem.classList.remove(CLASS_NAME_COLLAPSED)
} else {
@@ -278,7 +277,7 @@ class Collapse extends BaseComponent {
}
elem.setAttribute('aria-expanded', isOpen)
- })
+ }
}
// Static
@@ -318,9 +317,9 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (
const selector = getSelectorFromElement(this)
const selectorElements = SelectorEngine.find(selector)
- selectorElements.forEach(element => {
+ for (const element of selectorElements) {
Collapse.getOrCreateInstance(element, { toggle: false }).toggle()
- })
+ }
})
/**
diff --git a/js/src/dom/data.js b/js/src/dom/data.js
index ee5b2c37d..5dbb87754 100644
--- a/js/src/dom/data.js
+++ b/js/src/dom/data.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.1.1): dom/data.js
+ * Bootstrap (v5.1.2): dom/data.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
diff --git a/js/src/dom/event-handler.js b/js/src/dom/event-handler.js
index bf895dc6e..e2fdbd52c 100644
--- a/js/src/dom/event-handler.js
+++ b/js/src/dom/event-handler.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.1.1): dom/event-handler.js
+ * Bootstrap (v5.1.2): dom/event-handler.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -129,8 +129,8 @@ function bootstrapDelegationHandler(element, selector, fn) {
function findHandler(events, handler, delegationSelector = null) {
const uidEventList = Object.keys(events)
- for (let i = 0, len = uidEventList.length; i < len; i++) {
- const event = events[uidEventList[i]]
+ for (const uidEvent of uidEventList) {
+ const event = events[uidEvent]
if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {
return event
@@ -221,13 +221,13 @@ function removeHandler(element, events, typeEvent, handler, delegationSelector)
function removeNamespacedHandlers(element, events, typeEvent, namespace) {
const storeElementEvent = events[typeEvent] || {}
- Object.keys(storeElementEvent).forEach(handlerKey => {
+ for (const handlerKey of Object.keys(storeElementEvent)) {
if (handlerKey.includes(namespace)) {
const event = storeElementEvent[handlerKey]
removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector)
}
- })
+ }
}
function getTypeEvent(event) {
@@ -266,13 +266,13 @@ const EventHandler = {
}
if (isNamespace) {
- Object.keys(events).forEach(elementEvent => {
+ for (const elementEvent of Object.keys(events)) {
removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))
- })
+ }
}
const storeElementEvent = events[typeEvent] || {}
- Object.keys(storeElementEvent).forEach(keyHandlers => {
+ for (const keyHandlers of Object.keys(storeElementEvent)) {
const handlerKey = keyHandlers.replace(stripUidRegex, '')
if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
@@ -280,7 +280,7 @@ const EventHandler = {
removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector)
}
- })
+ }
},
trigger(element, event, args) {
@@ -320,13 +320,13 @@ const EventHandler = {
// merge custom information in our event
if (typeof args !== 'undefined') {
- Object.keys(args).forEach(key => {
+ for (const key of Object.keys(args)) {
Object.defineProperty(evt, key, {
get() {
return args[key]
}
})
- })
+ }
}
if (defaultPrevented) {
diff --git a/js/src/dom/manipulator.js b/js/src/dom/manipulator.js
index 1be3a793f..219727d7c 100644
--- a/js/src/dom/manipulator.js
+++ b/js/src/dom/manipulator.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.1.1): dom/manipulator.js
+ * Bootstrap (v5.1.2): dom/manipulator.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -44,14 +44,13 @@ const Manipulator = {
}
const attributes = {}
+ const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs'))
- Object.keys(element.dataset)
- .filter(key => key.startsWith('bs'))
- .forEach(key => {
- let pureKey = key.replace(/^bs/, '')
- pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)
- attributes[pureKey] = normalizeData(element.dataset[key])
- })
+ for (const key of bsKeys) {
+ let pureKey = key.replace(/^bs/, '')
+ pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)
+ attributes[pureKey] = normalizeData(element.dataset[key])
+ }
return attributes
},
diff --git a/js/src/dom/selector-engine.js b/js/src/dom/selector-engine.js
index 19e45c205..9fc0e4b0e 100644
--- a/js/src/dom/selector-engine.js
+++ b/js/src/dom/selector-engine.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.1.1): dom/selector-engine.js
+ * Bootstrap (v5.1.2): dom/selector-engine.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
diff --git a/js/src/dropdown.js b/js/src/dropdown.js
index 874cf907b..32b587bf1 100644
--- a/js/src/dropdown.js
+++ b/js/src/dropdown.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.1.1): dropdown.js
+ * Bootstrap (v5.1.2): dropdown.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -151,10 +151,10 @@ class Dropdown extends BaseComponent {
// empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
- if ('ontouchstart' in document.documentElement &&
- !parent.closest(SELECTOR_NAVBAR_NAV)) {
- [].concat(...document.body.children)
- .forEach(elem => EventHandler.on(elem, 'mouseover', noop))
+ if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {
+ for (const elem of [].concat(...document.body.children)) {
+ EventHandler.on(elem, 'mouseover', noop)
+ }
}
this._element.focus()
@@ -203,8 +203,9 @@ class Dropdown extends BaseComponent {
// If this is a touch-enabled device we remove the extra
// empty mouseover listeners we added for iOS support
if ('ontouchstart' in document.documentElement) {
- [].concat(...document.body.children)
- .forEach(elem => EventHandler.off(elem, 'mouseover', noop))
+ for (const elem of [].concat(...document.body.children)) {
+ EventHandler.off(elem, 'mouseover', noop)
+ }
}
if (this._popper) {
@@ -341,7 +342,7 @@ class Dropdown extends BaseComponent {
}
_selectMenuItem({ key, target }) {
- const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible)
+ const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(el => isVisible(el))
if (!items.length) {
return
@@ -377,8 +378,8 @@ class Dropdown extends BaseComponent {
const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE)
- for (let i = 0, len = toggles.length; i < len; i++) {
- const context = Dropdown.getInstance(toggles[i])
+ for (const toggle of toggles) {
+ const context = Dropdown.getInstance(toggle)
if (!context || context._config.autoClose === false) {
continue
}
diff --git a/js/src/modal.js b/js/src/modal.js
index b4700f02a..b0ee089de 100644
--- a/js/src/modal.js
+++ b/js/src/modal.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.1.1): modal.js
+ * Bootstrap (v5.1.2): modal.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -175,8 +175,9 @@ class Modal extends BaseComponent {
}
dispose() {
- [window, this._dialog]
- .forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY))
+ for (const htmlElement of [window, this._dialog]) {
+ EventHandler.off(htmlElement, EVENT_KEY)
+ }
this._backdrop.dispose()
this._focustrap.deactivate()
diff --git a/js/src/offcanvas.js b/js/src/offcanvas.js
index ba809cdf2..28fd49f06 100644
--- a/js/src/offcanvas.js
+++ b/js/src/offcanvas.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.1.1): offcanvas.js
+ * Bootstrap (v5.1.2): offcanvas.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -256,9 +256,11 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (
data.toggle(this)
})
-EventHandler.on(window, EVENT_LOAD_DATA_API, () =>
- SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show())
-)
+EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
+ for (const el of SelectorEngine.find(OPEN_SELECTOR)) {
+ Offcanvas.getOrCreateInstance(el).show()
+ }
+})
enableDismissTrigger(Offcanvas)
/**
diff --git a/js/src/popover.js b/js/src/popover.js
index 71c50daf9..d499bedf1 100644
--- a/js/src/popover.js
+++ b/js/src/popover.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.1.1): popover.js
+ * Bootstrap (v5.1.2): popover.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
diff --git a/js/src/scrollspy.js b/js/src/scrollspy.js
index 6ac00fedd..df9a14e22 100644
--- a/js/src/scrollspy.js
+++ b/js/src/scrollspy.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.1.1): scrollspy.js
+ * Bootstrap (v5.1.2): scrollspy.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -111,7 +111,7 @@ class ScrollSpy extends BaseComponent {
const targets = SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target)
- targets.map(element => {
+ for (const item of targets.map(element => {
const targetSelector = getSelectorFromElement(element)
const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null
@@ -128,11 +128,10 @@ class ScrollSpy extends BaseComponent {
return null
})
.filter(item => item)
- .sort((a, b) => a[0] - b[0])
- .forEach(item => {
- this._offsets.push(item[0])
- this._targets.push(item[1])
- })
+ .sort((a, b) => a[0] - b[0])) {
+ this._offsets.push(item[0])
+ this._targets.push(item[1])
+ }
}
dispose() {
@@ -226,20 +225,20 @@ class ScrollSpy extends BaseComponent {
SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, link.closest(SELECTOR_DROPDOWN))
.classList.add(CLASS_NAME_ACTIVE)
} else {
- SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP)
- .forEach(listGroup => {
- // Set triggered links parents as active
- // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
- SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`)
- .forEach(item => item.classList.add(CLASS_NAME_ACTIVE))
-
- // Handle special case when .nav-link is inside .nav-item
- SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS)
- .forEach(navItem => {
- SelectorEngine.children(navItem, SELECTOR_NAV_LINKS)
- .forEach(item => item.classList.add(CLASS_NAME_ACTIVE))
- })
- })
+ for (const listGroup of SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP)) {
+ // Set triggered links parents as active
+ // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
+ for (const item of SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`)) {
+ item.classList.add(CLASS_NAME_ACTIVE)
+ }
+
+ // Handle special case when .nav-link is inside .nav-item
+ for (const navItem of SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS)) {
+ for (const item of SelectorEngine.children(navItem, SELECTOR_NAV_LINKS)) {
+ item.classList.add(CLASS_NAME_ACTIVE)
+ }
+ }
+ }
}
EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {
@@ -248,9 +247,12 @@ class ScrollSpy extends BaseComponent {
}
_clear() {
- SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target)
+ const activeNodes = SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target)
.filter(node => node.classList.contains(CLASS_NAME_ACTIVE))
- .forEach(node => node.classList.remove(CLASS_NAME_ACTIVE))
+
+ for (const node of activeNodes) {
+ node.classList.remove(CLASS_NAME_ACTIVE)
+ }
}
// Static
@@ -279,8 +281,9 @@ class ScrollSpy extends BaseComponent {
*/
EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
- SelectorEngine.find(SELECTOR_DATA_SPY)
- .forEach(spy => new ScrollSpy(spy))
+ for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {
+ new ScrollSpy(spy) // eslint-disable-line no-new
+ }
})
/**
diff --git a/js/src/tab.js b/js/src/tab.js
index 161bccbca..dd62df505 100644
--- a/js/src/tab.js
+++ b/js/src/tab.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.1.1): tab.js
+ * Bootstrap (v5.1.2): tab.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -164,8 +164,9 @@ class Tab extends BaseComponent {
const dropdownElement = element.closest(SELECTOR_DROPDOWN)
if (dropdownElement) {
- SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement)
- .forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE))
+ for (const dropdown of SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement)) {
+ dropdown.classList.add(CLASS_NAME_ACTIVE)
+ }
}
element.setAttribute('aria-expanded', true)
diff --git a/js/src/toast.js b/js/src/toast.js
index 8a7fcdc71..0faecb8e4 100644
--- a/js/src/toast.js
+++ b/js/src/toast.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.1.1): toast.js
+ * Bootstrap (v5.1.2): toast.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
diff --git a/js/src/tooltip.js b/js/src/tooltip.js
index 747555411..afd17da53 100644
--- a/js/src/tooltip.js
+++ b/js/src/tooltip.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.1.1): tooltip.js
+ * Bootstrap (v5.1.2): tooltip.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -285,9 +285,9 @@ class Tooltip extends BaseComponent {
// only needed because of broken event delegation on iOS
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
if ('ontouchstart' in document.documentElement) {
- [].concat(...document.body.children).forEach(element => {
+ for (const element of [].concat(...document.body.children)) {
EventHandler.on(element, 'mouseover', noop)
- })
+ }
}
const complete = () => {
@@ -337,8 +337,9 @@ class Tooltip extends BaseComponent {
// If this is a touch-enabled device we remove the extra
// empty mouseover listeners we added for iOS support
if ('ontouchstart' in document.documentElement) {
- [].concat(...document.body.children)
- .forEach(element => EventHandler.off(element, 'mouseover', noop))
+ for (const element of [].concat(...document.body.children)) {
+ EventHandler.off(element, 'mouseover', noop)
+ }
}
this._activeTrigger[TRIGGER_CLICK] = false
@@ -527,7 +528,7 @@ class Tooltip extends BaseComponent {
_setListeners() {
const triggers = this._config.trigger.split(' ')
- triggers.forEach(trigger => {
+ for (const trigger of triggers) {
if (trigger === 'click') {
EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event))
} else if (trigger !== TRIGGER_MANUAL) {
@@ -541,7 +542,7 @@ class Tooltip extends BaseComponent {
EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event))
EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event))
}
- })
+ }
this._hideModalHandler = () => {
if (this._element) {
@@ -648,11 +649,11 @@ class Tooltip extends BaseComponent {
_getConfig(config) {
const dataAttributes = Manipulator.getDataAttributes(this._element)
- Object.keys(dataAttributes).forEach(dataAttr => {
+ for (const dataAttr of Object.keys(dataAttributes)) {
if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {
delete dataAttributes[dataAttr]
}
- })
+ }
config = {
...this.constructor.Default,
@@ -706,8 +707,9 @@ class Tooltip extends BaseComponent {
const basicClassPrefixRegex = new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`, 'g')
const tabClass = tip.getAttribute('class').match(basicClassPrefixRegex)
if (tabClass !== null && tabClass.length > 0) {
- tabClass.map(token => token.trim())
- .forEach(tClass => tip.classList.remove(tClass))
+ for (const tClass of tabClass.map(token => token.trim())) {
+ tip.classList.remove(tClass)
+ }
}
}
diff --git a/js/src/util/backdrop.js b/js/src/util/backdrop.js
index 80628c38d..e5ca0c860 100644
--- a/js/src/util/backdrop.js
+++ b/js/src/util/backdrop.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.1.1): util/backdrop.js
+ * Bootstrap (v5.1.2): util/backdrop.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
diff --git a/js/src/util/component-functions.js b/js/src/util/component-functions.js
index ff9d87ee6..c678ecadf 100644
--- a/js/src/util/component-functions.js
+++ b/js/src/util/component-functions.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.1.1): util/component-functions.js
+ * Bootstrap (v5.1.2): util/component-functions.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
diff --git a/js/src/util/focustrap.js b/js/src/util/focustrap.js
index d51942246..500a5b3bc 100644
--- a/js/src/util/focustrap.js
+++ b/js/src/util/focustrap.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.1.1): util/focustrap.js
+ * Bootstrap (v5.1.2): util/focustrap.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
diff --git a/js/src/util/index.js b/js/src/util/index.js
index a4ad9c941..0ac4ed263 100644
--- a/js/src/util/index.js
+++ b/js/src/util/index.js
@@ -1,11 +1,11 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.1.1): util/index.js
+ * Bootstrap (v5.1.2): util/index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
-const MAX_UID = 1000000
+const MAX_UID = 1_000_000
const MILLISECONDS_MULTIPLIER = 1000
const TRANSITION_END = 'transitionend'
@@ -15,7 +15,7 @@ const toType = obj => {
return `${obj}`
}
- return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase()
+ return Object.prototype.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase()
}
/**
@@ -125,7 +125,7 @@ const getElement = obj => {
}
const typeCheckConfig = (componentName, config, configTypes) => {
- Object.keys(configTypes).forEach(property => {
+ for (const property of Object.keys(configTypes)) {
const expectedTypes = configTypes[property]
const value = config[property]
const valueType = value && isElement(value) ? 'element' : toType(value)
@@ -135,7 +135,7 @@ const typeCheckConfig = (componentName, config, configTypes) => {
`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`
)
}
- })
+ }
}
const isVisible = element => {
@@ -217,7 +217,9 @@ const onDOMContentLoaded = callback => {
// add listener on the first call when the document is in loading state
if (!DOMContentLoadedCallbacks.length) {
document.addEventListener('DOMContentLoaded', () => {
- DOMContentLoadedCallbacks.forEach(callback => callback())
+ for (const callback of DOMContentLoadedCallbacks) {
+ callback()
+ }
})
}
diff --git a/js/src/util/sanitizer.js b/js/src/util/sanitizer.js
index 17b925a8c..f5a8287cd 100644
--- a/js/src/util/sanitizer.js
+++ b/js/src/util/sanitizer.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.1.1): util/sanitizer.js
+ * Bootstrap (v5.1.2): util/sanitizer.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -43,16 +43,9 @@ const allowedAttribute = (attribute, allowedAttributeList) => {
return true
}
- const regExp = allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)
-
// Check if a regular expression validates the attribute.
- for (let i = 0, len = regExp.length; i < len; i++) {
- if (regExp[i].test(attributeName)) {
- return true
- }
- }
-
- return false
+ return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)
+ .every(regex => regex.test(attributeName))
}
export const DefaultAllowlist = {
@@ -102,8 +95,7 @@ export function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {
const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')
const elements = [].concat(...createdDocument.body.querySelectorAll('*'))
- for (let i = 0, len = elements.length; i < len; i++) {
- const element = elements[i]
+ for (const element of elements) {
const elementName = element.nodeName.toLowerCase()
if (!Object.keys(allowList).includes(elementName)) {
@@ -115,11 +107,11 @@ export function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {
const attributeList = [].concat(...element.attributes)
const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])
- attributeList.forEach(attribute => {
+ for (const attribute of attributeList) {
if (!allowedAttribute(attribute, allowedAttributes)) {
element.removeAttribute(attribute.nodeName)
}
- })
+ }
}
return createdDocument.body.innerHTML
diff --git a/js/src/util/scrollbar.js b/js/src/util/scrollbar.js
index 73c28254e..f9a2d992d 100644
--- a/js/src/util/scrollbar.js
+++ b/js/src/util/scrollbar.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.1.1): util/scrollBar.js
+ * Bootstrap (v5.1.2): util/scrollBar.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -85,7 +85,9 @@ class ScrollBarHelper {
if (isElement(selector)) {
callBack(selector)
} else {
- SelectorEngine.find(selector, this._element).forEach(callBack)
+ for (const sel of SelectorEngine.find(selector, this._element)) {
+ callBack(sel)
+ }
}
}