2 * jQuery Hotkeys Plugin
3 * Copyright 2010, John Resig
4 * Dual licensed under the MIT or GPL Version 2 licenses.
6 * Based upon the plugin by Tzury Bar Yochay:
7 * http://github.com/tzuryby/hotkeys
10 * Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/
19 8: "backspace", 9: "tab", 13: "return", 16: "shift", 17: "ctrl", 18: "alt", 19: "pause",
20 20: "capslock", 27: "esc", 32: "space", 33: "pageup", 34: "pagedown", 35: "end", 36: "home",
21 37: "left", 38: "up", 39: "right", 40: "down", 45: "insert", 46: "del",
22 96: "0", 97: "1", 98: "2", 99: "3", 100: "4", 101: "5", 102: "6", 103: "7",
23 104: "8", 105: "9", 106: "*", 107: "+", 109: "-", 110: ".", 111 : "/",
24 112: "f1", 113: "f2", 114: "f3", 115: "f4", 116: "f5", 117: "f6", 118: "f7", 119: "f8",
25 120: "f9", 121: "f10", 122: "f11", 123: "f12", 144: "numlock", 145: "scroll", 191: "/", 224: "meta"
29 "`": "~", "1": "!", "2": "@", "3": "#", "4": "$", "5": "%", "6": "^", "7": "&",
30 "8": "*", "9": "(", "0": ")", "-": "_", "=": "+", ";": ": ", "'": "\"", ",": "<",
31 ".": ">", "/": "?", "\\": "|"
35 function keyHandler( handleObj
) {
36 // Only care when a possible input has been specified
37 if ( typeof handleObj
.data
!== "string" ) {
41 var origHandler
= handleObj
.handler
,
42 keys
= handleObj
.data
.toLowerCase().split(" ");
44 handleObj
.handler = function( event
) {
45 // Don't fire in text-accepting inputs that we didn't directly bind to
46 if ( this !== event
.target
&& (/textarea|select/i.test( event
.target
.nodeName
) ||
47 event
.target
.type
=== "text") ) {
51 // Keypress represents characters, not special keys
52 var special
= event
.type
!== "keypress" && jQuery
.hotkeys
.specialKeys
[ event
.which
],
53 character
= String
.fromCharCode( event
.which
).toLowerCase(),
54 key
, modif
= "", possible
= {};
56 // check combinations (alt|ctrl|shift+anything)
57 if ( event
.altKey
&& special
!== "alt" ) {
61 if ( event
.ctrlKey
&& special
!== "ctrl" ) {
65 // TODO: Need to make sure this works consistently across platforms
66 if ( event
.metaKey
&& !event
.ctrlKey
&& special
!== "meta" ) {
70 if ( event
.shiftKey
&& special
!== "shift" ) {
75 possible
[ modif
+ special
] = true;
78 possible
[ modif
+ character
] = true;
79 possible
[ modif
+ jQuery
.hotkeys
.shiftNums
[ character
] ] = true;
81 // "$" can be triggered as "Shift+4" or "Shift+$" or just "$"
82 if ( modif
=== "shift+" ) {
83 possible
[ jQuery
.hotkeys
.shiftNums
[ character
] ] = true;
87 for ( var i
= 0, l
= keys
.length
; i
< l
; i
++ ) {
88 if ( possible
[ keys
[i
] ] ) {
89 return origHandler
.apply( this, arguments
);
95 jQuery
.each([ "keydown", "keyup", "keypress" ], function() {
96 jQuery
.event
.special
[ this ] = { add
: keyHandler
};