keeweb/app/scripts/comp/auto-type/emitter/auto-type-emitter-darwin.js

106 lines
2.8 KiB
JavaScript
Raw Normal View History

2016-04-09 17:07:53 +02:00
'use strict';
2016-04-09 20:10:11 +02:00
var Launcher = require('../../launcher');
var 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
};
var ModMap = {
'^': 'command',
'+': 'shift',
'%': 'option',
'^^': 'control'
};
2016-04-19 21:19:08 +02:00
var AutoTypeEmitter = function(callback) {
this.callback = callback;
2016-04-09 20:10:11 +02:00
this.mod = {};
2016-04-10 08:32:18 +02:00
this.pendingScript = [];
2016-04-09 17:07:53 +02:00
};
2016-04-19 21:19:08 +02:00
AutoTypeEmitter.prototype.setMod = function(mod, enabled) {
2016-04-09 20:10:11 +02:00
if (enabled) {
this.mod[mod] = true;
} else {
delete this.mod[mod];
}
2016-04-09 17:07:53 +02:00
};
2016-04-19 21:19:08 +02:00
AutoTypeEmitter.prototype.text = function(text) {
2016-04-09 20:10:11 +02:00
text = text.replace(/"/g, '\\"');
2016-04-10 08:32:18 +02:00
this.pendingScript.push('keystroke "' + text + '"'+ this.modString());
2016-04-19 21:19:08 +02:00
this.callback();
2016-04-09 17:07:53 +02:00
};
2016-04-19 21:19:08 +02:00
AutoTypeEmitter.prototype.key = function(key) {
2016-04-09 20:10:11 +02:00
if (typeof key !== 'number') {
if (!KeyMap[key]) {
2016-04-19 21:19:08 +02:00
return this.callback('Bad key: ' + key);
2016-04-09 20:10:11 +02:00
}
key = KeyMap[key];
}
2016-04-10 08:32:18 +02:00
this.pendingScript.push('key code ' + key + this.modString());
2016-04-19 21:19:08 +02:00
this.callback();
2016-04-10 08:32:18 +02:00
};
2016-04-19 21:19:08 +02:00
AutoTypeEmitter.prototype.copyPaste = function(text) {
2016-04-17 13:56:19 +02:00
this.pendingScript.push('delay 0.5');
this.pendingScript.push('set the clipboard to "' + text.replace(/"/g, '\\"') + '"');
this.pendingScript.push('delay 0.5');
2016-04-10 08:32:18 +02:00
this.pendingScript.push('keystroke "v" using command down');
2016-04-10 11:10:48 +02:00
this.pendingScript.push('delay 0.5');
2016-04-19 21:19:08 +02:00
this.callback();
2016-04-09 17:07:53 +02:00
};
2016-04-19 21:19:08 +02:00
AutoTypeEmitter.prototype.wait = function(time) {
this.pendingScript.push('delay ' + (time / 1000));
this.callback();
};
AutoTypeEmitter.prototype.waitComplete = function() {
2016-04-10 08:32:18 +02:00
if (this.pendingScript.length) {
var script = this.pendingScript.join('\n');
this.pendingScript.length = 0;
2016-04-19 21:19:08 +02:00
this.runScript(script);
2016-04-10 08:32:18 +02:00
} else {
2016-04-19 21:19:08 +02:00
this.callback();
2016-04-10 08:32:18 +02:00
}
2016-04-09 17:07:53 +02:00
};
2016-04-19 21:19:08 +02:00
AutoTypeEmitter.prototype.setDelay = function(delay) {
this.delay = delay || 0;
this.callback('Not implemented');
};
AutoTypeEmitter.prototype.modString = function() {
2016-04-09 20:10:11 +02:00
var keys = Object.keys(this.mod);
if (!keys.length) {
return '';
}
2016-04-19 21:19:08 +02:00
return ' using {' + keys.map(AutoTypeEmitter.prototype.mapMod).join(', ') + '}';
2016-04-09 20:10:11 +02:00
};
2016-04-19 21:19:08 +02:00
AutoTypeEmitter.prototype.mapMod = function(mod) {
2016-04-09 20:10:11 +02:00
return ModMap[mod] + ' down';
};
2016-04-19 21:19:08 +02:00
AutoTypeEmitter.prototype.runScript = function(script) {
2016-04-10 08:32:18 +02:00
script = 'tell application "System Events" \n' + script + '\nend tell';
2016-04-19 19:39:17 +02:00
Launcher.spawn({
cmd: 'osascript',
data: script,
2016-04-19 21:19:08 +02:00
complete: this.callback
2016-04-19 19:39:17 +02:00
});
2016-04-09 20:10:11 +02:00
};
2016-04-19 21:19:08 +02:00
module.exports = AutoTypeEmitter;