forgeplus-react/node_modules/react-virtualized/dist/es/WindowScroller/utils/dimensions.js

78 lines
2.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* Gets the dimensions of the element, accounting for API differences between
* `window` and other DOM elements.
*/
// TODO Move this into WindowScroller and import from there
var isWindow = function isWindow(element) {
return element === window;
};
var getBoundingBox = function getBoundingBox(element) {
return element.getBoundingClientRect();
};
export function getDimensions(scrollElement, props) {
if (!scrollElement) {
return {
height: props.serverHeight,
width: props.serverWidth
};
} else if (isWindow(scrollElement)) {
var _window = window,
innerHeight = _window.innerHeight,
innerWidth = _window.innerWidth;
return {
height: typeof innerHeight === 'number' ? innerHeight : 0,
width: typeof innerWidth === 'number' ? innerWidth : 0
};
} else {
return getBoundingBox(scrollElement);
}
}
/**
* Gets the vertical and horizontal position of an element within its scroll container.
* Elements that have been “scrolled past” return negative values.
* Handles edge-case where a user is navigating back (history) from an already-scrolled page.
* In this case the bodys top or left position will be a negative number and this elements top or left will be increased (by that amount).
*/
export function getPositionOffset(element, container) {
if (isWindow(container) && document.documentElement) {
var containerElement = document.documentElement;
var elementRect = getBoundingBox(element);
var containerRect = getBoundingBox(containerElement);
return {
top: elementRect.top - containerRect.top,
left: elementRect.left - containerRect.left
};
} else {
var scrollOffset = getScrollOffset(container);
var _elementRect = getBoundingBox(element);
var _containerRect = getBoundingBox(container);
return {
top: _elementRect.top + scrollOffset.top - _containerRect.top,
left: _elementRect.left + scrollOffset.left - _containerRect.left
};
}
}
/**
* Gets the vertical and horizontal scroll amount of the element, accounting for IE compatibility
* and API differences between `window` and other DOM elements.
*/
export function getScrollOffset(element) {
if (isWindow(element) && document.documentElement) {
return {
top: 'scrollY' in window ? window.scrollY : document.documentElement.scrollTop,
left: 'scrollX' in window ? window.scrollX : document.documentElement.scrollLeft
};
} else {
return {
top: element.scrollTop,
left: element.scrollLeft
};
}
}