in static/shared/outline/tree.ts [386:467]
private handleKeydown(event: KeyboardEvent) {
if (event.altKey || event.ctrlKey || event.metaKey) {
return;
}
let captured = false;
switch (event.key) {
case ' ':
case 'Enter':
if (this.isExpandable) {
if (this.isExpanded() && this.isSelected()) {
this.tree.collapseTreeitem(this);
} else {
this.tree.expandTreeitem(this);
}
captured = true;
} else {
event.stopPropagation();
}
this.tree.setSelected(this);
break;
case 'ArrowUp':
this.tree.setFocusToPreviousItem(this);
captured = true;
break;
case 'ArrowDown':
this.tree.setFocusToNextItem(this);
captured = true;
break;
case 'ArrowRight':
if (this.isExpandable) {
if (this.isExpanded()) {
this.tree.setFocusToNextItem(this);
} else {
this.tree.expandTreeitem(this);
}
}
captured = true;
break;
case 'ArrowLeft':
if (this.isExpandable && this.isExpanded()) {
this.tree.collapseTreeitem(this);
captured = true;
} else {
if (this.isInGroup) {
this.tree.setFocusToParentItem(this);
captured = true;
}
}
break;
case 'Home':
this.tree.setFocusToFirstItem();
captured = true;
break;
case 'End':
this.tree.setFocusToLastItem();
captured = true;
break;
default:
if (event.key.length === 1 && event.key.match(/\S/)) {
if (event.key == '*') {
this.tree.expandAllSiblingItems(this);
} else {
this.tree.setFocusByFirstCharacter(this, event.key);
}
captured = true;
}
break;
}
if (captured) {
event.stopPropagation();
event.preventDefault();
}
}