1
- var hdelk = ( function ( ) {
1
+ const fs = require ( 'fs' ) ;
2
+ const { createSVGWindow } = require ( 'svgdom' ) ;
3
+ const { SVG , registerWindow } = require ( '@svgdotjs/svg.js' ) ;
4
+ const ELK = require ( 'elkjs/lib/elk.bundled.js' ) ;
5
+
6
+ const window = createSVGWindow ( ) ;
7
+ const document = window . document ;
8
+ registerWindow ( window , document ) ;
9
+
10
+ var hdelk = ( function ( ) {
2
11
3
12
/**
4
13
* HDElkJS Style Section
@@ -57,55 +66,29 @@ var hdelk = (function(){
57
66
/**
58
67
* Creates an SVG diagram from a JSON description.
59
68
* @param {object } graph
60
- * @param {string } divname
69
+ * @param {string } outputFilePath
61
70
*/
62
- var layout = function ( graph , divname ) {
63
- const elk = new ELK ( {
64
- } )
71
+ var layout = async function ( graph , outputFilePath ) {
72
+ const elk = new ELK ( ) ;
65
73
66
74
// create a dummy drawing just to get text sizes
67
- var drawDummy = SVG ( ) . addTo ( '#' + divname ) . size ( 0 , 0 ) ;
75
+ var drawDummy = SVG ( document . documentElement ) . size ( 0 , 0 ) ;
68
76
69
- transformNode ( drawDummy , graph ) ;
77
+ transformNode ( drawDummy , graph ) ;
70
78
71
79
drawDummy . clear ( ) ;
72
80
73
- var mp = document . getElementById ( divname + "_message" ) ;
74
- if ( mp ) {
75
- mp . style . display = "none" ;
76
- }
77
-
78
81
try {
79
- var ep = elk . layout ( graph ) ;
80
-
81
- ep . then ( function ( g ) {
82
- var dp = document . getElementById ( divname + "_preprocessed" ) ;
83
- if ( dp )
84
- dp . innerHTML = "<pre style='font-size:10px'>" + JSON . stringify ( graph , null , " " ) + "</pre>" ;
82
+ var g = await elk . layout ( graph ) ;
85
83
86
- var d = document . getElementById ( divname + "_elk" ) ;
87
- if ( d )
88
- d . innerHTML = "<pre style='font-size:8px'>" + JSON . stringify ( g , null , " " ) + "</pre>" ;
84
+ var svgContent = diagram ( g ) ;
89
85
90
- diagram ( divname , g ) ;
91
-
92
- } )
93
-
94
- ep . catch ( function ( err ) {
95
- var dp = document . getElementById ( divname ) ;
96
- dp . innerHTML = "" ;
97
- var mp = document . getElementById ( divname + "_message" ) ;
98
- if ( mp ) {
99
- mp . innerHTML = err ;
100
- mp . style . display = "block" ;
101
- }
102
- } )
103
- } catch ( err ) {
104
- var dp = document . getElementById ( divname ) ;
105
- dp . innerHTML = "" ;
106
- console . log ( err ) ;
86
+ fs . writeFileSync ( outputFilePath , svgContent ) ;
87
+ // console.log(`SVG file saved to ${outputFilePath}`);
88
+ } catch ( err ) {
89
+ console . error ( err ) ;
107
90
}
108
- }
91
+ } ;
109
92
110
93
/**
111
94
* Takes the child object and recursively transforms sub-objects into a form that Elk.JS can use
@@ -462,21 +445,18 @@ var hdelk = (function(){
462
445
463
446
/**
464
447
* Takes the output from ElkJS, renders it into SVG using SVG.js and returns the result
465
- * @param {string } div_id
466
448
* @param {elkObject } diagram_layout
467
449
* @returns {string } svg
468
450
*/
469
- var diagram = function ( div_id , diagram_layout ) {
470
-
471
- var diagramElement = document . getElementById ( div_id ) ;
472
- diagramElement . innerHTML = "" ;
451
+ var diagram = function ( diagram_layout ) {
452
+ var draw = SVG ( document . documentElement )
453
+ . viewbox ( 0 , 0 , diagram_layout . width , diagram_layout . height )
454
+ . size ( diagram_layout . width , diagram_layout . height ) ;
473
455
474
- var draw = SVG ( ) . addTo ( '#' + div_id )
475
- . viewbox ( 0 , 0 , diagram_layout . width , diagram_layout . height )
476
- . size ( '100%' , '100%' ) ;
456
+ node ( draw , diagram_layout , 0 , 0 ) ;
477
457
478
- node ( draw , diagram_layout , 0 , 0 ) ;
479
- }
458
+ return draw . svg ( ) ;
459
+ } ;
480
460
481
461
var node = function ( draw , child , offsetX , offsetY ) {
482
462
var group = draw . group ( ) ;
@@ -691,3 +671,9 @@ var hdelk = (function(){
691
671
} ;
692
672
} ) ( ) ;
693
673
674
+ const inputFilePath = process . argv [ 2 ] ;
675
+ const outputFilePath = process . argv [ 3 ] ;
676
+
677
+ const graph = JSON . parse ( fs . readFileSync ( inputFilePath , 'utf8' ) ) ;
678
+
679
+ hdelk . layout ( graph , outputFilePath ) ;
0 commit comments