first commit
This commit is contained in:
40
node_modules/popper.js/src/utils/getOffsetParent.js
generated
vendored
Normal file
40
node_modules/popper.js/src/utils/getOffsetParent.js
generated
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
import getStyleComputedProperty from './getStyleComputedProperty';
|
||||
import isIE from './isIE';
|
||||
/**
|
||||
* Returns the offset parent of the given element
|
||||
* @method
|
||||
* @memberof Popper.Utils
|
||||
* @argument {Element} element
|
||||
* @returns {Element} offset parent
|
||||
*/
|
||||
export default function getOffsetParent(element) {
|
||||
if (!element) {
|
||||
return document.documentElement;
|
||||
}
|
||||
|
||||
const noOffsetParent = isIE(10) ? document.body : null;
|
||||
|
||||
// NOTE: 1 DOM access here
|
||||
let offsetParent = element.offsetParent || null;
|
||||
// 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') {
|
||||
return element ? element.ownerDocument.documentElement : document.documentElement;
|
||||
}
|
||||
|
||||
// .offsetParent will return the closest TH, TD or TABLE in case
|
||||
// no offsetParent is present, I hate this job...
|
||||
if (
|
||||
['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&
|
||||
getStyleComputedProperty(offsetParent, 'position') === 'static'
|
||||
) {
|
||||
return getOffsetParent(offsetParent);
|
||||
}
|
||||
|
||||
return offsetParent;
|
||||
}
|
Reference in New Issue
Block a user