| var getDefaultParent = function (originalTarget) { |
| if (typeof document === 'undefined') { |
| return null; |
| } |
| var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget; |
| return sampleTarget.ownerDocument.body; |
| }; |
| var counterMap = new WeakMap(); |
| var uncontrolledNodes = new WeakMap(); |
| var markerMap = {}; |
| var lockCount = 0; |
| var unwrapHost = function (node) { |
| return node && (node.host || unwrapHost(node.parentNode)); |
| }; |
| var correctTargets = function (parent, targets) { |
| return targets |
| .map(function (target) { |
| if (parent.contains(target)) { |
| return target; |
| } |
| var correctedTarget = unwrapHost(target); |
| if (correctedTarget && parent.contains(correctedTarget)) { |
| return correctedTarget; |
| } |
| console.error('aria-hidden', target, 'in not contained inside', parent, '. Doing nothing'); |
| return null; |
| }) |
| .filter(function (x) { return Boolean(x); }); |
| }; |
| |
| |
| |
| |
| |
| |
| |
| |
| var applyAttributeToOthers = function (originalTarget, parentNode, markerName, controlAttribute) { |
| var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]); |
| if (!markerMap[markerName]) { |
| markerMap[markerName] = new WeakMap(); |
| } |
| var markerCounter = markerMap[markerName]; |
| var hiddenNodes = []; |
| var elementsToKeep = new Set(); |
| var elementsToStop = new Set(targets); |
| var keep = function (el) { |
| if (!el || elementsToKeep.has(el)) { |
| return; |
| } |
| elementsToKeep.add(el); |
| keep(el.parentNode); |
| }; |
| targets.forEach(keep); |
| var deep = function (parent) { |
| if (!parent || elementsToStop.has(parent)) { |
| return; |
| } |
| Array.prototype.forEach.call(parent.children, function (node) { |
| if (elementsToKeep.has(node)) { |
| deep(node); |
| } |
| else { |
| try { |
| var attr = node.getAttribute(controlAttribute); |
| var alreadyHidden = attr !== null && attr !== 'false'; |
| var counterValue = (counterMap.get(node) || 0) + 1; |
| var markerValue = (markerCounter.get(node) || 0) + 1; |
| counterMap.set(node, counterValue); |
| markerCounter.set(node, markerValue); |
| hiddenNodes.push(node); |
| if (counterValue === 1 && alreadyHidden) { |
| uncontrolledNodes.set(node, true); |
| } |
| if (markerValue === 1) { |
| node.setAttribute(markerName, 'true'); |
| } |
| if (!alreadyHidden) { |
| node.setAttribute(controlAttribute, 'true'); |
| } |
| } |
| catch (e) { |
| console.error('aria-hidden: cannot operate on ', node, e); |
| } |
| } |
| }); |
| }; |
| deep(parentNode); |
| elementsToKeep.clear(); |
| lockCount++; |
| return function () { |
| hiddenNodes.forEach(function (node) { |
| var counterValue = counterMap.get(node) - 1; |
| var markerValue = markerCounter.get(node) - 1; |
| counterMap.set(node, counterValue); |
| markerCounter.set(node, markerValue); |
| if (!counterValue) { |
| if (!uncontrolledNodes.has(node)) { |
| node.removeAttribute(controlAttribute); |
| } |
| uncontrolledNodes.delete(node); |
| } |
| if (!markerValue) { |
| node.removeAttribute(markerName); |
| } |
| }); |
| lockCount--; |
| if (!lockCount) { |
| |
| counterMap = new WeakMap(); |
| counterMap = new WeakMap(); |
| uncontrolledNodes = new WeakMap(); |
| markerMap = {}; |
| } |
| }; |
| }; |
| |
| |
| |
| |
| |
| |
| |
| export var hideOthers = function (originalTarget, parentNode, markerName) { |
| if (markerName === void 0) { markerName = 'data-aria-hidden'; } |
| var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]); |
| var activeParentNode = parentNode || getDefaultParent(originalTarget); |
| if (!activeParentNode) { |
| return function () { return null; }; |
| } |
| |
| targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll('[aria-live]'))); |
| return applyAttributeToOthers(targets, activeParentNode, markerName, 'aria-hidden'); |
| }; |
| |
| |
| |
| |
| |
| |
| |
| export var inertOthers = function (originalTarget, parentNode, markerName) { |
| if (markerName === void 0) { markerName = 'data-inert-ed'; } |
| var activeParentNode = parentNode || getDefaultParent(originalTarget); |
| if (!activeParentNode) { |
| return function () { return null; }; |
| } |
| return applyAttributeToOthers(originalTarget, activeParentNode, markerName, 'inert'); |
| }; |
| |
| |
| |
| export var supportsInert = function () { |
| return typeof HTMLElement !== 'undefined' && HTMLElement.prototype.hasOwnProperty('inert'); |
| }; |
| |
| |
| |
| |
| |
| |
| |
| export var suppressOthers = function (originalTarget, parentNode, markerName) { |
| if (markerName === void 0) { markerName = 'data-suppressed'; } |
| return (supportsInert() ? inertOthers : hideOthers)(originalTarget, parentNode, markerName); |
| }; |
|
|