return e.defaultPrevented
})()
- // Event constructor shim
- if (!window.Event || typeof window.Event !== 'function') {
- const origEvent = window.Event
- window.Event = (inType, params) => {
- params = params || {}
- const e = document.createEvent('Event')
- e.initEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable))
- return e
- }
- window.Event.prototype = origEvent.prototype
- }
-
- // closest polyfill (see: https://mzl.la/2vXggaI)
- let closest
- if (!Element.prototype.closest) {
- const nodeText = 3
- closest = (element, selector) => {
- let ancestor = element
- do {
- if (ancestor.matches(selector)) {
- return ancestor
- }
-
- ancestor = ancestor.parentElement
- } while (ancestor !== null && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== nodeText)
-
- return null
- }
- } else {
- closest = (element, selector) => element.closest(selector)
- }
+ let find = Element.prototype.querySelectorAll
+ let findOne = Element.prototype.querySelector
+ const scopeSelectorRegex = /:scope\b/
const supportScopeQuery = (() => {
const element = document.createElement('div')
+
try {
element.querySelectorAll(':scope *')
} catch (e) {
return true
})()
- const scopeSelectorRegex = /:scope\b/
- let find = Element.prototype.querySelectorAll
- let findOne = Element.prototype.querySelector
-
if (!supportScopeQuery) {
find = function (selector) {
if (!scopeSelectorRegex.test(selector)) {
}
const hasId = Boolean(this.id)
+
if (!hasId) {
this.id = Util.getUID('scope')
}
}
const matches = find.call(this, selector)
+
if (typeof matches[0] !== 'undefined') {
return matches[0]
}
}
}
- if (typeof Object.assign !== 'function') {
- Object.defineProperty(Object, 'assign', {
- value: (target, ...args) => {
- if (target === null || typeof target === 'undefined') {
- throw new TypeError('Cannot convert undefined or null to object')
- }
-
- const to = Object(target)
-
- for (let index = 1; index < args.length; index++) {
- const nextSource = args[index]
-
- if (nextSource !== null || !nextSource) {
- for (const nextKey in nextSource) {
- if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
- to[nextKey] = nextSource[nextKey]
- }
- }
- }
- }
- return to
- },
- writable: true,
- configurable: true
- })
- }
-
return {
defaultPreventedPreservedOnDispatch,
- focusIn: typeof window.onfocusin === 'undefined',
- closest,
find,
findOne
}
-import Polyfill from './polyfill'
-import Util from '../util'
-
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.3.1): dom/selectorEngine.js
* --------------------------------------------------------------------------
*/
+import Polyfill from './polyfill'
+import Util from '../util'
+
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
-const closest = Polyfill.closest
-const matchesFn = Element.prototype.matches
-const find = Polyfill.find
+const findFn = Polyfill.find
const findOne = Polyfill.findOne
-const nodeText = 3
+const NODE_TEXT = 3
const SelectorEngine = {
matches(element, selector) {
- return matchesFn.call(element, selector)
+ return element.matches(selector)
},
find(selector, element = document.documentElement) {
return null
}
- return find.call(element, selector)
+ return findFn.call(element, selector)
},
findOne(selector, element = document.documentElement) {
}
const children = Util.makeArray(element.children)
+
return children.filter((child) => this.matches(child, selector))
},
}
const parents = []
-
let ancestor = element.parentNode
- while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== nodeText) {
+
+ while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {
if (this.matches(ancestor, selector)) {
parents.push(ancestor)
}
return null
}
- return closest(element, selector)
+ return element.closest(selector)
},
prev(element, selector) {
}
const siblings = []
-
let previous = element.previousSibling
- while (previous && previous.nodeType === Node.ELEMENT_NODE && previous.nodeType !== nodeText) {
+
+ while (previous && previous.nodeType === Node.ELEMENT_NODE && previous.nodeType !== NODE_TEXT) {
if (this.matches(previous, selector)) {
siblings.push(previous)
}
}
}
- document.querySelectorAll('[data-toggle="popover"]')
+ [].slice.call(document.querySelectorAll('[data-toggle="popover"]'))
.forEach(function (popover) {
new Popover(popover)
})
- document.querySelectorAll('[data-toggle="tooltip"]')
- .forEach(function (tooltip) {
+ var tooltipList = [].slice.call(document.querySelectorAll('[data-toggle="tooltip"]'))
+ tooltipList.forEach(function (tooltip) {
new Tooltip(tooltip)
})
<script src="../../dist/popover.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function () {
- document.querySelectorAll('[data-toggle="popover"]')
+ [].slice.call(document.querySelectorAll('[data-toggle="popover"]'))
.forEach(function (popover) {
new Popover(popover)
})
})
}
- document.querySelectorAll('[data-toggle="tooltip"]')
+ [].slice.call(document.querySelectorAll('[data-toggle="tooltip"]'))
.forEach(function (tooltip) {
new Tooltip(tooltip)
})