FontMenuItem.prototype.handleKeydown = function()

in src/studies/apg/toolbar/js/FontMenuItem.js [66:147]


FontMenuItem.prototype.handleKeydown = function (event) {
  var tgt = event.currentTarget,
    flag = false,
    char = event.key,
    clickEvent;

  function isPrintableCharacter (str) {
    return str.length === 1 && str.match(/\S/);
  }

  if (event.ctrlKey || event.altKey  || event.metaKey) {
    return;
  }

  if (event.shiftKey) {
    if (isPrintableCharacter(char)) {
      this.fontMenu.setFocusByFirstCharacter(this, char);
    }
  }
  else {

    switch (event.keyCode) {
      case this.keyCode.SPACE:
      case this.keyCode.ENTER:
        this.handleClick(event);
        flag = true;
        break;

      case this.keyCode.ESC:
        this.fontMenu.setFocusToController();
        this.fontMenu.close(true);
        flag = true;
        break;

      case this.keyCode.UP:
        this.fontMenu.setFocusToPreviousItem(this);
        flag = true;
        break;

      case this.keyCode.DOWN:
        this.fontMenu.setFocusToNextItem(this);
        flag = true;
        break;

      case this.keyCode.RIGHT:
        flag = true;
        break;

      case this.keyCode.LEFT:
        flag = true;
        break;

      case this.keyCode.HOME:
      case this.keyCode.PAGEUP:
        this.fontMenu.setFocusToFirstItem();
        flag = true;
        break;

      case this.keyCode.END:
      case this.keyCode.PAGEDOWN:
        this.fontMenu.setFocusToLastItem();
        flag = true;
        break;

      case this.keyCode.TAB:
        this.fontMenu.setFocusToController();
        this.fontMenu.close(true);
        break;

      default:
        if (isPrintableCharacter(char)) {
          this.fontMenu.setFocusByFirstCharacter(this, char);
        }
        break;
    }
  }

  if (flag) {
    event.stopPropagation();
    event.preventDefault();
  }
};