1
0
Fork 0
mirror of https://github.com/maybe-finance/maybe.git synced 2025-07-19 21:29:38 +02:00
Maybe/app/javascript/controllers/list_keyboard_navigation_controller.js
oxdev03 4ad28d6eff
Add BiomeJS for Linting and Formatting JavaScript relates to #1295 (#1299)
* chore: add formatting and linting for javascript code relates to #1295

* use spaces instaed

* add to recommended extensions

* only enforce lint

* auto save
2024-10-14 17:09:27 -04:00

40 lines
1.1 KiB
JavaScript

import { Controller } from "@hotwired/stimulus";
// Connects to data-controller="list-keyboard-navigation"
export default class extends Controller {
focusPrevious() {
this.focusLinkTargetInDirection(-1);
}
focusNext() {
this.focusLinkTargetInDirection(1);
}
focusLinkTargetInDirection(direction) {
const element = this.getLinkTargetInDirection(direction);
element?.focus();
}
getLinkTargetInDirection(direction) {
const indexOfLastFocus = this.indexOfLastFocus();
let nextIndex = (indexOfLastFocus + direction) % this.focusableLinks.length;
if (nextIndex < 0) nextIndex = this.focusableLinks.length - 1;
return this.focusableLinks[nextIndex];
}
indexOfLastFocus(targets = this.focusableLinks) {
const indexOfActiveElement = targets.indexOf(document.activeElement);
if (indexOfActiveElement !== -1) {
return indexOfActiveElement;
}
return targets.findIndex(
(target) => target.getAttribute("tabindex") === "0",
);
}
get focusableLinks() {
return Array.from(this.element.querySelectorAll("a[href]"));
}
}