]> git.ipfire.org Git - thirdparty/bootstrap.git/commitdiff
Switch to using for...of
authorXhmikosR <xhmikosr@gmail.com>
Thu, 7 Mar 2024 20:02:17 +0000 (22:02 +0200)
committerXhmikosR <xhmikosr@gmail.com>
Mon, 11 Mar 2024 14:34:07 +0000 (16:34 +0200)
17 files changed:
.eslintrc.json
js/tests/visual/modal.html
js/tests/visual/popover.html
js/tests/visual/toast.html
js/tests/visual/tooltip.html
site/assets/js/code-examples.js
site/assets/js/snippets.js
site/content/docs/5.3/components/buttons.md
site/content/docs/5.3/components/list-group.md
site/content/docs/5.3/components/navs-tabs.md
site/content/docs/5.3/components/scrollspy.md
site/content/docs/5.3/examples/cheatsheet/cheatsheet.js
site/content/docs/5.3/examples/checkout/checkout.js
site/content/docs/5.3/examples/sidebars/sidebars.js
site/content/docs/5.3/getting-started/javascript.md
site/static/docs/5.3/assets/js/color-modes.js
site/static/docs/5.3/assets/js/validate-forms.js

index bd6f4528146895a838586dadbdab1f0321297eb1..2ba9043432fb20cd86f5c985c0bce99d70de51a1 100644 (file)
       },
       "rules": {
         "no-console": "off",
-        "no-new": "off",
-        "unicorn/no-array-for-each": "off"
+        "no-new": "off"
       }
     },
     {
         "ecmaVersion": 2019
       },
       "rules": {
-        "no-new": "off",
-        "unicorn/no-array-for-each": "off"
+        "no-new": "off"
       }
     },
     {
index efb5127b5a747c6aab1d8647ef193ea47cd020ed..fe294fa6391d249247dce3ed175242077719e040 100644 (file)
         }
       }
 
-      document.querySelectorAll('[data-bs-toggle="popover"]').forEach(popoverEl => new bootstrap.Popover(popoverEl))
+      for (const popoverEl of document.querySelectorAll('[data-bs-toggle="popover"]')) {
+        new bootstrap.Popover(popoverEl)
+      }
 
-      document.querySelectorAll('[data-bs-toggle="tooltip"]').forEach(tooltipEl => new bootstrap.Tooltip(tooltipEl))
+      for (const tooltipEl of document.querySelectorAll('[data-bs-toggle="tooltip"]')) {
+        new bootstrap.Tooltip(tooltipEl)
+      }
 
       const tall = document.getElementById('tall')
       document.getElementById('tall-toggle').addEventListener('click', () => {
index 73edf998d48f7d1512b1fc6dc11fc7ed8314256f..bbc2eb200fdd2dd6dec2655aae8cf05f9f66eaa2 100644 (file)
@@ -35,7 +35,9 @@
     <script>
       /* global bootstrap: false */
 
-      document.querySelectorAll('[data-bs-toggle="popover"]').forEach(popoverEl => new bootstrap.Popover(popoverEl))
+      for (const popoverEl of document.querySelectorAll('[data-bs-toggle="popover"]')) {
+        new bootstrap.Popover(popoverEl)
+      }
     </script>
   </body>
 </html>
index e64fd1d880fb28f6e56e2f9fc5e64e652d133e54..07869886dea631697b261cd8f9d01815bfc7b049 100644 (file)
       /* global bootstrap: false */
 
       window.addEventListener('load', () => {
-        document.querySelectorAll('.toast').forEach(toastEl => new bootstrap.Toast(toastEl))
+        for (const toastEl of document.querySelectorAll('.toast')) {
+          new bootstrap.Toast(toastEl)
+        }
 
         document.getElementById('btnShowToast').addEventListener('click', () => {
-          document.querySelectorAll('.toast').forEach(toastEl => bootstrap.Toast.getInstance(toastEl).show())
+          for (const toastEl of document.querySelectorAll('.toast')) {
+            bootstrap.Toast.getInstance(toastEl).show()
+          }
         })
 
         document.getElementById('btnHideToast').addEventListener('click', () => {
-          document.querySelectorAll('.toast').forEach(toastEl => bootstrap.Toast.getInstance(toastEl).hide())
+          for (const toastEl of document.querySelectorAll('.toast')) {
+            bootstrap.Toast.getInstance(toastEl).hide()
+          }
         })
       })
     </script>
index 09144b572991c48a8fcd76fc290167ee77a69957..eff8982eeab8ae963a8a542474fc2e85286e4291 100644 (file)
       })
       targetTooltip.show()
 
-      document.querySelectorAll('[data-bs-toggle="tooltip"]').forEach(tooltipEl => new bootstrap.Tooltip(tooltipEl))
+      for (const tooltipEl of document.querySelectorAll('[data-bs-toggle="tooltip"]')) {
+        new bootstrap.Tooltip(tooltipEl)
+      }
     </script>
 
     <script>
