/ *
* 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/
* /
( function ( jQuery ) {
jQuery . hotkeys = {
version : "0.8" ,
specialKeys : {
8 : "backspace" , 9 : "tab" , 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" ,
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" , 191 : "/" , 224 : "meta"
} ,
shiftNums : {
"`" : "~" , "1" : "!" , "2" : "@" , "3" : "#" , "4" : "$" , "5" : "%" , "6" : "^" , "7" : "&" ,
"8" : "*" , "9" : "(" , "0" : ")" , "-" : "_" , "=" : "+" , ";" : ": " , "'" : "\"" , "," : "<" ,
"." : ">" , "/" : "?" , "\\" : "|"
}
} ;
function keyHandler ( handleObj ) {
// Only care when a possible input has been specified
if ( typeof handleObj . data !== "string" ) {
return ;
}
var origHandler = handleObj . handler ,
keys = handleObj . data . 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 ) ||
event . target . type === "text" || event . target . type === "password" ) ) {
return ;
}
// Keypress represents characters, not special keys
var special = event . type !== "keypress" && jQuery . hotkeys . specialKeys [ event . which ] ,
character = String . fromCharCode ( event . which ) . toLowerCase ( ) ,
key , modif = "" , possible = { } ;
// check combinations (alt|ctrl|shift+anything)
if ( event . altKey && special !== "alt" ) {
modif += "alt+" ;
}
if ( event . ctrlKey && special !== "ctrl" ) {
modif += "ctrl+" ;
}
// TODO: Need to make sure this works consistently across platforms
if ( event . metaKey && ! event . ctrlKey && special !== "meta" ) {
modif += "meta+" ;
}
if ( event . shiftKey && special !== "shift" ) {
modif += "shift+" ;
}
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 ) ;