diff options
| author | Johann-S <[email protected]> | 2017-09-20 14:19:10 +0200 |
|---|---|---|
| committer | XhmikosR <[email protected]> | 2019-02-20 22:05:45 +0200 |
| commit | 7c1d0a1097657fb604a69cd47375a7e94c0ced93 (patch) | |
| tree | 0e68d4d0e4e26fed56a5f1df5c030a5d9f6260bc /js/src/dom/selectorEngine.js | |
| parent | bcbea028861c110a33ebb1add90813c632baf7b3 (diff) | |
| download | bootstrap-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.js | 122 |
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 |
