use modulus in loop

This commit is contained in:
Min Idzelis 2025-04-28 12:50:51 +00:00
parent 6e06f9f5aa
commit bbc0ed6824

View File

@ -26,35 +26,14 @@ export const focusNext = (selector: (element: HTMLElement | SVGElement) => boole
focusElements[0].focus(); focusElements[0].focus();
return; return;
} }
if (forwardDirection) { const totalElements = focusElements.length;
let i = index + 1; let i = index;
while (i !== index) { do {
i = (i + (forwardDirection ? 1 : -1) + totalElements) % totalElements;
const next = focusElements[i]; const next = focusElements[i];
if (!isTabbable(next) || !selector(next)) { if (isTabbable(next) && selector(next)) {
if (i === focusElements.length - 1) {
i = 0;
} else {
i++;
}
continue;
}
next.focus(); next.focus();
break; break;
} }
} else { } while (i !== index);
let i = index - 1;
while (i !== index && i >= 0) {
const next = focusElements[i];
if (!isTabbable(next) || !selector(next)) {
if (i === 0) {
i = focusElements.length - 1;
} else {
i--;
}
continue;
}
next.focus();
break;
}
}
}; };