react-elegant-ui
Version:
Elegant UI components, made by BEM best practices for react
90 lines (89 loc) • 2.52 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getScrollBarGap = getScrollBarGap;
exports.getScrollParent = getScrollParent;
exports.isPassiveEventsSupported = isPassiveEventsSupported;
exports.isRootHTMLElement = isRootHTMLElement;
exports.setStyle = setStyle;
var _canUseDOM = require("../canUseDOM");
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);
}
function getScrollParent(node) {
while (node && !isScrollable(node)) {
node = node.parentElement;
}
return node || document.documentElement;
}
var cachedScrollGap;
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;
}
function isPassiveEventsSupported() {
var supported = false;
if (!(0, _canUseDOM.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;
}
function isRootHTMLElement(node) {
return node === document.body || node === document.documentElement;
}