UNPKG

react-elegant-ui

Version:

Elegant UI components, made by BEM best practices for react

90 lines (89 loc) 2.52 kB
"use strict"; 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; }