From 764bab29418309454ca81a9bf8e19d4f903c6e21 Mon Sep 17 00:00:00 2001
From: Johann-S <johann.servoire@gmail.com>
Date: Wed, 13 Feb 2019 19:37:52 +0200
Subject: [PATCH] remove polyfills which override browsers default

---
 js/src/dom/polyfill.js       | 70 ++++--------------------------------
 js/src/dom/selectorEngine.js | 27 +++++++-------
 js/tests/visual/modal.html   |  6 ++--
 js/tests/visual/popover.html |  2 +-
 js/tests/visual/tooltip.html |  2 +-
 5 files changed, 24 insertions(+), 83 deletions(-)

diff --git a/js/src/dom/polyfill.js b/js/src/dom/polyfill.js
index 834a1d6610..8644dc7022 100644
--- a/js/src/dom/polyfill.js
+++ b/js/src/dom/polyfill.js
@@ -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
   }
diff --git a/js/src/dom/selectorEngine.js b/js/src/dom/selectorEngine.js
index 52e2b93d61..95b5a9fb50 100644
--- a/js/src/dom/selectorEngine.js
+++ b/js/src/dom/selectorEngine.js
@@ -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)
       }
diff --git a/js/tests/visual/modal.html b/js/tests/visual/modal.html
index b37beeef38..f9d8b3f890 100644
--- a/js/tests/visual/modal.html
+++ b/js/tests/visual/modal.html
@@ -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)
           })
 
diff --git a/js/tests/visual/popover.html b/js/tests/visual/popover.html
index d408dbb903..86916c3d42 100644
--- a/js/tests/visual/popover.html
+++ b/js/tests/visual/popover.html
@@ -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)
           })
diff --git a/js/tests/visual/tooltip.html b/js/tests/visual/tooltip.html
index 1cc5507a79..643597a401 100644
--- a/js/tests/visual/tooltip.html
+++ b/js/tests/visual/tooltip.html
@@ -97,7 +97,7 @@
           })
         }
 
-        document.querySelectorAll('[data-toggle="tooltip"]')
+        [].slice.call(document.querySelectorAll('[data-toggle="tooltip"]'))
           .forEach(function (tooltip) {
             new Tooltip(tooltip)
           })
-- 
GitLab