123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- var KeyCombo = require('./key-combo');
- function Locale(name) {
- this.localeName = name;
- this.pressedKeys = [];
- this._appliedMacros = [];
- this._keyMap = {};
- this._killKeyCodes = [];
- this._macros = [];
- }
- Locale.prototype.bindKeyCode = function(keyCode, keyNames) {
- if (typeof keyNames === 'string') {
- keyNames = [keyNames];
- }
- this._keyMap[keyCode] = keyNames;
- };
- Locale.prototype.bindMacro = function(keyComboStr, keyNames) {
- if (typeof keyNames === 'string') {
- keyNames = [ keyNames ];
- }
- var handler = null;
- if (typeof keyNames === 'function') {
- handler = keyNames;
- keyNames = null;
- }
- var macro = {
- keyCombo : new KeyCombo(keyComboStr),
- keyNames : keyNames,
- handler : handler
- };
- this._macros.push(macro);
- };
- Locale.prototype.getKeyCodes = function(keyName) {
- var keyCodes = [];
- for (var keyCode in this._keyMap) {
- var index = this._keyMap[keyCode].indexOf(keyName);
- if (index > -1) { keyCodes.push(keyCode|0); }
- }
- return keyCodes;
- };
- Locale.prototype.getKeyNames = function(keyCode) {
- return this._keyMap[keyCode] || [];
- };
- Locale.prototype.setKillKey = function(keyCode) {
- if (typeof keyCode === 'string') {
- var keyCodes = this.getKeyCodes(keyCode);
- for (var i = 0; i < keyCodes.length; i += 1) {
- this.setKillKey(keyCodes[i]);
- }
- return;
- }
- this._killKeyCodes.push(keyCode);
- };
- Locale.prototype.pressKey = function(keyCode) {
- if (typeof keyCode === 'string') {
- var keyCodes = this.getKeyCodes(keyCode);
- for (var i = 0; i < keyCodes.length; i += 1) {
- this.pressKey(keyCodes[i]);
- }
- return;
- }
- var keyNames = this.getKeyNames(keyCode);
- for (var i = 0; i < keyNames.length; i += 1) {
- if (this.pressedKeys.indexOf(keyNames[i]) === -1) {
- this.pressedKeys.push(keyNames[i]);
- }
- }
- this._applyMacros();
- };
- Locale.prototype.releaseKey = function(keyCode) {
- if (typeof keyCode === 'string') {
- var keyCodes = this.getKeyCodes(keyCode);
- for (var i = 0; i < keyCodes.length; i += 1) {
- this.releaseKey(keyCodes[i]);
- }
- }
- else {
- var keyNames = this.getKeyNames(keyCode);
- var killKeyCodeIndex = this._killKeyCodes.indexOf(keyCode);
-
- if (killKeyCodeIndex > -1) {
- this.pressedKeys.length = 0;
- } else {
- for (var i = 0; i < keyNames.length; i += 1) {
- var index = this.pressedKeys.indexOf(keyNames[i]);
- if (index > -1) {
- this.pressedKeys.splice(index, 1);
- }
- }
- }
- this._clearMacros();
- }
- };
- Locale.prototype._applyMacros = function() {
- var macros = this._macros.slice(0);
- for (var i = 0; i < macros.length; i += 1) {
- var macro = macros[i];
- if (macro.keyCombo.check(this.pressedKeys)) {
- if (macro.handler) {
- macro.keyNames = macro.handler(this.pressedKeys);
- }
- for (var j = 0; j < macro.keyNames.length; j += 1) {
- if (this.pressedKeys.indexOf(macro.keyNames[j]) === -1) {
- this.pressedKeys.push(macro.keyNames[j]);
- }
- }
- this._appliedMacros.push(macro);
- }
- }
- };
- Locale.prototype._clearMacros = function() {
- for (var i = 0; i < this._appliedMacros.length; i += 1) {
- var macro = this._appliedMacros[i];
- if (!macro.keyCombo.check(this.pressedKeys)) {
- for (var j = 0; j < macro.keyNames.length; j += 1) {
- var index = this.pressedKeys.indexOf(macro.keyNames[j]);
- if (index > -1) {
- this.pressedKeys.splice(index, 1);
- }
- }
- if (macro.handler) {
- macro.keyNames = null;
- }
- this._appliedMacros.splice(i, 1);
- i -= 1;
- }
- }
- };
- module.exports = Locale;
|