38 override: /keydown|keypress|keyup/g,
41 specialKeys: { 27:
'esc', 9:
'tab', 32:
'space', 13:
'return', 8:
'backspace', 145:
'scroll',
42 20:
'capslock', 144:
'numlock', 19:
'pause', 45:
'insert', 36:
'home', 46:
'del',
43 35:
'end', 33:
'pageup', 34:
'pagedown', 37:
'left', 38:
'up', 39:
'right',40:
'down',
44 112:
'f1',113:
'f2', 114:
'f3', 115:
'f4', 116:
'f5', 117:
'f6', 118:
'f7', 119:
'f8',
45 120:
'f9', 121:
'f10', 122:
'f11', 123:
'f12' },
47 shiftNums: {
"`":
"~",
"1":
"!",
"2":
"@",
"3":
"#",
"4":
"$",
"5":
"%",
"6":
"^",
"7":
"&",
48 "8":
"*",
"9":
"(",
"0":
")",
"-":
"_",
"=":
"+",
";":
":",
"'":
"\"",
",":
"<",
49 ".":
">",
"/":
"?",
"\\":
"|" },
51 newTrigger:
function (type, combi, callback) {
55 result[type][combi] = {cb: callback, disableInInput:
false};
60 if (
jQuery.browser.mozilla){
61 hotkeys.specialKeys =
jQuery.extend(hotkeys.specialKeys, { 96:
'0', 97:
'1', 98:
'2', 99:
62 '3', 100:
'4', 101:
'5', 102:
'6', 103:
'7', 104:
'8', 105:
'9' });
67 jQuery.fn.find =
function( selector ) {
69 return jQuery.fn.__find__.apply(
this, arguments);
72 jQuery.fn.unbind =
function (type, combi, fn){
73 if (
jQuery.isFunction(combi)){
77 if (combi && typeof combi ===
'string'){
78 var selectorId = ((this.prevObject && this.prevObject.query) || (
this[0].
id &&
this[0].
id) ||
this[0]).toString();
79 var hkTypes = type.split(
' ');
80 for (var x=0; x<hkTypes.length; x++){
81 delete hotkeys.triggersMap[selectorId][hkTypes[x]][combi];
85 return this.__unbind__(type, fn);
88 jQuery.fn.bind =
function(type, data, fn){
90 var handle = type.match(hotkeys.override);
92 if (
jQuery.isFunction(data) || !handle){
94 return this.__bind__(type, data, fn);
100 pass2jq =
jQuery.trim(type.replace(hotkeys.override,
''));
105 result = this.__bind__(pass2jq, data, fn);
108 if (typeof data ===
"string"){
109 data = {
'combi': data};
112 for (var x=0; x < handle.length; x++){
113 var eventType = handle[x];
114 var combi = data.combi.toLowerCase(),
115 trigger = hotkeys.newTrigger(eventType, combi, fn),
116 selectorId = ((this.prevObject && this.prevObject.query) || (
this[0].
id &&
this[0].
id) ||
this[0]).toString();
119 trigger[eventType][combi].disableInInput = data.disableInInput;
122 if (!hotkeys.triggersMap[selectorId]) {
123 hotkeys.triggersMap[selectorId] = trigger;
126 else if (!hotkeys.triggersMap[selectorId][eventType]) {
127 hotkeys.triggersMap[selectorId][eventType] = trigger[eventType];
130 var mapPoint = hotkeys.triggersMap[selectorId][eventType][combi];
132 hotkeys.triggersMap[selectorId][eventType][combi] = [trigger[eventType][combi]];
134 else if (mapPoint.constructor !== Array){
135 hotkeys.triggersMap[selectorId][eventType][combi] = [mapPoint];
138 hotkeys.triggersMap[selectorId][eventType][combi][mapPoint.length] = trigger[eventType][combi];
142 this.each(
function(){
144 var jqElem =
jQuery(
this);
147 if (jqElem.attr(
'hkId') && jqElem.attr(
'hkId') !== selectorId){
148 selectorId = jqElem.attr(
'hkId') +
";" + selectorId;
150 jqElem.attr(
'hkId', selectorId);
152 result = this.__bind__(handle.join(
' '), data, hotkeys.handler)
160 hotkeys.findElement =
function (elem){
161 if (!
jQuery(elem).attr(
'hkId')){
163 while (!
jQuery(elem).attr(
'hkId') && elem.parentNode){
164 elem = elem.parentNode;
171 hotkeys.handler =
function(event) {
172 var target = hotkeys.findElement(event.currentTarget),
174 ids = jTarget.attr(
'hkId');
177 ids = ids.split(
';');
178 var code =
event.which,
180 special = hotkeys.specialKeys[code],
182 character = !special && String.fromCharCode(code).toLowerCase(),
183 shift =
event.shiftKey,
184 ctrl =
event.ctrlKey,
187 alt =
event.altKey ||
event.originalEvent.altKey,
190 for (var x=0; x < ids.length; x++){
191 if (hotkeys.triggersMap[ids[x]][type]){
192 mapPoint = hotkeys.triggersMap[ids[x]][type];
201 if(!shift && !ctrl && !alt) {
202 trigger = mapPoint[special] || (character && mapPoint[character]);
207 if(alt) modif +=
'alt+';
208 if(ctrl) modif+=
'ctrl+';
209 if(shift) modif +=
'shift+';
212 trigger = mapPoint[modif+special];
215 trigger = mapPoint[modif+character]
216 || mapPoint[modif+hotkeys.shiftNums[character]]
218 || (modif ===
'shift+' && mapPoint[hotkeys.shiftNums[character]]);
224 for (var x=0; x < trigger.length; x++){
225 if(trigger[x].disableInInput){
227 var elem =
jQuery(event.target);
228 if (jTarget.is(
"input") || jTarget.is(
"textarea")
229 || elem.is(
"input") || elem.is(
"textarea")) {
234 result = result || trigger[x].cb.apply(
this, [event]);
242 window.hotkeys = hotkeys;