UNPKG

smart-table-keyboard

Version:

provide keyboard navigation to widget implementing the grid pattern

28 lines (25 loc) 793 B
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; } }); }