From 5852fc2d68ff27214a1ea0627d988b413f996d18 Mon Sep 17 00:00:00 2001 From: Guilherme Pasqualino Date: Thu, 7 Jul 2016 11:08:26 +0200 Subject: [PATCH 01/13] Fix typo in sequence diagram documentation --- docs/content/sequenceDiagram.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content/sequenceDiagram.md b/docs/content/sequenceDiagram.md index 8261456b3..a5c3141c6 100755 --- a/docs/content/sequenceDiagram.md +++ b/docs/content/sequenceDiagram.md @@ -190,7 +190,7 @@ else end ``` -or if there is sequence that is optionat (if without else). +or if there is sequence that is optional (if without else). ``` opt Describing text From 65797742efd756a23c476b26176b4c8f96e3e315 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Gait=C3=A1n?= Date: Sat, 9 Jul 2016 12:04:41 -0300 Subject: [PATCH 02/13] added sphinx extension --- docs/content/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/content/index.md b/docs/content/index.md index c870418db..8de3fcf91 100644 --- a/docs/content/index.md +++ b/docs/content/index.md @@ -86,6 +86,7 @@ Mermaid is supported in a number of publishing systems and editors. Please repor * [Plugin for atom](https://atom.io/packages/atom-mermaid) * [Markdown Plus](http://mdp.tylingsoft.com/) * [Vim Plugin](https://github.com/kannokanno/previm) +* [Sphinx extension](https://github.com/mgaitan/sphinxcontrib-mermaid) # Online live editor From 5302ca38da572aaaf623b986ccf6f646a6b6f773 Mon Sep 17 00:00:00 2001 From: Charles Liu Date: Wed, 20 Jul 2016 13:19:27 +0800 Subject: [PATCH 03/13] override normal flowchart arrowhead to allow css styling --- src/diagrams/flowchart/flowRenderer.js | 19 +++++++++++++++++++ src/less/dark/flow.less | 5 +++++ src/less/dark/variables.less | 1 + src/less/default/flow.less | 4 ++++ src/less/default/variables.less | 1 + src/less/forest/flow.less | 4 ++++ src/less/forest/variables.less | 1 + 7 files changed, 35 insertions(+) diff --git a/src/diagrams/flowchart/flowRenderer.js b/src/diagrams/flowchart/flowRenderer.js index 997ccdbd7..96cfa67de 100644 --- a/src/diagrams/flowchart/flowRenderer.js +++ b/src/diagrams/flowchart/flowRenderer.js @@ -425,6 +425,25 @@ exports.draw = function (text, id,isDot) { dagreD3.util.applyStyle(path, edge[type + 'Style']); }; + // Override normal arrowhead defined in d3. Remove style & add class to allow css styling. + render.arrows().normal = function normal(parent, id, edge, type) { + var marker = parent.append("marker") + .attr("id", id) + .attr("viewBox", "0 0 10 10") + .attr("refX", 9) + .attr("refY", 5) + .attr("markerUnits", "strokeWidth") + .attr("markerWidth", 8) + .attr("markerHeight", 6) + .attr("orient", "auto") + + var path = marker.append("path") + .attr("d", "M 0 0 L 10 5 L 0 10 z") + .attr("class", "arrowheadPath") + .style("stroke-width", 1) + .style("stroke-dasharray", "1,0"); + }; + // Set up an SVG group so that we can translate the final graph. var svg = d3.select('#' + id); //svgGroup = d3.select('#' + id + ' g'); diff --git a/src/less/dark/flow.less b/src/less/dark/flow.less index 2457e77a8..a108bbccd 100644 --- a/src/less/dark/flow.less +++ b/src/less/dark/flow.less @@ -9,6 +9,11 @@ stroke-width: 1px; } + +.arrowheadPath { + fill: @arrowheadColor; +} + .edgePath .path { stroke: @lineColor; } diff --git a/src/less/dark/variables.less b/src/less/dark/variables.less index 0206f8949..c77932990 100644 --- a/src/less/dark/variables.less +++ b/src/less/dark/variables.less @@ -5,6 +5,7 @@ @lineColor: @mainContrastColor; @border1: #81B1DB; @border2: rgba(255, 255, 255, 0.25); +@arrowheadColor: @mainContrastColor; /* Flowchart variables */ diff --git a/src/less/default/flow.less b/src/less/default/flow.less index 3d999bd8a..dcd66c1ba 100644 --- a/src/less/default/flow.less +++ b/src/less/default/flow.less @@ -9,6 +9,10 @@ stroke-width: 1px; } +.arrowheadPath { + fill: @arrowheadColor; +} + .edgePath .path { stroke: @lineColor; } diff --git a/src/less/default/variables.less b/src/less/default/variables.less index 0634374ca..3a69d86d4 100644 --- a/src/less/default/variables.less +++ b/src/less/default/variables.less @@ -3,6 +3,7 @@ @lineColor: #333333; @border1:#CCCCFF; @border2:#aaaa33; +@arrowheadColor: #333333; /* Flowchart variables */ @nodeBkg:@mainBkg; diff --git a/src/less/forest/flow.less b/src/less/forest/flow.less index 47e8de05f..26ca2dae7 100644 --- a/src/less/forest/flow.less +++ b/src/less/forest/flow.less @@ -12,6 +12,10 @@ color:#333 stroke-width: 1px; } +.arrowheadPath { + fill: @arrowheadColor; +} + .edgePath .path { stroke: @lineColor; stroke-width: 1.5px; diff --git a/src/less/forest/variables.less b/src/less/forest/variables.less index 8bfcdceb5..d797c96f4 100644 --- a/src/less/forest/variables.less +++ b/src/less/forest/variables.less @@ -4,6 +4,7 @@ @lineColor: green; @border1: #13540c; @border2: #6eaa49; +@arrowheadColor: green; /* Flowchart variables */ @nodeBkg:@mainBkg; From 1026ad70110a9c8a472f474c931290063dfacb66 Mon Sep 17 00:00:00 2001 From: HustLion Date: Wed, 27 Jul 2016 19:29:15 +0800 Subject: [PATCH 04/13] Add Class-diagram example --- README.md | 102 +++++++++++++++++++++++-------------- docs/img/class-diagram.png | Bin 0 -> 26820 bytes 2 files changed, 64 insertions(+), 38 deletions(-) create mode 100644 docs/img/class-diagram.png diff --git a/README.md b/README.md index 317fee0fc..202c7fb35 100644 --- a/README.md +++ b/README.md @@ -12,44 +12,70 @@ This is why mermaid was born, a simple markdown-like script language for generat The code below would render the following image - - - - - - - - + + + + + + + + + + + + +
CodeRendered diagram
-
-
-graph TD;
-    A-->B;
-    A-->C;
-    B-->D;
-    C-->D;
-
-
-
-Example 1 -
-
-
-sequenceDiagram
-    participant Alice
-    participant Bob
-    Alice->>John: Hello John, how are you?
-    loop Healthcheck
-        John->>John: Fight against hypochondria
-    end
-    Note right of John: Rational thoughts <br/>prevail...
-    John-->>Alice: Great!
-    John->>Bob: How about you?
-    Bob-->>John: Jolly good!
-
-
-
-Example 2 -
CodeRendered diagram
+
+                
+                    graph TD;
+                        A-->B;
+                        A-->C;
+                        B-->D;
+                        C-->D;
+                
+            
+
+ Example 1 +
+
+                
+                    sequenceDiagram
+                        participant Alice
+                        participant Bob
+                        Alice->>John: Hello John, how are you?
+                        loop Healthcheck
+                        John->>John: Fight against hypochondria
+                        end
+                        Note right of John: Rational thoughts <br/>prevail...
+                        John-->>Alice: Great!
+                        John->>Bob: How about you?
+                        Bob-->>John: Jolly good!
+                
+            
+
+ Example 2 +
+
+                
+                    classDiagram
+                        Class01 <|-- AveryLongClass : Cool
+                        Class03 *-- Class04
+                        Class05 o-- Class06
+                        Class07 .. Class08
+                        Class09 --> C2 : Where am i?
+                        Class09 --* C3
+                        Class09 --|> Class07
+                        Class07 : equals()
+                        Class07 : Object[] elementData
+                        Class01 : size()
+                        Class01 : int chimp
+                        Class01 : int gorilla
+                        Class08 <--> C2: Cool label
+                
+            
+
+ Example 3 +
## Further reading diff --git a/docs/img/class-diagram.png b/docs/img/class-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..e3e234437f3f44c7937d48023385c577d8b26348 GIT binary patch literal 26820 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 literal 0 HcmV?d00001 From 22fc99d521eed9ace32fc6a69374f829f5cc6614 Mon Sep 17 00:00:00 2001 From: HustLion Date: Wed, 27 Jul 2016 19:31:21 +0800 Subject: [PATCH 05/13] Reformat code block --- README.md | 60 +++++++++++++++++++++++++++---------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index 202c7fb35..db2a011de 100644 --- a/README.md +++ b/README.md @@ -17,11 +17,11 @@ The code below would render the following image
                 
-                    graph TD;
-                        A-->B;
-                        A-->C;
-                        B-->D;
-                        C-->D;
+graph TD;
+    A-->B;
+    A-->C;
+    B-->D;
+    C-->D;
                 
             
@@ -33,17 +33,17 @@ The code below would render the following image
                 
-                    sequenceDiagram
-                        participant Alice
-                        participant Bob
-                        Alice->>John: Hello John, how are you?
-                        loop Healthcheck
-                        John->>John: Fight against hypochondria
-                        end
-                        Note right of John: Rational thoughts <br/>prevail...
-                        John-->>Alice: Great!
-                        John->>Bob: How about you?
-                        Bob-->>John: Jolly good!
+sequenceDiagram
+    participant Alice
+    participant Bob
+    Alice->>John: Hello John, how are you?
+    loop Healthcheck
+    John->>John: Fight against hypochondria
+    end
+    Note right of John: Rational thoughts <br/>prevail...
+    John-->>Alice: Great!
+    John->>Bob: How about you?
+    Bob-->>John: Jolly good!
                 
             
@@ -55,20 +55,20 @@ The code below would render the following image
                 
-                    classDiagram
-                        Class01 <|-- AveryLongClass : Cool
-                        Class03 *-- Class04
-                        Class05 o-- Class06
-                        Class07 .. Class08
-                        Class09 --> C2 : Where am i?
-                        Class09 --* C3
-                        Class09 --|> Class07
-                        Class07 : equals()
-                        Class07 : Object[] elementData
-                        Class01 : size()
-                        Class01 : int chimp
-                        Class01 : int gorilla
-                        Class08 <--> C2: Cool label
+classDiagram
+    Class01 <|-- AveryLongClass : Cool
+    Class03 *-- Class04
+    Class05 o-- Class06
+    Class07 .. Class08
+    Class09 --> C2 : Where am i?
+    Class09 --* C3
+    Class09 --|> Class07
+    Class07 : equals()
+    Class07 : Object[] elementData
+    Class01 : size()
+    Class01 : int chimp
+    Class01 : int gorilla
+    Class08 <--> C2: Cool label
                 
             
From d45e21a786ee5511eec29dfcbb8c93375f8594f8 Mon Sep 17 00:00:00 2001 From: HustLion Date: Wed, 27 Jul 2016 19:49:35 +0800 Subject: [PATCH 06/13] Adjust img to make it look better --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index db2a011de..039edd779 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ graph TD; - + Example 1 From e277f286c02ce5fad587debb149bd22799ad3077 Mon Sep 17 00:00:00 2001 From: HustLion Date: Wed, 27 Jul 2016 19:55:39 +0800 Subject: [PATCH 07/13] td style not accepted, so use p style --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 039edd779..55985dfed 100644 --- a/README.md +++ b/README.md @@ -25,8 +25,10 @@ graph TD; - - Example 1 + +

+ Example 1 +

From da717b5a91d76f1fb66f7f02490839f9ce50a45b Mon Sep 17 00:00:00 2001 From: HustLion Date: Wed, 27 Jul 2016 19:57:50 +0800 Subject: [PATCH 08/13] reindent loop --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 55985dfed..de9887bcc 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ sequenceDiagram participant Bob Alice->>John: Hello John, how are you? loop Healthcheck - John->>John: Fight against hypochondria + John->>John: Fight against hypochondria end Note right of John: Rational thoughts <br/>prevail... John-->>Alice: Great! From 3f2cd6515967bcc272185f29b63a7db8de916382 Mon Sep 17 00:00:00 2001 From: HustLion Date: Wed, 27 Jul 2016 20:01:01 +0800 Subject: [PATCH 09/13] made a better shot --- docs/img/class-diagram.png | Bin 26820 -> 26940 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/img/class-diagram.png b/docs/img/class-diagram.png index e3e234437f3f44c7937d48023385c577d8b26348..bf6e379e1abf5db97fcd3d7bb06cad26400b8a7f 100644 GIT binary patch literal 26940 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 literal 26820 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 From d59ac53f646232904ae9702e6caeb9a09daf9285 Mon Sep 17 00:00:00 2001 From: SwhGo_oN Date: Mon, 29 Aug 2016 20:15:04 +0800 Subject: [PATCH 10/13] Fix typo: `pats` -> `paths` --- src/mermaidAPI.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mermaidAPI.js b/src/mermaidAPI.js index daecff9a7..9d0379a8e 100644 --- a/src/mermaidAPI.js +++ b/src/mermaidAPI.js @@ -71,7 +71,7 @@ var config = { startOnLoad: true, /** - * **arrowMarkerAbsolute** - This options controls whether or arrow markers in html code will be absolute pats or + * **arrowMarkerAbsolute** - This options controls whether or arrow markers in html code will be absolute paths or * an anchor, #. This matters if you are using base tag settings. */ arrowMarkerAbsolute: false, From 7e9419f299b2db29549655909854fc836621afe2 Mon Sep 17 00:00:00 2001 From: The Alchemist Date: Thu, 1 Sep 2016 15:48:49 -0400 Subject: [PATCH 11/13] Add missing space for 'Labels out of bounds' section If you go to http://knsv.github.io/mermaid/#simple-usage-on-a-web-page, you'll see that the '###' did not get translated, probably because there needs to be a space between '###' and the text. --- docs/content/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content/usage.md b/docs/content/usage.md index 9627b9e00..9781e7926 100644 --- a/docs/content/usage.md +++ b/docs/content/usage.md @@ -77,7 +77,7 @@ Would end up like this: ``` An id is also added to mermaid tags without id. -###Labels out of bounds +### Labels out of bounds If you use dynamically loaded fonts that are loaded through CSS, such as Google fonts, mermaid should wait for the whole page to have been loaded (dom + assets, particularly the fonts file). From 0c62c08abdecb621d773c56605dedba8fee12dea Mon Sep 17 00:00:00 2001 From: Ben Page Date: Wed, 28 Sep 2016 13:56:23 -0500 Subject: [PATCH 12/13] fixed css, sequenceConfig, and ganttConfig being sent as buffer to phantomjs made verbose cli argument a boolean --- lib/cli.js | 40 ++++++++++++++------------ lib/index.js | 2 +- lib/phantomscript.js | 64 +++++++++++++---------------------------- test/cli_test-output.js | 10 +++++-- 4 files changed, 50 insertions(+), 66 deletions(-) diff --git a/lib/cli.js b/lib/cli.js index ed037a589..db28e62e4 100644 --- a/lib/cli.js +++ b/lib/cli.js @@ -29,7 +29,7 @@ function cli(options) { , css: 't' , width: 'w' } - , 'boolean': ['help', 'png', 'svg'] + , 'boolean': ['help', 'png', 'svg', 'verbose'] , 'string': ['outputDir'] } @@ -94,25 +94,38 @@ cli.prototype.parse = function(argv, next) { else { options.png = true } - + if (options.sequenceConfig) { - options.sequenceConfig = checkConfig(options.sequenceConfig) + try { + fs.accessSync(options.sequenceConfig, fs.R_OK) + + } catch (err) { + this.errors.push(err) + } + } else { + options.sequenceConfig = null } - + if (options.ganttConfig) { - options.ganttConfig = checkConfig(options.ganttConfig) + try { + fs.accessSync(options.ganttConfig, fs.R_OK) + + } catch (err) { + this.errors.push(err) + } + } else { + options.ganttConfig = null } if (options.css) { try { - options.css = fs.readFileSync(options.css, 'utf8') - + fs.accessSync(options.css, fs.R_OK) } catch (err) { this.errors.push(err) } } else { - options.css = fs.readFileSync(path.join(__dirname, '..', 'dist', 'mermaid.css')) + options.css = path.join(__dirname, '..', 'dist', 'mermaid.css') } // set svg/png flags appropriately @@ -136,17 +149,6 @@ cli.prototype.parse = function(argv, next) { } } -function checkConfig(configPath) { - try { - var text = fs.readFileSync(configPath, 'utf8'); - JSON.parse(text) - return text - } catch (e) { - console.log(e); - return null; - } -} - function createCheckPhantom(_phantomPath) { var phantomPath = _phantomPath , phantomVersion diff --git a/lib/index.js b/lib/index.js index a7dd65e70..5da3683b2 100644 --- a/lib/index.js +++ b/lib/index.js @@ -18,7 +18,7 @@ function processMermaid(files, _options, _next) { , outputDir , options.png , options.svg - , options.css || '' + , options.css , options.sequenceConfig , options.ganttConfig , options.verbose diff --git a/lib/phantomscript.js b/lib/phantomscript.js index cd4ce259c..555591583 100644 --- a/lib/phantomscript.js +++ b/lib/phantomscript.js @@ -28,7 +28,6 @@ var system = require('system') , fs = require('fs') , webpage = require('webpage') - var page = webpage.create() , files = system.args.slice(9, system.args.length) , width = system.args[8] @@ -40,21 +39,15 @@ var options = { outputDir: system.args[1] , png: system.args[2] === 'true' ? true : false , svg: system.args[3] === 'true' ? true : false - , css: system.args[4] !== '' ? system.args[4] : '* { margin: 0; padding: 0; }' - , sequenceConfig: system.args[5] - , ganttConfig: system.args[6] + , css: fs.read(system.args[4]) + , sequenceConfig: system.args[5] !== 'null' ? JSON.parse(fs.read(system.args[5])) : '{}' + , ganttConfig: system.args[6] !== 'null' ? fs.read(system.args[6]) : '{}' , verbose: system.args[7] === 'true' ? true : false , width: width } , log = logger(options.verbose) - // If no css is suuplied make sure a fixed witdth is given to the gant renderer - if(system.args[3] !== ''){ - if(typeof options.ganttConfig === 'undefined'){ - options.ganttConfig = {}; - } - options.ganttConfig.useWidth = 1200; - } +options.sequenceConfig.useMaxWidth = false; page.content = [ '' @@ -218,7 +211,7 @@ function resolveForeignObjects(element) { function executeInPage(data) { var xmlSerializer = new XMLSerializer() , contents = data.contents - , sequenceConfig = data.sequenceConfig + , sequenceConfig = JSON.stringify(data.sequenceConfig) , ganttConfig = data.ganttConfig , toRemove , el @@ -229,7 +222,7 @@ function executeInPage(data) { , width , height , confWidth = data.confWidth - + toRemove = document.getElementsByClassName('mermaid') if (toRemove && toRemove.length) { for (var i = 0, len = toRemove.length; i < len; i++) { @@ -242,41 +235,24 @@ function executeInPage(data) { elContent = document.createTextNode(contents) el.appendChild(elContent) //el.innerText = 'hello\uD800' //contents; - + document.body.appendChild(el) - - mermaid.initialize({ - sequenceDiagram:{useMaxWidth:false}, - flowchart:{useMaxWidth:false}, - logLevel:1 - }); + + var config = { + sequenceDiagram: sequenceConfig, + flowchart: {useMaxWidth: false}, + logLevel: 1 + }; + + mermaid.initialize(config); + //console.log('after initialize',sequenceConfig); - if(typeof sequenceConfig !== undefined && sequenceConfig !== 'undefined'){ - //sc = document.createElement("script") - //scContent = document.createTextNode('mermaid.sequenceConfig = JSON.parse(' + JSON.stringify(sequenceConfig) + ');') - //sc.appendChild(scContent) + sc = document.createElement("script") + scContent = document.createTextNode('mermaid.ganttConfig = ' + ganttConfig + ';') + sc.appendChild(scContent) - //document.body.appendChild(sc) - mermaid.initialize({ - sequenceDiagram:JSON.parse(sequenceConfig) - }); - } - - //console.log('after initialize 2'); - if(typeof ganttConfig !== undefined && ganttConfig !== 'undefined'){ - sc = document.createElement("script") - scContent = document.createTextNode('mermaid.ganttConfig = JSON.parse(' + JSON.stringify(ganttConfig) + ');') - sc.appendChild(scContent) - - document.body.appendChild(sc) - }else{ - sc = document.createElement("script") - scContent = document.createTextNode('mermaid.ganttConfig = {useWidth:1200};') - sc.appendChild(scContent) - - document.body.appendChild(sc) - } + document.body.appendChild(sc) mermaid.init(); diff --git a/test/cli_test-output.js b/test/cli_test-output.js index befaa0f08..775193e27 100644 --- a/test/cli_test-output.js +++ b/test/cli_test-output.js @@ -24,12 +24,18 @@ var singleFile = { , outputDir: path.join(process.cwd(),'test/tmp2/') , phantomPath: path.join(process.cwd(),phantomCmd) , width : 1200 + , css: path.join(__dirname, '..', 'dist', 'mermaid.css') + , sequenceConfig: null + , ganttConfig: null } , multiFile = { files: [path.join('test','fixtures','test.mermaid'), path.join('test','fixtures','test2.mermaid')] , outputDir: 'test/tmp2/' , phantomPath: path.join(process.cwd(),phantomCmd) , width : 1200 + , css: path.join(__dirname, '..', 'dist', 'mermaid.css') + , sequenceConfig: null + , ganttConfig: null } @@ -40,7 +46,7 @@ test('output of single png', function(t) { opt = clone(singleFile) opt.png = true - + mermaid.process(opt.files, opt, function(code) { t.equal(code, 0, 'has clean exit code') @@ -113,7 +119,7 @@ test('output including CSS', function(t) { one = fs.statSync(filename) //console.log('one: '+opt.files[0]); - opt2.css = fs.readFileSync(path.join('test','fixtures','test.css'), 'utf8') + opt2.css = path.join('test','fixtures','test.css') //console.log(opt2.css); console.log('Generating #2'); From 6a6d6b6f85e588122497df9279ed09bb7c9a51bd Mon Sep 17 00:00:00 2001 From: Yohan Lasorsa Date: Wed, 5 Oct 2016 15:20:58 +0200 Subject: [PATCH 13/13] Added neutral style --- src/less/neutral/classDiagram.less | 69 +++++++++++++ src/less/neutral/flow.less | 30 ++++++ src/less/neutral/gantt.less | 135 ++++++++++++++++++++++++++ src/less/neutral/mermaid.less | 24 +++++ src/less/neutral/sequenceDiagram.less | 75 ++++++++++++++ src/less/neutral/variables.less | 66 +++++++++++++ 6 files changed, 399 insertions(+) create mode 100644 src/less/neutral/classDiagram.less create mode 100644 src/less/neutral/flow.less create mode 100644 src/less/neutral/gantt.less create mode 100644 src/less/neutral/mermaid.less create mode 100644 src/less/neutral/sequenceDiagram.less create mode 100644 src/less/neutral/variables.less diff --git a/src/less/neutral/classDiagram.less b/src/less/neutral/classDiagram.less new file mode 100644 index 000000000..cb7bf0fe3 --- /dev/null +++ b/src/less/neutral/classDiagram.less @@ -0,0 +1,69 @@ +g.classGroup text { + fill: @nodeBorder; + stroke:none; + font-family: Arial, Helvetica, sans-serif; + font-size: 14px; +} + +g.classGroup rect { + fill:@nodeBkg; + stroke: @nodeBorder; +} + +g.classGroup line { + stroke: @nodeBorder; + stroke-width:1; +} + +svg .classLabel .box { + stroke: none; + stroke-width:0; + fill: @nodeBkg; + opacity: 0.5; +} + +svg .classLabel .label { + fill: @nodeBorder; +} + +.relation { + stroke: @nodeBorder; + stroke-width: 1; + fill:none; +} + +.composition{ + fill : @nodeBorder; + stroke: @nodeBorder; + stroke-width:1; +} +#compositionStart { + .composition; +} +#compositionEnd { + .composition; +} +.aggregation{ + fill : @nodeBkg; + stroke: @nodeBorder; + stroke-width:1; +} +#aggregationStart { + .aggregation; +} +#aggregationEnd { + .aggregation; +} + +#dependencyStart { + .composition; +} +#dependencyEnd { + .composition; +} +#extensionStart { + .composition; +} +#extensionEnd { + .composition; +} \ No newline at end of file diff --git a/src/less/neutral/flow.less b/src/less/neutral/flow.less new file mode 100644 index 000000000..270d5f3f0 --- /dev/null +++ b/src/less/neutral/flow.less @@ -0,0 +1,30 @@ +.mermaid .label { color: @text } + +.node rect, +.node circle, +.node ellipse, +.node polygon { + fill: @mainBkg; + stroke: @nodeBorder; + stroke-width: 1px; +} + +.edgePath .path { + stroke: @lineColor; + stroke-width: 1.5px; +} + +.edgeLabel { + background-color: @edgeLabelBackground; +} + +.cluster rect { + fill: @secondBkg !important; + rx: 4 !important; + stroke: @clusterBorder !important; + stroke-width: 1px !important; +} + +.cluster text { + fill: @titleColor; +} diff --git a/src/less/neutral/gantt.less b/src/less/neutral/gantt.less new file mode 100644 index 000000000..76368387e --- /dev/null +++ b/src/less/neutral/gantt.less @@ -0,0 +1,135 @@ +/** Section styling */ +.section { + stroke: none; + opacity:0.2; +} +.section0{ + fill: @sectionBkgColor; +} +.section2 { + fill: @sectionBkgColor2; +} +.section1,.section3 { + fill: @altSectionBkgColor; + opacity: 0.2; +} + +.sectionTitle0 { fill: @titleColor;} +.sectionTitle1 { fill: @titleColor;} +.sectionTitle2 { fill: @titleColor;} +.sectionTitle3 { fill: @titleColor;} + + +.sectionTitle { + text-anchor: start; + font-size: 11px; + text-height: 14px; +} + +/* Grid and axis */ +.grid .tick { + stroke: @gridColor; + opacity: 0.3; + shape-rendering: crispEdges; +} +.grid path { + stroke-width: 0; +} + +/* Today line */ +.today { + fill: none; + stroke: @todayLineColor; + stroke-width: 2px; +} + +/* Task styling */ +/* Default task */ +.task { + stroke-width: 2; +} + +.taskText { + text-anchor: middle; + font-size: 11px; +} +.taskTextOutsideRight { + fill: @taskTextDarkColor; + text-anchor: start; + font-size: 11px; +} +.taskTextOutsideLeft { + fill: @taskTextDarkColor; + text-anchor: end; + font-size: 11px; +} + +/* Specific task settings for the sections*/ + +.taskText0, .taskText1, .taskText2, .taskText3 { + fill: @taskTextColor; +} + +.task0, .task1, .task2, .task3 { + fill: @taskBkgColor; + stroke: @taskBorderColor; +} + +.taskTextOutside0,.taskTextOutside2, { + fill: @taskTextOutsideColor; +} +.taskTextOutside1, .taskTextOutside3 { + fill: @taskTextOutsideColor; +} + +/* Active task */ +.active0, .active1, .active2, .active3 { + fill: @activeTaskBkgColor; + stroke: @activeTaskBorderColor; +} + +.activeText0, .activeText1, .activeText2, .activeText3 { + fill: @taskTextDarkColor !important; +} +/* Completed task */ +.done0, .done1, .done2, .done3 { + stroke: @doneTaskBorderColor; + fill: @doneTaskBkgColor; + stroke-width: 2; +} + +.doneText0, .doneText1, .doneText2, .doneText3 { + fill: @taskTextDarkColor !important; +} + +/* Tasks on the critical line */ +.crit0, .crit1, .crit2, .crit3 { + stroke:@critBorderColor; + fill: @critBkgColor; + stroke-width: 2; +} +.activeCrit0, .activeCrit1, .activeCrit2, .activeCrit3 { + stroke: @critBorderColor; + fill: @activeTaskBkgColor; + stroke-width: 2; +} +.doneCrit0, .doneCrit1, .doneCrit2, .doneCrit3 { + stroke: @critBorderColor; + fill: @doneTaskBkgColor; + stroke-width: 2; + cursor: pointer; + //shape-rendering: crispEdges; +} +.doneCritText0, .doneCritText1, .doneCritText2, .doneCritText3 { + fill: @taskTextDarkColor !important; +} +.activeCritText0, .activeCritText1, .activeCritText2, .activeCritText3 { + fill: @taskTextDarkColor !important; +} + +.titleText { + text-anchor: middle; + font-size: 18px; + fill: @taskTextDarkColor; +} + diff --git a/src/less/neutral/mermaid.less b/src/less/neutral/mermaid.less new file mode 100644 index 000000000..06568095d --- /dev/null +++ b/src/less/neutral/mermaid.less @@ -0,0 +1,24 @@ +@import "variables"; +@import "flow"; +@import "sequenceDiagram"; +@import "gantt"; +@import "classDiagram"; + +.node text { + font-family: Arial, Helvetica, sans-serif; + font-size:14px; +} + +div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: Arial, Helvetica, sans-serif; + font-size: 12px; + background: @secondBkg; + border: 1px solid @border2; + border-radius: 2px; + pointer-events: none; + z-index:100; +} \ No newline at end of file diff --git a/src/less/neutral/sequenceDiagram.less b/src/less/neutral/sequenceDiagram.less new file mode 100644 index 000000000..e42c061de --- /dev/null +++ b/src/less/neutral/sequenceDiagram.less @@ -0,0 +1,75 @@ + + +.actor { + stroke: @actorBorder; + fill: @actorBkg; +} +text.actor { + fill: @actorTextColor; + stroke: none; +} + +.actor-line { + stroke: @actorLineColor; +} + +.messageLine0 { + stroke-width: 1.5; + stroke-dasharray: "2 2"; + marker-end: "url(#arrowhead)"; + stroke: @signalColor; +} + +.messageLine1 { + stroke-width: 1.5; + stroke-dasharray: "2 2"; + stroke: @signalColor; +} + +#arrowhead { + fill: @signalColor; +} +#crosshead path { + fill: @signalColor !important; + stroke: @signalColor !important; + +} +.messageText { + fill: @signalTextColor; + stroke: none; +} + +.labelBox { + stroke: @labelBoxBorderColor; + fill: @labelBoxBkgColor; +} + +.labelText { + fill: @labelTextColor; + stroke: none; +} + +.loopText { + fill: @labelTextColor; + stroke: none; +} + +.loopLine { + stroke-width: 2; + stroke-dasharray: "2 2"; + marker-end: "url(#arrowhead)"; + stroke: @labelBoxBorderColor; +} + +.note { + //stroke: #decc93; + stroke: @noteBorderColor; + fill: @noteBkgColor; +} + +.noteText { + fill: black; + stroke: none; + font-family: Arial, Helvetica, sans-serif; + font-size: 14px; +} \ No newline at end of file diff --git a/src/less/neutral/variables.less b/src/less/neutral/variables.less new file mode 100644 index 000000000..ccf93fb01 --- /dev/null +++ b/src/less/neutral/variables.less @@ -0,0 +1,66 @@ +@mainBkg: #eee; +@secondBkg: lighten(@contrast, 55%); +@lineColor: #666; +@border1: #999; +@border2: @contrast; + +@note: #ffa; +@text: #333; +@contrast: #26a; +@critical: #d42; +@done: #bbb; + +/* Flowchart variables */ +@nodeBkg: @mainBkg; +@nodeBorder: @border1; + +@clusterBkg: @secondBkg; +@clusterBorder: @border2; + +@defaultLinkColor: @lineColor; + +@titleColor: @text; + +@edgeLabelBackground: white; + +/* Sequence Diagram variables */ +@actorBorder: @border1; +@actorBkg: @mainBkg; +@actorTextColor: @text; +@actorLineColor: @lineColor; + +@signalColor: @text; +@signalTextColor: @text; + +@labelBoxBkgColor: @contrast; +@labelBoxBorderColor: @contrast; +@labelTextColor: white; + +@noteBorderColor: darken(@note, 60%); +@noteBkgColor: @note; + +/* Gantt chart variables */ +@sectionBkgColor: lighten(@contrast, 30%); +@altSectionBkgColor: white; +@sectionBkgColor2: lighten(@contrast, 30%); + +@taskBorderColor: darken(@contrast, 10%); +@taskBkgColor: @contrast; +@taskTextColor: @taskTextLightColor; +@taskTextOutsideColor: @taskTextDarkColor; + +@activeTaskBorderColor: @taskBorderColor; +@activeTaskBkgColor: @mainBkg; + +@gridColor: lighten(@border1, 30%); + +@doneTaskBkgColor: @done; +@doneTaskBorderColor: @lineColor; + +@critBorderColor: darken(@critBkgColor, 10%); +@critBkgColor: @critical; + +@taskTextLightColor: white; +@taskTextDarkColor: @text; + +@todayLineColor: @critBkgColor; \ No newline at end of file