in src/studies/apg/menu/menubar/js/PopupMenuItemLinks.js [59:162]
MenuItem.prototype.handleKeydown = function (event) {
var tgt = event.currentTarget,
char = event.key,
flag = false,
clickEvent;
function isPrintableCharacter (str) {
return str.length === 1 && str.match(/\S/);
}
switch (event.keyCode) {
case this.keyCode.SPACE:
case this.keyCode.RETURN:
if (this.popupMenu) {
this.popupMenu.open();
this.popupMenu.setFocusToFirstItem();
}
else {
// 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.menu.setFocusToPreviousItem(this);
flag = true;
break;
case this.keyCode.DOWN:
this.menu.setFocusToNextItem(this);
flag = true;
break;
case this.keyCode.LEFT:
this.menu.setFocusToController('previous', true);
this.menu.close(true);
flag = true;
break;
case this.keyCode.RIGHT:
if (this.popupMenu) {
this.popupMenu.open();
this.popupMenu.setFocusToFirstItem();
}
else {
this.menu.setFocusToController('next', true);
this.menu.close(true);
}
flag = true;
break;
case this.keyCode.HOME:
case this.keyCode.PAGEUP:
this.menu.setFocusToFirstItem();
flag = true;
break;
case this.keyCode.END:
case this.keyCode.PAGEDOWN:
this.menu.setFocusToLastItem();
flag = true;
break;
case this.keyCode.ESC:
this.menu.setFocusToController();
this.menu.close(true);
flag = true;
break;
case this.keyCode.TAB:
this.menu.setFocusToController();
break;
default:
if (isPrintableCharacter(char)) {
this.menu.setFocusByFirstCharacter(this, char);
flag = true;
}
break;
}
if (flag) {
event.stopPropagation();
event.preventDefault();
}
};