Commit 2e920625 authored by Mark Otto's avatar Mark Otto
Browse files

dist

parent 8c587d42
Showing with 49 additions and 55 deletions
+49 -55
...@@ -1379,7 +1379,7 @@ var Collapse = function ($$$1) { ...@@ -1379,7 +1379,7 @@ var Collapse = function ($$$1) {
/**! /**!
* @fileOverview Kickass library to create and place poppers near their reference elements. * @fileOverview Kickass library to create and place poppers near their reference elements.
* @version 1.12.5 * @version 1.12.6
* @license * @license
* Copyright (c) 2016 Federico Zivolo and contributors * Copyright (c) 2016 Federico Zivolo and contributors
* *
...@@ -1401,22 +1401,7 @@ var Collapse = function ($$$1) { ...@@ -1401,22 +1401,7 @@ var Collapse = function ($$$1) {
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE. * SOFTWARE.
*/ */
var nativeHints = ['native code', '[object MutationObserverConstructor]']; var isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';
/**
* Determine if a function is implemented natively (as opposed to a polyfill).
* @method
* @memberof Popper.Utils
* @argument {Function | undefined} fn the function to check
* @returns {Boolean}
*/
var isNative = (function (fn) {
return nativeHints.some(function (hint) {
return (fn || '').toString().indexOf(hint) > -1;
});
});
var isBrowser = typeof window !== 'undefined';
var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox']; var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];
var timeoutDuration = 0; var timeoutDuration = 0;
for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) { for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {
...@@ -1427,26 +1412,16 @@ for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) { ...@@ -1427,26 +1412,16 @@ for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {
} }
function microtaskDebounce(fn) { function microtaskDebounce(fn) {
var scheduled = false; var called = false;
var i = 0;
var elem = document.createElement('span');
// MutationObserver provides a mechanism for scheduling microtasks, which
// are scheduled *before* the next task. This gives us a way to debounce
// a function but ensure it's called *before* the next paint.
var observer = new MutationObserver(function () {
fn();
scheduled = false;
});
observer.observe(elem, { attributes: true });
return function () { return function () {
if (!scheduled) { if (called) {
scheduled = true; return;
elem.setAttribute('x-index', i);
i = i + 1; // don't use compund (+=) because it doesn't get optimized in V8
} }
called = true;
Promise.resolve().then(function () {
called = false;
fn();
});
}; };
} }
...@@ -1463,11 +1438,7 @@ function taskDebounce(fn) { ...@@ -1463,11 +1438,7 @@ function taskDebounce(fn) {
}; };
} }
// It's common for MutationObserver polyfills to be seen in the wild, however var supportsMicroTasks = isBrowser && window.Promise;
// these rely on Mutation Events which only occur when an element is connected
// to the DOM. The algorithm used in this module does not use a connected element,
// and so we must ensure that a *native* MutationObserver is available.
var supportsNativeMutationObserver = isBrowser && isNative(window.MutationObserver);
/** /**
* Create a debounced version of a method, that's asynchronously deferred * Create a debounced version of a method, that's asynchronously deferred
...@@ -1478,7 +1449,7 @@ var supportsNativeMutationObserver = isBrowser && isNative(window.MutationObserv ...@@ -1478,7 +1449,7 @@ var supportsNativeMutationObserver = isBrowser && isNative(window.MutationObserv
* @argument {Function} fn * @argument {Function} fn
* @returns {Function} * @returns {Function}
*/ */
var debounce = supportsNativeMutationObserver ? microtaskDebounce : taskDebounce; var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;
/** /**
* Check if the given variable is a function * Check if the given variable is a function
...@@ -1531,10 +1502,18 @@ function getParentNode(element) { ...@@ -1531,10 +1502,18 @@ function getParentNode(element) {
*/ */
function getScrollParent(element) { function getScrollParent(element) {
// Return body, `getScroll` will take care to get the correct `scrollTop` from it // Return body, `getScroll` will take care to get the correct `scrollTop` from it
if (!element || ['HTML', 'BODY', '#document'].indexOf(element.nodeName) !== -1) { if (!element) {
return window.document.body; return window.document.body;
} }
switch (element.nodeName) {
case 'HTML':
case 'BODY':
return element.ownerDocument.body;
case '#document':
return element.body;
}
// Firefox want us to check `-x` and `-y` variations as well // Firefox want us to check `-x` and `-y` variations as well
var _getStyleComputedProp = getStyleComputedProperty(element), var _getStyleComputedProp = getStyleComputedProperty(element),
...@@ -1562,6 +1541,10 @@ function getOffsetParent(element) { ...@@ -1562,6 +1541,10 @@ function getOffsetParent(element) {
var nodeName = offsetParent && offsetParent.nodeName; var nodeName = offsetParent && offsetParent.nodeName;
if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') { if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {
if (element) {
return element.ownerDocument.documentElement;
}
return window.document.documentElement; return window.document.documentElement;
} }
...@@ -1657,8 +1640,8 @@ function getScroll(element) { ...@@ -1657,8 +1640,8 @@ function getScroll(element) {
var nodeName = element.nodeName; var nodeName = element.nodeName;
if (nodeName === 'BODY' || nodeName === 'HTML') { if (nodeName === 'BODY' || nodeName === 'HTML') {
var html = window.document.documentElement; var html = element.ownerDocument.documentElement;
var scrollingElement = window.document.scrollingElement || html; var scrollingElement = element.ownerDocument.scrollingElement || html;
return scrollingElement[upperSide]; return scrollingElement[upperSide];
} }
...@@ -1907,7 +1890,7 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) { ...@@ -1907,7 +1890,7 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
} }
function getViewportOffsetRectRelativeToArtbitraryNode(element) { function getViewportOffsetRectRelativeToArtbitraryNode(element) {
var html = window.document.documentElement; var html = element.ownerDocument.documentElement;
var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html); var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
var width = Math.max(html.clientWidth, window.innerWidth || 0); var width = Math.max(html.clientWidth, window.innerWidth || 0);
var height = Math.max(html.clientHeight, window.innerHeight || 0); var height = Math.max(html.clientHeight, window.innerHeight || 0);
...@@ -1968,10 +1951,10 @@ function getBoundaries(popper, reference, padding, boundariesElement) { ...@@ -1968,10 +1951,10 @@ function getBoundaries(popper, reference, padding, boundariesElement) {
if (boundariesElement === 'scrollParent') { if (boundariesElement === 'scrollParent') {
boundariesNode = getScrollParent(getParentNode(popper)); boundariesNode = getScrollParent(getParentNode(popper));
if (boundariesNode.nodeName === 'BODY') { if (boundariesNode.nodeName === 'BODY') {
boundariesNode = window.document.documentElement; boundariesNode = popper.ownerDocument.documentElement;
} }
} else if (boundariesElement === 'window') { } else if (boundariesElement === 'window') {
boundariesNode = window.document.documentElement; boundariesNode = popper.ownerDocument.documentElement;
} else { } else {
boundariesNode = boundariesElement; boundariesNode = boundariesElement;
} }
...@@ -2212,10 +2195,11 @@ function runModifiers(modifiers, data, ends) { ...@@ -2212,10 +2195,11 @@ function runModifiers(modifiers, data, ends) {
var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends)); var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));
modifiersToRun.forEach(function (modifier) { modifiersToRun.forEach(function (modifier) {
if (modifier.function) { if (modifier['function']) {
// eslint-disable-line dot-notation
console.warn('`modifier.function` is deprecated, use `modifier.fn`!'); console.warn('`modifier.function` is deprecated, use `modifier.fn`!');
} }
var fn = modifier.function || modifier.fn; var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation
if (modifier.enabled && isFunction(fn)) { if (modifier.enabled && isFunction(fn)) {
// Add properties to offsets to make them a complete clientRect object // Add properties to offsets to make them a complete clientRect object
// we do this before each modifier to make sure the previous one doesn't // we do this before each modifier to make sure the previous one doesn't
...@@ -2342,9 +2326,19 @@ function destroy() { ...@@ -2342,9 +2326,19 @@ function destroy() {
return this; return this;
} }
/**
* Get the window associated with the element
* @argument {Element} element
* @returns {Window}
*/
function getWindow(element) {
var ownerDocument = element.ownerDocument;
return ownerDocument ? ownerDocument.defaultView : window;
}
function attachToScrollParents(scrollParent, event, callback, scrollParents) { function attachToScrollParents(scrollParent, event, callback, scrollParents) {
var isBody = scrollParent.nodeName === 'BODY'; var isBody = scrollParent.nodeName === 'BODY';
var target = isBody ? window : scrollParent; var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;
target.addEventListener(event, callback, { passive: true }); target.addEventListener(event, callback, { passive: true });
if (!isBody) { if (!isBody) {
...@@ -2362,7 +2356,7 @@ function attachToScrollParents(scrollParent, event, callback, scrollParents) { ...@@ -2362,7 +2356,7 @@ function attachToScrollParents(scrollParent, event, callback, scrollParents) {
function setupEventListeners(reference, options, state, updateBound) { function setupEventListeners(reference, options, state, updateBound) {
// Resize event listener on window // Resize event listener on window
state.updateBound = updateBound; state.updateBound = updateBound;
window.addEventListener('resize', state.updateBound, { passive: true }); getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });
// Scroll event listener on scroll parents // Scroll event listener on scroll parents
var scrollElement = getScrollParent(reference); var scrollElement = getScrollParent(reference);
...@@ -2393,7 +2387,7 @@ function enableEventListeners() { ...@@ -2393,7 +2387,7 @@ function enableEventListeners() {
*/ */
function removeEventListeners(reference, state) { function removeEventListeners(reference, state) {
// Remove resize event listener on window // Remove resize event listener on window
window.removeEventListener('resize', state.updateBound); getWindow(reference).removeEventListener('resize', state.updateBound);
// Remove scroll event listener on scroll parents // Remove scroll event listener on scroll parents
state.scrollParents.forEach(function (target) { state.scrollParents.forEach(function (target) {
...@@ -3695,8 +3689,8 @@ var Popper = function () { ...@@ -3695,8 +3689,8 @@ var Popper = function () {
}; };
// get reference and popper elements (allow jQuery wrappers) // get reference and popper elements (allow jQuery wrappers)
this.reference = reference.jquery ? reference[0] : reference; this.reference = reference && reference.jquery ? reference[0] : reference;
this.popper = popper.jquery ? popper[0] : popper; this.popper = popper && popper.jquery ? popper[0] : popper;
// Deep merge modifiers options // Deep merge modifiers options
this.options.modifiers = {}; this.options.modifiers = {};
......
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
This diff is collapsed.
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment