@more-markdown/dot-processor
Version:
Plugin for more-markdown to support rendering dot files.
53 lines (45 loc) • 1.49 kB
JavaScript
var d3, dagreD3, dot, dotProcessor, markdownItGraph, uuid;
markdownItGraph = require('./md_graph');
d3 = require('d3');
dagreD3 = require('dagre-d3');
dot = require('graphlib-dot');
uuid = require('node-uuid');
dotProcessor = function(tokens, graph_template, error_template) {
var render;
render = dagreD3.render();
return {
register: function(mdInstance, postProcessors) {
markdownItGraph(tokens).register(mdInstance, function(graphStr) {
var e, graph, id;
try {
graph = dot.read(graphStr);
id = "dg-" + uuid.v4();
postProcessors.registerElemenbById(id, function(elem, done) {
var svgElem, svgHeight, tags;
d3.select(elem).call(render, graph);
svgElem = elem.getElementsByClassName('output')[0];
svgHeight = (svgElem != null ? svgElem.getBoundingClientRect().height : void 0) || 0;
elem.style.height = svgHeight + 22;
if (!graph.isDirected()) {
tags = elem.getElementsByTagName('path');
[].forEach.call(tags, function(e) {
return e.setAttribute('marker-end', '');
});
}
return done();
});
return graph_template({
id: id
});
} catch (_error) {
e = _error;
return error_template({
error: e
});
}
});
return null;
}
};
};
module.exports = dotProcessor;