]> git.ipfire.org Git - thirdparty/bootstrap.git/commitdiff
Enable unicorn/prefer-spread rule
authorXhmikosR <xhmikosr@gmail.com>
Tue, 25 Jul 2023 07:48:42 +0000 (10:48 +0300)
committerXhmikosR <xhmikosr@gmail.com>
Mon, 11 Mar 2024 14:34:04 +0000 (16:34 +0200)
13 files changed:
.eslintrc.json
js/src/dom/data.js
js/src/dom/selector-engine.js
js/src/dropdown.js
js/src/tooltip.js
js/src/util/sanitizer.js
js/tests/integration/bundle-modularity.js
js/tests/integration/bundle.js
js/tests/unit/collapse.spec.js
js/tests/unit/dom/selector-engine.spec.js
site/content/docs/5.3/examples/checkout/checkout.js
site/content/docs/5.3/examples/sidebars/sidebars.js
site/static/docs/5.3/assets/js/validate-forms.js

index 2efe773b6f22a6bcdf2324cdee2dfd3e3cf35218..bd6f4528146895a838586dadbdab1f0321297eb1 100644 (file)
@@ -96,7 +96,6 @@
     "unicorn/prefer-dom-node-dataset": "off",
     "unicorn/prefer-module": "off",
     "unicorn/prefer-query-selector": "off",
-    "unicorn/prefer-spread": "off",
     "unicorn/prefer-string-replace-all": "off",
     "unicorn/prevent-abbreviations": "off"
   },
