function handleKeyDown()

in src/views/htmlcontent/src/js/slick.dragrowselector.ts [152:243]


        function handleKeyDown(e): void {
            let activeCell = _grid.getActiveCell();

            if (activeCell) {
                // navigation keys
                if (isNavigationKey(e)) {
                    e.stopImmediatePropagation();
                    if (e.ctrlKey || e.metaKey) {
                        let event = new CustomEvent('gridnav', {
                            detail: {
                                which: e.which,
                                ctrlKey: e.ctrlKey,
                                metaKey: e.metaKey,
                                shiftKey: e.shiftKey,
                                altKey: e.altKey
                            }
                        });
                        window.dispatchEvent(event);
                        return;
                    }
                    // end key
                    if (e.which === $.ui.keyCode.END) {
                        navigateRight(e, activeCell);
                    }
                    // home key
                    if (e.which === $.ui.keyCode.HOME) {
                        navigateLeft(e, activeCell);
                    }
                    // left arrow
                    if (e.which === $.ui.keyCode.LEFT) {
                        // column resize
                        if ((e.ctrlKey || e.metaKey) && e.shiftKey) {
                            let allColumns = JSON.parse(JSON.stringify(_grid.getColumns()));
                            allColumns[activeCell.cell - 1].width = allColumns[activeCell.cell - 1].width - keyColResizeIncr;
                            _grid.setColumns(allColumns);
                        } else {
                            navigateLeft(e, activeCell);
                        }
                    // up arrow
                    } else if (e.which === $.ui.keyCode.UP && activeCell.row > 0) {
                        if (e.shiftKey) {
                            let last = _ranges.pop();

                            // If we are on the bottommost edge of the range and we navigate up,
                            // we want to deselect the bottommost row
                            let newRangeRow = activeCell.row - 1;
                            if (last.fromRow <= newRangeRow) { last.toRow -= 1; }

                            let fromRow = Math.min(activeCell.row - 1, last.fromRow);
                            let fromCell = Math.min(activeCell.cell - 1, last.fromCell);
                            let toRow = Math.max(newRangeRow, last.toRow);
                            let toCell = Math.max(activeCell.cell - 1, last.toCell);
                            _ranges = [new Slick.Range(fromRow, fromCell, toRow, toCell)];
                        } else {
                            _ranges = [new Slick.Range(activeCell.row - 1, activeCell.cell - 1, activeCell.row - 1, activeCell.cell - 1)];
                        }
                        _grid.setActiveCell(activeCell.row - 1, activeCell.cell);
                        setSelectedRanges(_ranges);
                    // right arrow
                    } else if (e.which === $.ui.keyCode.RIGHT) {
                        // column resize
                        if ((e.ctrlKey || e.metaKey) && e.shiftKey) {
                            let allColumns = JSON.parse(JSON.stringify(_grid.getColumns()));
                            allColumns[activeCell.cell - 1].width = allColumns[activeCell.cell - 1].width + keyColResizeIncr;
                            _grid.setColumns(allColumns);
                        } else {
                            navigateRight(e, activeCell);
                        }
                    // down arrow
                    } else if (e.which === $.ui.keyCode.DOWN && activeCell.row < _grid.getDataLength() - 1) {
                        if (e.shiftKey) {
                            let last = _ranges.pop();

                            // If we are on the topmost edge of the range and we navigate down,
                            // we want to deselect the topmost row
                            let newRangeRow: number = activeCell.row + 1;
                            if (newRangeRow <= last.toRow) { last.fromRow += 1; }

                            let fromRow = Math.min(activeCell.row + 1, last.fromRow);
                            let fromCell = Math.min(activeCell.cell - 1, last.fromCell);
                            let toRow = Math.max(activeCell.row + 1, last.toRow);
                            let toCell = Math.max(activeCell.cell - 1, last.toCell);
                            _ranges = [new Slick.Range(fromRow, fromCell, toRow, toCell)];
                        } else {
                        _ranges = [new Slick.Range(activeCell.row + 1, activeCell.cell - 1, activeCell.row + 1, activeCell.cell - 1)];
                        }
                        _grid.setActiveCell(activeCell.row + 1, activeCell.cell);
                        setSelectedRanges(_ranges);
                    }
                }
            }
        }