/** * Handles keyboard inputs. * * Features: * - Cross browser compatibility * - Easy to implement * * Version 0.5 * *--------------------------------------- * Originally written by Kjetil Hårtveit. * www.kjetil-hartveit.com *--------------------------------------- */ KeyInputHandler = { keyCodes: [], // constants KEY_DASH: '-', KEY_COMMA: ',', KEY_DOT: '.', KEY_A: 'A', KEY_B: 'B', KEY_C: 'C', KEY_D: 'D', KEY_E: 'E', KEY_F: 'F', KEY_G: 'G', KEY_H: 'H', KEY_I: 'I', KEY_J: 'J', KEY_K: 'K', KEY_L: 'L', KEY_M: 'M', KEY_N: 'N', KEY_O: 'O', KEY_P: 'P', KEY_Q: 'Q', KEY_R: 'R', KEY_S: 'S', KEY_T: 'T', KEY_U: 'U', KEY_V: 'V', KEY_W: 'W', KEY_X: 'X', KEY_Y: 'Y', KEY_Z: 'Z', checkKey: function(ev) { ev = ev || window.event; var self = KeyInputHandler; var key; if ((key = self.findKeyCode(ev.keyCode)) === false) { return; } var keyCodes = self.getKeyCodes(); var keyCode = keyCodes[key][0]; var callback = keyCodes[key][1]; callback(); }, /** * @param inpKeyCode * @return int|false Key as integer or false as no match */ findKeyCode: function(inpKeyCode) { var keyCodes = this.getKeyCodes(); var keyCode; var res = false; for (var i=0, length=keyCodes.length; i<length; i++) { keyCode = keyCodes[i][0]; if (keyCode == inpKeyCode) { res = i; break; } } return res; }, /** * @param inpKeyCode The keycode as integer or string as one of the KEY_ constants. Always use constants if the latter and not the string value. * @param callback */ registerKey: function(inpKeyCode, callback) { var keyCodes = this.getKeyCodes(); var keyCode; var browser = ''; if (navigator.appName.toLowerCase() == 'microsoft internet explorer') browser = 'ie'; else if (navigator.appName.toLowerCase() == 'opera') browser = 'opera'; else if (navigator.appName.toLowerCase() == 'netscape') browser = 'netscape'; else browser = 'other'; // browser compatibility fix switch (inpKeyCode) { case this.KEY_DASH: if (browser == 'ie') keyCode = 189; else if (browser == 'opera') keyCode = 45; else keyCode = 109; break; case this.KEY_COMMA: if (browser == 'opera') keyCode = 44; else keyCode = 188; break; case this.KEY_DOT: if (browser == 'opera') keyCode = 46; else keyCode = 190; break; case this.KEY_A: keyCode = 65; break; case this.KEY_B: keyCode = 66; break; case this.KEY_C: keyCode = 67; break; case this.KEY_D: keyCode = 68; break; case this.KEY_E: keyCode = 69; break; case this.KEY_F: keyCode = 70; break; case this.KEY_G: keyCode = 71; break; case this.KEY_H: keyCode = 72; break; case this.KEY_I: keyCode = 73; break; case this.KEY_J: keyCode = 74; break; case this.KEY_K: keyCode = 75; break; case this.KEY_L: keyCode = 76; break; case this.KEY_M: keyCode = 77; break; case this.KEY_N: keyCode = 78; break; case this.KEY_O: keyCode = 79; break; case this.KEY_P: keyCode = 80; break; case this.KEY_Q: keyCode = 81; break; case this.KEY_R: keyCode = 82; break; case this.KEY_S: keyCode = 83; break; case this.KEY_T: keyCode = 84; break; case this.KEY_U: keyCode = 85; break; case this.KEY_V: keyCode = 86; break; case this.KEY_W: keyCode = 87; break; case this.KEY_X: keyCode = 88; break; case this.KEY_Y: keyCode = 89; break; case this.KEY_Z: keyCode = 90; break; default: keyCode = inpKeyCode; break; } keyCodes[keyCodes.length] = [keyCode, callback]; this.setKeyCodes(keyCodes); }, setKeyCodes: function(keyCodes) { this.keyCodes = keyCodes; }, getKeyCodes: function() { return this.keyCodes; } }