ショートカットキー

by yshrkn

HTML

<!--
keycodeとpressesCtrl, pressesAltの値に応じて、適切な文字列を出力する関数を作成してください。
条件は、下をご覧ください。例えば、
Ctrl + C : コピー ならば、pressesCtrlがtrue、pressesAltがfalse、keycodeが'c'の場合に'コピー'と出力します。

条件
Ctrl + C : コピー
Ctrl + X : 切り取り
Ctrl + V : 貼り付け
Ctrl + Z : 元に戻す
Alt + D : アドレスバーにフォーカス
Alt + ← :	前に戻る
Alt + → :	次に進む
Alt + ↑ :	上の階層へ
-->

JavaScript

var keycode = ''; // 押されたキー
var pressesCtrl = false; // Ctrlキーが押されているかの真偽値
var pressesAlt = false; // Altキーが押されているかの真偽値

function handleShortcuts(keycode, pressesCtrl, pressesAlt) {
	
	var msg = "存在しないショートカット";
  // shortcutsMap内のキーコードと比較するため大文字へ
  var _keycode = keycode.toUpperCase();
  
	var shortcutsMap = {
    "コピー": ["C", true, false],
    "切り取り": ["X", true, false],
    "貼り付け": ["V", true, false],
    "元に戻す": ["Z", true, false],
    "アドレスバーにフォーカス": ["D", false, true],
    "前に戻る": ["←", false, true],
    "次に進む": ["→", false, true],
    "上の階層へ": ["↑", false, true]
  };

  for (var key in shortcutsMap) {
    var isExistingShortcut = _keycode === shortcutsMap[key][0] &&
                             shortcutsMap[key][1] === pressesCtrl &&
                             shortcutsMap[key][2] === pressesAlt
                             ? true : false;

    if (isExistingShortcut) {
      return key;
    }
  }
  return msg;
}

keycode = 'z';
pressesCtrl = true;
pressesAlt = false;
console.log(handleShortcuts(keycode, pressesCtrl, pressesAlt));
// 元に戻す

keycode = '↑';
pressesCtrl = false;
pressesAlt = true;
console.log(handleShortcuts(keycode, pressesCtrl, pressesAlt));
// 上の階層へ