| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 | /*jslint browser: true*//*jslint jquery: true*//* * jQuery Hotkeys Plugin * Copyright 2010, John Resig * Dual licensed under the MIT or GPL Version 2 licenses. * * Based upon the plugin by Tzury Bar Yochay: * http://github.com/tzuryby/hotkeys * * Original idea by: * Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/ *//* * One small change is: now keys are passed by object { keys: '...' } * Might be useful, when you want to pass some other data to your handler */(function(jQuery) {  jQuery.hotkeys = {    version: "0.8",    specialKeys: {      8: "backspace",      9: "tab",      10: "return",      13: "return",      16: "shift",      17: "ctrl",      18: "alt",      19: "pause",      20: "capslock",      27: "esc",      32: "space",      33: "pageup",      34: "pagedown",      35: "end",      36: "home",      37: "left",      38: "up",      39: "right",      40: "down",      45: "insert",      46: "del",      59: ";",      61: "=",      96: "0",      97: "1",      98: "2",      99: "3",      100: "4",      101: "5",      102: "6",      103: "7",      104: "8",      105: "9",      106: "*",      107: "+",      109: "-",      110: ".",      111: "/",      112: "f1",      113: "f2",      114: "f3",      115: "f4",      116: "f5",      117: "f6",      118: "f7",      119: "f8",      120: "f9",      121: "f10",      122: "f11",      123: "f12",      144: "numlock",      145: "scroll",      173: "-",      186: ";",      187: "=",      188: ",",      189: "-",      190: ".",      191: "/",      192: "`",      219: "[",      220: "\\",      221: "]",      222: "'"    },    shiftNums: {      "`": "~",      "1": "!",      "2": "@",      "3": "#",      "4": "$",      "5": "%",      "6": "^",      "7": "&",      "8": "*",      "9": "(",      "0": ")",      "-": "_",      "=": "+",      ";": ": ",      "'": "\"",      ",": "<",      ".": ">",      "/": "?",      "\\": "|"    },    // excludes: button, checkbox, file, hidden, image, password, radio, reset, search, submit, url    textAcceptingInputTypes: [      "text", "password", "number", "email", "url", "range", "date", "month", "week", "time", "datetime",      "datetime-local", "search", "color", "tel"],    options: {      filterTextInputs: true    }  };  function keyHandler(handleObj) {    if (typeof handleObj.data === "string") {      handleObj.data = {        keys: handleObj.data      };    }    // Only care when a possible input has been specified    if (!handleObj.data || !handleObj.data.keys || typeof handleObj.data.keys !== "string") {      return;    }    var origHandler = handleObj.handler,      keys = handleObj.data.keys.toLowerCase().split(" ");    handleObj.handler = function(event) {      //      Don't fire in text-accepting inputs that we didn't directly bind to      if (this !== event.target && (/textarea|select/i.test(event.target.nodeName) ||          (jQuery.hotkeys.options.filterTextInputs &&            jQuery.inArray(event.target.type, jQuery.hotkeys.textAcceptingInputTypes) > -1))) {        return;      }      var special = event.type !== "keypress" && jQuery.hotkeys.specialKeys[event.which],        character = String.fromCharCode(event.which).toLowerCase(),        modif = "",        possible = {};      jQuery.each(["alt", "ctrl", "shift"], function(index, specialKey) {        if (event[specialKey + 'Key'] && special !== specialKey) {          modif += specialKey + '+';        }      });      // metaKey is triggered off ctrlKey erronously      if (event.metaKey && !event.ctrlKey && special !== "meta") {        modif += "meta+";      }      if (event.metaKey && special !== "meta" && modif.indexOf("alt+ctrl+shift+") > -1) {        modif = modif.replace("alt+ctrl+shift+", "hyper+");      }      if (special) {        possible[modif + special] = true;      }      else {        possible[modif + character] = true;        possible[modif + jQuery.hotkeys.shiftNums[character]] = true;        // "$" can be triggered as "Shift+4" or "Shift+$" or just "$"        if (modif === "shift+") {          possible[jQuery.hotkeys.shiftNums[character]] = true;        }      }      for (var i = 0, l = keys.length; i < l; i++) {        if (possible[keys[i]]) {          return origHandler.apply(this, arguments);        }      }    };  }  jQuery.each(["keydown", "keyup", "keypress"], function() {    jQuery.event.special[this] = {      add: keyHandler    };  });})(jQuery || this.jQuery || window.jQuery);
 |