react-elegant-ui
Version:
Elegant UI components, made by BEM best practices for react
80 lines • 2.23 kB
JavaScript
import { canUseDOM } from '../canUseDOM';
export function setStyle(element, style) {
var prev = {};
for (var key in style) {
if (style.hasOwnProperty(key)) {
prev[key] = element.style[key];
}
}
for (var key in style) {
if (style.hasOwnProperty(key)) {
element.style[key] = style[key];
}
}
return prev;
}
function isScrollable(node) {
var style = getComputedStyle(node);
return /(auto|scroll)/.test(style.overflow + style.overflowX + style.overflowY);
}
export function getScrollParent(node) {
while (node && !isScrollable(node)) {
node = node.parentElement;
}
return node || document.documentElement;
}
var cachedScrollGap;
export function getScrollBarGap() {
if (typeof document === 'undefined') {
return 0;
}
if (cachedScrollGap === undefined) {
var inner = document.createElement('div');
inner.style.width = '100%';
inner.style.height = '200px';
var outer = document.createElement('div');
outer.style.position = 'absolute';
outer.style.top = '0';
outer.style.left = '0';
outer.style.pointerEvents = 'none';
outer.style.visibility = 'hidden';
outer.style.width = '200px';
outer.style.height = '150px';
outer.style.overflow = 'hidden';
outer.style.zIndex = '-1';
outer.appendChild(inner);
document.body.appendChild(outer);
var widthContained = inner.offsetWidth;
outer.style.overflow = 'scroll';
var widthScroll = inner.offsetWidth;
if (widthContained === widthScroll) {
widthScroll = outer.clientWidth;
}
document.body.removeChild(outer);
cachedScrollGap = widthContained - widthScroll;
}
return cachedScrollGap;
}
export function isPassiveEventsSupported() {
var supported = false;
if (!canUseDOM()) {
return false;
}
try {
var listener = function () {
return null;
};
var opts = {
get passive() {
supported = true;
return undefined;
}
};
window.addEventListener('testPassive', listener, opts);
window.removeEventListener('testPassive', listener);
} catch (e) {}
return supported;
}
export function isRootHTMLElement(node) {
return node === document.body || node === document.documentElement;
}