index 3462da59baddd9e5ec660a5868170b0c278f7365..992ceda5509502a01987e26a5be6b17a6f41e2f2 100644 (file)
   ].join('')
 
   // Wrap programmatically code blocks and add copy btn.
-  document.querySelectorAll('.highlight')
-    .forEach(element => {
-      // Ignore examples made by shortcode
-      if (!element.closest('.bd-example-snippet')) {
-        element.insertAdjacentHTML('beforebegin', btnHtml)
-        element.previousElementSibling.append(element)
-      }
-    })
+  for (const element of document.querySelectorAll('.highlight')) {
+    // Ignore examples made by shortcode
+    if (!element.closest('.bd-example-snippet')) {
+      element.insertAdjacentHTML('beforebegin', btnHtml)
+      element.previousElementSibling.append(element)
+    }
+  }
 
   /**
    *
@@ -44,9 +43,9 @@
    * @param {string} title
    */
   function snippetButtonTooltip(selector, title) {
-    document.querySelectorAll(selector).forEach(btn => {
+    for (const btn of document.querySelectorAll(selector)) {
       bootstrap.Tooltip.getOrCreateInstance(btn, { title })
-    })
+    }
   }
 
   snippetButtonTooltip('.btn-clipboard', btnTitle)
index 94d8f6deeee128083b891a706a7e057d84785503..55b3f62ec177efb1a87014a4c566eaa01ca09595 100644 (file)
   // Tooltips
   // --------
   // Instantiate all tooltips in a docs or StackBlitz
-  document.querySelectorAll('[data-bs-toggle="tooltip"]')
-    .forEach(tooltip => {
-      new bootstrap.Tooltip(tooltip)
-    })
+  for (const tooltip of document.querySelectorAll('[data-bs-toggle="tooltip"]')) {
+    new bootstrap.Tooltip(tooltip)
+  }
 
   // --------
   // Popovers
   // --------
   // Instantiate all popovers in docs or StackBlitz
-  document.querySelectorAll('[data-bs-toggle="popover"]')
-    .forEach(popover => {
-      new bootstrap.Popover(popover)
-    })
+  for (const popover of document.querySelectorAll('[data-bs-toggle="popover"]')) {
+    new bootstrap.Popover(popover)
+  }
 
   // -------------------------------
   // Toasts
   }
 
   // Instantiate all toasts in docs pages only
