mermaid
Version:
Markdownish syntax for generating flowcharts, sequence diagrams and gantt charts.
634 lines (548 loc) • 53.4 kB
HTML
<!DOCTYPE html>
<html>
<head>
<title>main.js</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link rel="stylesheet" media="all" href="../doc-style.css" />
<script src="../doc-filelist.js"></script>
<script>
var relativeDir = "../", thisFile = "Users/knut/Documents/source/mermaid/src/main.js", defaultSidebar = true;
</script>
<script src="../doc-script.js"></script>
<script src="../mermaid.js"></script>
<link rel="stylesheet" href="../mermaid.css" />
</head>
<body>
<div id="sidebar_wrapper">
<div id="sidebar_switch">
<span class="tree">Files</span>
<span class="headings">Headings</span>
</div>
<div id="tree"></div>
<div id="headings">
<div class="heading h1">
<a href="#main.js">main.js</a>
</div>
</div>
</div>
<div id="sidebar-toggle"></div>
<div id="container"><div class="background highlight"></div>
<table cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td class="docs">
<div class="pilwrap" id="main.js">
<h1>
<a href="#main.js" name="main.js" class="pilcrow">¶</a>main.js
</h1>
</div>
</td>
<td class="code highlight"></td>
</tr>
<tr>
<td class="docs">
<div class="pilwrap">
<a class="pilcrow" href="#section-1" id="section-1">¶</a>
</div>
</td>
<td class="code highlight"><div class="highlight"><pre><span class="kd">var</span> <span class="nx">graph</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./diagrams/flowchart/graphDb'</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">flow</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./diagrams/flowchart/parser/flow'</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">utils</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./utils'</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">flowRenderer</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./diagrams/flowchart/flowRenderer'</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">seq</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./diagrams/sequenceDiagram/sequenceRenderer'</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">info</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./diagrams/example/exampleRenderer'</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">he</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'he'</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">infoParser</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./diagrams/example/parser/example'</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">flowParser</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./diagrams/flowchart/parser/flow'</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">dotParser</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./diagrams/flowchart/parser/dot'</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">sequenceParser</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./diagrams/sequenceDiagram/parser/sequenceDiagram'</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">sequenceDb</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./diagrams/sequenceDiagram/sequenceDb'</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">infoDb</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./diagrams/example/exampleDb'</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">gantt</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./diagrams/gantt/ganttRenderer'</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">ganttParser</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./diagrams/gantt/parser/gantt'</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">ganttDb</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./diagrams/gantt/ganttDb'</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">d3</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./d3'</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">nextId</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="kd">var</span> <span class="nx">log</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./logger'</span><span class="p">).</span><span class="nx">create</span><span class="p">();</span>
</pre></div>
</td>
</tr>
<tr>
<td class="docs">
<div class="pilwrap">
<a class="pilcrow" href="#section-2" id="section-2">¶</a>
</div>
<div class="dox">
<div class="summary"><p>Function that parses a mermaid diagram defintion. If parsing fails the parseError callback is called and an error is
thrown and</p>
</div>
<div class="body">
</div>
<div class="details">
<div class="dox_tag_title">Params</div>
<div class="dox_tag_detail">
<span class="dox_tag_name">text
</span>
</div>
</div>
</div>
</td>
<td class="code highlight"><div class="highlight"><pre>
<span class="kd">var</span> <span class="nx">parse</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">text</span><span class="p">){</span>
<span class="kd">var</span> <span class="nx">graphType</span> <span class="o">=</span> <span class="nx">utils</span><span class="p">.</span><span class="nx">detectType</span><span class="p">(</span><span class="nx">text</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">parser</span><span class="p">;</span>
<span class="k">switch</span><span class="p">(</span><span class="nx">graphType</span><span class="p">){</span>
<span class="k">case</span> <span class="s1">'graph'</span><span class="o">:</span>
<span class="nx">parser</span> <span class="o">=</span> <span class="nx">flowParser</span><span class="p">;</span>
<span class="nx">parser</span><span class="p">.</span><span class="nx">parser</span><span class="p">.</span><span class="nx">yy</span> <span class="o">=</span> <span class="nx">graph</span><span class="p">;</span>
<span class="k">break</span><span class="p">;</span>
<span class="k">case</span> <span class="s1">'dotGraph'</span><span class="o">:</span>
<span class="nx">parser</span> <span class="o">=</span> <span class="nx">dotParser</span><span class="p">;</span>
<span class="nx">parser</span><span class="p">.</span><span class="nx">parser</span><span class="p">.</span><span class="nx">yy</span> <span class="o">=</span> <span class="nx">graph</span><span class="p">;</span>
<span class="k">break</span><span class="p">;</span>
<span class="k">case</span> <span class="s1">'sequenceDiagram'</span><span class="o">:</span>
<span class="nx">parser</span> <span class="o">=</span> <span class="nx">sequenceParser</span><span class="p">;</span>
<span class="nx">parser</span><span class="p">.</span><span class="nx">parser</span><span class="p">.</span><span class="nx">yy</span> <span class="o">=</span> <span class="nx">sequenceDb</span><span class="p">;</span>
<span class="k">break</span><span class="p">;</span>
<span class="k">case</span> <span class="s1">'info'</span><span class="o">:</span>
<span class="nx">parser</span> <span class="o">=</span> <span class="nx">infoParser</span><span class="p">;</span>
<span class="nx">parser</span><span class="p">.</span><span class="nx">parser</span><span class="p">.</span><span class="nx">yy</span> <span class="o">=</span> <span class="nx">infoDb</span><span class="p">;</span>
<span class="k">break</span><span class="p">;</span>
<span class="k">case</span> <span class="s1">'gantt'</span><span class="o">:</span>
<span class="nx">parser</span> <span class="o">=</span> <span class="nx">ganttParser</span><span class="p">;</span>
<span class="nx">parser</span><span class="p">.</span><span class="nx">parser</span><span class="p">.</span><span class="nx">yy</span> <span class="o">=</span> <span class="nx">ganttDb</span><span class="p">;</span>
<span class="k">break</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">try</span><span class="p">{</span>
<span class="nx">parser</span><span class="p">.</span><span class="nx">parse</span><span class="p">(</span><span class="nx">text</span><span class="p">);</span>
<span class="k">return</span> <span class="kc">true</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">catch</span><span class="p">(</span><span class="nx">err</span><span class="p">){</span>
<span class="k">return</span> <span class="kc">false</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">};</span>
</pre></div>
</td>
</tr>
<tr>
<td class="docs">
<div class="pilwrap">
<a class="pilcrow" href="#section-3" id="section-3">¶</a>
</div>
<div class="dox">
<div class="summary"><p>Function that goes through the document to find the chart definitions in there and render them.</p>
</div>
<div class="body"><p>The function tags the processed attributes with the attribute data-processed and ignores found elements with the
attribute already set. This way the init function can be triggered several times.</p>
<p>Optionally, <code>init</code> can accept in the second argument one of the following:</p>
<ul>
<li>a DOM Node</li>
<li>an array of DOM nodes (as would come from a jQuery selector)</li>
<li>a W3C selector, a la <code>.mermaid</code></li>
</ul>
<div class="highlight"><pre><code><span class="nx">graph</span> <span class="nx">LR</span><span class="p">;</span>
<span class="nx">a</span><span class="p">(</span><span class="nx">Find</span> <span class="nx">elements</span><span class="p">)</span><span class="o">--</span><span class="nx">b</span><span class="p">{</span><span class="nx">Processed</span><span class="p">};</span>
<span class="nx">b</span><span class="o">--|</span><span class="nx">Yes</span><span class="o">|</span><span class="nx">c</span><span class="p">(</span><span class="nx">Leave</span> <span class="nx">element</span><span class="p">);</span>
<span class="nx">c</span><span class="o">--|</span><span class="nx">No</span> <span class="o">|</span><span class="nx">d</span><span class="p">(</span><span class="nx">Transform</span><span class="p">);</span>
</code></pre></div>
</div>
</div>
</td>
<td class="code highlight"><div class="highlight"><pre>
</pre></div>
</td>
</tr>
<tr>
<td class="docs">
<div class="pilwrap">
<a class="pilcrow" href="#section-4" id="section-4">¶</a>
</div>
<div class="dox">
<div class="summary"><p>Renders the mermaid diagrams</p>
</div>
<div class="body">
</div>
<div class="details">
<div class="dox_tag_title">*</div>
<div class="dox_tag_detail">
<span>param nodes- a css selector or an array of nodes
</span>
</div>
</div>
</div>
</td>
<td class="code highlight"><div class="highlight"><pre>
<span class="kd">var</span> <span class="nx">init</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>
<span class="kd">var</span> <span class="nx">nodes</span><span class="p">;</span>
<span class="k">if</span><span class="p">(</span><span class="nx">arguments</span><span class="p">.</span><span class="nx">length</span> <span class="o">===</span> <span class="mi">2</span><span class="p">){</span>
</pre></div>
</td>
</tr>
<tr>
<td class="docs">
<div class="pilwrap">
<a class="pilcrow" href="#section-5" id="section-5">¶</a>
</div>
<p>sequence config was passed as #1</p>
</td>
<td class="code highlight"><div class="highlight"><pre>
<span class="k">if</span><span class="p">(</span><span class="k">typeof</span> <span class="nx">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!==</span> <span class="s1">'undefined'</span><span class="p">){</span>
<span class="nx">mermaid</span><span class="p">.</span><span class="nx">sequenceConfig</span> <span class="o">=</span> <span class="nx">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span>
<span class="p">}</span>
<span class="nx">nodes</span> <span class="o">=</span> <span class="nx">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span>
<span class="p">}</span>
<span class="k">else</span><span class="p">{</span>
<span class="nx">nodes</span> <span class="o">=</span> <span class="nx">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span>
<span class="p">}</span>
<span class="nx">nodes</span> <span class="o">=</span> <span class="nx">nodes</span> <span class="o">===</span> <span class="kc">undefined</span> <span class="o">?</span> <span class="nb">document</span><span class="p">.</span><span class="nx">querySelectorAll</span><span class="p">(</span><span class="s1">'.mermaid'</span><span class="p">)</span>
<span class="o">:</span> <span class="k">typeof</span> <span class="nx">nodes</span> <span class="o">===</span> <span class="s2">"string"</span> <span class="o">?</span> <span class="nb">document</span><span class="p">.</span><span class="nx">querySelectorAll</span><span class="p">(</span><span class="nx">nodes</span><span class="p">)</span>
<span class="o">:</span> <span class="nx">nodes</span> <span class="k">instanceof</span> <span class="nx">Node</span> <span class="o">?</span> <span class="p">[</span><span class="nx">nodes</span><span class="p">]</span>
</pre></div>
</td>
</tr>
<tr>
<td class="docs">
<div class="pilwrap">
<a class="pilcrow" href="#section-6" id="section-6">¶</a>
</div>
<p>Last case - sequence config was passed pick next </p>
</td>
<td class="code highlight"><div class="highlight"><pre>
<span class="o">:</span> <span class="nx">nodes</span><span class="p">;</span>
<span class="kd">var</span> <span class="nx">i</span><span class="p">;</span>
<span class="nx">log</span><span class="p">.</span><span class="nx">debug</span><span class="p">(</span><span class="s1">'Found '</span><span class="p">,</span><span class="nx">nodes</span><span class="p">.</span><span class="nx">length</span><span class="p">,</span><span class="s1">' nodes'</span><span class="p">);</span>
<span class="k">for</span> <span class="p">(</span><span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o"><</span> <span class="nx">nodes</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
<span class="kd">var</span> <span class="nx">element</span> <span class="o">=</span> <span class="nx">nodes</span><span class="p">[</span><span class="nx">i</span><span class="p">];</span>
</pre></div>
</td>
</tr>
<tr>
<td class="docs">
<div class="pilwrap">
<a class="pilcrow" href="#section-7" id="section-7">¶</a>
</div>
<p>Check if previously processed</p>
</td>
<td class="code highlight"><div class="highlight"><pre>
<span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="nx">element</span><span class="p">.</span><span class="nx">getAttribute</span><span class="p">(</span><span class="s2">"data-processed"</span><span class="p">))</span> <span class="p">{</span>
<span class="nx">element</span><span class="p">.</span><span class="nx">setAttribute</span><span class="p">(</span><span class="s2">"data-processed"</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span>
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
<span class="k">continue</span><span class="p">;</span>
<span class="p">}</span>
<span class="kd">var</span> <span class="nx">id</span> <span class="o">=</span> <span class="s1">'mermaidChart'</span> <span class="o">+</span> <span class="nx">nextId</span><span class="o">++</span><span class="p">;</span>
<span class="kd">var</span> <span class="nx">txt</span> <span class="o">=</span> <span class="nx">element</span><span class="p">.</span><span class="nx">innerHTML</span><span class="p">;</span>
<span class="nx">txt</span> <span class="o">=</span> <span class="nx">txt</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/>/g</span><span class="p">,</span><span class="s1">'&gt;'</span><span class="p">);</span>
<span class="nx">txt</span> <span class="o">=</span> <span class="nx">txt</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/</g</span><span class="p">,</span><span class="s1">'&lt;'</span><span class="p">);</span>
<span class="nx">txt</span> <span class="o">=</span> <span class="nx">he</span><span class="p">.</span><span class="nx">decode</span><span class="p">(</span><span class="nx">txt</span><span class="p">).</span><span class="nx">trim</span><span class="p">();</span>
<span class="nx">element</span><span class="p">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="s1">'<svg id="'</span> <span class="o">+</span> <span class="nx">id</span> <span class="o">+</span> <span class="s1">'" width="100%" xmlns="http://www.w3.org/2000/svg">'</span> <span class="o">+</span>
<span class="s1">'<g />'</span> <span class="o">+</span>
<span class="s1">'</svg>'</span><span class="p">;</span>
<span class="kd">var</span> <span class="nx">graphType</span> <span class="o">=</span> <span class="nx">utils</span><span class="p">.</span><span class="nx">detectType</span><span class="p">(</span><span class="nx">txt</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">classes</span> <span class="o">=</span> <span class="p">{};</span>
<span class="k">switch</span><span class="p">(</span><span class="nx">graphType</span><span class="p">){</span>
<span class="k">case</span> <span class="s1">'graph'</span><span class="o">:</span>
<span class="nx">classes</span> <span class="o">=</span> <span class="nx">flowRenderer</span><span class="p">.</span><span class="nx">getClasses</span><span class="p">(</span><span class="nx">txt</span><span class="p">,</span> <span class="kc">false</span><span class="p">);</span>
<span class="k">if</span><span class="p">(</span><span class="k">typeof</span> <span class="nx">mermaid</span><span class="p">.</span><span class="nx">flowchartConfig</span> <span class="o">===</span> <span class="s1">'object'</span><span class="p">){</span>
<span class="nx">flowRenderer</span><span class="p">.</span><span class="nx">setConf</span><span class="p">(</span><span class="nx">mermaid</span><span class="p">.</span><span class="nx">flowchartConfig</span><span class="p">);</span>
<span class="p">}</span>
<span class="nx">flowRenderer</span><span class="p">.</span><span class="nx">draw</span><span class="p">(</span><span class="nx">txt</span><span class="p">,</span> <span class="nx">id</span><span class="p">,</span> <span class="kc">false</span><span class="p">);</span>
<span class="nx">utils</span><span class="p">.</span><span class="nx">cloneCssStyles</span><span class="p">(</span><span class="nx">element</span><span class="p">.</span><span class="nx">firstChild</span><span class="p">,</span> <span class="nx">classes</span><span class="p">);</span>
<span class="nx">graph</span><span class="p">.</span><span class="nx">bindFunctions</span><span class="p">();</span>
<span class="k">break</span><span class="p">;</span>
<span class="k">case</span> <span class="s1">'dotGraph'</span><span class="o">:</span>
<span class="nx">classes</span> <span class="o">=</span> <span class="nx">flowRenderer</span><span class="p">.</span><span class="nx">getClasses</span><span class="p">(</span><span class="nx">txt</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span>
<span class="nx">flowRenderer</span><span class="p">.</span><span class="nx">draw</span><span class="p">(</span><span class="nx">txt</span><span class="p">,</span> <span class="nx">id</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span>
<span class="nx">utils</span><span class="p">.</span><span class="nx">cloneCssStyles</span><span class="p">(</span><span class="nx">element</span><span class="p">.</span><span class="nx">firstChild</span><span class="p">,</span> <span class="nx">classes</span><span class="p">);</span>
<span class="k">break</span><span class="p">;</span>
<span class="k">case</span> <span class="s1">'sequenceDiagram'</span><span class="o">:</span>
<span class="k">if</span><span class="p">(</span><span class="k">typeof</span> <span class="nx">mermaid</span><span class="p">.</span><span class="nx">sequenceConfig</span> <span class="o">===</span> <span class="s1">'object'</span><span class="p">){</span>
<span class="nx">seq</span><span class="p">.</span><span class="nx">setConf</span><span class="p">(</span><span class="nx">mermaid</span><span class="p">.</span><span class="nx">sequenceConfig</span><span class="p">);</span>
<span class="p">}</span>
<span class="nx">seq</span><span class="p">.</span><span class="nx">draw</span><span class="p">(</span><span class="nx">txt</span><span class="p">,</span><span class="nx">id</span><span class="p">);</span>
<span class="nx">utils</span><span class="p">.</span><span class="nx">cloneCssStyles</span><span class="p">(</span><span class="nx">element</span><span class="p">.</span><span class="nx">firstChild</span><span class="p">,</span> <span class="p">[]);</span>
<span class="k">break</span><span class="p">;</span>
<span class="k">case</span> <span class="s1">'gantt'</span><span class="o">:</span>
<span class="k">if</span><span class="p">(</span><span class="k">typeof</span> <span class="nx">mermaid</span><span class="p">.</span><span class="nx">ganttConfig</span> <span class="o">===</span> <span class="s1">'object'</span><span class="p">){</span>
<span class="nx">gantt</span><span class="p">.</span><span class="nx">setConf</span><span class="p">(</span><span class="nx">mermaid</span><span class="p">.</span><span class="nx">ganttConfig</span><span class="p">);</span>
<span class="p">}</span>
<span class="nx">gantt</span><span class="p">.</span><span class="nx">draw</span><span class="p">(</span><span class="nx">txt</span><span class="p">,</span><span class="nx">id</span><span class="p">);</span>
<span class="nx">utils</span><span class="p">.</span><span class="nx">cloneCssStyles</span><span class="p">(</span><span class="nx">element</span><span class="p">.</span><span class="nx">firstChild</span><span class="p">,</span> <span class="p">[]);</span>
<span class="k">break</span><span class="p">;</span>
<span class="k">case</span> <span class="s1">'info'</span><span class="o">:</span>
<span class="nx">info</span><span class="p">.</span><span class="nx">draw</span><span class="p">(</span><span class="nx">txt</span><span class="p">,</span><span class="nx">id</span><span class="p">,</span><span class="nx">exports</span><span class="p">.</span><span class="nx">version</span><span class="p">());</span>
<span class="nx">utils</span><span class="p">.</span><span class="nx">cloneCssStyles</span><span class="p">(</span><span class="nx">element</span><span class="p">.</span><span class="nx">firstChild</span><span class="p">,</span> <span class="p">[]);</span>
<span class="k">break</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">};</span>
<span class="nx">exports</span><span class="p">.</span><span class="nx">tester</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(){};</span>
</pre></div>
</td>
</tr>
<tr>
<td class="docs">
<div class="pilwrap">
<a class="pilcrow" href="#section-8" id="section-8">¶</a>
</div>
<div class="dox">
<div class="summary"><p>Function returning version information</p>
</div>
<div class="body">
</div>
<div class="details">
<div class="dox_tag_title">Returns</div>
<div class="dox_tag_detail">
<span class="dox_tag_name"></span>
<span class="dox_type">string</span>
<span>A string containing the version info
</span>
</div>
</div>
</div>
</td>
<td class="code highlight"><div class="highlight"><pre>
<span class="nx">exports</span><span class="p">.</span><span class="nx">version</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(){</span>
<span class="k">return</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'../package.json'</span><span class="p">).</span><span class="nx">version</span><span class="p">;</span>
<span class="p">};</span>
<span class="kd">var</span> <span class="nx">equals</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">val</span><span class="p">,</span> <span class="nx">variable</span><span class="p">){</span>
<span class="k">if</span><span class="p">(</span><span class="k">typeof</span> <span class="nx">variable</span> <span class="o">===</span> <span class="s1">'undefined'</span><span class="p">){</span>
<span class="k">return</span> <span class="kc">false</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">else</span><span class="p">{</span>
<span class="k">return</span> <span class="p">(</span><span class="nx">val</span> <span class="o">===</span> <span class="nx">variable</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">};</span>
<span class="kd">var</span> <span class="nx">render</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">id</span><span class="p">,</span> <span class="nx">txt</span><span class="p">,</span><span class="nx">cb</span><span class="p">){</span>
</pre></div>
</td>
</tr>
<tr>
<td class="docs">
<div class="pilwrap">
<a class="pilcrow" href="#section-9" id="section-9">¶</a>
</div>
<div class="highlight"><pre><code> <span class="kd">var</span> <span class="nx">element</span> <span class="o">=</span> <span class="nx">doc</span><span class="p">.</span><span class="nx">createElement</span><span class="p">(</span><span class="s1">'svg'</span><span class="p">);</span>
<span class="nx">element</span><span class="p">.</span><span class="nx">setAttribute</span><span class="p">(</span><span class="s1">'id'</span><span class="p">,</span><span class="nx">id</span><span class="p">);</span>
<span class="nx">element</span><span class="p">.</span><span class="nx">setAttribute</span><span class="p">(</span><span class="s1">'width'</span><span class="p">,</span><span class="s1">'100%'</span><span class="p">);</span>
<span class="nx">element</span><span class="p">.</span><span class="nx">setAttribute</span><span class="p">(</span><span class="s1">'xmlns'</span><span class="p">,</span><span class="s1">'http://www.w3.org/2000/svg'</span><span class="p">);</span>
<span class="nx">element</span><span class="p">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="s1">'g /'</span><span class="p">;</span>
</code></pre></div>
</td>
<td class="code highlight"><div class="highlight"><pre>
</pre></div>
</td>
</tr>
<tr>
<td class="docs">
<div class="pilwrap">
<a class="pilcrow" href="#section-10" id="section-10">¶</a>
</div>
<p>var element = doc.createElement('div');
element.setAttribute('id','d'+id);</p>
<p>element.innerHTML = '<svg id="' + id + '" width="100%" xmlns="http://www.w3.org/2000/svg">' +
'<g />' +
'</svg>';
document.body.appendChild(element);</p>
</td>
<td class="code highlight"><div class="highlight"><pre>
<span class="nx">d3</span><span class="p">.</span><span class="nx">select</span><span class="p">(</span><span class="s1">'body'</span><span class="p">).</span><span class="nx">append</span><span class="p">(</span><span class="s1">'div'</span><span class="p">)</span>
<span class="p">.</span><span class="nx">attr</span><span class="p">(</span><span class="s1">'id'</span><span class="p">,</span> <span class="s1">'d'</span><span class="o">+</span><span class="nx">id</span><span class="p">)</span>
<span class="p">.</span><span class="nx">append</span><span class="p">(</span><span class="s1">'svg'</span><span class="p">)</span>
<span class="p">.</span><span class="nx">attr</span><span class="p">(</span><span class="s1">'id'</span><span class="p">,</span> <span class="nx">id</span><span class="p">)</span>
<span class="p">.</span><span class="nx">attr</span><span class="p">(</span><span class="s1">'width'</span><span class="p">,</span><span class="s1">'100%'</span><span class="p">)</span>
<span class="p">.</span><span class="nx">attr</span><span class="p">(</span><span class="s1">'xmlns'</span><span class="p">,</span><span class="s1">'http://www.w3.org/2000/svg'</span><span class="p">)</span>
<span class="p">.</span><span class="nx">append</span><span class="p">(</span><span class="s1">'g'</span><span class="p">);</span>
<span class="nx">log</span><span class="p">.</span><span class="nx">debug</span><span class="p">(</span><span class="nx">d3</span><span class="p">.</span><span class="nx">select</span><span class="p">(</span><span class="s1">'#d'</span><span class="o">+</span><span class="nx">id</span><span class="p">).</span><span class="nx">node</span><span class="p">().</span><span class="nx">innerHTML</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">element</span> <span class="o">=</span> <span class="nx">d3</span><span class="p">.</span><span class="nx">select</span><span class="p">(</span><span class="s1">'#d'</span><span class="o">+</span><span class="nx">id</span><span class="p">).</span><span class="nx">node</span><span class="p">();</span>
<span class="kd">var</span> <span class="nx">graphType</span> <span class="o">=</span> <span class="nx">utils</span><span class="p">.</span><span class="nx">detectType</span><span class="p">(</span><span class="nx">txt</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">classes</span> <span class="o">=</span> <span class="p">{};</span>
<span class="k">switch</span><span class="p">(</span><span class="nx">graphType</span><span class="p">){</span>
<span class="k">case</span> <span class="s1">'graph'</span><span class="o">:</span>
<span class="nx">classes</span> <span class="o">=</span> <span class="nx">flowRenderer</span><span class="p">.</span><span class="nx">getClasses</span><span class="p">(</span><span class="nx">txt</span><span class="p">,</span> <span class="kc">false</span><span class="p">);</span>
<span class="k">if</span><span class="p">(</span><span class="k">typeof</span> <span class="nx">mermaid</span><span class="p">.</span><span class="nx">flowchartConfig</span> <span class="o">===</span> <span class="s1">'object'</span><span class="p">){</span>
<span class="nx">flowRenderer</span><span class="p">.</span><span class="nx">setConf</span><span class="p">(</span><span class="nx">mermaid</span><span class="p">.</span><span class="nx">flowchartConfig</span><span class="p">);</span>
<span class="p">}</span>
<span class="nx">flowRenderer</span><span class="p">.</span><span class="nx">draw</span><span class="p">(</span><span class="nx">txt</span><span class="p">,</span> <span class="nx">id</span><span class="p">,</span> <span class="kc">false</span><span class="p">);</span>
<span class="nx">utils</span><span class="p">.</span><span class="nx">cloneCssStyles</span><span class="p">(</span><span class="nx">element</span><span class="p">.</span><span class="nx">firstChild</span><span class="p">,</span> <span class="nx">classes</span><span class="p">);</span>
<span class="nx">graph</span><span class="p">.</span><span class="nx">bindFunctions</span><span class="p">();</span>
<span class="k">break</span><span class="p">;</span>
<span class="k">case</span> <span class="s1">'dotGraph'</span><span class="o">:</span>
<span class="nx">classes</span> <span class="o">=</span> <span class="nx">flowRenderer</span><span class="p">.</span><span class="nx">getClasses</span><span class="p">(</span><span class="nx">txt</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span>
<span class="nx">flowRenderer</span><span class="p">.</span><span class="nx">draw</span><span class="p">(</span><span class="nx">txt</span><span class="p">,</span> <span class="nx">id</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span>
<span class="nx">utils</span><span class="p">.</span><span class="nx">cloneCssStyles</span><span class="p">(</span><span class="nx">element</span><span class="p">.</span><span class="nx">firstChild</span><span class="p">,</span> <span class="nx">classes</span><span class="p">);</span>
<span class="k">break</span><span class="p">;</span>
<span class="k">case</span> <span class="s1">'sequenceDiagram'</span><span class="o">:</span>
<span class="k">if</span><span class="p">(</span><span class="k">typeof</span> <span class="nx">mermaid</span><span class="p">.</span><span class="nx">sequenceConfig</span> <span class="o">===</span> <span class="s1">'object'</span><span class="p">){</span>
<span class="nx">seq</span><span class="p">.</span><span class="nx">setConf</span><span class="p">(</span><span class="nx">mermaid</span><span class="p">.</span><span class="nx">sequenceConfig</span><span class="p">);</span>
<span class="p">}</span>
<span class="nx">seq</span><span class="p">.</span><span class="nx">draw</span><span class="p">(</span><span class="nx">txt</span><span class="p">,</span><span class="nx">id</span><span class="p">);</span>
<span class="nx">utils</span><span class="p">.</span><span class="nx">cloneCssStyles</span><span class="p">(</span><span class="nx">element</span><span class="p">.</span><span class="nx">firstChild</span><span class="p">,</span> <span class="p">[]);</span>
<span class="k">break</span><span class="p">;</span>
<span class="k">case</span> <span class="s1">'gantt'</span><span class="o">:</span>
<span class="k">if</span><span class="p">(</span><span class="k">typeof</span> <span class="nx">mermaid</span><span class="p">.</span><span class="nx">ganttConfig</span> <span class="o">===</span> <span class="s1">'object'</span><span class="p">){</span>
<span class="nx">gantt</span><span class="p">.</span><span class="nx">setConf</span><span class="p">(</span><span class="nx">mermaid</span><span class="p">.</span><span class="nx">ganttConfig</span><span class="p">);</span>
<span class="p">}</span>
<span class="nx">gantt</span><span class="p">.</span><span class="nx">draw</span><span class="p">(</span><span class="nx">txt</span><span class="p">,</span><span class="nx">id</span><span class="p">);</span>
<span class="nx">utils</span><span class="p">.</span><span class="nx">cloneCssStyles</span><span class="p">(</span><span class="nx">element</span><span class="p">.</span><span class="nx">firstChild</span><span class="p">,</span> <span class="p">[]);</span>
<span class="k">break</span><span class="p">;</span>
<span class="k">case</span> <span class="s1">'info'</span><span class="o">:</span>
<span class="nx">info</span><span class="p">.</span><span class="nx">draw</span><span class="p">(</span><span class="nx">txt</span><span class="p">,</span><span class="nx">id</span><span class="p">,</span><span class="nx">exports</span><span class="p">.</span><span class="nx">version</span><span class="p">());</span>
<span class="nx">utils</span><span class="p">.</span><span class="nx">cloneCssStyles</span><span class="p">(</span><span class="nx">element</span><span class="p">.</span><span class="nx">firstChild</span><span class="p">,</span> <span class="p">[]);</span>
<span class="k">break</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
</td>
</tr>
<tr>
<td class="docs">
<div class="pilwrap">
<a class="pilcrow" href="#section-11" id="section-11">¶</a>
</div>
<p>log.debug(document.body.innerHTML);</p>
</td>
<td class="code highlight"><div class="highlight"><pre>
<span class="nx">cb</span><span class="p">(</span><span class="nx">d3</span><span class="p">.</span><span class="nx">select</span><span class="p">(</span><span class="s1">'#d'</span><span class="o">+</span><span class="nx">id</span><span class="p">).</span><span class="nx">node</span><span class="p">().</span><span class="nx">innerHTML</span><span class="p">);</span>
<span class="nx">d3</span><span class="p">.</span><span class="nx">select</span><span class="p">(</span><span class="s1">'#d'</span><span class="o">+</span><span class="nx">id</span><span class="p">).</span><span class="nx">node</span><span class="p">().</span><span class="nx">remove</span><span class="p">();</span>
<span class="p">};</span>
<span class="nx">exports</span><span class="p">.</span><span class="nx">render</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">id</span><span class="p">,</span> <span class="nx">text</span><span class="p">){</span>
<span class="kd">var</span> <span class="nx">callback</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">svgText</span><span class="p">){</span>
<span class="nx">log</span><span class="p">.</span><span class="nx">debug</span><span class="p">(</span><span class="nx">svgText</span><span class="p">);</span>
<span class="p">};</span>
<span class="k">if</span><span class="p">(</span><span class="k">typeof</span> <span class="nb">document</span> <span class="o">===</span> <span class="s1">'undefined'</span><span class="p">){</span>
</pre></div>
</td>
</tr>
<tr>
<td class="docs">
<div class="pilwrap">
<a class="pilcrow" href="#section-12" id="section-12">¶</a>
</div>
<p>jsdom = require('jsdom').jsdom;
log.debug(jsdom);</p>
</td>
<td class="code highlight"><div class="highlight"><pre>
</pre></div>
</td>
</tr>
<tr>
<td class="docs">
<div class="pilwrap">
<a class="pilcrow" href="#section-13" id="section-13">¶</a>
</div>
<p>htmlStub = '<html><head></head><body><div class="mermaid">'+text+'</div><script src="dist/mermaid.full.js"></script><script>var mermaid_config = {startOnLoad:true}</script></body></html>';</p>
</td>
<td class="code highlight"><div class="highlight"><pre>
<span class="nx">htmlStub</span> <span class="o">=</span> <span class="s1">'<html><head></head><body></body></html>'</span><span class="p">;</span>
</pre></div>
</td>
</tr>
<tr>
<td class="docs">
<div class="pilwrap">
<a class="pilcrow" href="#section-14" id="section-14">¶</a>
</div>
<div class="highlight"><pre><code> <span class="c1">// html file skull with a container div for the d3 dataviz</span>
</code></pre></div>
<p>pass the html stub to jsDom</p>
<p><div class="dox">
<div class="summary"><p>jsdom.env({
features : { QuerySelectorAll : true },
html : htmlStub,
done : function(errors, win) {
// process the html document, like if we were at client side
// code to generate the dataviz and process the resulting html file to be added here
//var d3 = require('d3');
//log.debug('Here we go: '+JSON.stringify(d3));</p></p>
<p> </div>
<div class="body"><p>global.document = win.document;
global.window = win;</p></p>
<p>var element = win.document.createElement('div');
element.setAttribute('id','did');
//document.
log.debug(document.body.innerHTML);
//log.debug('Element:',element);
//log.debug(win);
//mermaid.init();
//render(win.document, 'myId', text, callback);</p>
<p>}
}); </p>
<p> </div>
</div>
var jsdom = require('jsdom').jsdom;
global.document = jsdom(htmlStub);
global.window = document.parentWindow;</p>
</td>
<td class="code highlight"><div class="highlight"><pre>
<span class="nx">render</span><span class="p">(</span><span class="nx">id</span><span class="p">,</span> <span class="nx">text</span><span class="p">,</span> <span class="nx">callback</span><span class="p">);</span>
</pre></div>
</td>
</tr>
<tr>
<td class="docs">
<div class="pilwrap">
<a class="pilcrow" href="#section-15" id="section-15">¶</a>
</div>
<p>var element = win.document.createElement('div');
element.setAttribute('id','did');
document.</p>
</td>
<td class="code highlight"><div class="highlight"><pre>
<span class="p">}</span>
<span class="k">else</span><span class="p">{</span>
</pre></div>
</td>
</tr>
<tr>
<td class="docs">
<div class="pilwrap">
<a class="pilcrow" href="#section-16" id="section-16">¶</a>
</div>
<p>In browser</p>
</td>
<td class="code highlight"><div class="highlight"><pre>
<span class="nx">render</span><span class="p">(</span> <span class="nx">id</span><span class="p">,</span> <span class="nx">text</span><span class="p">,</span> <span class="nx">callback</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">};</span>
<span class="nx">global</span><span class="p">.</span><span class="nx">mermaid</span> <span class="o">=</span> <span class="p">{</span>
<span class="nx">startOnLoad</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span>
<span class="nx">htmlLabels</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span>
<span class="nx">init</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">sequenceConfig</span><span class="p">,</span> <span class="nx">nodes</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">init</span><span class="p">.</span><span class="nx">apply</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span> <span class="nx">arguments</span><span class="p">);</span>
<span class="p">},</span>
<span class="nx">version</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="k">return</span> <span class="nx">exports</span><span class="p">.</span><span class="nx">version</span><span class="p">();</span>
<span class="p">},</span>
<span class="nx">getParser</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="k">return</span> <span class="nx">flow</span><span class="p">.</span><span class="nx">parser</span><span class="p">;</span>
<span class="p">},</span>
<span class="nx">parse</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">text</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="nx">parse</span><span class="p">(</span><span class="nx">text</span><span class="p">);</span>
<span class="p">},</span>
<span class="nx">parseError</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">hash</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">log</span><span class="p">.</span><span class="nx">debug</span><span class="p">(</span><span class="s1">'Mermaid Syntax error:'</span><span class="p">);</span>
<span class="nx">log</span><span class="p">.</span><span class="nx">debug</span><span class="p">(</span><span class="nx">err</span><span class="p">);</span>
<span class="p">},</span>
<span class="nx">render</span><span class="o">:</span><span class="kd">function</span><span class="p">(</span><span class="nx">id</span><span class="p">,</span> <span class="nx">text</span><span class="p">){</span>
<span class="k">return</span> <span class="nx">exports</span><span class="p">.</span><span class="nx">render</span><span class="p">(</span><span class="nx">id</span><span class="p">,</span> <span class="nx">text</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">};</span>
<span class="nx">exports</span><span class="p">.</span><span class="nx">contentLoaded</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(){</span>
</pre></div>
</td>
</tr>
<tr>
<td class="docs">
<div class="pilwrap">
<a class="pilcrow" href="#section-17" id="section-17">¶</a>
</div>
<p>Check state of start config mermaid namespace
log.debug('global.mermaid.startOnLoad',global.mermaid.startOnLoad);
log.debug('mermaid_config',mermaid_config);</p>
</td>
<td class="code highlight"><div class="highlight"><pre>
<span class="k">if</span> <span class="p">(</span><span class="k">typeof</span> <span class="nx">mermaid_config</span> <span class="o">!==</span> <span class="s1">'undefined'</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">equals</span><span class="p">(</span><span class="kc">false</span><span class="p">,</span> <span class="nx">mermaid_config</span><span class="p">.</span><span class="nx">htmlLabels</span><span class="p">))</span> <span class="p">{</span>
<span class="nx">global</span><span class="p">.</span><span class="nx">mermaid</span><span class="p">.</span><span class="nx">htmlLabels</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">if</span><span class="p">(</span><span class="nx">glo