0
0
mirror of https://github.com/twbs/bootstrap.git synced 2025-03-15 15:29:22 +01:00

remove polyfills which override browsers default

This commit is contained in:
Johann-S 2019-02-13 19:37:52 +02:00 committed by XhmikosR
parent f0c6b24bd7
commit 764bab2941
5 changed files with 24 additions and 83 deletions

View File

@ -23,40 +23,13 @@ const Polyfill = (() => {
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) {
@ -66,10 +39,6 @@ const Polyfill = (() => {
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)) {
@ -77,6 +46,7 @@ const Polyfill = (() => {
}
const hasId = Boolean(this.id)
if (!hasId) {
this.id = Util.getUID('scope')
}
@ -100,6 +70,7 @@ const Polyfill = (() => {
}
const matches = find.call(this, selector)
if (typeof matches[0] !== 'undefined') {
return matches[0]
}
@ -108,37 +79,8 @@ const Polyfill = (() => {
}
}
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
}

View File

@ -1,6 +1,3 @@
import Polyfill from './polyfill'
import Util from '../util'
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.3.1): dom/selectorEngine.js
@ -8,21 +5,22 @@ import Util from '../util'
* --------------------------------------------------------------------------
*/
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) {
@ -30,7 +28,7 @@ const SelectorEngine = {
return null
}
return find.call(element, selector)
return findFn.call(element, selector)
},
findOne(selector, element = document.documentElement) {
@ -47,6 +45,7 @@ const SelectorEngine = {
}
const children = Util.makeArray(element.children)
return children.filter((child) => this.matches(child, selector))
},
@ -56,9 +55,9 @@ const SelectorEngine = {
}
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)
}
@ -74,7 +73,7 @@ const SelectorEngine = {
return null
}
return closest(element, selector)
return element.closest(selector)
},
prev(element, selector) {
@ -83,9 +82,9 @@ const SelectorEngine = {
}
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)
}

View File

@ -230,13 +230,13 @@
}
}
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)
})

View File

@ -42,7 +42,7 @@
<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)
})

View File

@ -97,7 +97,7 @@
})
}
document.querySelectorAll('[data-toggle="tooltip"]')
[].slice.call(document.querySelectorAll('[data-toggle="tooltip"]'))
.forEach(function (tooltip) {
new Tooltip(tooltip)
})