@flexis/ui
Version:
Styleless React Components
64 lines (52 loc) • 3.2 kB
JavaScript
import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
import _Map from "@babel/runtime-corejs3/core-js-stable/map";
var elementsOverflows = new _Map();
function blockElement(element) {
var overflow = elementsOverflows.get(element);
if (overflow) {
overflow.count++;
} else {
elementsOverflows.set(element, {
count: 1,
value: element.style.overflow
});
element.style.overflow = 'hidden';
}
}
function unblockElement(element) {
var overflow = elementsOverflows.get(element);
if (!overflow) {
return;
}
overflow.count--;
if (!overflow.count) {
element.style.overflow = overflow.value;
elementsOverflows.delete(element);
}
}
/**
* Block scroll.
* @param element - HTML-element to block scroll.
* @return Unblock scroll.
*/
export function blockScroll() {
var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document.body;
var _document = document,
documentElement = _document.documentElement;
var currentElement = element;
var restore = [];
do {
restore.push(currentElement);
blockElement(currentElement);
currentElement = currentElement.parentElement;
} while (currentElement !== documentElement);
currentElement = null;
return function () {
if (restore === null) {
return;
}
_forEachInstanceProperty(restore).call(restore, unblockElement);
restore = null;
};
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9oZWxwZXJzL2Jsb2NrU2Nyb2xsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBTUEsSUFBTSxpQkFBaUIsR0FBRyxVQUExQjs7QUFFQSxTQUFTLFlBQVQsQ0FBc0IsT0FBdEIsRUFBMEM7QUFFekMsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsR0FBbEIsQ0FBc0IsT0FBdEIsQ0FBakI7O0FBRUEsTUFBSSxRQUFKLEVBQWM7QUFDYixJQUFBLFFBQVEsQ0FBQyxLQUFUO0FBQ0EsR0FGRCxNQUVPO0FBQ04sSUFBQSxpQkFBaUIsQ0FBQyxHQUFsQixDQUFzQixPQUF0QixFQUErQjtBQUM5QixNQUFBLEtBQUssRUFBSyxDQURvQjtBQUU5QixNQUFBLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBUixDQUFjO0FBRlMsS0FBL0I7QUFJQSxJQUFBLE9BQU8sQ0FBQyxLQUFSLENBQWMsUUFBZCxHQUF5QixRQUF6QjtBQUNBO0FBQ0Q7O0FBRUQsU0FBUyxjQUFULENBQXdCLE9BQXhCLEVBQTRDO0FBRTNDLE1BQU0sUUFBUSxHQUFHLGlCQUFpQixDQUFDLEdBQWxCLENBQXNCLE9BQXRCLENBQWpCOztBQUVBLE1BQUksQ0FBQyxRQUFMLEVBQWU7QUFDZDtBQUNBOztBQUVELEVBQUEsUUFBUSxDQUFDLEtBQVQ7O0FBRUEsTUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFkLEVBQXFCO0FBQ3BCLElBQUEsT0FBTyxDQUFDLEtBQVIsQ0FBYyxRQUFkLEdBQXlCLFFBQVEsQ0FBQyxLQUFsQztBQUNBLElBQUEsaUJBQWlCLENBQUMsTUFBbEIsQ0FBeUIsT0FBekI7QUFDQTtBQUNEO0FBRUQ7Ozs7Ozs7QUFLQSxPQUFNLFNBQVUsV0FBVixHQUE2QztBQUFBLE1BQXZCLE9BQXVCLHVFQUFiLFFBQVEsQ0FBQyxJQUFJO0FBQUEsa0JBSTlDLFFBSjhDO0FBQUEsTUFHakQsZUFIaUQsYUFHakQsZUFIaUQ7QUFLbEQsTUFBSSxjQUFjLEdBQUcsT0FBckI7QUFDQSxNQUFJLE9BQU8sR0FBa0IsRUFBN0I7O0FBRUEsS0FBRztBQUVGLElBQUEsT0FBTyxDQUFDLElBQVIsQ0FBYSxjQUFiO0FBQ0EsSUFBQSxZQUFZLENBQUMsY0FBRCxDQUFaO0FBRUEsSUFBQSxjQUFjLEdBQUcsY0FBYyxDQUFDLGFBQWhDO0FBRUEsR0FQRCxRQU9TLGNBQWMsS0FBSyxlQVA1Qjs7QUFTQSxFQUFBLGNBQWMsR0FBRyxJQUFqQjtBQUVBLFNBQU8sWUFBSztBQUVYLFFBQUksT0FBTyxLQUFLLElBQWhCLEVBQXNCO0FBQ3JCO0FBQ0E7O0FBRUQsNkJBQUEsT0FBTyxNQUFQLENBQUEsT0FBTyxFQUFTLGNBQVQsQ0FBUDs7QUFDQSxJQUFBLE9BQU8sR0FBRyxJQUFWO0FBQ0EsR0FSRDtBQVNBIiwic291cmNlUm9vdCI6IiJ9