Created
May 30, 2013 12:26
-
-
Save ash37/5677477 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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", | |
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", 186: ";", 191: "/", | |
220: "\\", 222: "'", 224: "meta" | |
}, | |
shiftNums: { | |
"`": "~", "1": "!", "2": "@", "3": "#", "4": "$", "5": "%", "6": "^", "7": "&", | |
"8": "*", "9": "(", "0": ")", "-": "_", "=": "+", ";": ": ", "'": "\"", ",": "<", | |
".": ">", "/": "?", "\\": "|" | |
} | |
}; | |
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(" "), | |
textAcceptingInputTypes = ["text", "password", "number", "email", "url", "range", "date", "month", "week", "time", "datetime", "datetime-local", "search", "color", "tel"]; | |
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.inArray(event.target.type, textAcceptingInputTypes) > -1 ) ) { | |
return; | |
} | |
// Keypress represents characters, not special keys | |
var special = event.type !== "keypress" && jQuery.hotkeys.specialKeys[ event.which ], | |
character = String.fromCharCode( event.which ).toLowerCase(), | |
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 }; | |
}); | |
$(document).on('keydown', null, 'ctrl+a', function(){ | |
//$("#approveBttn dt .words").trigger('click'); | |
//Invoice.save('Approve'); | |
//$("#approveBttn dt .words").click(); | |
//alert('hi'); | |
$("#approveBttn dt .words").get(0).click(); | |
}); |
My fork works with command+return, and you can use it event if you're focussed on an input.
Nice!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@daz