Files
goTorrent/torrent-project/node_modules/material-ui/internal/modalManager.js

151 lines
4.6 KiB
JavaScript

'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _warning = require('warning');
var _warning2 = _interopRequireDefault(_warning);
var _isWindow = require('dom-helpers/query/isWindow');
var _isWindow2 = _interopRequireDefault(_isWindow);
var _ownerDocument = require('dom-helpers/ownerDocument');
var _ownerDocument2 = _interopRequireDefault(_ownerDocument);
var _inDOM = require('dom-helpers/util/inDOM');
var _inDOM2 = _interopRequireDefault(_inDOM);
var _scrollbarSize = require('dom-helpers/util/scrollbarSize');
var _scrollbarSize2 = _interopRequireDefault(_scrollbarSize);
var _manageAriaHidden = require('../utils/manageAriaHidden');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// Taken from https://github.com/react-bootstrap/react-overlays/blob/master/src/ModalManager.js
function getPaddingRight(node) {
return parseInt(node.style.paddingRight || 0, 10);
}
// Do we have a scroll bar?
function bodyIsOverflowing(node) {
var doc = (0, _ownerDocument2.default)(node);
var win = (0, _isWindow2.default)(doc);
// Takes in account potential non zero margin on the body.
var style = window.getComputedStyle(doc.body);
var marginLeft = parseInt(style.getPropertyValue('margin-left'), 10);
var marginRight = parseInt(style.getPropertyValue('margin-right'), 10);
return marginLeft + doc.body.clientWidth + marginRight < win.innerWidth;
}
// The container shouldn't be used on the server.
var defaultContainer = _inDOM2.default ? window.document.body : {};
/**
* State management helper for modals/layers.
* Simplified, but inspired by react-overlay's ModalManager class
*
* @internal Used by the Modal to ensure proper focus management.
*/
function createModalManager() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
_ref$container = _ref.container,
container = _ref$container === undefined ? defaultContainer : _ref$container,
_ref$hideSiblingNodes = _ref.hideSiblingNodes,
hideSiblingNodes = _ref$hideSiblingNodes === undefined ? true : _ref$hideSiblingNodes;
process.env.NODE_ENV !== "production" ? (0, _warning2.default)(container !== null, '\nMaterial-UI: you are most likely evaluating the code before the\nbrowser has a chance to reach the <body>.\nPlease move the import at the end of the <body>.\n ') : void 0;
var modals = [];
var prevOverflow = void 0;
var prevPaddings = [];
function add(modal) {
var modalIdx = modals.indexOf(modal);
if (modalIdx !== -1) {
return modalIdx;
}
modalIdx = modals.length;
modals.push(modal);
if (hideSiblingNodes) {
(0, _manageAriaHidden.hideSiblings)(container, modal.mountNode);
}
if (modals.length === 1) {
// Save our current overflow so we can revert
// back to it when all modals are closed!
prevOverflow = container.style.overflow;
if (bodyIsOverflowing(container)) {
prevPaddings = [getPaddingRight(container)];
var scrollbarSize = (0, _scrollbarSize2.default)();
container.style.paddingRight = prevPaddings[0] + scrollbarSize + 'px';
var fixedNodes = document.querySelectorAll('.mui-fixed');
for (var i = 0; i < fixedNodes.length; i += 1) {
var paddingRight = getPaddingRight(fixedNodes[i]);
prevPaddings.push(paddingRight);
fixedNodes[i].style.paddingRight = paddingRight + scrollbarSize + 'px';
}
}
container.style.overflow = 'hidden';
}
return modalIdx;
}
function remove(modal) {
var modalIdx = modals.indexOf(modal);
if (modalIdx === -1) {
return modalIdx;
}
modals.splice(modalIdx, 1);
if (modals.length === 0) {
container.style.overflow = prevOverflow;
container.style.paddingRight = prevPaddings[0];
var fixedNodes = document.querySelectorAll('.mui-fixed');
for (var i = 0; i < fixedNodes.length; i += 1) {
fixedNodes[i].style.paddingRight = prevPaddings[i + 1] + 'px';
}
prevOverflow = undefined;
prevPaddings = [];
if (hideSiblingNodes) {
(0, _manageAriaHidden.showSiblings)(container, modal.mountNode);
}
} else if (hideSiblingNodes) {
// otherwise make sure the next top modal is visible to a SR
(0, _manageAriaHidden.ariaHidden)(false, modals[modals.length - 1].mountNode);
}
return modalIdx;
}
function isTopModal(modal) {
return !!modals.length && modals[modals.length - 1] === modal;
}
var modalManager = { add: add, remove: remove, isTopModal: isTopModal };
return modalManager;
}
exports.default = createModalManager;