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);
					}
				}
			}
		}