]> git.ipfire.org Git - thirdparty/bootstrap.git/commitdiff
ref: refactor `getSelector` not to be exported (#37438)
authorGeoSot <geo.sotis@gmail.com>
Mon, 7 Nov 2022 12:55:34 +0000 (14:55 +0200)
committerGitHub <noreply@github.com>
Mon, 7 Nov 2022 12:55:34 +0000 (14:55 +0200)
js/src/dom/selector-engine.js

index 248dab49443074bbba690f4e4dc1250529a3e781..88d4c86ea039866bb56ea270ecdea1beeeb95731 100644 (file)
@@ -7,9 +7,30 @@
 
 import { isDisabled, isVisible, parseSelector } from '../util/index.js'
 
-/**
- * Constants
- */
+const getSelector = element => {
+  let selector = element.getAttribute('data-bs-target')
+
+  if (!selector || selector === '#') {
+    let hrefAttribute = element.getAttribute('href')
+
+    // The only valid content that could double as a selector are IDs or classes,
+    // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
+    // `document.querySelector` will rightfully complain it is invalid.
+    // See https://github.com/twbs/bootstrap/issues/32273
+    if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {
+      return null
+    }
+
+    // Just in case some CMS puts out a full URL with the anchor appended
+    if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {
+      hrefAttribute = `#${hrefAttribute.split('#')[1]}`
+    }
+
+    selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null
+  }
+
+  return parseSelector(selector)
+}
 
 const SelectorEngine = {
   find(selector, element = document.documentElement) {
@@ -79,34 +100,8 @@ const SelectorEngine = {
     return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))
   },
 
-  getSelector(element) {
-    let selector = element.getAttribute('data-bs-target')
-
-    if (!selector || selector === '#') {
-      let hrefAttribute = element.getAttribute('href')
-
-      // The only valid content that could double as a selector are IDs or classes,
-      // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
-      // `document.querySelector` will rightfully complain it is invalid.
-      // See https://github.com/twbs/bootstrap/issues/32273
-      if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {
-        return null
-      }
-
-      // Just in case some CMS puts out a full URL with the anchor appended
-      if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {
-        hrefAttribute = `#${hrefAttribute.split('#')[1]}`
-      }
-
-      selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null
-      selector = parseSelector(selector)
-    }
-
-    return selector
-  },
-
   getSelectorFromElement(element) {
-    const selector = SelectorEngine.getSelector(element)
+    const selector = getSelector(element)
 
     if (selector) {
       return SelectorEngine.findOne(selector) ? selector : null
@@ -116,13 +111,13 @@ const SelectorEngine = {
   },
 
   getElementFromSelector(element) {
-    const selector = SelectorEngine.getSelector(element)
+    const selector = getSelector(element)
 
     return selector ? SelectorEngine.findOne(selector) : null
   },
 
   getMultipleElementsFromSelector(element) {
-    const selector = SelectorEngine.getSelector(element)
+    const selector = getSelector(element)
 
     return selector ? SelectorEngine.find(selector) : []
   }