aboutsummaryrefslogtreecommitdiff
path: root/js/src/dom/selectorEngine.js
diff options
context:
space:
mode:
authorJohann-S <[email protected]>2017-09-20 14:19:10 +0200
committerXhmikosR <[email protected]>2019-02-20 22:05:45 +0200
commit7c1d0a1097657fb604a69cd47375a7e94c0ced93 (patch)
tree0e68d4d0e4e26fed56a5f1df5c030a5d9f6260bc /js/src/dom/selectorEngine.js
parentbcbea028861c110a33ebb1add90813c632baf7b3 (diff)
downloadbootstrap-7c1d0a1097657fb604a69cd47375a7e94c0ced93.tar.xz
bootstrap-7c1d0a1097657fb604a69cd47375a7e94c0ced93.zip
Wrap our objects into IIFE
Diffstat (limited to 'js/src/dom/selectorEngine.js')
-rw-r--r--js/src/dom/selectorEngine.js122
1 files changed, 66 insertions, 56 deletions
diff --git a/js/src/dom/selectorEngine.js b/js/src/dom/selectorEngine.js
index 0cff83ef9..99dc26b79 100644
--- a/js/src/dom/selectorEngine.js
+++ b/js/src/dom/selectorEngine.js
@@ -5,76 +5,86 @@
* --------------------------------------------------------------------------
*/
-// matches polyfill (see: https://mzl.la/2ikXneG)
-let fnMatches = null
-if (!Element.prototype.matches) {
- fnMatches =
- Element.prototype.msMatchesSelector ||
- Element.prototype.webkitMatchesSelector
-} else {
- fnMatches = Element.prototype.matches
-}
-
-// closest polyfill (see: https://mzl.la/2vXggaI)
-let fnClosest = null
-if (!Element.prototype.closest) {
- fnClosest = (element, selector) => {
- let ancestor = element
- if (!document.documentElement.contains(element)) {
- return null
- }
+const SelectorEngine = (() => {
- do {
- if (fnMatches.call(ancestor, selector)) {
- return ancestor
- }
- ancestor = ancestor.parentElement
- } while (ancestor !== null)
+ /**
+ * ------------------------------------------------------------------------
+ * Polyfills
+ * ------------------------------------------------------------------------
+ */
- return null
+ // matches polyfill (see: https://mzl.la/2ikXneG)
+ let fnMatches = null
+ if (!Element.prototype.matches) {
+ fnMatches =
+ Element.prototype.msMatchesSelector ||
+ Element.prototype.webkitMatchesSelector
+ } else {
+ fnMatches = Element.prototype.matches
}
-} else {
- // eslint-disable-next-line arrow-body-style
- fnClosest = (element, selector) => {
- return element.closest(selector)
- }
-}
-const SelectorEngine = {
- matches(element, selector) {
- return fnMatches.call(element, selector)
- },
+ // closest polyfill (see: https://mzl.la/2vXggaI)
+ let fnClosest = null
+ if (!Element.prototype.closest) {
+ fnClosest = (element, selector) => {
+ let ancestor = element
+ if (!document.documentElement.contains(element)) {
+ return null
+ }
+
+ do {
+ if (fnMatches.call(ancestor, selector)) {
+ return ancestor
+ }
+
+ ancestor = ancestor.parentElement
+ } while (ancestor !== null)
- find(selector, element = document) {
- if (typeof selector !== 'string') {
return null
}
-
- if (selector.indexOf('#') === 0) {
- return SelectorEngine.findOne(selector, element)
+ } else {
+ // eslint-disable-next-line arrow-body-style
+ fnClosest = (element, selector) => {
+ return element.closest(selector)
}
+ }
- return element.querySelectorAll(selector)
- },
+ return {
+ matches(element, selector) {
+ return fnMatches.call(element, selector)
+ },
- findOne(selector, element = document) {
- if (typeof selector !== 'string') {
- return null
- }
+ find(selector, element = document) {
+ if (typeof selector !== 'string') {
+ return null
+ }
- let selectorType = 'querySelector'
- if (selector.indexOf('#') === 0) {
- selectorType = 'getElementById'
- selector = selector.substr(1, selector.length)
- }
+ if (selector.indexOf('#') === 0) {
+ return SelectorEngine.findOne(selector, element)
+ }
+
+ return element.querySelectorAll(selector)
+ },
- return element[selectorType](selector)
- },
+ findOne(selector, element = document) {
+ if (typeof selector !== 'string') {
+ return null
+ }
+
+ let selectorType = 'querySelector'
+ if (selector.indexOf('#') === 0) {
+ selectorType = 'getElementById'
+ selector = selector.substr(1, selector.length)
+ }
- closest(element, selector) {
- return fnClosest(element, selector)
+ return element[selectorType](selector)
+ },
+
+ closest(element, selector) {
+ return fnClosest(element, selector)
+ }
}
-}
+})()
export default SelectorEngine