in src/studies/apg/treeview/treeview-1/js/treeitem.js [104:219]
Treeitem.prototype.handleKeydown = function (event) {
var tgt = event.currentTarget,
flag = false,
char = event.key,
clickEvent;
function isPrintableCharacter (str) {
return str.length === 1 && str.match(/\S/);
}
function printableCharacter (item) {
if (char == '*') {
item.tree.expandAllSiblingItems(item);
flag = true;
}
else {
if (isPrintableCharacter(char)) {
item.tree.setFocusByFirstCharacter(item, char);
flag = true;
}
}
}
if (event.altKey || event.ctrlKey || event.metaKey) {
return;
}
if (event.shift) {
if (isPrintableCharacter(char)) {
printableCharacter(this);
}
}
else {
switch (event.keyCode) {
case this.keyCode.SPACE:
case this.keyCode.RETURN:
// Create simulated mouse event to mimic the behavior of ATs
// and let the event handler handleClick do the housekeeping.
try {
clickEvent = new MouseEvent('click', {
'view': window,
'bubbles': true,
'cancelable': true
});
}
catch (err) {
if (document.createEvent) {
// DOM Level 3 for IE 9+
clickEvent = document.createEvent('MouseEvents');
clickEvent.initEvent('click', true, true);
}
}
tgt.dispatchEvent(clickEvent);
flag = true;
break;
case this.keyCode.UP:
this.tree.setFocusToPreviousItem(this);
flag = true;
break;
case this.keyCode.DOWN:
this.tree.setFocusToNextItem(this);
flag = true;
break;
case this.keyCode.RIGHT:
if (this.isExpandable) {
if (this.isExpanded()) {
this.tree.setFocusToNextItem(this);
}
else {
this.tree.expandTreeitem(this);
}
}
flag = true;
break;
case this.keyCode.LEFT:
if (this.isExpandable && this.isExpanded()) {
this.tree.collapseTreeitem(this);
flag = true;
}
else {
if (this.inGroup) {
this.tree.setFocusToParentItem(this);
flag = true;
}
}
break;
case this.keyCode.HOME:
this.tree.setFocusToFirstItem();
flag = true;
break;
case this.keyCode.END:
this.tree.setFocusToLastItem();
flag = true;
break;
default:
if (isPrintableCharacter(char)) {
printableCharacter(this);
}
break;
}
}
if (flag) {
event.stopPropagation();
event.preventDefault();
}
};