mirror of https://github.com/keeweb/keeweb.git
130 lines
2.6 KiB
JavaScript
130 lines
2.6 KiB
JavaScript
import { AutoTypeNativeHelper } from 'auto-type/helper/auto-type-native-helper';
|
|
import { Launcher } from 'comp/launcher';
|
|
|
|
// http://eastmanreference.com/complete-list-of-applescript-key-codes/
|
|
const KeyMap = {
|
|
tab: 48,
|
|
enter: 36,
|
|
space: 49,
|
|
up: 126,
|
|
down: 125,
|
|
left: 123,
|
|
right: 124,
|
|
home: 115,
|
|
end: 119,
|
|
pgup: 116,
|
|
pgdn: 121,
|
|
ins: 114,
|
|
del: 117,
|
|
bs: 51,
|
|
esc: 53,
|
|
win: 55,
|
|
rwin: 55,
|
|
f1: 122,
|
|
f2: 120,
|
|
f3: 99,
|
|
f4: 118,
|
|
f5: 96,
|
|
f6: 97,
|
|
f7: 98,
|
|
f8: 100,
|
|
f9: 101,
|
|
f10: 109,
|
|
f11: 103,
|
|
f12: 111,
|
|
f13: 105,
|
|
f14: 107,
|
|
f15: 113,
|
|
f16: 106,
|
|
add: 69,
|
|
subtract: 78,
|
|
multiply: 67,
|
|
divide: 75,
|
|
n0: 82,
|
|
n1: 83,
|
|
n2: 84,
|
|
n3: 85,
|
|
n4: 86,
|
|
n5: 87,
|
|
n6: 88,
|
|
n7: 89,
|
|
n8: 91,
|
|
n9: 92
|
|
};
|
|
|
|
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) {
|
|
this.pendingScript.push('text ' + this.modString() + ' ' + 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.modString() + 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.modString = function () {
|
|
return Object.keys(this.mod).join('');
|
|
};
|
|
|
|
AutoTypeEmitter.prototype.runScript = function (script) {
|
|
Launcher.spawn({
|
|
cmd: AutoTypeNativeHelper.getHelperPath(),
|
|
data: script,
|
|
complete: this.callback
|
|
});
|
|
};
|
|
|
|
export { AutoTypeEmitter };
|