1
0
mirror of https://github.com/twbs/bootstrap.git synced 2025-08-11 16:14:04 +02:00
This commit is contained in:
Mark Otto
2017-10-25 12:35:07 -07:00
parent 8c587d4280
commit 2e92062539
4 changed files with 51 additions and 57 deletions

View File

@@ -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) {
* 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) {
} }
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) {
}; };
} }
// 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
* @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) {
*/ */
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) {
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) {
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) {
} }
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) {
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) {
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() {
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) {
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() {
*/ */
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 () {
}; };
// 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 diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long