]> git.ipfire.org Git - thirdparty/bootstrap.git/commitdiff
Enable `unicorn/no-array-for-each` rule
authorXhmikosR <xhmikosr@gmail.com>
Fri, 30 Jul 2021 06:28:51 +0000 (09:28 +0300)
committerXhmikosR <xhmikosr@gmail.com>
Tue, 5 Oct 2021 16:52:11 +0000 (19:52 +0300)
23 files changed:
.eslintrc.json
build/generate-sri.js
build/zip-examples.js
js/src/base-component.js
js/src/carousel.js
js/src/collapse.js
js/src/dom/event-handler.js
js/src/dom/manipulator.js
js/src/dropdown.js
js/src/modal.js
js/src/offcanvas.js
js/src/scrollspy.js
js/src/tab.js
js/src/tooltip.js
js/src/util/index.js
js/src/util/sanitizer.js
js/src/util/scrollbar.js
js/tests/helpers/fixture.js
js/tests/unit/carousel.spec.js
js/tests/unit/modal.spec.js
js/tests/unit/popover.spec.js
js/tests/unit/tooltip.spec.js
js/tests/unit/util/backdrop.spec.js

index 302c765985626a5906af7799b83feb575562c798..8fbb687ce0fd72b5fc33b35c0c726446a555175f 100644 (file)
@@ -51,7 +51,6 @@
     ],
     "unicorn/explicit-length-check": "off",
     "unicorn/no-array-callback-reference": "off",
-    "unicorn/no-array-for-each": "off",
     "unicorn/no-array-method-this-argument": "off",
     "unicorn/no-null": "off",
     "unicorn/no-unused-properties": "error",
index 221873b8fedc74f908d4637a7262e670bfe92368..47d02c4c3cdc7ce9d25c8f89fb16a6a853db9a92 100644 (file)
@@ -47,7 +47,7 @@ const files = [
   }
 ]
 
