Your IP : 18.219.40.177


Current Path : /usr/local/mgr5/skins/orion/src/
Upload File :
Current File : //usr/local/mgr5/skins/orion/src/App.HotKeys.js

//hotkey module
App.HotKeys = function(window, $, EventMgr) {
  'use strict';
  var init = function() {
      EventMgr.obind($(document), 'keydown', hotKeyHandler);
      EventMgr.obind($(document), 'keyup', removeKeyUp);
      EventMgr.obind($(window), 'focus', removeAllKeys);
    },

    hotkeys = {},

    len = 0,

    ZERO = 0,
    ESC_KEY = 27,
    CTRL_KEY = 17,
    SHIFT_KEY = 16,
    ENTER_KEY = 13,
    SPACE = 32,
    UP = 38,
    DOWN = 40,
    LEFT = 37,
    RIGHT = 39,
    M = 77,
    A = 65,
    F = 70,
    X = 88,
    Y = 89,
    Z = 90,
    B = 66,
    C = 67,
    V = 86,
    N = 78,
    S = 83,
    D = 68,
    G = 71,
    H = 72,
    J = 74,
    K = 75,
    L = 76,
    Q = 81,
    W = 87,
    E = 69,
    R = 82,
    T = 84,
    U = 85,
    I = 73,
    O = 79,
    P = 80,

    keyDic = {
      77: 'M',
      65: 'A',
      70: 'F',
      88: 'X',
      89: 'Y',
      90: 'Z',
      66: 'B',
      67: 'C',
      86: 'V',
      78: 'N',
      83: 'S',
      68: 'D',
      71: 'G',
      72: 'H',
      74: 'J',
      75: 'K',
      76: 'L',
      81: 'Q',
      87: 'W',
      69: 'E',
      82: 'R',
      84: 'T',
      85: 'U',
      73: 'I',
      79: 'O',
      80: 'P'
    },

    keys = {},

    hotKeyHandler = function (e) {
      e = e || window.event;
      var codeKey = e.which || e.keyCode;
      keys[codeKey] = true;
      len ++;
      if (e.ctrlKey) {
        keys[CTRL_KEY] = true;
      }

      if (e.shiftKey) {
        keys[SHIFT_KEY] = true;
      }
      //esc
      if (codeKey === ESC_KEY) {
        EventMgr.trigger('escKeyUp', { e: e });
        e.preventDefault();
        //enter
      } else if (codeKey === ENTER_KEY) {
        EventMgr.trigger('enterKeyUp', { e: e });
        //CTRL + SHIFT + M
      } else if ((keys[CTRL_KEY]) && (keys[SHIFT_KEY]) && keys[M]) {
        EventMgr.trigger('comboCtrlShiftMKeyUp', { codeKey: codeKey });
        e.preventDefault();
        //CTRL + SHIFT + A
      } else if ((keys[CTRL_KEY]) && (keys[SHIFT_KEY]) && keys[A]) {
        EventMgr.trigger('comboCtrlShiftAKeyUp', { codeKey: codeKey });
        e.preventDefault();
        //CTRL + SHIFT + F
      } else if ((keys[CTRL_KEY]) && (keys[SHIFT_KEY]) && keys[F]) {
        EventMgr.trigger('comboCtrlShiftFKeyUp', { codeKey: codeKey });
        e.preventDefault();
        //CTRL + SHIFT + Z
      } else if ((keys[CTRL_KEY]) && (keys[SHIFT_KEY]) && keys[Z]) {
        EventMgr.trigger('comboCtrlShiftZKeyUp', { codeKey: codeKey });
        e.preventDefault();
        //CTRL + SHIFT + X
      } else if ((keys[CTRL_KEY]) && (keys[SHIFT_KEY]) && keys[X]) {
        EventMgr.trigger('comboCtrlShiftXKeyUp', { codeKey: codeKey });
        e.preventDefault();
        //SPACE
      } else if (keys[SPACE]) {
        EventMgr.trigger('spaceKeyUp');
        window.scrollTo(0, 0);
      } else if (keys[UP]) {
        EventMgr.trigger('upKeyUp', { codeKey: codeKey, shiftKey: keys[SHIFT_KEY], ctrl: keys[CTRL_KEY] });
      } else if (keys[DOWN]) {
        EventMgr.trigger('downKeyUp', { codeKey: codeKey, shiftKey: keys[SHIFT_KEY], ctrl: keys[CTRL_KEY] });
      } else if (keys[LEFT]) {
        EventMgr.trigger('leftKeyUp', { codeKey: codeKey, shift: keys[SHIFT_KEY], ctrl: keys[CTRL_KEY] });
      } else if (keys[RIGHT]) {
        EventMgr.trigger('rightKeyUp', { codeKey: codeKey, shift: keys[SHIFT_KEY], ctrl: keys[CTRL_KEY] });
      //check for hotkey in toolbtn
      } else {
        var key = null;
        if (keyDic[codeKey]) {
          key = keyDic[codeKey];
        } else {
          for (var keyVar in keys) {
            if (keyDic[keyVar]) {
              key = keyDic[keyVar];
              break;
            }
          }
        }
        EventMgr.trigger('otherKeyUp', { keys: $.extend({}, keys), key: key, len: len, shift: keys[SHIFT_KEY], ctrl: keys[CTRL_KEY] });
      }
      codeKey = null;
    },

    removeKeyUp = function(e) {
      var codeKey = e.which || e.keyCode;
      if (keys[ZERO]) {
        delete keys[ZERO];
        len --;
      }
      if (keys[codeKey]) {
        delete keys[codeKey];
        len --;
      }
      if (e.ctrlKey) {
        delete keys[CTRL_KEY];
        len --;
      }
    },

    removeAllKeys = function(e) {
      keys = {};
      len = 0;
    };

  return {
    init: init
  };
}(window, $, EventMgr);