forked from schrepfler/sequence-diagram-generator
-
Notifications
You must be signed in to change notification settings - Fork 0
/
generate-sequence-diagram.js
executable file
·102 lines (87 loc) · 3.06 KB
/
generate-sequence-diagram.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#!/usr/bin/env node
var argv = require('yargs')
.usage('Generate a sequence diagram from a diagram DSL file and output it as a png image with a given name. \nUsage: $0')
.example('$0 -f diagram-file.txt -o output-file.png -t [hand|simple]')
.demand('f')
.alias('f', 'input')
.describe('f', 'Input filename with the diagram DSL')
.demand('o')
.alias('o', 'output')
.describe('o', 'Output filename. Supported formats include .png, .gif, .jpeg, and .pdf.')
.alias('t', 'type')
.describe('t', 'Diagram type.')
.default('hand')
.argv;
var fs = require('fs');
var Nightmare = require('nightmare');
var Handlebars = require('handlebars');
var sequenceDiagramTemplate = require('./sequenceDiagram.tpl.js');
var sequenceDiagram;
var sequenceDiagramCaption = "";
// console.log("type of :" +argv.type)
var sequenceDiagramTheme = "hand";//argv.type;
var tempFile = ".tmp.html";
var path = require('path');
var ext = path.extname(argv.f).substring(1);
console.log(ext);
sequenceDiagram = fs.readFileSync(argv.f, 'utf8');
var handlebarsContext = {
"diagramTxt": sequenceDiagram,
"caption": sequenceDiagramCaption,
"theme": sequenceDiagramTheme
// "sequenceDiagram": true
// "flowDiagram": true
};
switch (ext) {
case "flow":
handlebarsContext.flowDiagram = true;
break;
case "sequence":
handlebarsContext.sequenceDiagram = true;
break;
default:
}
var sequenceDiagramOutput = Handlebars.templates.sequenceDiagram(handlebarsContext);
fs.writeFileSync(tempFile, sequenceDiagramOutput);
// get below codes from https://github.com/segmentio/nightmare/pull/358
Nightmare.action('screenshotSelector', function (path, selector, done) {
console.log('.screenshotSelector()');
if (typeof selector === 'function') {
done = selector;
selector = path;
path = undefined;
};
var self = this;
this.evaluate_now(function (selector) {
var element = document.querySelector(selector);
if (element) {
var rect = element.getBoundingClientRect();
return {
x: Math.round(rect.left),
y: Math.round(rect.top),
width: Math.round(rect.width),
height: Math.round(rect.height)
};
}
}, function (a, clip) {
if (!clip) {
throw new Error('invalid selector "' + selector + '"');
}
console.log('width:'+clip.width+" height:"+clip.height)
self.child.call('screenshot', path, clip, function (error, img) {
var buf = new Buffer(img.data);
console.log('.screenshot() captured with length %s', buf.length);
path ? fs.writeFile(path, buf, done) : done(null, buf);
});
//not work with nightmare 2.5.1
// self.child.once('screenshot', function (img) {
// var buf = new Buffer(img.data);
// console.log('.screenshotSelector() captured with length %s', buf.length);
// path ? fs.writeFile(path, buf, done) : done(null, buf);
// });
// self.child.emit.('screenshot', path, clip);
}, selector);
})
new Nightmare()
.goto('file://' + __dirname +'/'+ tempFile)
.screenshotSelector(argv.o, 'svg').end().then()