14 lines
733 B
JavaScript
14 lines
733 B
JavaScript
import { getAllAffectedNodes } from './utils/all-affected';
|
|
import { toArray } from './utils/array';
|
|
var focusInFrame = function (frame) { return frame === document.activeElement; };
|
|
var focusInsideIframe = function (topNode) {
|
|
return Boolean(toArray(topNode.querySelectorAll('iframe')).some(function (node) { return focusInFrame(node); }));
|
|
};
|
|
export var focusInside = function (topNode) {
|
|
var activeElement = document && document.activeElement;
|
|
if (!activeElement || (activeElement.dataset && activeElement.dataset.focusGuard)) {
|
|
return false;
|
|
}
|
|
return getAllAffectedNodes(topNode).reduce(function (result, node) { return result || node.contains(activeElement) || focusInsideIframe(node); }, false);
|
|
};
|