update popper...
This commit is contained in:
@@ -322,6 +322,10 @@
|
||||
<Content Include="Scripts\bootstrap.bundle.min.js" />
|
||||
<Content Include="Scripts\bootstrap.js" />
|
||||
<Content Include="Scripts\bootstrap.min.js" />
|
||||
<Content Include="Scripts\bootstrap.min.js.map" />
|
||||
<Content Include="Scripts\bootstrap.js.map" />
|
||||
<Content Include="Scripts\bootstrap.bundle.min.js.map" />
|
||||
<Content Include="Scripts\bootstrap.bundle.js.map" />
|
||||
<Content Include="Scripts\esm\popper-utils.js" />
|
||||
<Content Include="Scripts\esm\popper-utils.min.js" />
|
||||
<Content Include="Scripts\esm\popper.js" />
|
||||
@@ -330,10 +334,6 @@
|
||||
<Content Include="Scripts\esm\popper.js.map" />
|
||||
<Content Include="Scripts\esm\popper-utils.min.js.map" />
|
||||
<Content Include="Scripts\esm\popper-utils.js.map" />
|
||||
<Content Include="Scripts\bootstrap.min.js.map" />
|
||||
<Content Include="Scripts\bootstrap.js.map" />
|
||||
<Content Include="Scripts\bootstrap.bundle.min.js.map" />
|
||||
<Content Include="Scripts\bootstrap.bundle.js.map" />
|
||||
<None Include="Scripts\jquery-3.3.1.intellisense.js" />
|
||||
<Content Include="Scripts\jquery-3.3.1.js" />
|
||||
<Content Include="Scripts\jquery-3.3.1.min.js" />
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/**!
|
||||
* @fileOverview Kickass library to create and place poppers near their reference elements.
|
||||
* @version 1.12.9
|
||||
* @version 1.14.3
|
||||
* @license
|
||||
* Copyright (c) 2016 Federico Zivolo and contributors
|
||||
*
|
||||
@@ -80,13 +80,35 @@ function getScrollParent(element) {
|
||||
overflowX = _getStyleComputedProp.overflowX,
|
||||
overflowY = _getStyleComputedProp.overflowY;
|
||||
|
||||
if (/(auto|scroll)/.test(overflow + overflowY + overflowX)) {
|
||||
if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {
|
||||
return element;
|
||||
}
|
||||
|
||||
return getScrollParent(getParentNode(element));
|
||||
}
|
||||
|
||||
var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
|
||||
|
||||
var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);
|
||||
var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);
|
||||
|
||||
/**
|
||||
* Determines if the browser is Internet Explorer
|
||||
* @method
|
||||
* @memberof Popper.Utils
|
||||
* @param {Number} version to check
|
||||
* @returns {Boolean} isIE
|
||||
*/
|
||||
function isIE(version) {
|
||||
if (version === 11) {
|
||||
return isIE11;
|
||||
}
|
||||
if (version === 10) {
|
||||
return isIE10;
|
||||
}
|
||||
return isIE11 || isIE10;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the offset parent of the given element
|
||||
* @method
|
||||
@@ -95,16 +117,23 @@ function getScrollParent(element) {
|
||||
* @returns {Element} offset parent
|
||||
*/
|
||||
function getOffsetParent(element) {
|
||||
if (!element) {
|
||||
return document.documentElement;
|
||||
}
|
||||
|
||||
var noOffsetParent = isIE(10) ? document.body : null;
|
||||
|
||||
// NOTE: 1 DOM access here
|
||||
var offsetParent = element && element.offsetParent;
|
||||
var offsetParent = element.offsetParent;
|
||||
// Skip hidden elements which don't have an offsetParent
|
||||
while (offsetParent === noOffsetParent && element.nextElementSibling) {
|
||||
offsetParent = (element = element.nextElementSibling).offsetParent;
|
||||
}
|
||||
|
||||
var nodeName = offsetParent && offsetParent.nodeName;
|
||||
|
||||
if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {
|
||||
if (element) {
|
||||
return element.ownerDocument.documentElement;
|
||||
}
|
||||
|
||||
return document.documentElement;
|
||||
return element ? element.ownerDocument.documentElement : document.documentElement;
|
||||
}
|
||||
|
||||
// .offsetParent will return the closest TD or TABLE in case
|
||||
@@ -246,29 +275,14 @@ function getBordersSize(styles, axis) {
|
||||
return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tells if you are running Internet Explorer 10
|
||||
* @method
|
||||
* @memberof Popper.Utils
|
||||
* @returns {Boolean} isIE10
|
||||
*/
|
||||
var isIE10 = undefined;
|
||||
|
||||
var isIE10$1 = function () {
|
||||
if (isIE10 === undefined) {
|
||||
isIE10 = navigator.appVersion.indexOf('MSIE 10') !== -1;
|
||||
}
|
||||
return isIE10;
|
||||
};
|
||||
|
||||
function getSize(axis, body, html, computedStyle) {
|
||||
return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE10$1() ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0);
|
||||
return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0);
|
||||
}
|
||||
|
||||
function getWindowSizes() {
|
||||
var body = document.body;
|
||||
var html = document.documentElement;
|
||||
var computedStyle = isIE10$1() && getComputedStyle(html);
|
||||
var computedStyle = isIE(10) && getComputedStyle(html);
|
||||
|
||||
return {
|
||||
height: getSize('Height', body, html, computedStyle),
|
||||
@@ -317,8 +331,8 @@ function getBoundingClientRect(element) {
|
||||
// IE10 10 FIX: Please, don't ask, the element isn't
|
||||
// considered in DOM in some circumstances...
|
||||
// This isn't reproducible in IE10 compatibility mode of IE11
|
||||
if (isIE10$1()) {
|
||||
try {
|
||||
try {
|
||||
if (isIE(10)) {
|
||||
rect = element.getBoundingClientRect();
|
||||
var scrollTop = getScroll(element, 'top');
|
||||
var scrollLeft = getScroll(element, 'left');
|
||||
@@ -326,10 +340,10 @@ function getBoundingClientRect(element) {
|
||||
rect.left += scrollLeft;
|
||||
rect.bottom += scrollTop;
|
||||
rect.right += scrollLeft;
|
||||
} catch (err) {}
|
||||
} else {
|
||||
rect = element.getBoundingClientRect();
|
||||
}
|
||||
} else {
|
||||
rect = element.getBoundingClientRect();
|
||||
}
|
||||
} catch (e) {}
|
||||
|
||||
var result = {
|
||||
left: rect.left,
|
||||
@@ -361,7 +375,9 @@ function getBoundingClientRect(element) {
|
||||
}
|
||||
|
||||
function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
||||
var isIE10 = isIE10$1();
|
||||
var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
||||
|
||||
var isIE10 = isIE(10);
|
||||
var isHTML = parent.nodeName === 'HTML';
|
||||
var childrenRect = getBoundingClientRect(children);
|
||||
var parentRect = getBoundingClientRect(parent);
|
||||
@@ -371,6 +387,11 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
||||
var borderTopWidth = parseFloat(styles.borderTopWidth, 10);
|
||||
var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);
|
||||
|
||||
// In cases where the parent is fixed, we must ignore negative scroll in offset calc
|
||||
if (fixedPosition && parent.nodeName === 'HTML') {
|
||||
parentRect.top = Math.max(parentRect.top, 0);
|
||||
parentRect.left = Math.max(parentRect.left, 0);
|
||||
}
|
||||
var offsets = getClientRect({
|
||||
top: childrenRect.top - parentRect.top - borderTopWidth,
|
||||
left: childrenRect.left - parentRect.left - borderLeftWidth,
|
||||
@@ -398,7 +419,7 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
||||
offsets.marginLeft = marginLeft;
|
||||
}
|
||||
|
||||
if (isIE10 ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
|
||||
if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
|
||||
offsets = includeScroll(offsets, parent);
|
||||
}
|
||||
|
||||
@@ -406,13 +427,15 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
||||
}
|
||||
|
||||
function getViewportOffsetRectRelativeToArtbitraryNode(element) {
|
||||
var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
||||
|
||||
var html = element.ownerDocument.documentElement;
|
||||
var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
|
||||
var width = Math.max(html.clientWidth, window.innerWidth || 0);
|
||||
var height = Math.max(html.clientHeight, window.innerHeight || 0);
|
||||
|
||||
var scrollTop = getScroll(html);
|
||||
var scrollLeft = getScroll(html, 'left');
|
||||
var scrollTop = !excludeScroll ? getScroll(html) : 0;
|
||||
var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;
|
||||
|
||||
var offset = {
|
||||
top: scrollTop - relativeOffset.top + relativeOffset.marginTop,
|
||||
@@ -443,6 +466,26 @@ function isFixed(element) {
|
||||
return isFixed(getParentNode(element));
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the first parent of an element that has a transformed property defined
|
||||
* @method
|
||||
* @memberof Popper.Utils
|
||||
* @argument {Element} element
|
||||
* @returns {Element} first transformed parent or documentElement
|
||||
*/
|
||||
|
||||
function getFixedPositionOffsetParent(element) {
|
||||
// This check is needed to avoid errors in case one of the elements isn't defined for any reason
|
||||
if (!element || !element.parentElement || isIE()) {
|
||||
return document.documentElement;
|
||||
}
|
||||
var el = element.parentElement;
|
||||
while (el && getStyleComputedProperty(el, 'transform') === 'none') {
|
||||
el = el.parentElement;
|
||||
}
|
||||
return el || document.documentElement;
|
||||
}
|
||||
|
||||
/**
|
||||
* Computed the boundaries limits and return them
|
||||
* @method
|
||||
@@ -451,16 +494,20 @@ function isFixed(element) {
|
||||
* @param {HTMLElement} reference
|
||||
* @param {number} padding
|
||||
* @param {HTMLElement} boundariesElement - Element used to define the boundaries
|
||||
* @param {Boolean} fixedPosition - Is in fixed position mode
|
||||
* @returns {Object} Coordinates of the boundaries
|
||||
*/
|
||||
function getBoundaries(popper, reference, padding, boundariesElement) {
|
||||
var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
||||
|
||||
// NOTE: 1 DOM access here
|
||||
|
||||
var boundaries = { top: 0, left: 0 };
|
||||
var offsetParent = findCommonOffsetParent(popper, reference);
|
||||
var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
|
||||
|
||||
// Handle viewport case
|
||||
if (boundariesElement === 'viewport') {
|
||||
boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent);
|
||||
boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);
|
||||
} else {
|
||||
// Handle other cases based on DOM element used as boundaries
|
||||
var boundariesNode = void 0;
|
||||
@@ -475,7 +522,7 @@ function getBoundaries(popper, reference, padding, boundariesElement) {
|
||||
boundariesNode = boundariesElement;
|
||||
}
|
||||
|
||||
var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent);
|
||||
var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);
|
||||
|
||||
// In case of HTML, we need a different computation
|
||||
if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {
|
||||
@@ -569,7 +616,6 @@ function computeAutoPlacement(placement, refRect, popper, reference, boundariesE
|
||||
return computedPlacement + (variation ? '-' + variation : '');
|
||||
}
|
||||
|
||||
var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
|
||||
var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];
|
||||
var timeoutDuration = 0;
|
||||
for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {
|
||||
@@ -773,11 +819,14 @@ function getPopperOffsets(popper, referenceOffsets, placement) {
|
||||
* @param {Object} state
|
||||
* @param {Element} popper - the popper element
|
||||
* @param {Element} reference - the reference element (the popper will be relative to this)
|
||||
* @param {Element} fixedPosition - is in fixed position mode
|
||||
* @returns {Object} An object containing the offsets which will be applied to the popper
|
||||
*/
|
||||
function getReferenceOffsets(state, popper, reference) {
|
||||
var commonOffsetParent = findCommonOffsetParent(popper, reference);
|
||||
return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent);
|
||||
var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
|
||||
|
||||
var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
|
||||
return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -791,7 +840,7 @@ function getSupportedPropertyName(property) {
|
||||
var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];
|
||||
var upperProp = property.charAt(0).toUpperCase() + property.slice(1);
|
||||
|
||||
for (var i = 0; i < prefixes.length - 1; i++) {
|
||||
for (var i = 0; i < prefixes.length; i++) {
|
||||
var prefix = prefixes[i];
|
||||
var toCheck = prefix ? '' + prefix + upperProp : property;
|
||||
if (typeof document.body.style[toCheck] !== 'undefined') {
|
||||
|
||||
File diff suppressed because one or more lines are too long
+2
-2
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+135
-52
@@ -1,6 +1,6 @@
|
||||
/**!
|
||||
* @fileOverview Kickass library to create and place poppers near their reference elements.
|
||||
* @version 1.12.9
|
||||
* @version 1.14.3
|
||||
* @license
|
||||
* Copyright (c) 2016 Federico Zivolo and contributors
|
||||
*
|
||||
@@ -23,6 +23,7 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
|
||||
|
||||
var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];
|
||||
var timeoutDuration = 0;
|
||||
for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {
|
||||
@@ -142,13 +143,33 @@ function getScrollParent(element) {
|
||||
overflowX = _getStyleComputedProp.overflowX,
|
||||
overflowY = _getStyleComputedProp.overflowY;
|
||||
|
||||
if (/(auto|scroll)/.test(overflow + overflowY + overflowX)) {
|
||||
if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {
|
||||
return element;
|
||||
}
|
||||
|
||||
return getScrollParent(getParentNode(element));
|
||||
}
|
||||
|
||||
var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);
|
||||
var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);
|
||||
|
||||
/**
|
||||
* Determines if the browser is Internet Explorer
|
||||
* @method
|
||||
* @memberof Popper.Utils
|
||||
* @param {Number} version to check
|
||||
* @returns {Boolean} isIE
|
||||
*/
|
||||
function isIE(version) {
|
||||
if (version === 11) {
|
||||
return isIE11;
|
||||
}
|
||||
if (version === 10) {
|
||||
return isIE10;
|
||||
}
|
||||
return isIE11 || isIE10;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the offset parent of the given element
|
||||
* @method
|
||||
@@ -157,16 +178,23 @@ function getScrollParent(element) {
|
||||
* @returns {Element} offset parent
|
||||
*/
|
||||
function getOffsetParent(element) {
|
||||
if (!element) {
|
||||
return document.documentElement;
|
||||
}
|
||||
|
||||
var noOffsetParent = isIE(10) ? document.body : null;
|
||||
|
||||
// NOTE: 1 DOM access here
|
||||
var offsetParent = element && element.offsetParent;
|
||||
var offsetParent = element.offsetParent;
|
||||
// Skip hidden elements which don't have an offsetParent
|
||||
while (offsetParent === noOffsetParent && element.nextElementSibling) {
|
||||
offsetParent = (element = element.nextElementSibling).offsetParent;
|
||||
}
|
||||
|
||||
var nodeName = offsetParent && offsetParent.nodeName;
|
||||
|
||||
if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {
|
||||
if (element) {
|
||||
return element.ownerDocument.documentElement;
|
||||
}
|
||||
|
||||
return document.documentElement;
|
||||
return element ? element.ownerDocument.documentElement : document.documentElement;
|
||||
}
|
||||
|
||||
// .offsetParent will return the closest TD or TABLE in case
|
||||
@@ -308,29 +336,14 @@ function getBordersSize(styles, axis) {
|
||||
return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tells if you are running Internet Explorer 10
|
||||
* @method
|
||||
* @memberof Popper.Utils
|
||||
* @returns {Boolean} isIE10
|
||||
*/
|
||||
var isIE10 = undefined;
|
||||
|
||||
var isIE10$1 = function () {
|
||||
if (isIE10 === undefined) {
|
||||
isIE10 = navigator.appVersion.indexOf('MSIE 10') !== -1;
|
||||
}
|
||||
return isIE10;
|
||||
};
|
||||
|
||||
function getSize(axis, body, html, computedStyle) {
|
||||
return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE10$1() ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0);
|
||||
return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0);
|
||||
}
|
||||
|
||||
function getWindowSizes() {
|
||||
var body = document.body;
|
||||
var html = document.documentElement;
|
||||
var computedStyle = isIE10$1() && getComputedStyle(html);
|
||||
var computedStyle = isIE(10) && getComputedStyle(html);
|
||||
|
||||
return {
|
||||
height: getSize('Height', body, html, computedStyle),
|
||||
@@ -422,8 +435,8 @@ function getBoundingClientRect(element) {
|
||||
// IE10 10 FIX: Please, don't ask, the element isn't
|
||||
// considered in DOM in some circumstances...
|
||||
// This isn't reproducible in IE10 compatibility mode of IE11
|
||||
if (isIE10$1()) {
|
||||
try {
|
||||
try {
|
||||
if (isIE(10)) {
|
||||
rect = element.getBoundingClientRect();
|
||||
var scrollTop = getScroll(element, 'top');
|
||||
var scrollLeft = getScroll(element, 'left');
|
||||
@@ -431,10 +444,10 @@ function getBoundingClientRect(element) {
|
||||
rect.left += scrollLeft;
|
||||
rect.bottom += scrollTop;
|
||||
rect.right += scrollLeft;
|
||||
} catch (err) {}
|
||||
} else {
|
||||
rect = element.getBoundingClientRect();
|
||||
}
|
||||
} else {
|
||||
rect = element.getBoundingClientRect();
|
||||
}
|
||||
} catch (e) {}
|
||||
|
||||
var result = {
|
||||
left: rect.left,
|
||||
@@ -466,7 +479,9 @@ function getBoundingClientRect(element) {
|
||||
}
|
||||
|
||||
function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
||||
var isIE10 = isIE10$1();
|
||||
var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
||||
|
||||
var isIE10 = isIE(10);
|
||||
var isHTML = parent.nodeName === 'HTML';
|
||||
var childrenRect = getBoundingClientRect(children);
|
||||
var parentRect = getBoundingClientRect(parent);
|
||||
@@ -476,6 +491,11 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
||||
var borderTopWidth = parseFloat(styles.borderTopWidth, 10);
|
||||
var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);
|
||||
|
||||
// In cases where the parent is fixed, we must ignore negative scroll in offset calc
|
||||
if (fixedPosition && parent.nodeName === 'HTML') {
|
||||
parentRect.top = Math.max(parentRect.top, 0);
|
||||
parentRect.left = Math.max(parentRect.left, 0);
|
||||
}
|
||||
var offsets = getClientRect({
|
||||
top: childrenRect.top - parentRect.top - borderTopWidth,
|
||||
left: childrenRect.left - parentRect.left - borderLeftWidth,
|
||||
@@ -503,7 +523,7 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
||||
offsets.marginLeft = marginLeft;
|
||||
}
|
||||
|
||||
if (isIE10 ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
|
||||
if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
|
||||
offsets = includeScroll(offsets, parent);
|
||||
}
|
||||
|
||||
@@ -511,13 +531,15 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
||||
}
|
||||
|
||||
function getViewportOffsetRectRelativeToArtbitraryNode(element) {
|
||||
var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
||||
|
||||
var html = element.ownerDocument.documentElement;
|
||||
var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
|
||||
var width = Math.max(html.clientWidth, window.innerWidth || 0);
|
||||
var height = Math.max(html.clientHeight, window.innerHeight || 0);
|
||||
|
||||
var scrollTop = getScroll(html);
|
||||
var scrollLeft = getScroll(html, 'left');
|
||||
var scrollTop = !excludeScroll ? getScroll(html) : 0;
|
||||
var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;
|
||||
|
||||
var offset = {
|
||||
top: scrollTop - relativeOffset.top + relativeOffset.marginTop,
|
||||
@@ -548,6 +570,26 @@ function isFixed(element) {
|
||||
return isFixed(getParentNode(element));
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the first parent of an element that has a transformed property defined
|
||||
* @method
|
||||
* @memberof Popper.Utils
|
||||
* @argument {Element} element
|
||||
* @returns {Element} first transformed parent or documentElement
|
||||
*/
|
||||
|
||||
function getFixedPositionOffsetParent(element) {
|
||||
// This check is needed to avoid errors in case one of the elements isn't defined for any reason
|
||||
if (!element || !element.parentElement || isIE()) {
|
||||
return document.documentElement;
|
||||
}
|
||||
var el = element.parentElement;
|
||||
while (el && getStyleComputedProperty(el, 'transform') === 'none') {
|
||||
el = el.parentElement;
|
||||
}
|
||||
return el || document.documentElement;
|
||||
}
|
||||
|
||||
/**
|
||||
* Computed the boundaries limits and return them
|
||||
* @method
|
||||
@@ -556,16 +598,20 @@ function isFixed(element) {
|
||||
* @param {HTMLElement} reference
|
||||
* @param {number} padding
|
||||
* @param {HTMLElement} boundariesElement - Element used to define the boundaries
|
||||
* @param {Boolean} fixedPosition - Is in fixed position mode
|
||||
* @returns {Object} Coordinates of the boundaries
|
||||
*/
|
||||
function getBoundaries(popper, reference, padding, boundariesElement) {
|
||||
var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
||||
|
||||
// NOTE: 1 DOM access here
|
||||
|
||||
var boundaries = { top: 0, left: 0 };
|
||||
var offsetParent = findCommonOffsetParent(popper, reference);
|
||||
var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
|
||||
|
||||
// Handle viewport case
|
||||
if (boundariesElement === 'viewport') {
|
||||
boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent);
|
||||
boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);
|
||||
} else {
|
||||
// Handle other cases based on DOM element used as boundaries
|
||||
var boundariesNode = void 0;
|
||||
@@ -580,7 +626,7 @@ function getBoundaries(popper, reference, padding, boundariesElement) {
|
||||
boundariesNode = boundariesElement;
|
||||
}
|
||||
|
||||
var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent);
|
||||
var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);
|
||||
|
||||
// In case of HTML, we need a different computation
|
||||
if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {
|
||||
@@ -681,11 +727,14 @@ function computeAutoPlacement(placement, refRect, popper, reference, boundariesE
|
||||
* @param {Object} state
|
||||
* @param {Element} popper - the popper element
|
||||
* @param {Element} reference - the reference element (the popper will be relative to this)
|
||||
* @param {Element} fixedPosition - is in fixed position mode
|
||||
* @returns {Object} An object containing the offsets which will be applied to the popper
|
||||
*/
|
||||
function getReferenceOffsets(state, popper, reference) {
|
||||
var commonOffsetParent = findCommonOffsetParent(popper, reference);
|
||||
return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent);
|
||||
var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
|
||||
|
||||
var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
|
||||
return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -858,7 +907,7 @@ function update() {
|
||||
};
|
||||
|
||||
// compute reference element offsets
|
||||
data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference);
|
||||
data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);
|
||||
|
||||
// compute auto placement, store placement inside the data object,
|
||||
// modifiers will be able to edit `placement` if needed
|
||||
@@ -868,9 +917,12 @@ function update() {
|
||||
// store the computed placement inside `originalPlacement`
|
||||
data.originalPlacement = data.placement;
|
||||
|
||||
data.positionFixed = this.options.positionFixed;
|
||||
|
||||
// compute the popper offsets
|
||||
data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);
|
||||
data.offsets.popper.position = 'absolute';
|
||||
|
||||
data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';
|
||||
|
||||
// run the modifiers
|
||||
data = runModifiers(this.modifiers, data);
|
||||
@@ -910,7 +962,7 @@ function getSupportedPropertyName(property) {
|
||||
var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];
|
||||
var upperProp = property.charAt(0).toUpperCase() + property.slice(1);
|
||||
|
||||
for (var i = 0; i < prefixes.length - 1; i++) {
|
||||
for (var i = 0; i < prefixes.length; i++) {
|
||||
var prefix = prefixes[i];
|
||||
var toCheck = prefix ? '' + prefix + upperProp : property;
|
||||
if (typeof document.body.style[toCheck] !== 'undefined') {
|
||||
@@ -931,9 +983,12 @@ function destroy() {
|
||||
// touch DOM only if `applyStyle` modifier is enabled
|
||||
if (isModifierEnabled(this.modifiers, 'applyStyle')) {
|
||||
this.popper.removeAttribute('x-placement');
|
||||
this.popper.style.left = '';
|
||||
this.popper.style.position = '';
|
||||
this.popper.style.top = '';
|
||||
this.popper.style.left = '';
|
||||
this.popper.style.right = '';
|
||||
this.popper.style.bottom = '';
|
||||
this.popper.style.willChange = '';
|
||||
this.popper.style[getSupportedPropertyName('transform')] = '';
|
||||
}
|
||||
|
||||
@@ -1121,12 +1176,12 @@ function applyStyle(data) {
|
||||
* @method
|
||||
* @memberof Popper.modifiers
|
||||
* @param {HTMLElement} reference - The reference element used to position the popper
|
||||
* @param {HTMLElement} popper - The HTML element used as popper.
|
||||
* @param {HTMLElement} popper - The HTML element used as popper
|
||||
* @param {Object} options - Popper.js options
|
||||
*/
|
||||
function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {
|
||||
// compute reference element offsets
|
||||
var referenceOffsets = getReferenceOffsets(state, popper, reference);
|
||||
var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);
|
||||
|
||||
// compute auto placement, store placement inside the data object,
|
||||
// modifiers will be able to edit `placement` if needed
|
||||
@@ -1137,7 +1192,7 @@ function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {
|
||||
|
||||
// Apply `position` to popper before anything else because
|
||||
// without the position applied we can't guarantee correct computations
|
||||
setStyles(popper, { position: 'absolute' });
|
||||
setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });
|
||||
|
||||
return options;
|
||||
}
|
||||
@@ -1172,11 +1227,13 @@ function computeStyle(data, options) {
|
||||
position: popper.position
|
||||
};
|
||||
|
||||
// floor sides to avoid blurry text
|
||||
// Avoid blurry text by using full pixel integers.
|
||||
// For pixel-perfect positioning, top/bottom prefers rounded
|
||||
// values, while left/right prefers floored values.
|
||||
var offsets = {
|
||||
left: Math.floor(popper.left),
|
||||
top: Math.floor(popper.top),
|
||||
bottom: Math.floor(popper.bottom),
|
||||
top: Math.round(popper.top),
|
||||
bottom: Math.round(popper.bottom),
|
||||
right: Math.floor(popper.right)
|
||||
};
|
||||
|
||||
@@ -1440,7 +1497,7 @@ function flip(data, options) {
|
||||
return data;
|
||||
}
|
||||
|
||||
var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement);
|
||||
var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);
|
||||
|
||||
var placement = data.placement.split('-')[0];
|
||||
var placementOpposite = getOppositePlacement(placement);
|
||||
@@ -1732,7 +1789,27 @@ function preventOverflow(data, options) {
|
||||
boundariesElement = getOffsetParent(boundariesElement);
|
||||
}
|
||||
|
||||
var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement);
|
||||
// NOTE: DOM access here
|
||||
// resets the popper's position so that the document size can be calculated excluding
|
||||
// the size of the popper element itself
|
||||
var transformProp = getSupportedPropertyName('transform');
|
||||
var popperStyles = data.instance.popper.style; // assignment to help minification
|
||||
var top = popperStyles.top,
|
||||
left = popperStyles.left,
|
||||
transform = popperStyles[transformProp];
|
||||
|
||||
popperStyles.top = '';
|
||||
popperStyles.left = '';
|
||||
popperStyles[transformProp] = '';
|
||||
|
||||
var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);
|
||||
|
||||
// NOTE: DOM access here
|
||||
// restores the original style properties after the offsets have been computed
|
||||
popperStyles.top = top;
|
||||
popperStyles.left = left;
|
||||
popperStyles[transformProp] = transform;
|
||||
|
||||
options.boundaries = boundaries;
|
||||
|
||||
var order = options.priority;
|
||||
@@ -2229,6 +2306,12 @@ var Defaults = {
|
||||
*/
|
||||
placement: 'bottom',
|
||||
|
||||
/**
|
||||
* Set this to true if you want popper to position it self in 'fixed' mode
|
||||
* @prop {Boolean} positionFixed=false
|
||||
*/
|
||||
positionFixed: false,
|
||||
|
||||
/**
|
||||
* Whether events (resize, scroll) are initially enabled
|
||||
* @prop {Boolean} eventsEnabled=true
|
||||
|
||||
File diff suppressed because one or more lines are too long
Vendored
+2
-2
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Vendored
+46
-18
@@ -1,10 +1,15 @@
|
||||
// Type definitions for popper.js 1.10
|
||||
// Project: https://github.com/FezVrasta/popper.js/
|
||||
// Definitions by: edcarroll <https://github.com/edcarroll>, ggray <https://github.com/giladgray>, rhysd <https://rhysd.github.io>, joscha <https://github.com/joscha>, seckardt <https://github.com/seckardt>, marcfallows <https://github.com/marcfallows>
|
||||
|
||||
// This file only declares the public portions of the API.
|
||||
// It should not define internal pieces such as utils or modifier details.
|
||||
/**
|
||||
* @fileoverview This file only declares the public portions of the API.
|
||||
* It should not define internal pieces such as utils or modifier details.
|
||||
*
|
||||
* Original definitions by: edcarroll <https://github.com/edcarroll>, ggray <https://github.com/giladgray>, rhysd <https://rhysd.github.io>, joscha <https://github.com/joscha>, seckardt <https://github.com/seckardt>, marcfallows <https://github.com/marcfallows>
|
||||
*/
|
||||
|
||||
/**
|
||||
* This kind of namespace declaration is not necessary, but is kept here for backwards-compatibility with
|
||||
* popper.js 1.x. It can be removed in 2.x so that the default export is simply the Popper class
|
||||
* and all the types / interfaces are top-level named exports.
|
||||
*/
|
||||
declare namespace Popper {
|
||||
export type Position = 'top' | 'right' | 'bottom' | 'left';
|
||||
|
||||
@@ -26,6 +31,8 @@ declare namespace Popper {
|
||||
|
||||
export type Boundary = 'scrollParent' | 'viewport' | 'window';
|
||||
|
||||
export type Behavior = 'flip' | 'clockwise' | 'counterclockwise';
|
||||
|
||||
export type ModifierFn = (data: Data, options: Object) => Data;
|
||||
|
||||
export interface BaseModifier {
|
||||
@@ -50,7 +57,7 @@ declare namespace Popper {
|
||||
element?: string | Element,
|
||||
};
|
||||
flip?: BaseModifier & {
|
||||
behavior?: 'flip' | 'clockwise' | 'counterclockwise' | Position[],
|
||||
behavior?: Behavior | Position[],
|
||||
padding?: number,
|
||||
boundariesElement?: Boundary | Element,
|
||||
};
|
||||
@@ -61,10 +68,11 @@ declare namespace Popper {
|
||||
gpuAcceleration?: boolean,
|
||||
};
|
||||
computeStyle?: BaseModifier & {
|
||||
gpuAcceleration?: boolean;
|
||||
x?: 'bottom' | 'top',
|
||||
y?: 'left' | 'right'
|
||||
gpuAcceleration?: boolean;
|
||||
x?: 'bottom' | 'top',
|
||||
y?: 'left' | 'right'
|
||||
};
|
||||
|
||||
[name: string]: (BaseModifier & Record<string, any>) | undefined;
|
||||
}
|
||||
|
||||
@@ -96,36 +104,56 @@ declare namespace Popper {
|
||||
|
||||
export interface PopperOptions {
|
||||
placement?: Placement;
|
||||
positionFixed?: boolean;
|
||||
eventsEnabled?: boolean;
|
||||
modifiers?: Modifiers;
|
||||
removeOnDestroy?: boolean;
|
||||
|
||||
onCreate?(data: Data): void;
|
||||
|
||||
onUpdate?(data: Data): void;
|
||||
}
|
||||
|
||||
export interface ReferenceObject {
|
||||
clientHeight: number;
|
||||
clientWidth: number;
|
||||
|
||||
getBoundingClientRect(): ClientRect;
|
||||
}
|
||||
}
|
||||
|
||||
// Re-export types in the Popper namespace so that they can be accessed as top-level named exports.
|
||||
// These re-exports should be removed in 2.x when the "declare namespace Popper" syntax is removed.
|
||||
export type Position = Popper.Position;
|
||||
export type Placement = Popper.Placement;
|
||||
export type Boundary = Popper.Boundary;
|
||||
export type Behavior = Popper.Behavior;
|
||||
export type ModifierFn = Popper.ModifierFn;
|
||||
export type BaseModifier = Popper.BaseModifier;
|
||||
export type Modifiers = Popper.Modifiers;
|
||||
export type Offset = Popper.Offset;
|
||||
export type Data = Popper.Data;
|
||||
export type PopperOptions = Popper.PopperOptions;
|
||||
export type ReferenceObject = Popper.ReferenceObject;
|
||||
|
||||
declare class Popper {
|
||||
static modifiers: (Popper.BaseModifier & { name: string })[];
|
||||
static placements: Popper.Placement[];
|
||||
static Defaults: Popper.PopperOptions;
|
||||
static modifiers: (BaseModifier & { name: string })[];
|
||||
static placements: Placement[];
|
||||
static Defaults: PopperOptions;
|
||||
|
||||
options: Popper.PopperOptions;
|
||||
options: PopperOptions;
|
||||
|
||||
constructor(reference: Element | Popper.ReferenceObject, popper: Element, options?: Popper.PopperOptions);
|
||||
constructor(reference: Element | ReferenceObject, popper: Element, options?: PopperOptions);
|
||||
|
||||
destroy(): void;
|
||||
|
||||
update(): void;
|
||||
|
||||
scheduleUpdate(): void;
|
||||
|
||||
enableEventListeners(): void;
|
||||
|
||||
disableEventListeners(): void;
|
||||
}
|
||||
|
||||
declare module 'popper.js' {
|
||||
export default Popper;
|
||||
}
|
||||
export default Popper;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/**!
|
||||
* @fileOverview Kickass library to create and place poppers near their reference elements.
|
||||
* @version 1.12.9
|
||||
* @version 1.14.3
|
||||
* @license
|
||||
* Copyright (c) 2016 Federico Zivolo and contributors
|
||||
*
|
||||
@@ -75,13 +75,35 @@ function getScrollParent(element) {
|
||||
|
||||
// Firefox want us to check `-x` and `-y` variations as well
|
||||
const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);
|
||||
if (/(auto|scroll)/.test(overflow + overflowY + overflowX)) {
|
||||
if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {
|
||||
return element;
|
||||
}
|
||||
|
||||
return getScrollParent(getParentNode(element));
|
||||
}
|
||||
|
||||
var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
|
||||
|
||||
const isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);
|
||||
const isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);
|
||||
|
||||
/**
|
||||
* Determines if the browser is Internet Explorer
|
||||
* @method
|
||||
* @memberof Popper.Utils
|
||||
* @param {Number} version to check
|
||||
* @returns {Boolean} isIE
|
||||
*/
|
||||
function isIE(version) {
|
||||
if (version === 11) {
|
||||
return isIE11;
|
||||
}
|
||||
if (version === 10) {
|
||||
return isIE10;
|
||||
}
|
||||
return isIE11 || isIE10;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the offset parent of the given element
|
||||
* @method
|
||||
@@ -90,16 +112,23 @@ function getScrollParent(element) {
|
||||
* @returns {Element} offset parent
|
||||
*/
|
||||
function getOffsetParent(element) {
|
||||
if (!element) {
|
||||
return document.documentElement;
|
||||
}
|
||||
|
||||
const noOffsetParent = isIE(10) ? document.body : null;
|
||||
|
||||
// NOTE: 1 DOM access here
|
||||
const offsetParent = element && element.offsetParent;
|
||||
let offsetParent = element.offsetParent;
|
||||
// Skip hidden elements which don't have an offsetParent
|
||||
while (offsetParent === noOffsetParent && element.nextElementSibling) {
|
||||
offsetParent = (element = element.nextElementSibling).offsetParent;
|
||||
}
|
||||
|
||||
const nodeName = offsetParent && offsetParent.nodeName;
|
||||
|
||||
if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {
|
||||
if (element) {
|
||||
return element.ownerDocument.documentElement;
|
||||
}
|
||||
|
||||
return document.documentElement;
|
||||
return element ? element.ownerDocument.documentElement : document.documentElement;
|
||||
}
|
||||
|
||||
// .offsetParent will return the closest TD or TABLE in case
|
||||
@@ -235,29 +264,14 @@ function getBordersSize(styles, axis) {
|
||||
return parseFloat(styles[`border${sideA}Width`], 10) + parseFloat(styles[`border${sideB}Width`], 10);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tells if you are running Internet Explorer 10
|
||||
* @method
|
||||
* @memberof Popper.Utils
|
||||
* @returns {Boolean} isIE10
|
||||
*/
|
||||
let isIE10 = undefined;
|
||||
|
||||
var isIE10$1 = function () {
|
||||
if (isIE10 === undefined) {
|
||||
isIE10 = navigator.appVersion.indexOf('MSIE 10') !== -1;
|
||||
}
|
||||
return isIE10;
|
||||
};
|
||||
|
||||
function getSize(axis, body, html, computedStyle) {
|
||||
return Math.max(body[`offset${axis}`], body[`scroll${axis}`], html[`client${axis}`], html[`offset${axis}`], html[`scroll${axis}`], isIE10$1() ? html[`offset${axis}`] + computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] + computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`] : 0);
|
||||
return Math.max(body[`offset${axis}`], body[`scroll${axis}`], html[`client${axis}`], html[`offset${axis}`], html[`scroll${axis}`], isIE(10) ? html[`offset${axis}`] + computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] + computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`] : 0);
|
||||
}
|
||||
|
||||
function getWindowSizes() {
|
||||
const body = document.body;
|
||||
const html = document.documentElement;
|
||||
const computedStyle = isIE10$1() && getComputedStyle(html);
|
||||
const computedStyle = isIE(10) && getComputedStyle(html);
|
||||
|
||||
return {
|
||||
height: getSize('Height', body, html, computedStyle),
|
||||
@@ -306,8 +320,8 @@ function getBoundingClientRect(element) {
|
||||
// IE10 10 FIX: Please, don't ask, the element isn't
|
||||
// considered in DOM in some circumstances...
|
||||
// This isn't reproducible in IE10 compatibility mode of IE11
|
||||
if (isIE10$1()) {
|
||||
try {
|
||||
try {
|
||||
if (isIE(10)) {
|
||||
rect = element.getBoundingClientRect();
|
||||
const scrollTop = getScroll(element, 'top');
|
||||
const scrollLeft = getScroll(element, 'left');
|
||||
@@ -315,10 +329,10 @@ function getBoundingClientRect(element) {
|
||||
rect.left += scrollLeft;
|
||||
rect.bottom += scrollTop;
|
||||
rect.right += scrollLeft;
|
||||
} catch (err) {}
|
||||
} else {
|
||||
rect = element.getBoundingClientRect();
|
||||
}
|
||||
} else {
|
||||
rect = element.getBoundingClientRect();
|
||||
}
|
||||
} catch (e) {}
|
||||
|
||||
const result = {
|
||||
left: rect.left,
|
||||
@@ -349,8 +363,8 @@ function getBoundingClientRect(element) {
|
||||
return getClientRect(result);
|
||||
}
|
||||
|
||||
function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
||||
const isIE10 = isIE10$1();
|
||||
function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {
|
||||
const isIE10 = isIE(10);
|
||||
const isHTML = parent.nodeName === 'HTML';
|
||||
const childrenRect = getBoundingClientRect(children);
|
||||
const parentRect = getBoundingClientRect(parent);
|
||||
@@ -360,6 +374,11 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
||||
const borderTopWidth = parseFloat(styles.borderTopWidth, 10);
|
||||
const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);
|
||||
|
||||
// In cases where the parent is fixed, we must ignore negative scroll in offset calc
|
||||
if (fixedPosition && parent.nodeName === 'HTML') {
|
||||
parentRect.top = Math.max(parentRect.top, 0);
|
||||
parentRect.left = Math.max(parentRect.left, 0);
|
||||
}
|
||||
let offsets = getClientRect({
|
||||
top: childrenRect.top - parentRect.top - borderTopWidth,
|
||||
left: childrenRect.left - parentRect.left - borderLeftWidth,
|
||||
@@ -387,21 +406,21 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
||||
offsets.marginLeft = marginLeft;
|
||||
}
|
||||
|
||||
if (isIE10 ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
|
||||
if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
|
||||
offsets = includeScroll(offsets, parent);
|
||||
}
|
||||
|
||||
return offsets;
|
||||
}
|
||||
|
||||
function getViewportOffsetRectRelativeToArtbitraryNode(element) {
|
||||
function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {
|
||||
const html = element.ownerDocument.documentElement;
|
||||
const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
|
||||
const width = Math.max(html.clientWidth, window.innerWidth || 0);
|
||||
const height = Math.max(html.clientHeight, window.innerHeight || 0);
|
||||
|
||||
const scrollTop = getScroll(html);
|
||||
const scrollLeft = getScroll(html, 'left');
|
||||
const scrollTop = !excludeScroll ? getScroll(html) : 0;
|
||||
const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;
|
||||
|
||||
const offset = {
|
||||
top: scrollTop - relativeOffset.top + relativeOffset.marginTop,
|
||||
@@ -432,6 +451,26 @@ function isFixed(element) {
|
||||
return isFixed(getParentNode(element));
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the first parent of an element that has a transformed property defined
|
||||
* @method
|
||||
* @memberof Popper.Utils
|
||||
* @argument {Element} element
|
||||
* @returns {Element} first transformed parent or documentElement
|
||||
*/
|
||||
|
||||
function getFixedPositionOffsetParent(element) {
|
||||
// This check is needed to avoid errors in case one of the elements isn't defined for any reason
|
||||
if (!element || !element.parentElement || isIE()) {
|
||||
return document.documentElement;
|
||||
}
|
||||
let el = element.parentElement;
|
||||
while (el && getStyleComputedProperty(el, 'transform') === 'none') {
|
||||
el = el.parentElement;
|
||||
}
|
||||
return el || document.documentElement;
|
||||
}
|
||||
|
||||
/**
|
||||
* Computed the boundaries limits and return them
|
||||
* @method
|
||||
@@ -440,16 +479,18 @@ function isFixed(element) {
|
||||
* @param {HTMLElement} reference
|
||||
* @param {number} padding
|
||||
* @param {HTMLElement} boundariesElement - Element used to define the boundaries
|
||||
* @param {Boolean} fixedPosition - Is in fixed position mode
|
||||
* @returns {Object} Coordinates of the boundaries
|
||||
*/
|
||||
function getBoundaries(popper, reference, padding, boundariesElement) {
|
||||
function getBoundaries(popper, reference, padding, boundariesElement, fixedPosition = false) {
|
||||
// NOTE: 1 DOM access here
|
||||
|
||||
let boundaries = { top: 0, left: 0 };
|
||||
const offsetParent = findCommonOffsetParent(popper, reference);
|
||||
const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
|
||||
|
||||
// Handle viewport case
|
||||
if (boundariesElement === 'viewport') {
|
||||
boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent);
|
||||
boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);
|
||||
} else {
|
||||
// Handle other cases based on DOM element used as boundaries
|
||||
let boundariesNode;
|
||||
@@ -464,7 +505,7 @@ function getBoundaries(popper, reference, padding, boundariesElement) {
|
||||
boundariesNode = boundariesElement;
|
||||
}
|
||||
|
||||
const offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent);
|
||||
const offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);
|
||||
|
||||
// In case of HTML, we need a different computation
|
||||
if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {
|
||||
@@ -542,7 +583,6 @@ function computeAutoPlacement(placement, refRect, popper, reference, boundariesE
|
||||
return computedPlacement + (variation ? `-${variation}` : '');
|
||||
}
|
||||
|
||||
const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
|
||||
const longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];
|
||||
let timeoutDuration = 0;
|
||||
for (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {
|
||||
@@ -737,11 +777,12 @@ function getPopperOffsets(popper, referenceOffsets, placement) {
|
||||
* @param {Object} state
|
||||
* @param {Element} popper - the popper element
|
||||
* @param {Element} reference - the reference element (the popper will be relative to this)
|
||||
* @param {Element} fixedPosition - is in fixed position mode
|
||||
* @returns {Object} An object containing the offsets which will be applied to the popper
|
||||
*/
|
||||
function getReferenceOffsets(state, popper, reference) {
|
||||
const commonOffsetParent = findCommonOffsetParent(popper, reference);
|
||||
return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent);
|
||||
function getReferenceOffsets(state, popper, reference, fixedPosition = null) {
|
||||
const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
|
||||
return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -755,7 +796,7 @@ function getSupportedPropertyName(property) {
|
||||
const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];
|
||||
const upperProp = property.charAt(0).toUpperCase() + property.slice(1);
|
||||
|
||||
for (let i = 0; i < prefixes.length - 1; i++) {
|
||||
for (let i = 0; i < prefixes.length; i++) {
|
||||
const prefix = prefixes[i];
|
||||
const toCheck = prefix ? `${prefix}${upperProp}` : property;
|
||||
if (typeof document.body.style[toCheck] !== 'undefined') {
|
||||
|
||||
File diff suppressed because one or more lines are too long
Vendored
+2
-2
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+129
-57
@@ -1,6 +1,6 @@
|
||||
/**!
|
||||
* @fileOverview Kickass library to create and place poppers near their reference elements.
|
||||
* @version 1.12.9
|
||||
* @version 1.14.3
|
||||
* @license
|
||||
* Copyright (c) 2016 Federico Zivolo and contributors
|
||||
*
|
||||
@@ -22,7 +22,8 @@
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
|
||||
var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
|
||||
|
||||
const longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];
|
||||
let timeoutDuration = 0;
|
||||
for (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {
|
||||
@@ -137,13 +138,33 @@ function getScrollParent(element) {
|
||||
|
||||
// Firefox want us to check `-x` and `-y` variations as well
|
||||
const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);
|
||||
if (/(auto|scroll)/.test(overflow + overflowY + overflowX)) {
|
||||
if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {
|
||||
return element;
|
||||
}
|
||||
|
||||
return getScrollParent(getParentNode(element));
|
||||
}
|
||||
|
||||
const isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);
|
||||
const isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);
|
||||
|
||||
/**
|
||||
* Determines if the browser is Internet Explorer
|
||||
* @method
|
||||
* @memberof Popper.Utils
|
||||
* @param {Number} version to check
|
||||
* @returns {Boolean} isIE
|
||||
*/
|
||||
function isIE(version) {
|
||||
if (version === 11) {
|
||||
return isIE11;
|
||||
}
|
||||
if (version === 10) {
|
||||
return isIE10;
|
||||
}
|
||||
return isIE11 || isIE10;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the offset parent of the given element
|
||||
* @method
|
||||
@@ -152,16 +173,23 @@ function getScrollParent(element) {
|
||||
* @returns {Element} offset parent
|
||||
*/
|
||||
function getOffsetParent(element) {
|
||||
if (!element) {
|
||||
return document.documentElement;
|
||||
}
|
||||
|
||||
const noOffsetParent = isIE(10) ? document.body : null;
|
||||
|
||||
// NOTE: 1 DOM access here
|
||||
const offsetParent = element && element.offsetParent;
|
||||
let offsetParent = element.offsetParent;
|
||||
// Skip hidden elements which don't have an offsetParent
|
||||
while (offsetParent === noOffsetParent && element.nextElementSibling) {
|
||||
offsetParent = (element = element.nextElementSibling).offsetParent;
|
||||
}
|
||||
|
||||
const nodeName = offsetParent && offsetParent.nodeName;
|
||||
|
||||
if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {
|
||||
if (element) {
|
||||
return element.ownerDocument.documentElement;
|
||||
}
|
||||
|
||||
return document.documentElement;
|
||||
return element ? element.ownerDocument.documentElement : document.documentElement;
|
||||
}
|
||||
|
||||
// .offsetParent will return the closest TD or TABLE in case
|
||||
@@ -297,29 +325,14 @@ function getBordersSize(styles, axis) {
|
||||
return parseFloat(styles[`border${sideA}Width`], 10) + parseFloat(styles[`border${sideB}Width`], 10);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tells if you are running Internet Explorer 10
|
||||
* @method
|
||||
* @memberof Popper.Utils
|
||||
* @returns {Boolean} isIE10
|
||||
*/
|
||||
let isIE10 = undefined;
|
||||
|
||||
var isIE10$1 = function () {
|
||||
if (isIE10 === undefined) {
|
||||
isIE10 = navigator.appVersion.indexOf('MSIE 10') !== -1;
|
||||
}
|
||||
return isIE10;
|
||||
};
|
||||
|
||||
function getSize(axis, body, html, computedStyle) {
|
||||
return Math.max(body[`offset${axis}`], body[`scroll${axis}`], html[`client${axis}`], html[`offset${axis}`], html[`scroll${axis}`], isIE10$1() ? html[`offset${axis}`] + computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] + computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`] : 0);
|
||||
return Math.max(body[`offset${axis}`], body[`scroll${axis}`], html[`client${axis}`], html[`offset${axis}`], html[`scroll${axis}`], isIE(10) ? html[`offset${axis}`] + computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] + computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`] : 0);
|
||||
}
|
||||
|
||||
function getWindowSizes() {
|
||||
const body = document.body;
|
||||
const html = document.documentElement;
|
||||
const computedStyle = isIE10$1() && getComputedStyle(html);
|
||||
const computedStyle = isIE(10) && getComputedStyle(html);
|
||||
|
||||
return {
|
||||
height: getSize('Height', body, html, computedStyle),
|
||||
@@ -368,8 +381,8 @@ function getBoundingClientRect(element) {
|
||||
// IE10 10 FIX: Please, don't ask, the element isn't
|
||||
// considered in DOM in some circumstances...
|
||||
// This isn't reproducible in IE10 compatibility mode of IE11
|
||||
if (isIE10$1()) {
|
||||
try {
|
||||
try {
|
||||
if (isIE(10)) {
|
||||
rect = element.getBoundingClientRect();
|
||||
const scrollTop = getScroll(element, 'top');
|
||||
const scrollLeft = getScroll(element, 'left');
|
||||
@@ -377,10 +390,10 @@ function getBoundingClientRect(element) {
|
||||
rect.left += scrollLeft;
|
||||
rect.bottom += scrollTop;
|
||||
rect.right += scrollLeft;
|
||||
} catch (err) {}
|
||||
} else {
|
||||
rect = element.getBoundingClientRect();
|
||||
}
|
||||
} else {
|
||||
rect = element.getBoundingClientRect();
|
||||
}
|
||||
} catch (e) {}
|
||||
|
||||
const result = {
|
||||
left: rect.left,
|
||||
@@ -411,8 +424,8 @@ function getBoundingClientRect(element) {
|
||||
return getClientRect(result);
|
||||
}
|
||||
|
||||
function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
||||
const isIE10 = isIE10$1();
|
||||
function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {
|
||||
const isIE10 = isIE(10);
|
||||
const isHTML = parent.nodeName === 'HTML';
|
||||
const childrenRect = getBoundingClientRect(children);
|
||||
const parentRect = getBoundingClientRect(parent);
|
||||
@@ -422,6 +435,11 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
||||
const borderTopWidth = parseFloat(styles.borderTopWidth, 10);
|
||||
const borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);
|
||||
|
||||
// In cases where the parent is fixed, we must ignore negative scroll in offset calc
|
||||
if (fixedPosition && parent.nodeName === 'HTML') {
|
||||
parentRect.top = Math.max(parentRect.top, 0);
|
||||
parentRect.left = Math.max(parentRect.left, 0);
|
||||
}
|
||||
let offsets = getClientRect({
|
||||
top: childrenRect.top - parentRect.top - borderTopWidth,
|
||||
left: childrenRect.left - parentRect.left - borderLeftWidth,
|
||||
@@ -449,21 +467,21 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
||||
offsets.marginLeft = marginLeft;
|
||||
}
|
||||
|
||||
if (isIE10 ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
|
||||
if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
|
||||
offsets = includeScroll(offsets, parent);
|
||||
}
|
||||
|
||||
return offsets;
|
||||
}
|
||||
|
||||
function getViewportOffsetRectRelativeToArtbitraryNode(element) {
|
||||
function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {
|
||||
const html = element.ownerDocument.documentElement;
|
||||
const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
|
||||
const width = Math.max(html.clientWidth, window.innerWidth || 0);
|
||||
const height = Math.max(html.clientHeight, window.innerHeight || 0);
|
||||
|
||||
const scrollTop = getScroll(html);
|
||||
const scrollLeft = getScroll(html, 'left');
|
||||
const scrollTop = !excludeScroll ? getScroll(html) : 0;
|
||||
const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;
|
||||
|
||||
const offset = {
|
||||
top: scrollTop - relativeOffset.top + relativeOffset.marginTop,
|
||||
@@ -494,6 +512,26 @@ function isFixed(element) {
|
||||
return isFixed(getParentNode(element));
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the first parent of an element that has a transformed property defined
|
||||
* @method
|
||||
* @memberof Popper.Utils
|
||||
* @argument {Element} element
|
||||
* @returns {Element} first transformed parent or documentElement
|
||||
*/
|
||||
|
||||
function getFixedPositionOffsetParent(element) {
|
||||
// This check is needed to avoid errors in case one of the elements isn't defined for any reason
|
||||
if (!element || !element.parentElement || isIE()) {
|
||||
return document.documentElement;
|
||||
}
|
||||
let el = element.parentElement;
|
||||
while (el && getStyleComputedProperty(el, 'transform') === 'none') {
|
||||
el = el.parentElement;
|
||||
}
|
||||
return el || document.documentElement;
|
||||
}
|
||||
|
||||
/**
|
||||
* Computed the boundaries limits and return them
|
||||
* @method
|
||||
@@ -502,16 +540,18 @@ function isFixed(element) {
|
||||
* @param {HTMLElement} reference
|
||||
* @param {number} padding
|
||||
* @param {HTMLElement} boundariesElement - Element used to define the boundaries
|
||||
* @param {Boolean} fixedPosition - Is in fixed position mode
|
||||
* @returns {Object} Coordinates of the boundaries
|
||||
*/
|
||||
function getBoundaries(popper, reference, padding, boundariesElement) {
|
||||
function getBoundaries(popper, reference, padding, boundariesElement, fixedPosition = false) {
|
||||
// NOTE: 1 DOM access here
|
||||
|
||||
let boundaries = { top: 0, left: 0 };
|
||||
const offsetParent = findCommonOffsetParent(popper, reference);
|
||||
const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
|
||||
|
||||
// Handle viewport case
|
||||
if (boundariesElement === 'viewport') {
|
||||
boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent);
|
||||
boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);
|
||||
} else {
|
||||
// Handle other cases based on DOM element used as boundaries
|
||||
let boundariesNode;
|
||||
@@ -526,7 +566,7 @@ function getBoundaries(popper, reference, padding, boundariesElement) {
|
||||
boundariesNode = boundariesElement;
|
||||
}
|
||||
|
||||
const offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent);
|
||||
const offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);
|
||||
|
||||
// In case of HTML, we need a different computation
|
||||
if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {
|
||||
@@ -611,11 +651,12 @@ function computeAutoPlacement(placement, refRect, popper, reference, boundariesE
|
||||
* @param {Object} state
|
||||
* @param {Element} popper - the popper element
|
||||
* @param {Element} reference - the reference element (the popper will be relative to this)
|
||||
* @param {Element} fixedPosition - is in fixed position mode
|
||||
* @returns {Object} An object containing the offsets which will be applied to the popper
|
||||
*/
|
||||
function getReferenceOffsets(state, popper, reference) {
|
||||
const commonOffsetParent = findCommonOffsetParent(popper, reference);
|
||||
return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent);
|
||||
function getReferenceOffsets(state, popper, reference, fixedPosition = null) {
|
||||
const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
|
||||
return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -782,7 +823,7 @@ function update() {
|
||||
};
|
||||
|
||||
// compute reference element offsets
|
||||
data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference);
|
||||
data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);
|
||||
|
||||
// compute auto placement, store placement inside the data object,
|
||||
// modifiers will be able to edit `placement` if needed
|
||||
@@ -792,9 +833,12 @@ function update() {
|
||||
// store the computed placement inside `originalPlacement`
|
||||
data.originalPlacement = data.placement;
|
||||
|
||||
data.positionFixed = this.options.positionFixed;
|
||||
|
||||
// compute the popper offsets
|
||||
data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);
|
||||
data.offsets.popper.position = 'absolute';
|
||||
|
||||
data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';
|
||||
|
||||
// run the modifiers
|
||||
data = runModifiers(this.modifiers, data);
|
||||
@@ -830,7 +874,7 @@ function getSupportedPropertyName(property) {
|
||||
const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];
|
||||
const upperProp = property.charAt(0).toUpperCase() + property.slice(1);
|
||||
|
||||
for (let i = 0; i < prefixes.length - 1; i++) {
|
||||
for (let i = 0; i < prefixes.length; i++) {
|
||||
const prefix = prefixes[i];
|
||||
const toCheck = prefix ? `${prefix}${upperProp}` : property;
|
||||
if (typeof document.body.style[toCheck] !== 'undefined') {
|
||||
@@ -851,9 +895,12 @@ function destroy() {
|
||||
// touch DOM only if `applyStyle` modifier is enabled
|
||||
if (isModifierEnabled(this.modifiers, 'applyStyle')) {
|
||||
this.popper.removeAttribute('x-placement');
|
||||
this.popper.style.left = '';
|
||||
this.popper.style.position = '';
|
||||
this.popper.style.top = '';
|
||||
this.popper.style.left = '';
|
||||
this.popper.style.right = '';
|
||||
this.popper.style.bottom = '';
|
||||
this.popper.style.willChange = '';
|
||||
this.popper.style[getSupportedPropertyName('transform')] = '';
|
||||
}
|
||||
|
||||
@@ -1041,12 +1088,12 @@ function applyStyle(data) {
|
||||
* @method
|
||||
* @memberof Popper.modifiers
|
||||
* @param {HTMLElement} reference - The reference element used to position the popper
|
||||
* @param {HTMLElement} popper - The HTML element used as popper.
|
||||
* @param {HTMLElement} popper - The HTML element used as popper
|
||||
* @param {Object} options - Popper.js options
|
||||
*/
|
||||
function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {
|
||||
// compute reference element offsets
|
||||
const referenceOffsets = getReferenceOffsets(state, popper, reference);
|
||||
const referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);
|
||||
|
||||
// compute auto placement, store placement inside the data object,
|
||||
// modifiers will be able to edit `placement` if needed
|
||||
@@ -1057,7 +1104,7 @@ function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {
|
||||
|
||||
// Apply `position` to popper before anything else because
|
||||
// without the position applied we can't guarantee correct computations
|
||||
setStyles(popper, { position: 'absolute' });
|
||||
setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });
|
||||
|
||||
return options;
|
||||
}
|
||||
@@ -1088,11 +1135,13 @@ function computeStyle(data, options) {
|
||||
position: popper.position
|
||||
};
|
||||
|
||||
// floor sides to avoid blurry text
|
||||
// Avoid blurry text by using full pixel integers.
|
||||
// For pixel-perfect positioning, top/bottom prefers rounded
|
||||
// values, while left/right prefers floored values.
|
||||
const offsets = {
|
||||
left: Math.floor(popper.left),
|
||||
top: Math.floor(popper.top),
|
||||
bottom: Math.floor(popper.bottom),
|
||||
top: Math.round(popper.top),
|
||||
bottom: Math.round(popper.bottom),
|
||||
right: Math.floor(popper.right)
|
||||
};
|
||||
|
||||
@@ -1348,7 +1397,7 @@ function flip(data, options) {
|
||||
return data;
|
||||
}
|
||||
|
||||
const boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement);
|
||||
const boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);
|
||||
|
||||
let placement = data.placement.split('-')[0];
|
||||
let placementOpposite = getOppositePlacement(placement);
|
||||
@@ -1626,7 +1675,24 @@ function preventOverflow(data, options) {
|
||||
boundariesElement = getOffsetParent(boundariesElement);
|
||||
}
|
||||
|
||||
const boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement);
|
||||
// NOTE: DOM access here
|
||||
// resets the popper's position so that the document size can be calculated excluding
|
||||
// the size of the popper element itself
|
||||
const transformProp = getSupportedPropertyName('transform');
|
||||
const popperStyles = data.instance.popper.style; // assignment to help minification
|
||||
const { top, left, [transformProp]: transform } = popperStyles;
|
||||
popperStyles.top = '';
|
||||
popperStyles.left = '';
|
||||
popperStyles[transformProp] = '';
|
||||
|
||||
const boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);
|
||||
|
||||
// NOTE: DOM access here
|
||||
// restores the original style properties after the offsets have been computed
|
||||
popperStyles.top = top;
|
||||
popperStyles.left = left;
|
||||
popperStyles[transformProp] = transform;
|
||||
|
||||
options.boundaries = boundaries;
|
||||
|
||||
const order = options.priority;
|
||||
@@ -2117,6 +2183,12 @@ var Defaults = {
|
||||
*/
|
||||
placement: 'bottom',
|
||||
|
||||
/**
|
||||
* Set this to true if you want popper to position it self in 'fixed' mode
|
||||
* @prop {Boolean} positionFixed=false
|
||||
*/
|
||||
positionFixed: false,
|
||||
|
||||
/**
|
||||
* Whether events (resize, scroll) are initially enabled
|
||||
* @prop {Boolean} eventsEnabled=true
|
||||
|
||||
File diff suppressed because one or more lines are too long
Vendored
+2
-2
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,6 +1,6 @@
|
||||
/**!
|
||||
* @fileOverview Kickass library to create and place poppers near their reference elements.
|
||||
* @version 1.12.9
|
||||
* @version 1.14.3
|
||||
* @license
|
||||
* Copyright (c) 2016 Federico Zivolo and contributors
|
||||
*
|
||||
@@ -86,13 +86,35 @@ function getScrollParent(element) {
|
||||
overflowX = _getStyleComputedProp.overflowX,
|
||||
overflowY = _getStyleComputedProp.overflowY;
|
||||
|
||||
if (/(auto|scroll)/.test(overflow + overflowY + overflowX)) {
|
||||
if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {
|
||||
return element;
|
||||
}
|
||||
|
||||
return getScrollParent(getParentNode(element));
|
||||
}
|
||||
|
||||
var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
|
||||
|
||||
var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);
|
||||
var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);
|
||||
|
||||
/**
|
||||
* Determines if the browser is Internet Explorer
|
||||
* @method
|
||||
* @memberof Popper.Utils
|
||||
* @param {Number} version to check
|
||||
* @returns {Boolean} isIE
|
||||
*/
|
||||
function isIE(version) {
|
||||
if (version === 11) {
|
||||
return isIE11;
|
||||
}
|
||||
if (version === 10) {
|
||||
return isIE10;
|
||||
}
|
||||
return isIE11 || isIE10;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the offset parent of the given element
|
||||
* @method
|
||||
@@ -101,16 +123,23 @@ function getScrollParent(element) {
|
||||
* @returns {Element} offset parent
|
||||
*/
|
||||
function getOffsetParent(element) {
|
||||
if (!element) {
|
||||
return document.documentElement;
|
||||
}
|
||||
|
||||
var noOffsetParent = isIE(10) ? document.body : null;
|
||||
|
||||
// NOTE: 1 DOM access here
|
||||
var offsetParent = element && element.offsetParent;
|
||||
var offsetParent = element.offsetParent;
|
||||
// Skip hidden elements which don't have an offsetParent
|
||||
while (offsetParent === noOffsetParent && element.nextElementSibling) {
|
||||
offsetParent = (element = element.nextElementSibling).offsetParent;
|
||||
}
|
||||
|
||||
var nodeName = offsetParent && offsetParent.nodeName;
|
||||
|
||||
if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {
|
||||
if (element) {
|
||||
return element.ownerDocument.documentElement;
|
||||
}
|
||||
|
||||
return document.documentElement;
|
||||
return element ? element.ownerDocument.documentElement : document.documentElement;
|
||||
}
|
||||
|
||||
// .offsetParent will return the closest TD or TABLE in case
|
||||
@@ -252,29 +281,14 @@ function getBordersSize(styles, axis) {
|
||||
return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tells if you are running Internet Explorer 10
|
||||
* @method
|
||||
* @memberof Popper.Utils
|
||||
* @returns {Boolean} isIE10
|
||||
*/
|
||||
var isIE10 = undefined;
|
||||
|
||||
var isIE10$1 = function () {
|
||||
if (isIE10 === undefined) {
|
||||
isIE10 = navigator.appVersion.indexOf('MSIE 10') !== -1;
|
||||
}
|
||||
return isIE10;
|
||||
};
|
||||
|
||||
function getSize(axis, body, html, computedStyle) {
|
||||
return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE10$1() ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0);
|
||||
return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0);
|
||||
}
|
||||
|
||||
function getWindowSizes() {
|
||||
var body = document.body;
|
||||
var html = document.documentElement;
|
||||
var computedStyle = isIE10$1() && getComputedStyle(html);
|
||||
var computedStyle = isIE(10) && getComputedStyle(html);
|
||||
|
||||
return {
|
||||
height: getSize('Height', body, html, computedStyle),
|
||||
@@ -323,8 +337,8 @@ function getBoundingClientRect(element) {
|
||||
// IE10 10 FIX: Please, don't ask, the element isn't
|
||||
// considered in DOM in some circumstances...
|
||||
// This isn't reproducible in IE10 compatibility mode of IE11
|
||||
if (isIE10$1()) {
|
||||
try {
|
||||
try {
|
||||
if (isIE(10)) {
|
||||
rect = element.getBoundingClientRect();
|
||||
var scrollTop = getScroll(element, 'top');
|
||||
var scrollLeft = getScroll(element, 'left');
|
||||
@@ -332,10 +346,10 @@ function getBoundingClientRect(element) {
|
||||
rect.left += scrollLeft;
|
||||
rect.bottom += scrollTop;
|
||||
rect.right += scrollLeft;
|
||||
} catch (err) {}
|
||||
} else {
|
||||
rect = element.getBoundingClientRect();
|
||||
}
|
||||
} else {
|
||||
rect = element.getBoundingClientRect();
|
||||
}
|
||||
} catch (e) {}
|
||||
|
||||
var result = {
|
||||
left: rect.left,
|
||||
@@ -367,7 +381,9 @@ function getBoundingClientRect(element) {
|
||||
}
|
||||
|
||||
function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
||||
var isIE10 = isIE10$1();
|
||||
var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
||||
|
||||
var isIE10 = isIE(10);
|
||||
var isHTML = parent.nodeName === 'HTML';
|
||||
var childrenRect = getBoundingClientRect(children);
|
||||
var parentRect = getBoundingClientRect(parent);
|
||||
@@ -377,6 +393,11 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
||||
var borderTopWidth = parseFloat(styles.borderTopWidth, 10);
|
||||
var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);
|
||||
|
||||
// In cases where the parent is fixed, we must ignore negative scroll in offset calc
|
||||
if (fixedPosition && parent.nodeName === 'HTML') {
|
||||
parentRect.top = Math.max(parentRect.top, 0);
|
||||
parentRect.left = Math.max(parentRect.left, 0);
|
||||
}
|
||||
var offsets = getClientRect({
|
||||
top: childrenRect.top - parentRect.top - borderTopWidth,
|
||||
left: childrenRect.left - parentRect.left - borderLeftWidth,
|
||||
@@ -404,7 +425,7 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
||||
offsets.marginLeft = marginLeft;
|
||||
}
|
||||
|
||||
if (isIE10 ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
|
||||
if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
|
||||
offsets = includeScroll(offsets, parent);
|
||||
}
|
||||
|
||||
@@ -412,13 +433,15 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
||||
}
|
||||
|
||||
function getViewportOffsetRectRelativeToArtbitraryNode(element) {
|
||||
var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
||||
|
||||
var html = element.ownerDocument.documentElement;
|
||||
var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
|
||||
var width = Math.max(html.clientWidth, window.innerWidth || 0);
|
||||
var height = Math.max(html.clientHeight, window.innerHeight || 0);
|
||||
|
||||
var scrollTop = getScroll(html);
|
||||
var scrollLeft = getScroll(html, 'left');
|
||||
var scrollTop = !excludeScroll ? getScroll(html) : 0;
|
||||
var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;
|
||||
|
||||
var offset = {
|
||||
top: scrollTop - relativeOffset.top + relativeOffset.marginTop,
|
||||
@@ -449,6 +472,26 @@ function isFixed(element) {
|
||||
return isFixed(getParentNode(element));
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the first parent of an element that has a transformed property defined
|
||||
* @method
|
||||
* @memberof Popper.Utils
|
||||
* @argument {Element} element
|
||||
* @returns {Element} first transformed parent or documentElement
|
||||
*/
|
||||
|
||||
function getFixedPositionOffsetParent(element) {
|
||||
// This check is needed to avoid errors in case one of the elements isn't defined for any reason
|
||||
if (!element || !element.parentElement || isIE()) {
|
||||
return document.documentElement;
|
||||
}
|
||||
var el = element.parentElement;
|
||||
while (el && getStyleComputedProperty(el, 'transform') === 'none') {
|
||||
el = el.parentElement;
|
||||
}
|
||||
return el || document.documentElement;
|
||||
}
|
||||
|
||||
/**
|
||||
* Computed the boundaries limits and return them
|
||||
* @method
|
||||
@@ -457,16 +500,20 @@ function isFixed(element) {
|
||||
* @param {HTMLElement} reference
|
||||
* @param {number} padding
|
||||
* @param {HTMLElement} boundariesElement - Element used to define the boundaries
|
||||
* @param {Boolean} fixedPosition - Is in fixed position mode
|
||||
* @returns {Object} Coordinates of the boundaries
|
||||
*/
|
||||
function getBoundaries(popper, reference, padding, boundariesElement) {
|
||||
var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
||||
|
||||
// NOTE: 1 DOM access here
|
||||
|
||||
var boundaries = { top: 0, left: 0 };
|
||||
var offsetParent = findCommonOffsetParent(popper, reference);
|
||||
var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
|
||||
|
||||
// Handle viewport case
|
||||
if (boundariesElement === 'viewport') {
|
||||
boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent);
|
||||
boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);
|
||||
} else {
|
||||
// Handle other cases based on DOM element used as boundaries
|
||||
var boundariesNode = void 0;
|
||||
@@ -481,7 +528,7 @@ function getBoundaries(popper, reference, padding, boundariesElement) {
|
||||
boundariesNode = boundariesElement;
|
||||
}
|
||||
|
||||
var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent);
|
||||
var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);
|
||||
|
||||
// In case of HTML, we need a different computation
|
||||
if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {
|
||||
@@ -575,7 +622,6 @@ function computeAutoPlacement(placement, refRect, popper, reference, boundariesE
|
||||
return computedPlacement + (variation ? '-' + variation : '');
|
||||
}
|
||||
|
||||
var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
|
||||
var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];
|
||||
var timeoutDuration = 0;
|
||||
for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {
|
||||
@@ -779,11 +825,14 @@ function getPopperOffsets(popper, referenceOffsets, placement) {
|
||||
* @param {Object} state
|
||||
* @param {Element} popper - the popper element
|
||||
* @param {Element} reference - the reference element (the popper will be relative to this)
|
||||
* @param {Element} fixedPosition - is in fixed position mode
|
||||
* @returns {Object} An object containing the offsets which will be applied to the popper
|
||||
*/
|
||||
function getReferenceOffsets(state, popper, reference) {
|
||||
var commonOffsetParent = findCommonOffsetParent(popper, reference);
|
||||
return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent);
|
||||
var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
|
||||
|
||||
var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
|
||||
return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -797,7 +846,7 @@ function getSupportedPropertyName(property) {
|
||||
var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];
|
||||
var upperProp = property.charAt(0).toUpperCase() + property.slice(1);
|
||||
|
||||
for (var i = 0; i < prefixes.length - 1; i++) {
|
||||
for (var i = 0; i < prefixes.length; i++) {
|
||||
var prefix = prefixes[i];
|
||||
var toCheck = prefix ? '' + prefix + upperProp : property;
|
||||
if (typeof document.body.style[toCheck] !== 'undefined') {
|
||||
|
||||
File diff suppressed because one or more lines are too long
+2
-2
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+135
-52
@@ -1,6 +1,6 @@
|
||||
/**!
|
||||
* @fileOverview Kickass library to create and place poppers near their reference elements.
|
||||
* @version 1.12.9
|
||||
* @version 1.14.3
|
||||
* @license
|
||||
* Copyright (c) 2016 Federico Zivolo and contributors
|
||||
*
|
||||
@@ -29,6 +29,7 @@
|
||||
}(this, (function () { 'use strict';
|
||||
|
||||
var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
|
||||
|
||||
var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];
|
||||
var timeoutDuration = 0;
|
||||
for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {
|
||||
@@ -148,13 +149,33 @@ function getScrollParent(element) {
|
||||
overflowX = _getStyleComputedProp.overflowX,
|
||||
overflowY = _getStyleComputedProp.overflowY;
|
||||
|
||||
if (/(auto|scroll)/.test(overflow + overflowY + overflowX)) {
|
||||
if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {
|
||||
return element;
|
||||
}
|
||||
|
||||
return getScrollParent(getParentNode(element));
|
||||
}
|
||||
|
||||
var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);
|
||||
var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);
|
||||
|
||||
/**
|
||||
* Determines if the browser is Internet Explorer
|
||||
* @method
|
||||
* @memberof Popper.Utils
|
||||
* @param {Number} version to check
|
||||
* @returns {Boolean} isIE
|
||||
*/
|
||||
function isIE(version) {
|
||||
if (version === 11) {
|
||||
return isIE11;
|
||||
}
|
||||
if (version === 10) {
|
||||
return isIE10;
|
||||
}
|
||||
return isIE11 || isIE10;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the offset parent of the given element
|
||||
* @method
|
||||
@@ -163,16 +184,23 @@ function getScrollParent(element) {
|
||||
* @returns {Element} offset parent
|
||||
*/
|
||||
function getOffsetParent(element) {
|
||||
if (!element) {
|
||||
return document.documentElement;
|
||||
}
|
||||
|
||||
var noOffsetParent = isIE(10) ? document.body : null;
|
||||
|
||||
// NOTE: 1 DOM access here
|
||||
var offsetParent = element && element.offsetParent;
|
||||
var offsetParent = element.offsetParent;
|
||||
// Skip hidden elements which don't have an offsetParent
|
||||
while (offsetParent === noOffsetParent && element.nextElementSibling) {
|
||||
offsetParent = (element = element.nextElementSibling).offsetParent;
|
||||
}
|
||||
|
||||
var nodeName = offsetParent && offsetParent.nodeName;
|
||||
|
||||
if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {
|
||||
if (element) {
|
||||
return element.ownerDocument.documentElement;
|
||||
}
|
||||
|
||||
return document.documentElement;
|
||||
return element ? element.ownerDocument.documentElement : document.documentElement;
|
||||
}
|
||||
|
||||
// .offsetParent will return the closest TD or TABLE in case
|
||||
@@ -314,29 +342,14 @@ function getBordersSize(styles, axis) {
|
||||
return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tells if you are running Internet Explorer 10
|
||||
* @method
|
||||
* @memberof Popper.Utils
|
||||
* @returns {Boolean} isIE10
|
||||
*/
|
||||
var isIE10 = undefined;
|
||||
|
||||
var isIE10$1 = function () {
|
||||
if (isIE10 === undefined) {
|
||||
isIE10 = navigator.appVersion.indexOf('MSIE 10') !== -1;
|
||||
}
|
||||
return isIE10;
|
||||
};
|
||||
|
||||
function getSize(axis, body, html, computedStyle) {
|
||||
return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE10$1() ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0);
|
||||
return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0);
|
||||
}
|
||||
|
||||
function getWindowSizes() {
|
||||
var body = document.body;
|
||||
var html = document.documentElement;
|
||||
var computedStyle = isIE10$1() && getComputedStyle(html);
|
||||
var computedStyle = isIE(10) && getComputedStyle(html);
|
||||
|
||||
return {
|
||||
height: getSize('Height', body, html, computedStyle),
|
||||
@@ -428,8 +441,8 @@ function getBoundingClientRect(element) {
|
||||
// IE10 10 FIX: Please, don't ask, the element isn't
|
||||
// considered in DOM in some circumstances...
|
||||
// This isn't reproducible in IE10 compatibility mode of IE11
|
||||
if (isIE10$1()) {
|
||||
try {
|
||||
try {
|
||||
if (isIE(10)) {
|
||||
rect = element.getBoundingClientRect();
|
||||
var scrollTop = getScroll(element, 'top');
|
||||
var scrollLeft = getScroll(element, 'left');
|
||||
@@ -437,10 +450,10 @@ function getBoundingClientRect(element) {
|
||||
rect.left += scrollLeft;
|
||||
rect.bottom += scrollTop;
|
||||
rect.right += scrollLeft;
|
||||
} catch (err) {}
|
||||
} else {
|
||||
rect = element.getBoundingClientRect();
|
||||
}
|
||||
} else {
|
||||
rect = element.getBoundingClientRect();
|
||||
}
|
||||
} catch (e) {}
|
||||
|
||||
var result = {
|
||||
left: rect.left,
|
||||
@@ -472,7 +485,9 @@ function getBoundingClientRect(element) {
|
||||
}
|
||||
|
||||
function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
||||
var isIE10 = isIE10$1();
|
||||
var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
||||
|
||||
var isIE10 = isIE(10);
|
||||
var isHTML = parent.nodeName === 'HTML';
|
||||
var childrenRect = getBoundingClientRect(children);
|
||||
var parentRect = getBoundingClientRect(parent);
|
||||
@@ -482,6 +497,11 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
||||
var borderTopWidth = parseFloat(styles.borderTopWidth, 10);
|
||||
var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);
|
||||
|
||||
// In cases where the parent is fixed, we must ignore negative scroll in offset calc
|
||||
if (fixedPosition && parent.nodeName === 'HTML') {
|
||||
parentRect.top = Math.max(parentRect.top, 0);
|
||||
parentRect.left = Math.max(parentRect.left, 0);
|
||||
}
|
||||
var offsets = getClientRect({
|
||||
top: childrenRect.top - parentRect.top - borderTopWidth,
|
||||
left: childrenRect.left - parentRect.left - borderLeftWidth,
|
||||
@@ -509,7 +529,7 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
||||
offsets.marginLeft = marginLeft;
|
||||
}
|
||||
|
||||
if (isIE10 ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
|
||||
if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
|
||||
offsets = includeScroll(offsets, parent);
|
||||
}
|
||||
|
||||
@@ -517,13 +537,15 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
||||
}
|
||||
|
||||
function getViewportOffsetRectRelativeToArtbitraryNode(element) {
|
||||
var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
||||
|
||||
var html = element.ownerDocument.documentElement;
|
||||
var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
|
||||
var width = Math.max(html.clientWidth, window.innerWidth || 0);
|
||||
var height = Math.max(html.clientHeight, window.innerHeight || 0);
|
||||
|
||||
var scrollTop = getScroll(html);
|
||||
var scrollLeft = getScroll(html, 'left');
|
||||
var scrollTop = !excludeScroll ? getScroll(html) : 0;
|
||||
var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;
|
||||
|
||||
var offset = {
|
||||
top: scrollTop - relativeOffset.top + relativeOffset.marginTop,
|
||||
@@ -554,6 +576,26 @@ function isFixed(element) {
|
||||
return isFixed(getParentNode(element));
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the first parent of an element that has a transformed property defined
|
||||
* @method
|
||||
* @memberof Popper.Utils
|
||||
* @argument {Element} element
|
||||
* @returns {Element} first transformed parent or documentElement
|
||||
*/
|
||||
|
||||
function getFixedPositionOffsetParent(element) {
|
||||
// This check is needed to avoid errors in case one of the elements isn't defined for any reason
|
||||
if (!element || !element.parentElement || isIE()) {
|
||||
return document.documentElement;
|
||||
}
|
||||
var el = element.parentElement;
|
||||
while (el && getStyleComputedProperty(el, 'transform') === 'none') {
|
||||
el = el.parentElement;
|
||||
}
|
||||
return el || document.documentElement;
|
||||
}
|
||||
|
||||
/**
|
||||
* Computed the boundaries limits and return them
|
||||
* @method
|
||||
@@ -562,16 +604,20 @@ function isFixed(element) {
|
||||
* @param {HTMLElement} reference
|
||||
* @param {number} padding
|
||||
* @param {HTMLElement} boundariesElement - Element used to define the boundaries
|
||||
* @param {Boolean} fixedPosition - Is in fixed position mode
|
||||
* @returns {Object} Coordinates of the boundaries
|
||||
*/
|
||||
function getBoundaries(popper, reference, padding, boundariesElement) {
|
||||
var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
||||
|
||||
// NOTE: 1 DOM access here
|
||||
|
||||
var boundaries = { top: 0, left: 0 };
|
||||
var offsetParent = findCommonOffsetParent(popper, reference);
|
||||
var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
|
||||
|
||||
// Handle viewport case
|
||||
if (boundariesElement === 'viewport') {
|
||||
boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent);
|
||||
boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);
|
||||
} else {
|
||||
// Handle other cases based on DOM element used as boundaries
|
||||
var boundariesNode = void 0;
|
||||
@@ -586,7 +632,7 @@ function getBoundaries(popper, reference, padding, boundariesElement) {
|
||||
boundariesNode = boundariesElement;
|
||||
}
|
||||
|
||||
var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent);
|
||||
var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);
|
||||
|
||||
// In case of HTML, we need a different computation
|
||||
if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {
|
||||
@@ -687,11 +733,14 @@ function computeAutoPlacement(placement, refRect, popper, reference, boundariesE
|
||||
* @param {Object} state
|
||||
* @param {Element} popper - the popper element
|
||||
* @param {Element} reference - the reference element (the popper will be relative to this)
|
||||
* @param {Element} fixedPosition - is in fixed position mode
|
||||
* @returns {Object} An object containing the offsets which will be applied to the popper
|
||||
*/
|
||||
function getReferenceOffsets(state, popper, reference) {
|
||||
var commonOffsetParent = findCommonOffsetParent(popper, reference);
|
||||
return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent);
|
||||
var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
|
||||
|
||||
var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
|
||||
return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -864,7 +913,7 @@ function update() {
|
||||
};
|
||||
|
||||
// compute reference element offsets
|
||||
data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference);
|
||||
data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);
|
||||
|
||||
// compute auto placement, store placement inside the data object,
|
||||
// modifiers will be able to edit `placement` if needed
|
||||
@@ -874,9 +923,12 @@ function update() {
|
||||
// store the computed placement inside `originalPlacement`
|
||||
data.originalPlacement = data.placement;
|
||||
|
||||
data.positionFixed = this.options.positionFixed;
|
||||
|
||||
// compute the popper offsets
|
||||
data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);
|
||||
data.offsets.popper.position = 'absolute';
|
||||
|
||||
data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';
|
||||
|
||||
// run the modifiers
|
||||
data = runModifiers(this.modifiers, data);
|
||||
@@ -916,7 +968,7 @@ function getSupportedPropertyName(property) {
|
||||
var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];
|
||||
var upperProp = property.charAt(0).toUpperCase() + property.slice(1);
|
||||
|
||||
for (var i = 0; i < prefixes.length - 1; i++) {
|
||||
for (var i = 0; i < prefixes.length; i++) {
|
||||
var prefix = prefixes[i];
|
||||
var toCheck = prefix ? '' + prefix + upperProp : property;
|
||||
if (typeof document.body.style[toCheck] !== 'undefined') {
|
||||
@@ -937,9 +989,12 @@ function destroy() {
|
||||
// touch DOM only if `applyStyle` modifier is enabled
|
||||
if (isModifierEnabled(this.modifiers, 'applyStyle')) {
|
||||
this.popper.removeAttribute('x-placement');
|
||||
this.popper.style.left = '';
|
||||
this.popper.style.position = '';
|
||||
this.popper.style.top = '';
|
||||
this.popper.style.left = '';
|
||||
this.popper.style.right = '';
|
||||
this.popper.style.bottom = '';
|
||||
this.popper.style.willChange = '';
|
||||
this.popper.style[getSupportedPropertyName('transform')] = '';
|
||||
}
|
||||
|
||||
@@ -1127,12 +1182,12 @@ function applyStyle(data) {
|
||||
* @method
|
||||
* @memberof Popper.modifiers
|
||||
* @param {HTMLElement} reference - The reference element used to position the popper
|
||||
* @param {HTMLElement} popper - The HTML element used as popper.
|
||||
* @param {HTMLElement} popper - The HTML element used as popper
|
||||
* @param {Object} options - Popper.js options
|
||||
*/
|
||||
function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {
|
||||
// compute reference element offsets
|
||||
var referenceOffsets = getReferenceOffsets(state, popper, reference);
|
||||
var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);
|
||||
|
||||
// compute auto placement, store placement inside the data object,
|
||||
// modifiers will be able to edit `placement` if needed
|
||||
@@ -1143,7 +1198,7 @@ function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {
|
||||
|
||||
// Apply `position` to popper before anything else because
|
||||
// without the position applied we can't guarantee correct computations
|
||||
setStyles(popper, { position: 'absolute' });
|
||||
setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });
|
||||
|
||||
return options;
|
||||
}
|
||||
@@ -1178,11 +1233,13 @@ function computeStyle(data, options) {
|
||||
position: popper.position
|
||||
};
|
||||
|
||||
// floor sides to avoid blurry text
|
||||
// Avoid blurry text by using full pixel integers.
|
||||
// For pixel-perfect positioning, top/bottom prefers rounded
|
||||
// values, while left/right prefers floored values.
|
||||
var offsets = {
|
||||
left: Math.floor(popper.left),
|
||||
top: Math.floor(popper.top),
|
||||
bottom: Math.floor(popper.bottom),
|
||||
top: Math.round(popper.top),
|
||||
bottom: Math.round(popper.bottom),
|
||||
right: Math.floor(popper.right)
|
||||
};
|
||||
|
||||
@@ -1446,7 +1503,7 @@ function flip(data, options) {
|
||||
return data;
|
||||
}
|
||||
|
||||
var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement);
|
||||
var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);
|
||||
|
||||
var placement = data.placement.split('-')[0];
|
||||
var placementOpposite = getOppositePlacement(placement);
|
||||
@@ -1738,7 +1795,27 @@ function preventOverflow(data, options) {
|
||||
boundariesElement = getOffsetParent(boundariesElement);
|
||||
}
|
||||
|
||||
var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement);
|
||||
// NOTE: DOM access here
|
||||
// resets the popper's position so that the document size can be calculated excluding
|
||||
// the size of the popper element itself
|
||||
var transformProp = getSupportedPropertyName('transform');
|
||||
var popperStyles = data.instance.popper.style; // assignment to help minification
|
||||
var top = popperStyles.top,
|
||||
left = popperStyles.left,
|
||||
transform = popperStyles[transformProp];
|
||||
|
||||
popperStyles.top = '';
|
||||
popperStyles.left = '';
|
||||
popperStyles[transformProp] = '';
|
||||
|
||||
var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);
|
||||
|
||||
// NOTE: DOM access here
|
||||
// restores the original style properties after the offsets have been computed
|
||||
popperStyles.top = top;
|
||||
popperStyles.left = left;
|
||||
popperStyles[transformProp] = transform;
|
||||
|
||||
options.boundaries = boundaries;
|
||||
|
||||
var order = options.priority;
|
||||
@@ -2235,6 +2312,12 @@ var Defaults = {
|
||||
*/
|
||||
placement: 'bottom',
|
||||
|
||||
/**
|
||||
* Set this to true if you want popper to position it self in 'fixed' mode
|
||||
* @prop {Boolean} positionFixed=false
|
||||
*/
|
||||
positionFixed: false,
|
||||
|
||||
/**
|
||||
* Whether events (resize, scroll) are initially enabled
|
||||
* @prop {Boolean} eventsEnabled=true
|
||||
|
||||
File diff suppressed because one or more lines are too long
Vendored
+2
-2
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -20,7 +20,7 @@
|
||||
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net462" />
|
||||
<package id="Modernizr" version="2.8.3" targetFramework="net462" />
|
||||
<package id="Newtonsoft.Json" version="11.0.2" targetFramework="net462" />
|
||||
<package id="popper.js" version="1.12.9" targetFramework="net462" />
|
||||
<package id="popper.js" version="1.14.3" targetFramework="net462" />
|
||||
<package id="Respond" version="1.4.2" targetFramework="net462" />
|
||||
<package id="WebGrease" version="1.6.0" targetFramework="net462" />
|
||||
</packages>
|
||||
Reference in New Issue
Block a user