This commit is contained in:
93
node_modules/react-modal/lib/helpers/bodyTrap.js
generated
vendored
Normal file
93
node_modules/react-modal/lib/helpers/bodyTrap.js
generated
vendored
Normal file
@@ -0,0 +1,93 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.resetState = resetState;
|
||||
exports.log = log;
|
||||
|
||||
var _portalOpenInstances = require("./portalOpenInstances");
|
||||
|
||||
var _portalOpenInstances2 = _interopRequireDefault(_portalOpenInstances);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
// Body focus trap see Issue #742
|
||||
|
||||
var before = void 0,
|
||||
after = void 0,
|
||||
instances = [];
|
||||
|
||||
/* eslint-disable no-console */
|
||||
/* istanbul ignore next */
|
||||
function resetState() {
|
||||
var _arr = [before, after];
|
||||
|
||||
for (var _i = 0; _i < _arr.length; _i++) {
|
||||
var item = _arr[_i];
|
||||
if (!item) continue;
|
||||
item.parentNode && item.parentNode.removeChild(item);
|
||||
}
|
||||
before = after = null;
|
||||
instances = [];
|
||||
}
|
||||
|
||||
/* istanbul ignore next */
|
||||
function log() {
|
||||
console.log("bodyTrap ----------");
|
||||
console.log(instances.length);
|
||||
var _arr2 = [before, after];
|
||||
for (var _i2 = 0; _i2 < _arr2.length; _i2++) {
|
||||
var item = _arr2[_i2];
|
||||
var check = item || {};
|
||||
console.log(check.nodeName, check.className, check.id);
|
||||
}
|
||||
console.log("edn bodyTrap ----------");
|
||||
}
|
||||
/* eslint-enable no-console */
|
||||
|
||||
function focusContent() {
|
||||
if (instances.length === 0) {
|
||||
if (process.env.NODE_ENV !== "production") {
|
||||
// eslint-disable-next-line no-console
|
||||
console.warn("React-Modal: Open instances > 0 expected");
|
||||
}
|
||||
return;
|
||||
}
|
||||
instances[instances.length - 1].focusContent();
|
||||
}
|
||||
|
||||
function bodyTrap(eventType, openInstances) {
|
||||
if (!before && !after) {
|
||||
before = document.createElement("div");
|
||||
before.setAttribute("data-react-modal-body-trap", "");
|
||||
before.style.position = "absolute";
|
||||
before.style.opacity = "0";
|
||||
before.setAttribute("tabindex", "0");
|
||||
before.addEventListener("focus", focusContent);
|
||||
after = before.cloneNode();
|
||||
after.addEventListener("focus", focusContent);
|
||||
}
|
||||
|
||||
instances = openInstances;
|
||||
|
||||
if (instances.length > 0) {
|
||||
// Add focus trap
|
||||
if (document.body.firstChild !== before) {
|
||||
document.body.insertBefore(before, document.body.firstChild);
|
||||
}
|
||||
if (document.body.lastChild !== after) {
|
||||
document.body.appendChild(after);
|
||||
}
|
||||
} else {
|
||||
// Remove focus trap
|
||||
if (before.parentElement) {
|
||||
before.parentElement.removeChild(before);
|
||||
}
|
||||
if (after.parentElement) {
|
||||
after.parentElement.removeChild(after);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_portalOpenInstances2.default.subscribe(bodyTrap);
|
||||
Reference in New Issue
Block a user