Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/twbs/bootstrap.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeoSot <geo.sotis@gmail.com>2022-11-07 15:55:34 +0300
committerGitHub <noreply@github.com>2022-11-07 15:55:34 +0300
commitfcdfee90b3a181573ad6d7aeb13aa481b11f2ef5 (patch)
tree2992eca1738e9161619a0058b9152f07814e588f
parentef4e2daa48193463b36fdc297d79c6a002e4ee67 (diff)
ref: refactor `getSelector` not to be exported (#37438)
-rw-r--r--js/src/dom/selector-engine.js59
1 files changed, 27 insertions, 32 deletions
diff --git a/js/src/dom/selector-engine.js b/js/src/dom/selector-engine.js
index 248dab4944..88d4c86ea0 100644
--- a/js/src/dom/selector-engine.js
+++ b/js/src/dom/selector-engine.js
@@ -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) : []
}