30 lines
905 B
JavaScript
30 lines
905 B
JavaScript
import { getFocusMerge } from './focusMerge';
|
|
export var focusOn = function (target) {
|
|
target.focus();
|
|
if ('contentWindow' in target && target.contentWindow) {
|
|
target.contentWindow.focus();
|
|
}
|
|
};
|
|
var guardCount = 0;
|
|
var lockDisabled = false;
|
|
export var setFocus = function (topNode, lastNode) {
|
|
var focusable = getFocusMerge(topNode, lastNode);
|
|
if (lockDisabled) {
|
|
return;
|
|
}
|
|
if (focusable) {
|
|
if (guardCount > 2) {
|
|
console.error('FocusLock: focus-fighting detected. Only one focus management system could be active. ' +
|
|
'See https://github.com/theKashey/focus-lock/#focus-fighting');
|
|
lockDisabled = true;
|
|
setTimeout(function () {
|
|
lockDisabled = false;
|
|
}, 1);
|
|
return;
|
|
}
|
|
guardCount++;
|
|
focusOn(focusable.node);
|
|
guardCount--;
|
|
}
|
|
};
|