Caret/js/api.js

57 lines
1.7 KiB
JavaScript
Raw Normal View History

define([
"command",
"settings!api"
], function(command, Settings) {
2015-02-21 16:23:33 +00:00
//handles sending custom messages based on Caret commands (builds, plugins, etc)
var targets = Settings.get("api");
command.on("init:restart", function() {
targets = Settings.get("api");
});
2015-02-21 16:23:33 +00:00
command.on("api:execute", function(id, c) {
if (!id in targets) return c();
var config = targets[id];
2015-02-21 22:27:05 +00:00
var message = {};
//shallow-copy config message, just in case
//TODO: replace with Object.assign()
for (var key in config.message) {
//if we implement message variables, this would be the place to handle them.
message[key] = config.message[key];
}
var send = function() {
2015-02-21 20:51:16 +00:00
chrome.runtime.sendMessage(config.id, message, null, function() {
if (chrome.runtime.lastError) {
console.error(chrome.runtime.lastError);
}
if (c) c(chrome.runtime.lastError);
});
};
if (config.sendEditorContext) {
//add context information to the message
2015-02-21 22:27:05 +00:00
message.context = {
selection: editor.session.getTextRange()
};
2015-02-21 20:51:16 +00:00
if (editor.session.file && editor.session.file.getPath) {
editor.session.file.getPath(function(err, path) {
2015-02-21 22:27:05 +00:00
message.context.path = path;
2015-02-21 20:51:16 +00:00
send();
});
} else {
//no path for Caret config files or unsaved "untitled.txt"
message.context.path = "";
send();
2015-02-21 20:51:16 +00:00
}
} else {
//send message as-is
send();
}
});
2015-02-21 16:23:33 +00:00
//External apps can send messages by matching Caret's command/argument config objects
chrome.runtime.onMessageExternal.addListener(function(message, sender, c) {
command.fire(message.command, message.argument, c);
});
});