-files.forEach(file => {
+for (const file of files) {
   fs.readFile(file.file, 'utf8', (err, data) => {
     if (err) {
       throw err
@@ -61,4 +61,4 @@ files.forEach(file => {
 
     sh.sed('-i', new RegExp(`^(\\s+${file.configPropertyName}:\\s+["'])\\S*(["'])`), `$1${integrity}$2`, configFile)
   })
-})
+}
index 312548e8af17db532bd58aa1ebeeb05714d42a85..6c8ae527ac711b3ab643ec70f44f1f823c594f36 100644 (file)
@@ -57,22 +57,22 @@ sh.mkdir('-p', [
 
 sh.cp('-Rf', `${docsDir}/examples/*`, distFolder)
 
-cssFiles.forEach(file => {
+for (const file of cssFiles) {
   sh.cp('-f', `${docsDir}/dist/css/${file}`, `${distFolder}/assets/dist/css/`)
-})
+}
 
-jsFiles.forEach(file => {
+for (const file of jsFiles) {
   sh.cp('-f', `${docsDir}/dist/js/${file}`, `${distFolder}/assets/dist/js/`)
-})
+}
 
-imgFiles.forEach(file => {
+for (const file of imgFiles) {
   sh.cp('-f', `${docsDir}/assets/brand/${file}`, `${distFolder}/assets/brand/`)
-})
+}
 
 sh.rm(`${distFolder}/index.html`)
 
 // get all examples' HTML files
-sh.find(`${distFolder}/**/*.html`).forEach(file => {
+for (const file of sh.find(`${distFolder}/**/*.html`)) {
   const fileContents = sh.cat(file)
     .toString()
     .replace(new RegExp(`"/docs/${versionShort}/`, 'g'), '"../')
@@ -81,7 +81,7 @@ sh.find(`${distFolder}/**/*.html`).forEach(file => {
     .replace(/(<script src="\.\.\/.*) integrity=".*>/g, '$1></script>')
     .replace(/( +)<!-- favicons(.|\n)+<style>/i, '    <style>')
   new sh.ShellString(fileContents).to(file)
-})
+}
 
 // create the zip file
 sh.exec(`zip -r9 "${distFolder}.zip" "${distFolder}"`)
index cc6abd121d37560e2b9eefe1272a67f61a0bbd59..0a1c17357804b4b374759b756edc57e348d88d24 100644 (file)
@@ -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) {
index 322ad46a09f834ede66dd2bca2d77f1c3be4cf07..3f49ded408b43f452df4728b2a76d380e05270be 100644 (file)
@@ -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))
index dd42bc7e78bb1b1ca488977ca1f483bef041b746..b7f200d56627701634e6cc96f23a33fe6ed0bf9e 100644 (file)
@@ -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()
-  })
+  }
 })
 
 /**
index 2aa687bb13dce1e10da2274e540d4c68ca225367..e2fdbd52cf104cfbef33d2320ea10937d5e926a7 100644 (file)
@@ -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) {
index 11c4e9d39e0fe0aab2bcd4b094a05f676c71f0fe..219727d7ce1bdc4a43f4fb6c76a5de2be105270e 100644 (file)
@@ -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
   },
index 335abaf05ee82948052947573d5634cb69b8e5c9..59809cf5d2204602160f2e3e4842b73218c5f5d5 100644 (file)
@@ -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) {
index ec67f1fa1be9ec703b68b47f6db11430d998d2bd..b0ee089dee0c914b8b624f751907279763cd5b92 100644 (file)
@@ -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()
index 4fb2b2d9b243b607732ff48768367e21af2a2334..28fd49f06272f97798760dcd916297f17640d56a 100644 (file)
@@ -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)
 /**
index 900d245c64b5805ad4d76883cddafbdc0beaea9f..df9a14e220b4a95219e8d5c098d676cd039632d6 100644 (file)
@@ -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
+  }
 })
 
 /**
index 581162c5043e02cc838f70c568602584651c1707..dd62df5055cf953aaa9c39bb147762dbfa7e0d3a 100644 (file)
@@ -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)
index a26b8ada62c7a95cb05a0870323443c222af0560..afd17da53c56082eb1f0c5ec39beab0533bdba92 100644 (file)
@@ -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)
+      }
     }
   }
 
index b99496301848f8dd2fd436a9674f999c6f237848..9cee979dfc28f840b8b5dfc5eda32dc12e7fa782 100644 (file)
@@ -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()
+        }
       })
     }
 
index c02a4eb906edc81d97c8492c3bd249871d5545e6..e27961e9a3efc450d986a8368a7bad4398f41983 100644 (file)
@@ -114,11 +114,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
index 2d5d0ffa659957e5c66e71ecc3474771ff6888f0..f9a2d992dd89ab8db5bfca84e8d8886c8e676e80 100644 (file)
@@ -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)
+      }
     }
   }
 
index 29fa91896a93cff9c9e2d78258d40f75146ed5d8..02915af44cb24fe9b007828fdbbe8ced3e9a0c57 100644 (file)
@@ -34,17 +34,17 @@ export const jQueryMock = {
   elements: undefined,
   fn: {},
   each(fn) {
-    this.elements.forEach(el => {
+    for (const el of this.elements) {
       fn.call(el)
-    })
+    }
   }
 }
 
 export const clearBodyAndDocument = () => {
   const attributes = ['data-bs-padding-right', 'style']
 
-  attributes.forEach(attr => {
+  for (const attr of attributes) {
     document.documentElement.removeAttribute(attr)
     document.body.removeAttribute(attr)
-  })
+  }
 }
index 83ba2891270a8d4ee518e8a54d61e0f6a048062d..9e5cfea8623fecbec9f2b340508a4fc57002497c 100644 (file)
@@ -211,14 +211,14 @@ describe('Carousel', () => {
 
       spyOn(carousel, '_triggerSlideEvent')
 
-      carousel._isSliding = true;
+      carousel._isSliding = true
 
-      ['ArrowLeft', 'ArrowRight'].forEach(key => {
+      for (const key of ['ArrowLeft', 'ArrowRight']) {
         const keydown = createEvent('keydown')
         keydown.key = key
 
         carouselEl.dispatchEvent(keydown)
-      })
+      }
 
       expect(carousel._triggerSlideEvent).not.toHaveBeenCalled()
     })
index 9632fa6cf07fad13fc9780660baf5a0aff35ce81..211c7140ff186d31d14e4c01f2b88a7892e18521 100644 (file)
@@ -17,10 +17,9 @@ describe('Modal', () => {
     clearBodyAndDocument()
     document.body.classList.remove('modal-open')
 
-    document.querySelectorAll('.modal-backdrop')
-      .forEach(backdrop => {
-        backdrop.remove()
-      })
+    for (const backdrop of document.querySelectorAll('.modal-backdrop')) {
+      backdrop.remove()
+    }
   })
 
   beforeEach(() => {
index c54fc49eee16407516b1ea123d96bfd0b7d48c7a..c068e2fab331f71de03dcbca6edb341fcc0a3c7c 100644 (file)
@@ -15,9 +15,9 @@ describe('Popover', () => {
 
     const popoverList = document.querySelectorAll('.popover')
 
-    popoverList.forEach(popoverEl => {
+    for (const popoverEl of popoverList) {
       popoverEl.remove()
-    })
+    }
   })
 
   describe('VERSION', () => {
index 22a7edd017561b82793da8225ee6f27e3059109c..01ab1b149d5772497e283a155fbe91be8ffd203a 100644 (file)
@@ -15,9 +15,9 @@ describe('Tooltip', () => {
   afterEach(() => {
     clearFixture()
 
-    document.querySelectorAll('.tooltip').forEach(tooltipEl => {
+    for (const tooltipEl of document.querySelectorAll('.tooltip')) {
       tooltipEl.remove()
-    })
+    }
   })
 
   describe('VERSION', () => {
index b885b60b511f74f8ad925b8d83c75b19317fd4e2..818ddf221930bd4ce92c4a51863cfdc1c2453500 100644 (file)
@@ -17,9 +17,9 @@ describe('Backdrop', () => {
     clearFixture()
     const list = document.querySelectorAll(CLASS_BACKDROP)
 
-    list.forEach(el => {
+    for (const el of list) {
       el.remove()
-    })
+    }
   })
 
   describe('show', () => {
@@ -35,9 +35,10 @@ describe('Backdrop', () => {
       instance.show()
       instance.show(() => {
         expect(getElements().length).toEqual(1)
-        getElements().forEach(el => {
+        for (const el of getElements()) {
           expect(el.classList.contains(CLASS_NAME_SHOW)).toEqual(true)
-        })
+        }
+
         done()
       })
     })
@@ -67,9 +68,10 @@ describe('Backdrop', () => {
 
       instance.show(() => {
         expect(getElements().length).toEqual(1)
-        getElements().forEach(el => {
+        for (const el of getElements()) {
           expect(el.classList.contains(CLASS_NAME_FADE)).toEqual(true)
-        })
+        }
+
         done()
       })
     })