index 407f67e392dcc9dfbd0cf9ae3140cf17d82bc8fa..45a3c6a7e308e751a3f74e6cb7dcf79266a5ad9a 100644 (file)
@@ -23,7 +23,7 @@ export default {
     // can be removed later when multiple key/instances are fine to be used
     if (!instanceMap.has(key) && instanceMap.size !== 0) {
       // eslint-disable-next-line no-console
-      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)
+      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${[...instanceMap.keys()][0]}.`)
       return
     }
 
index a4d81f3b9127e2144d6e9d58141dd8b2f6fbe047..edfa8abde7f709b0ac1121510bb02f6edd6d6d5f 100644 (file)
@@ -34,7 +34,7 @@ const getSelector = element => {
 
 const SelectorEngine = {
   find(selector, element = document.documentElement) {
-    return [].concat(...Element.prototype.querySelectorAll.call(element, selector))
+    return [...Element.prototype.querySelectorAll.call(element, selector)]
   },
 
   findOne(selector, element = document.documentElement) {
@@ -42,7 +42,7 @@ const SelectorEngine = {
   },
 
   children(element, selector) {
-    return [].concat(...element.children).filter(child => child.matches(selector))
+    return [...element.children].filter(child => child.matches(selector))
   },
 
   parents(element, selector) {
index 9190b3ed5704584f1a49eeca9ee0d2ac86feaa29..59265ea70f80b23835f53d34b6d5103b7fd36b4b 100644 (file)
@@ -143,7 +143,8 @@ class Dropdown 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 && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {
-      for (const element of [].concat(...document.body.children)) {
+      const children = [...document.body.children]
+      for (const element of children) {
         EventHandler.on(element, 'mouseover', noop)
       }
     }
@@ -193,7 +194,8 @@ 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) {
-      for (const element of [].concat(...document.body.children)) {
+      const children = [...document.body.children]
+      for (const element of children) {
         EventHandler.off(element, 'mouseover', noop)
       }
     }
index 6a6cfeff218bf02d7313e5c6dbb7fef0c81d9884..4b3f3800a7d0c4f87215ad64a37cbf99b4dca1dd 100644 (file)
@@ -222,7 +222,8 @@ 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) {
-      for (const element of [].concat(...document.body.children)) {
+      const children = [...document.body.children]
+      for (const element of children) {
         EventHandler.on(element, 'mouseover', noop)
       }
     }
@@ -256,7 +257,8 @@ 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) {
-      for (const element of [].concat(...document.body.children)) {
+      const children = [...document.body.children]
+      for (const element of children) {
         EventHandler.off(element, 'mouseover', noop)
       }
     }
index 3d2883aff3464051fd2b3920129fe89ed2bd2bff..0be81d6f278c858786577308d7607687b698c1bd 100644 (file)
@@ -93,7 +93,7 @@ export function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {
 
   const domParser = new window.DOMParser()
   const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')
-  const elements = [].concat(...createdDocument.body.querySelectorAll('*'))
+  const elements = [...createdDocument.body.querySelectorAll('*')]
 
   for (const element of elements) {
     const elementName = element.nodeName.toLowerCase()
@@ -103,8 +103,8 @@ export function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {
       continue
     }
 
-    const attributeList = [].concat(...element.attributes)
-    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])
+    const attributeList = [...element.attributes]
+    const allowedAttributes = [...allowList['*'] || [], ...allowList[elementName] || []]
 
     for (const attribute of attributeList) {
       if (!allowedAttribute(attribute, allowedAttributes)) {
index 3c1eec94402fc9d2b7a062652430ec559c774d60..13498ba9f65e8cbf89b72f79b5f332a986873f7f 100644 (file)
@@ -4,6 +4,6 @@ import Tooltip from '../../dist/tooltip'
 import '../../dist/carousel'
 
 window.addEventListener('load', () => {
-  [].concat(...document.querySelectorAll('[data-bs-toggle="tooltip"]'))
+  [...document.querySelectorAll('[data-bs-toggle="tooltip"]')]
     .map(tooltipNode => new Tooltip(tooltipNode))
 })
index 452088a7d811718dcb98572e1ce3f855860849f0..9887fc9f31074ac7d4f77fe5def4cbd28d38cfaa 100644 (file)
@@ -1,6 +1,6 @@
 import { Tooltip } from '../../../dist/js/bootstrap.esm.js'
 
 window.addEventListener('load', () => {
-  [].concat(...document.querySelectorAll('[data-bs-toggle="tooltip"]'))
+  [...document.querySelectorAll('[data-bs-toggle="tooltip"]')]
     .map(tooltipNode => new Tooltip(tooltipNode))
 })
index 58c5367526b9961da4128b92c326a12fe25f5e0c..9c920af5ffc402cef87ec6009572c900af64ea5f 100644 (file)
@@ -153,7 +153,7 @@ describe('Collapse', () => {
         const collapseEl1 = fixtureEl.querySelector('#collapse1')
         const collapseEl2 = fixtureEl.querySelector('#collapse2')
 
-        const collapseList = [].concat(...fixtureEl.querySelectorAll('.collapse'))
+        const collapseList = [...fixtureEl.querySelectorAll('.collapse')]
           .map(el => new Collapse(el, {
             parent,
             toggle: false
index 95d9bf8ec9d868ebade3875e92fa3d447650cdc3..f0ec5faf9a0bd4e643a9e8e717ef14c1dedfb16c 100644 (file)
@@ -68,7 +68,7 @@ describe('SelectorEngine', () => {
       ].join('')
 
       const list = fixtureEl.querySelector('ul')
-      const liList = [].concat(...fixtureEl.querySelectorAll('li'))
+      const liList = [...fixtureEl.querySelectorAll('li')]
       const result = SelectorEngine.children(list, 'li')
 
       expect(result).toEqual(liList)
@@ -356,7 +356,7 @@ describe('SelectorEngine', () => {
 
       const testEl = fixtureEl.querySelector('#test')
 
-      expect(SelectorEngine.getMultipleElementsFromSelector(testEl)).toEqual(Array.from(fixtureEl.querySelectorAll('.target')))
+      expect(SelectorEngine.getMultipleElementsFromSelector(testEl)).toEqual([...fixtureEl.querySelectorAll('.target')])
     })
 
     it('should get elements if several ids are given', () => {
@@ -368,7 +368,7 @@ describe('SelectorEngine', () => {
 
       const testEl = fixtureEl.querySelector('#test')
 
-      expect(SelectorEngine.getMultipleElementsFromSelector(testEl)).toEqual(Array.from(fixtureEl.querySelectorAll('.target')))
+      expect(SelectorEngine.getMultipleElementsFromSelector(testEl)).toEqual([...fixtureEl.querySelectorAll('.target')])
     })
 
     it('should get elements if several ids with special chars are given', () => {
@@ -380,7 +380,7 @@ describe('SelectorEngine', () => {
 
       const testEl = fixtureEl.querySelector('#test')
 
-      expect(SelectorEngine.getMultipleElementsFromSelector(testEl)).toEqual(Array.from(fixtureEl.querySelectorAll('.target')))
+      expect(SelectorEngine.getMultipleElementsFromSelector(testEl)).toEqual([...fixtureEl.querySelectorAll('.target')])
     })
 
     it('should get elements in array, from href if no data-bs-target set', () => {
@@ -392,7 +392,7 @@ describe('SelectorEngine', () => {
 
       const testEl = fixtureEl.querySelector('#test')
 
-      expect(SelectorEngine.getMultipleElementsFromSelector(testEl)).toEqual(Array.from(fixtureEl.querySelectorAll('.target')))
+      expect(SelectorEngine.getMultipleElementsFromSelector(testEl)).toEqual([...fixtureEl.querySelectorAll('.target')])
     })
 
     it('should return empty array if elements not found', () => {
index 30ea0aa6b1e01a48ca950411ccf836e8c0274f4f..d6ab60d474380170bd4b0702d01fa682c55439f9 100644 (file)
@@ -3,10 +3,10 @@
   'use strict'
 
   // Fetch all the forms we want to apply custom Bootstrap validation styles to
-  const forms = document.querySelectorAll('.needs-validation')
+  const forms = document.querySelectorAll('.needs-validation');
 
   // Loop over them and prevent submission
-  Array.from(forms).forEach(form => {
+  [...forms].forEach(form => {
     form.addEventListener('submit', event => {
       if (!form.checkValidity()) {
         event.preventDefault()
index 4075f1f155d9a258b2c8b3ec457002fc7812997f..616ebef1d9d0495d03ee3480a9c8ce5783a7cb24 100644 (file)
@@ -1,7 +1,7 @@
 /* global bootstrap: false */
 (() => {
   'use strict'
-  const tooltipTriggerList = Array.from(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
+  const tooltipTriggerList = [...document.querySelectorAll('[data-bs-toggle="tooltip"]')]
   tooltipTriggerList.forEach(tooltipTriggerEl => {
     new bootstrap.Tooltip(tooltipTriggerEl)
   })
index 30ea0aa6b1e01a48ca950411ccf836e8c0274f4f..d6ab60d474380170bd4b0702d01fa682c55439f9 100644 (file)
@@ -3,10 +3,10 @@
   'use strict'
 
   // Fetch all the forms we want to apply custom Bootstrap validation styles to
-  const forms = document.querySelectorAll('.needs-validation')
+  const forms = document.querySelectorAll('.needs-validation');
 
   // Loop over them and prevent submission
-  Array.from(forms).forEach(form => {
+  [...forms].forEach(form => {
     form.addEventListener('submit', event => {
       if (!form.checkValidity()) {
         event.preventDefault()