smart-table-keyboard
Version:
provide keyboard navigation to widget implementing the grid pattern
28 lines (25 loc) • 793 B
JavaScript
import {keyGrid} from './lib/keygrid';
export default function (grid, {rowSelector = 'tr', cellSelector = 'td,th'}={}) {
let lastFocus = null;
const kg = keyGrid(grid, {rowSelector, cellSelector});
grid.addEventListener('keydown', ({target, keyCode}) => {
let newCell = null;
if (keyCode === 37) {
newCell = kg.moveLeft(target);
} else if (keyCode === 38) {
newCell = kg.moveUp(target);
} else if (keyCode === 39) {
newCell = kg.moveRight(target);
} else if (keyCode === 40) {
newCell = kg.moveDown(target);
}
if (newCell !== null) {
newCell.focus();
if (lastFocus !== null) {
lastFocus.setAttribute('tabindex', '-1');
}
newCell.setAttribute('tabindex', '0');
lastFocus = newCell;
}
});
}