@flexis/ui
Version:
Styleless React Components
77 lines (59 loc) • 3.57 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
_Object$defineProperty(exports, "__esModule", {
value: true
});
exports.blockScroll = blockScroll;
var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/map"));
var elementsOverflows = new _map.default();
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.
*/
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;
}
(0, _forEach.default)(restore).call(restore, unblockElement);
restore = null;
};
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9oZWxwZXJzL2Jsb2NrU2Nyb2xsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNQSxJQUFNLGlCQUFpQixHQUFHLGtCQUExQjs7QUFFQSxTQUFTLFlBQVQsQ0FBc0IsT0FBdEIsRUFBMEM7QUFFekMsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsR0FBbEIsQ0FBc0IsT0FBdEIsQ0FBakI7O0FBRUEsTUFBSSxRQUFKLEVBQWM7QUFDYixJQUFBLFFBQVEsQ0FBQyxLQUFUO0FBQ0EsR0FGRCxNQUVPO0FBQ04sSUFBQSxpQkFBaUIsQ0FBQyxHQUFsQixDQUFzQixPQUF0QixFQUErQjtBQUM5QixNQUFBLEtBQUssRUFBSyxDQURvQjtBQUU5QixNQUFBLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBUixDQUFjO0FBRlMsS0FBL0I7QUFJQSxJQUFBLE9BQU8sQ0FBQyxLQUFSLENBQWMsUUFBZCxHQUF5QixRQUF6QjtBQUNBO0FBQ0Q7O0FBRUQsU0FBUyxjQUFULENBQXdCLE9BQXhCLEVBQTRDO0FBRTNDLE1BQU0sUUFBUSxHQUFHLGlCQUFpQixDQUFDLEdBQWxCLENBQXNCLE9BQXRCLENBQWpCOztBQUVBLE1BQUksQ0FBQyxRQUFMLEVBQWU7QUFDZDtBQUNBOztBQUVELEVBQUEsUUFBUSxDQUFDLEtBQVQ7O0FBRUEsTUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFkLEVBQXFCO0FBQ3BCLElBQUEsT0FBTyxDQUFDLEtBQVIsQ0FBYyxRQUFkLEdBQXlCLFFBQVEsQ0FBQyxLQUFsQztBQUNBLElBQUEsaUJBQWlCLENBQUMsTUFBbEIsQ0FBeUIsT0FBekI7QUFDQTtBQUNEO0FBRUQ7Ozs7Ozs7QUFLTSxTQUFVLFdBQVYsR0FBNkM7QUFBQSxNQUF2QixPQUF1Qix1RUFBYixRQUFRLENBQUMsSUFBSTtBQUFBLGtCQUk5QyxRQUo4QztBQUFBLE1BR2pELGVBSGlELGFBR2pELGVBSGlEO0FBS2xELE1BQUksY0FBYyxHQUFHLE9BQXJCO0FBQ0EsTUFBSSxPQUFPLEdBQWtCLEVBQTdCOztBQUVBLEtBQUc7QUFFRixJQUFBLE9BQU8sQ0FBQyxJQUFSLENBQWEsY0FBYjtBQUNBLElBQUEsWUFBWSxDQUFDLGNBQUQsQ0FBWjtBQUVBLElBQUEsY0FBYyxHQUFHLGNBQWMsQ0FBQyxhQUFoQztBQUVBLEdBUEQsUUFPUyxjQUFjLEtBQUssZUFQNUI7O0FBU0EsRUFBQSxjQUFjLEdBQUcsSUFBakI7QUFFQSxTQUFPLFlBQUs7QUFFWCxRQUFJLE9BQU8sS0FBSyxJQUFoQixFQUFzQjtBQUNyQjtBQUNBOztBQUVELDBCQUFBLE9BQU8sTUFBUCxDQUFBLE9BQU8sRUFBUyxjQUFULENBQVA7QUFDQSxJQUFBLE9BQU8sR0FBRyxJQUFWO0FBQ0EsR0FSRDtBQVNBIiwic291cmNlUm9vdCI6IiJ9