From 666fe596bf4629777f995dd79046b1db632ffdfb Mon Sep 17 00:00:00 2001 From: XhmikosR Date: Fri, 30 Jul 2021 09:28:51 +0300 Subject: Enable `unicorn/no-array-for-each` rule --- js/src/base-component.js | 4 ++-- js/src/carousel.js | 4 ++-- js/src/collapse.js | 30 +++++++++++++------------- js/src/dom/event-handler.js | 16 +++++++------- js/src/dom/manipulator.js | 13 ++++++------ js/src/dropdown.js | 13 ++++++------ js/src/modal.js | 5 +++-- js/src/offcanvas.js | 8 ++++--- js/src/scrollspy.js | 51 ++++++++++++++++++++++++--------------------- js/src/tab.js | 5 +++-- js/src/tooltip.js | 22 ++++++++++--------- js/src/util/index.js | 8 ++++--- js/src/util/sanitizer.js | 4 ++-- js/src/util/scrollbar.js | 4 +++- 14 files changed, 101 insertions(+), 86 deletions(-) (limited to 'js/src') diff --git a/js/src/base-component.js b/js/src/base-component.js index cc6abd121..0a1c17357 100644 --- a/js/src/base-component.js +++ b/js/src/base-component.js @@ -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/carousel.js b/js/src/carousel.js index 322ad46a0..3f49ded40 100644 --- a/js/src/carousel.js +++ b/js/src/carousel.js @@ -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)) diff --git a/js/src/collapse.js b/js/src/collapse.js index dd42bc7e7..b7f200d56 100644 --- a/js/src/collapse.js +++ b/js/src/collapse.js @@ -127,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) @@ -145,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() } @@ -153,7 +154,7 @@ class Collapse extends BaseComponent { if (!activesData) { Data.set(elemActive, DATA_KEY, null) } - }) + } const dimension = this._getDimension() @@ -252,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) { @@ -267,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 { @@ -275,7 +277,7 @@ class Collapse extends BaseComponent { } elem.setAttribute('aria-expanded', isOpen) - }) + } } // Static @@ -315,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/event-handler.js b/js/src/dom/event-handler.js index 2aa687bb1..e2fdbd52c 100644 --- a/js/src/dom/event-handler.js +++ b/js/src/dom/event-handler.js @@ -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 11c4e9d39..219727d7c 100644 --- a/js/src/dom/manipulator.js +++ b/js/src/dom/manipulator.js @@ -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/dropdown.js b/js/src/dropdown.js index 335abaf05..59809cf5d 100644 --- a/js/src/dropdown.js +++ b/js/src/dropdown.js @@ -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) { diff --git a/js/src/modal.js b/js/src/modal.js index ec67f1fa1..b0ee089de 100644 --- a/js/src/modal.js +++ b/js/src/modal.js @@ -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 4fb2b2d9b..28fd49f06 100644 --- a/js/src/offcanvas.js +++ b/js/src/offcanvas.js @@ -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/scrollspy.js b/js/src/scrollspy.js index 900d245c6..df9a14e22 100644 --- a/js/src/scrollspy.js +++ b/js/src/scrollspy.js @@ -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