diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2022-02-13 18:11:28 +0300 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2022-02-13 18:11:28 +0300 |
commit | 02b6116825341c309c1ceef951f4ec3566728397 (patch) | |
tree | ab5d3625431db2f3076c3dded6f79b37af8cacf3 /popperjs/package/dist/esm/dom-utils/getCompositeRect.js | |
parent | 7c4d83e324c73bb3dc1209ddefef733c5144424e (diff) |
Add popperjspopperjs/v2.21100.20000
Diffstat (limited to 'popperjs/package/dist/esm/dom-utils/getCompositeRect.js')
-rw-r--r-- | popperjs/package/dist/esm/dom-utils/getCompositeRect.js | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/popperjs/package/dist/esm/dom-utils/getCompositeRect.js b/popperjs/package/dist/esm/dom-utils/getCompositeRect.js new file mode 100644 index 0000000..eaa5f84 --- /dev/null +++ b/popperjs/package/dist/esm/dom-utils/getCompositeRect.js @@ -0,0 +1,58 @@ +import getBoundingClientRect from "./getBoundingClientRect.js"; +import getNodeScroll from "./getNodeScroll.js"; +import getNodeName from "./getNodeName.js"; +import { isHTMLElement } from "./instanceOf.js"; +import getWindowScrollBarX from "./getWindowScrollBarX.js"; +import getDocumentElement from "./getDocumentElement.js"; +import isScrollParent from "./isScrollParent.js"; +import { round } from "../utils/math.js"; + +function isElementScaled(element) { + var rect = element.getBoundingClientRect(); + var scaleX = round(rect.width) / element.offsetWidth || 1; + var scaleY = round(rect.height) / element.offsetHeight || 1; + return scaleX !== 1 || scaleY !== 1; +} // Returns the composite rect of an element relative to its offsetParent. +// Composite means it takes into account transforms as well as layout. + + +export default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) { + if (isFixed === void 0) { + isFixed = false; + } + + var isOffsetParentAnElement = isHTMLElement(offsetParent); + var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent); + var documentElement = getDocumentElement(offsetParent); + var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled); + var scroll = { + scrollLeft: 0, + scrollTop: 0 + }; + var offsets = { + x: 0, + y: 0 + }; + + if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { + if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078 + isScrollParent(documentElement)) { + scroll = getNodeScroll(offsetParent); + } + + if (isHTMLElement(offsetParent)) { + offsets = getBoundingClientRect(offsetParent, true); + offsets.x += offsetParent.clientLeft; + offsets.y += offsetParent.clientTop; + } else if (documentElement) { + offsets.x = getWindowScrollBarX(documentElement); + } + } + + return { + x: rect.left + scroll.scrollLeft - offsets.x, + y: rect.top + scroll.scrollTop - offsets.y, + width: rect.width, + height: rect.height + }; +}
\ No newline at end of file |