-  document.querySelectorAll('.bd-example .toast')
-    .forEach(toastNode => {
-      const toast = new bootstrap.Toast(toastNode, {
-        autohide: false
-      })
-
-      toast.show()
+  for (const toastNode of document.querySelectorAll('.bd-example .toast')) {
+    const toast = new bootstrap.Toast(toastNode, {
+      autohide: false
     })
 
+    toast.show()
+  }
+
   // Instantiate all toasts in docs pages only
   // js-docs-start live-toast
   const toastTrigger = document.getElementById('liveToastBtn')
   // Carousels
   // --------
   // Instantiate all non-autoplaying carousels in docs or StackBlitz
-  document.querySelectorAll('.carousel:not([data-bs-ride="carousel"])')
-    .forEach(carousel => {
-      bootstrap.Carousel.getOrCreateInstance(carousel)
-    })
+  for (const carousel of document.querySelectorAll('.carousel:not([data-bs-ride="carousel"])')) {
+    bootstrap.Carousel.getOrCreateInstance(carousel)
+  }
 
   // -------------------------------
   // Checks & Radios
   // -------------------------------
   // Indeterminate checkbox example in docs and StackBlitz
-  document.querySelectorAll('.bd-example-indeterminate [type="checkbox"]')
-    .forEach(checkbox => {
-      if (checkbox.id.includes('Indeterminate')) {
-        checkbox.indeterminate = true
-      }
-    })
+  for (const checkbox of document.querySelectorAll('.bd-example-indeterminate [type="checkbox"]')) {
+    if (checkbox.id.includes('Indeterminate')) {
+      checkbox.indeterminate = true
+    }
+  }
 
   // -------------------------------
   // Links
   // -------------------------------
   // Disable empty links in docs examples only
-  document.querySelectorAll('.bd-content [href="#"]')
-    .forEach(link => {
-      link.addEventListener('click', event => {
-        event.preventDefault()
-      })
+  for (const link of document.querySelectorAll('.bd-content [href="#"]')) {
+    link.addEventListener('click', event => {
+      event.preventDefault()
     })
+  }
 
   // -------------------------------
   // Modal
   // 'Offcanvas components' example in docs only
   const myOffcanvas = document.querySelectorAll('.bd-example-offcanvas .offcanvas')
   if (myOffcanvas) {
-    myOffcanvas.forEach(offcanvas => {
+    for (const offcanvas of myOffcanvas) {
       offcanvas.addEventListener('show.bs.offcanvas', event => {
         event.preventDefault()
       }, false)
-    })
+    }
   }
 })()
index 83a61382a31042e82e06238597ccf048715f4098..65c2868229e945cd8c866d6be0395f002dadc21f 100644 (file)
@@ -223,10 +223,10 @@ const bsButton = new bootstrap.Button('#myButton')
 For example, to toggle all buttons
 
 ```js
-document.querySelectorAll('.btn').forEach(buttonElement => {
+for (const buttonElement of document.querySelectorAll('.btn')) {
   const button = bootstrap.Button.getOrCreateInstance(buttonElement)
   button.toggle()
-})
+}
 ```
 
 ## CSS
index 7f7e1457c0ee68298b27e580a377a318a3b872eb..93c9df1b5703c68b215ed1fbb5ad1f1c1330540a 100644 (file)
@@ -413,14 +413,14 @@ Enable tabbable list item via JavaScript (each list item needs to be activated i
 
 ```js
 const triggerTabList = document.querySelectorAll('#myTab a')
-triggerTabList.forEach(triggerEl => {
+for (const triggerEl of triggerTabList) {
   const tabTrigger = new bootstrap.Tab(triggerEl)
 
   triggerEl.addEventListener('click', event => {
     event.preventDefault()
     tabTrigger.show()
   })
-})
+}
 ```
 
 You can activate individual list item in several ways:
@@ -491,10 +491,10 @@ If no tab was already active, then the `hide.bs.tab` and `hidden.bs.tab` events
 
 ```js
 const tabElms = document.querySelectorAll('a[data-bs-toggle="list"]')
-tabElms.forEach(tabElm => {
+for (const tabElm of tabElms) {
   tabElm.addEventListener('shown.bs.tab', event => {
     event.target // newly activated tab
     event.relatedTarget // previous active tab
   })
-})
+}
 ```
index 5cf75e14503869e01784c14bd6349b25f9d84eab..7123d09fbd3020978e0c1782c584e39a62494da5 100644 (file)
@@ -613,14 +613,14 @@ Enable tabbable tabs via JavaScript (each tab needs to be activated individually
 
 ```js
 const triggerTabList = document.querySelectorAll('#myTab button')
-triggerTabList.forEach(triggerEl => {
+for (const triggerEl of triggerTabList) {
   const tabTrigger = new bootstrap.Tab(triggerEl)
 
   triggerEl.addEventListener('click', event => {
     event.preventDefault()
     tabTrigger.show()
   })
-})
+}
 ```
 
 You can activate individual tabs in several ways:
index d1abf75e3e7d6ffe778dae9a03cb6b75cb1943a6..650e70d97d63825b83412671c4442caa87e48b44 100644 (file)
@@ -333,13 +333,13 @@ Scrollspy is not limited to nav components and list groups, so it will work on a
 Target elements that aren’t visible will be ignored and their corresponding nav items won't receive an `.active` class. Scrollspy instances initialized in a non-visible wrapper will ignore all target elements. Use the `refresh` method to check for observable elements once the wrapper becomes visible.
 
 ```js
-document.querySelectorAll('#nav-tab>[data-bs-toggle="tab"]').forEach(el => {
+for (const el of document.querySelectorAll('#nav-tab > [data-bs-toggle="tab"]')) {
   el.addEventListener('shown.bs.tab', () => {
     const target = el.getAttribute('data-bs-target')
     const scrollElem = document.querySelector(`${target} [data-bs-spy="scroll"]`)
     bootstrap.ScrollSpy.getOrCreateInstance(scrollElem).refresh()
   })
-})
+}
 ```
 
 ## Usage
@@ -406,9 +406,9 @@ Here's an example using the refresh method:
 
 ```js
 const dataSpyList = document.querySelectorAll('[data-bs-spy="scroll"]')
-dataSpyList.forEach(dataSpyEl => {
+for (const dataSpyEl of dataSpyList) {
   bootstrap.ScrollSpy.getInstance(dataSpyEl).refresh()
-})
+}
 ```
 
 ### Events
index e25a89e75d6f6903b8e58cd7157db9b851efa48c..165b29c8a3d2583c705f193881deb006ba4e72cc 100644 (file)
@@ -4,34 +4,30 @@
   'use strict'
 
   // Tooltip and popover demos
-  document.querySelectorAll('.tooltip-demo')
-    .forEach(tooltip => {
-      new bootstrap.Tooltip(tooltip, {
-        selector: '[data-bs-toggle="tooltip"]'
-      })
-    })
-
-  document.querySelectorAll('[data-bs-toggle="popover"]')
-    .forEach(popover => {
-      new bootstrap.Popover(popover)
+  for (const tooltip of document.querySelectorAll('.tooltip-demo')) {
+    new bootstrap.Tooltip(tooltip, {
+      selector: '[data-bs-toggle="tooltip"]'
     })
+  }
 
-  document.querySelectorAll('.toast')
-    .forEach(toastNode => {
-      const toast = new bootstrap.Toast(toastNode, {
-        autohide: false
-      })
+  for (const popover of document.querySelectorAll('[data-bs-toggle="popover"]')) {
+    new bootstrap.Popover(popover)
+  }
 
-      toast.show()
+  for (const toastNode of document.querySelectorAll('.toast')) {
+    const toast = new bootstrap.Toast(toastNode, {
+      autohide: false
     })
 
+    toast.show()
+  }
+
   // Disable empty links and submit buttons
-  document.querySelectorAll('[href="#"], [type="submit"]')
-    .forEach(link => {
-      link.addEventListener('click', event => {
-        event.preventDefault()
-      })
+  for (const link of document.querySelectorAll('[href="#"], [type="submit"]')) {
+    link.addEventListener('click', event => {
+      event.preventDefault()
     })
+  }
 
   function setActiveItem() {
     const { hash } = window.location
index d6ab60d474380170bd4b0702d01fa682c55439f9..37c94a83d61ace8a389278996bcb8315255a6b6f 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
-  [...forms].forEach(form => {
+  for (const form of forms) {
     form.addEventListener('submit', event => {
       if (!form.checkValidity()) {
         event.preventDefault()
@@ -15,5 +15,5 @@
 
       form.classList.add('was-validated')
     }, false)
-  })
+  }
 })()
index 616ebef1d9d0495d03ee3480a9c8ce5783a7cb24..fa457512e8ba3a2f4698d816f7d0dae481f2bb0b 100644 (file)
@@ -2,7 +2,7 @@
 (() => {
   'use strict'
   const tooltipTriggerList = [...document.querySelectorAll('[data-bs-toggle="tooltip"]')]
-  tooltipTriggerList.forEach(tooltipTriggerEl => {
+  for (const tooltipTriggerEl of tooltipTriggerList) {
     new bootstrap.Tooltip(tooltipTriggerEl)
-  })
+  }
 })()
index 47f7341c35ff2c77c568abb255548d59dea06c3c..73370b62d8afe9806d0616b525f63071c7cc4486 100644 (file)
@@ -39,8 +39,9 @@ We provide a version of Bootstrap built as `ESM` (`bootstrap.esm.js` and `bootst
 <script type="module">
   import { Toast } from 'bootstrap.esm.min.js'
 
-  Array.from(document.querySelectorAll('.toast'))
-    .forEach(toastNode => new Toast(toastNode))
+  for (const toastNode of document.querySelectorAll('.toast')) {
+    new Toast(toastNode))
+  }
 </script>
 ```
 
index 8a0dabf18164fd55277a3bddd50c3303d9877026..dccd778c59ae343ffd781f899dbc2886a3a0851b 100644 (file)
     const btnToActive = document.querySelector(`[data-bs-theme-value="${theme}"]`)
     const svgOfActiveBtn = btnToActive.querySelector('svg use').getAttribute('href')
 
-    document.querySelectorAll('[data-bs-theme-value]').forEach(element => {
+    for (const element of document.querySelectorAll('[data-bs-theme-value]')) {
       element.classList.remove('active')
       element.setAttribute('aria-pressed', 'false')
-    })
+    }
 
     btnToActive.classList.add('active')
     btnToActive.setAttribute('aria-pressed', 'true')
   window.addEventListener('DOMContentLoaded', () => {
     showActiveTheme(getPreferredTheme())
 
-    document.querySelectorAll('[data-bs-theme-value]')
-      .forEach(toggle => {
-        toggle.addEventListener('click', () => {
-          const theme = toggle.getAttribute('data-bs-theme-value')
-          setStoredTheme(theme)
-          setTheme(theme)
-          showActiveTheme(theme, true)
-        })
+    for (const toggle of document.querySelectorAll('[data-bs-theme-value]')) {
+      toggle.addEventListener('click', () => {
+        const theme = toggle.getAttribute('data-bs-theme-value')
+        setStoredTheme(theme)
+        setTheme(theme)
+        showActiveTheme(theme, true)
       })
+    }
   })
 })()
index d6ab60d474380170bd4b0702d01fa682c55439f9..37c94a83d61ace8a389278996bcb8315255a6b6f 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
-  [...forms].forEach(form => {
+  for (const form of forms) {
     form.addEventListener('submit', event => {
       if (!form.checkValidity()) {
         event.preventDefault()
@@ -15,5 +15,5 @@
 
       form.classList.add('was-validated')
     }, false)
-  })
+  }
 })()