92 行
2.2 KiB
JavaScript
92 行
2.2 KiB
JavaScript
|
|
jQuery.fn.shortkeys = jQuery.fn.keys = function (obj, settings) {
|
||
|
|
var el = this;
|
||
|
|
this.settings = jQuery.extend({
|
||
|
|
split: "+",
|
||
|
|
moreKeys: {}
|
||
|
|
}, settings || {});
|
||
|
|
this.wackyKeys = { '.': 190, ',': 188, ';': 59, 'Space': 32 };
|
||
|
|
this.formElements = new Array("input", "select", "textarea", "button");
|
||
|
|
this.keys = new Array();
|
||
|
|
this.onFormElement = false;
|
||
|
|
this.keysDown = new Array();
|
||
|
|
this.init = function (obj) {
|
||
|
|
for(x in this.wackyKeys) {
|
||
|
|
this.wackyKeys[x.toUpperCase()] = this.wackyKeys[x];
|
||
|
|
}
|
||
|
|
for(x in obj) {
|
||
|
|
this.keys.push(x.split(this.settings.split));
|
||
|
|
}
|
||
|
|
for(i in this.keys) {
|
||
|
|
var quickArr = new Array();
|
||
|
|
for(j in this.keys[i]) {
|
||
|
|
quickArr.push(this.convertToNumbers(this.keys[i][j].toUpperCase()));
|
||
|
|
}
|
||
|
|
quickArr.sort();
|
||
|
|
this.keys[i] = quickArr;
|
||
|
|
}
|
||
|
|
};
|
||
|
|
this.convertToNumbers = function (inp) {
|
||
|
|
if (this.wackyKeys[inp] != undefined) {
|
||
|
|
return this.wackyKeys[inp];
|
||
|
|
}
|
||
|
|
return inp.toUpperCase().charCodeAt(0);
|
||
|
|
};
|
||
|
|
this.keyAdd = function(keyCode) {
|
||
|
|
this.keysDown.push(keyCode);
|
||
|
|
this.keysDown.sort();
|
||
|
|
};
|
||
|
|
this.keyRemove = function (keyCode) {
|
||
|
|
for(i in this.keysDown) {
|
||
|
|
if(this.keysDown[i] == keyCode) {
|
||
|
|
this.keysDown.splice(i,1);
|
||
|
|
}
|
||
|
|
};
|
||
|
|
this.keysDown.sort();
|
||
|
|
};
|
||
|
|
this.keyTest = function (i) {
|
||
|
|
if (this.keys[i].length != this.keysDown.length) return false;
|
||
|
|
for(j in this.keys[i]) {
|
||
|
|
if(this.keys[i][j] != this.keysDown[j]) {
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return true;
|
||
|
|
};
|
||
|
|
this.keyRemoveAll = function () {
|
||
|
|
this.keysDown = new Array();
|
||
|
|
};
|
||
|
|
this.focused = function (bool) {
|
||
|
|
this.onFormElement = bool;
|
||
|
|
}
|
||
|
|
$(document).keydown(function(e) {
|
||
|
|
el.keyAdd(e.keyCode);
|
||
|
|
var i = 0;
|
||
|
|
for(x in obj) {
|
||
|
|
if(el.keyTest(i) && !el.onFormElement) {
|
||
|
|
obj[x]();
|
||
|
|
return false;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
i++;
|
||
|
|
};
|
||
|
|
});
|
||
|
|
$(document).keyup(function (e) {
|
||
|
|
el.keyRemove(e.keyCode);
|
||
|
|
});
|
||
|
|
for(x in this.formElements) {
|
||
|
|
$(this.formElements[x]).focus( function () {
|
||
|
|
el.focused(true);
|
||
|
|
});
|
||
|
|
$(this.formElements[x]).blur( function () {
|
||
|
|
el.focused(false);
|
||
|
|
});
|
||
|
|
}
|
||
|
|
$(document).focus( function () {
|
||
|
|
el.keyRemoveAll();
|
||
|
|
});
|
||
|
|
|
||
|
|
this.init(obj);
|
||
|
|
jQuery.extend(this.wackyKeys, this.settings.moreKeys);
|
||
|
|
|
||
|
|
return this;
|
||
|
|
}
|