web-ui-pack
Version:
Web package with UI elements
45 lines (44 loc) • 1.3 kB
JavaScript
let last = null;
const focusFirst = (function focusFirstFn(element, options) {
if (last === element) {
return false;
}
last = element;
if (element instanceof HTMLElement) {
const prev = document.activeElement;
const tryFocus = (el) => {
if (prev === el) {
return true;
}
el.focus();
return document.activeElement !== prev;
};
if (tryFocus(element)) {
last = null;
return true;
}
last = null;
const items = element.querySelectorAll(focusFirst.$selector);
if (options?.isFocusLast) {
for (let i = items.length - 1, item = items[i]; i > -1; item = items[--i]) {
if (tryFocus(item)) {
return true;
}
}
}
else {
for (let i = 0, item = items[0]; i < items.length; item = items[++i]) {
if (tryFocus(item)) {
return true;
}
}
}
}
else if (element.focus) {
element.focus();
return true;
}
return false;
});
focusFirst.$selector = "button,input,textarea,[href],select,[tabindex],[contentEditable=true]";
export default focusFirst;