UNPKG

web-ui-pack

Version:
45 lines (44 loc) 1.3 kB
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;