From 3a0cf2e75d7915212745bf30794cefae26644274 Mon Sep 17 00:00:00 2001 From: Klemek Date: Thu, 18 Jul 2019 10:01:09 +0200 Subject: [PATCH] [skip CI] write examples into readme --- README.md | 89 ++++++++++++++++++++++++++++++++++++-------- build_preview.js | 67 +++++++++++++++++++++++++++++++-- preview/example1.svg | 31 +++++++++++++++ 3 files changed, 167 insertions(+), 20 deletions(-) create mode 100644 preview/example1.svg diff --git a/README.md b/README.md index 98972f5..c42cdec 100644 --- a/README.md +++ b/README.md @@ -53,31 +53,34 @@ ```javascript const faDiagrams = require('fa-diagrams'); +// data: sample const data = { - nodes: [ + "nodes": [ { - name: 'node1', - icon: 'laptop-code', - color: '#4E342E', - bottom: 'my app', + "name": "node1", + "icon": "laptop-code", + "color": "#4E342E", + "bottom": "my app" }, { - name: 'node2', - icon: 'globe', - color: '#455A64', - bottom: 'world' + "name": "node2", + "icon": "globe", + "color": "#455A64", + "bottom": "world" } ], - links: [ + "links": [ { - from: 'node1', - to: 'node2', - color: '#333333', - top: {icon: 'envelope'}, - bottom: '"hello"' + "from": "node1", + "to": "node2", + "color": "#333333", + "top": { + "icon": "envelope" + }, + "bottom": "\"hello\"" } ] -}; +} const svg = faDiagrams.compute(data); // string containing xml data @@ -342,4 +345,58 @@ If you want to change the icons you can edit/build your own `resources.json` as ## Examples *[back to top](#top)* + +```json +{ + "nodes": [ + { + "name": "node1", + "icon": "laptop-code", + "color": "#4E342E", + "bottom": "my app" + }, + { + "name": "node2", + "icon": "globe", + "color": "#455A64", + "bottom": "world" + } + ], + "links": [ + { + "from": "node1", + "to": "node2", + "color": "#333333", + "top": { + "icon": "envelope" + }, + "bottom": "\"hello\"" + } + ] +} +``` + + +```yaml +nodes: + - name: node1 + icon: laptop-code + color: '#4E342E' + bottom: my app + - name: node2 + icon: globe + color: '#455A64' + bottom: world +links: + - from: node1 + to: node2 + color: '#333333' + top: + icon: envelope + bottom: '"hello"' + +``` + +![](preview/example1.svg) + (soon) diff --git a/build_preview.js b/build_preview.js index 41787dc..4a08287 100644 --- a/build_preview.js +++ b/build_preview.js @@ -38,7 +38,42 @@ fs.writeFileSync(`preview/links.svg`, rendering.toXML({'g': g}, {w: 1536 * 2, h: const faDiagrams = require('./src/index'); -const data = { +let readme = fs.readFileSync('README.md', {encoding: 'utf-8'}); + +const generatePreview = (name, exportSample, data) => { + const jsRegex = new RegExp(`\\/\\/ data: ${name}([\\s\\S](?!};))*\n};`, 'm'); + const jsonRegex = new RegExp(`\\n\`\`\`json([\\s\\S](?!\`\`\`))*`, 'm'); + const yamlRegex = new RegExp(`\\n\`\`\`yaml([\\s\\S](?!\`\`\`))*`, 'm'); + + console.log('readme : ', readme.length); + + // JS object + if (jsRegex.test(readme)) { + console.log(`preview ${name}: found JS object`); + console.log(jsRegex.exec(readme)) + readme = readme.replace(jsRegex, `// data: ${name}\nconst data = ${JSON.stringify(data, null, 2)}`); + } + // JSON + if (jsonRegex.test(readme)) { + console.log(`preview ${name}: found JSON definition`); + readme = readme.replace(jsonRegex, ` +\`\`\`json +${JSON.stringify(data, null, 2)}`); + } + // YAML + if (yamlRegex.test(readme)) { + console.log(`preview ${name}: found YAML definition`); + readme = readme.replace(yamlRegex, ` +\`\`\`yaml +${yaml.safeDump(data)}`); + } + + if (exportSample) + fs.writeFileSync('docs/sample.yml', yaml.safeDump(data), {encoding: 'utf-8'}); + fs.writeFileSync(`preview/${name}.svg`, faDiagrams.compute(data), {encoding: 'utf-8'}); +}; + +generatePreview('sample', false, { nodes: [ { name: 'node1', @@ -62,8 +97,32 @@ const data = { bottom: '"hello"' } ] -}; +}); -fs.writeFileSync('docs/sample.yml', yaml.safeDump(data), {encoding: 'utf-8'}); +generatePreview('example1', false, { + nodes: [ + { + name: 'node1', + icon: 'laptop-code', + color: '#4E342E', + bottom: 'my app' + }, + { + name: 'node2', + icon: 'globe', + color: '#455A64', + bottom: 'world' + } + ], + links: [ + { + from: 'node1', + to: 'node2', + color: '#333333', + top: {icon: 'envelope'}, + bottom: '"hello"' + } + ] +}); -fs.writeFileSync('preview/sample.svg', faDiagrams.compute(data), {encoding: 'utf-8'}); \ No newline at end of file +fs.writeFileSync('README.md', readme, {encoding: 'utf-8'}); \ No newline at end of file diff --git a/preview/example1.svg b/preview/example1.svg new file mode 100644 index 0000000..d71a312 --- /dev/null +++ b/preview/example1.svg @@ -0,0 +1,31 @@ + + + + + + + "hello" + + + + + + + + + + + my app + + + + + + + + world + + + \ No newline at end of file