From 07a45e988810d23ea8e3cacbe2e822ee140aa0eb Mon Sep 17 00:00:00 2001 From: Klemek Date: Mon, 15 Jul 2019 15:52:36 +0200 Subject: [PATCH] preview rendered --- README.md | 48 +++++++++++----------- build_preview.js | 34 +++++++++++++++- preview/links.svg | 99 +++++++++++++++++++++++----------------------- src/rendering.js | 1 + src/utils.js | 4 +- test/utils.test.js | 6 +++ 6 files changed, 117 insertions(+), 75 deletions(-) diff --git a/README.md b/README.md index 5610f78..08c715b 100644 --- a/README.md +++ b/README.md @@ -92,29 +92,31 @@ node build.sh const faDiagrams = require('fa-diagrams'); const data = { - options: { - font: 'Courier New' + options: { + rendering:{ + icons:{ + color:'#4E342E' + } + } + }, + nodes: [ + { + name: 'node1', + icon: 'server', }, - nodes: [ - { - name: 'node1', - icon: 'server', - bottom: {text: 'myserver' }, - top: {icon: 'node'} - }, - { - name: 'node2', - icon: 'globe', - bottom: {text: 'world'} - } - ], - links: [ - { - from: 'node1', - to: 'node2', - bottom: {text: 'Hello World!'} - } - ] + { + name: 'node2', + icon: 'globe', + color:'#455A64', + } + ], + links: [ + { + from: 'node1', + to: 'node2', + color:'#333333', + } + ] }; const svg = faDiagrams.compute(data); // string containing xml data @@ -132,7 +134,7 @@ svg2img(svg, function(error, buffer) { Will produce the following diagram: -![sample](preview/sample.png) +![sample](preview/sample.svg) ### Html script diff --git a/build_preview.js b/build_preview.js index 5d9ad02..2363735 100644 --- a/build_preview.js +++ b/build_preview.js @@ -33,4 +33,36 @@ const g = []; }); }); -fs.writeFileSync(`preview/links.svg`, rendering.toXML({'g': g}, {w: 1536 * 2, h: 4 * 712 + 100}), {encoding: 'utf-8'}); \ No newline at end of file +fs.writeFileSync(`preview/links.svg`, rendering.toXML({'g': g}, {w: 1536 * 2, h: 4 * 712 + 100}), {encoding: 'utf-8'}); + +const faDiagrams = require('./src/index'); + +const data = { + options: { + rendering: { + icons: { + color: '#4E342E' + } + } + }, + nodes: [ + { + name: 'node1', + icon: 'server', + }, + { + name: 'node2', + icon: 'globe', + color: '#455A64', + } + ], + links: [ + { + from: 'node1', + to: 'node2', + color: '#333333', + } + ] +}; + +fs.writeFileSync('preview/sample.svg', faDiagrams.compute(data), {encoding: 'utf-8'}); \ No newline at end of file diff --git a/preview/links.svg b/preview/links.svg index 1755073..c23a6b4 100644 --- a/preview/links.svg +++ b/preview/links.svg @@ -1,50 +1,51 @@ - - - - - default - - - - - - line - - - - - - double - - - - - - split-double - - - - - - dashed - - - - - - dashed-line - - - - - - dashed-double - - - - - - dashed-split-double - - + + + + + default + + + + + + line + + + + + + double + + + + + + split-double + + + + + + dashed + + + + + + dashed-line + + + + + + dashed-double + + + + + + dashed-split-double + + \ No newline at end of file diff --git a/src/rendering.js b/src/rendering.js index d0dc4e9..876d21e 100644 --- a/src/rendering.js +++ b/src/rendering.js @@ -24,6 +24,7 @@ try { */ const SUB_DEF = { + '_': 'string', 'text': 'string', 'icon': 'string', 'color': 'string', diff --git a/src/utils.js b/src/utils.js index b2a2fd8..3569581 100644 --- a/src/utils.js +++ b/src/utils.js @@ -28,7 +28,7 @@ const self = { * @returns {null|string} */ isValid: (obj, def) => { - const keys = Object.keys(def); + const keys = Object.keys(def).filter(k => k !== '_'); let key; let type; for (let i = 0; i < keys.length; i++) { @@ -37,7 +37,7 @@ const self = { if (type === 'object' && obj[key].length > 0) type = 'array'; if (typeof def[key] === 'object') { - if (type && type !== 'object') + if (type && type !== 'object' && type !== def[key]['_']) return key; const res = self.isValid(type ? obj[key] : undefined, def[key]); if (res) diff --git a/test/utils.test.js b/test/utils.test.js index 1823322..a324862 100644 --- a/test/utils.test.js +++ b/test/utils.test.js @@ -71,6 +71,12 @@ describe('isValid', () => { test('invalid sub-object', () => { expect(utils.isValid({a: 5}, {a: {b: 'number'}})).toBe('a'); }); + test('valid alternative sub-object', () => { + expect(utils.isValid({a: 5}, {a: {b: 'number', '_': 'number'}})).toBe(null); + }); + test('invalid alternative sub-object', () => { + expect(utils.isValid({a: 'hello'}, {a: {b: 'number', '_': 'number'}})).toBe('a'); + }); test('undefined not required sub-object', () => { expect(utils.isValid({}, {a: {b: 'number'}})).toBe(null); });