2025-05-28 15:36:51 -07:00

93 lines
2.4 KiB
JavaScript

"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);