mirror of https://github.com/keeweb/keeweb.git
132 lines
2.7 KiB
JavaScript
132 lines
2.7 KiB
JavaScript
import { AutoTypeNativeHelper } from 'auto-type/helper/auto-type-native-helper';
|
|
import { Launcher } from 'comp/launcher';
|
|
|
|
// https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
|
|
const KeyMap = {
|
|
tab: 0x09,
|
|
enter: 0x0d,
|
|
space: 0x20,
|
|
up: 0x26,
|
|
down: 0x28,
|
|
left: 0x25,
|
|
right: 0x27,
|
|
home: 0x24,
|
|
end: 0x23,
|
|
pgup: 0x21,
|
|
pgdn: 0x22,
|
|
ins: 0x2d,
|
|
del: 0x2e,
|
|
bs: 0x08,
|
|
esc: 0x1b,
|
|
win: 0x5b,
|
|
rwin: 0x5c,
|
|
f1: 0x70,
|
|
f2: 0x71,
|
|
f3: 0x72,
|
|
f4: 0x73,
|
|
f5: 0x74,
|
|
f6: 0x75,
|
|
f7: 0x76,
|
|
f8: 0x77,
|
|
f9: 0x78,
|
|
f10: 0x79,
|
|
f11: 0x7a,
|
|
f12: 0x7b,
|
|
f13: 0x7c,
|
|
f14: 0x7d,
|
|
f15: 0x7e,
|
|
f16: 0x7f,
|
|
add: 0x6b,
|
|
subtract: 0x6d,
|
|
multiply: 0x6a,
|
|
divide: 0x6f,
|
|
n0: 0x30,
|
|
n1: 0x31,
|
|
n2: 0x32,
|
|
n3: 0x33,
|
|
n4: 0x34,
|
|
n5: 0x35,
|
|
n6: 0x36,
|
|
n7: 0x37,
|
|
n8: 0x38,
|
|
n9: 0x39
|
|
};
|
|
|
|
const ModMap = {
|
|
'^': '^',
|
|
'+': '+',
|
|
'%': '%',
|
|
'^^': '^'
|
|
};
|
|
|
|
const AutoTypeEmitter = function (callback) {
|
|
this.callback = callback;
|
|
this.mod = {};
|
|
this.pendingScript = [];
|
|
};
|
|
|
|
AutoTypeEmitter.prototype.setMod = function (mod, enabled) {
|
|
if (enabled) {
|
|
this.mod[ModMap[mod]] = true;
|
|
} else {
|
|
delete this.mod[ModMap[mod]];
|
|
}
|
|
};
|
|
|
|
AutoTypeEmitter.prototype.text = function (text) {
|
|
if (text) {
|
|
this.pendingScript.push('text ' + this.modStr() + ' ' + text);
|
|
}
|
|
this.callback();
|
|
};
|
|
|
|
AutoTypeEmitter.prototype.key = function (key) {
|
|
if (typeof key !== 'number') {
|
|
if (!KeyMap[key]) {
|
|
return this.callback('Bad key: ' + key);
|
|
}
|
|
key = KeyMap[key];
|
|
}
|
|
this.pendingScript.push('key ' + this.modStr() + key);
|
|
this.callback();
|
|
};
|
|
|
|
AutoTypeEmitter.prototype.copyPaste = function (text) {
|
|
this.pendingScript.push('copypaste ' + text);
|
|
this.callback();
|
|
};
|
|
|
|
AutoTypeEmitter.prototype.wait = function (time) {
|
|
this.pendingScript.push('wait ' + time);
|
|
this.callback();
|
|
};
|
|
|
|
AutoTypeEmitter.prototype.waitComplete = function () {
|
|
if (this.pendingScript.length) {
|
|
const script = this.pendingScript.join('\n');
|
|
this.pendingScript.length = 0;
|
|
this.runScript(script);
|
|
} else {
|
|
this.callback();
|
|
}
|
|
};
|
|
|
|
AutoTypeEmitter.prototype.setDelay = function (delay) {
|
|
this.delay = delay || 0;
|
|
this.callback('Not implemented');
|
|
};
|
|
|
|
AutoTypeEmitter.prototype.modStr = function () {
|
|
return Object.keys(this.mod).join('');
|
|
};
|
|
|
|
AutoTypeEmitter.prototype.runScript = function (script) {
|
|
Launcher.spawn({
|
|
cmd: AutoTypeNativeHelper.getHelperPath(),
|
|
data: script,
|
|
complete: this.callback
|
|
});
|
|
};
|
|
|
|
export { AutoTypeEmitter };
|