dotfiles/.vscode/extensions/dbankier.vscode-instant-markdown-0.1.0/extension.js

79 lines
2.4 KiB
JavaScript
Raw Normal View History

2016-09-24 12:12:34 +01:00
// The module 'vscode' contains the VS Code extensibility API
// Import the module and reference it with the alias vscode in your code below
var vscode = require('vscode');
var Promise = require('bluebird');
var request = Promise.promisify(require("request"));
var shell = require("shelljs");
var path = require('path');
function activate(context) {
var instantMarkdown = new InstantMarkdown();
var instantMarkdownController = new InstantMarkdownController(instantMarkdown);
context.subscriptions.push(instantMarkdown);
context.subscriptions.push(instantMarkdownController);
}
function InstantMarkdown() {
var started = false;
var self = this;
this.initialise = function(callback) {
console.log("Initialising");
var server = shell.exec(path.join(__dirname,"node_modules","instant-markdown-d","instant-markdown-d"), {async: true})
server.stdout.on('data', function(data) {
if (!started && (data.toString().indexOf("connection established!") !== -1 || data.toString().indexOf("EADDRINUSE") !== -1)) {
callback();
started = true;
}
console.log(">>>" + data);
});
};
this.update = function() {
function requestUpdate() {
return request({
uri: "http://localhost:8090",
method: "PUT",
body: vscode.window.activeTextEditor.document.getText()
})
.then(function() {}, function(e) {
if (e.code === "ECONNREFUSED") {
self.initialise();
}
console.log(e)
});
}
if (started) {
requestUpdate();
} else {
this.initialise(requestUpdate);
}
};
this.close = function() {
if (started) {
return request({
uri: "http://localhost:8090",
method: "DELETE"
})
.then(function() { started = false } , function(e) { started = false; });
}
}
}
function InstantMarkdownController(md) {
var subscriptions = [];
function update() {
var editor = vscode.window.activeTextEditor;
if (!editor) { return; }
var doc = editor.document;
if (doc.languageId === "markdown") {
md.update();
} else {
md.close();
}
}
vscode.window.onDidChangeActiveTextEditor(update, this, subscriptions);
vscode.window.onDidChangeTextEditorSelection(update, this, subscriptions);
md.update();
}
exports.activate = activate;