UNPKG

mermaid

Version:

Markdownish syntax for generating flowcharts, sequence diagrams and gantt charts.

271 lines (236 loc) 19.2 kB
<!DOCTYPE html> <html> <head> <title>usage.md</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/docs/usage.md", 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 h2"> <a href="#order: 1">order: 1</a> </div> <div class="heading h1"> <a href="#Installation">Installation</a> </div> <div class="heading h1"> <a href="#Usage">Usage</a> </div> <div class="heading h2"> <a href="#Calling `mermaid.init`">Calling <code>mermaid.init</code></a> </div> <div class="heading h1"> <a href="#Usage with browserify">Usage with browserify</a> </div> <div class="heading h1"> <a href="#API usage">API usage</a> </div> <div class="heading h1"> <a href="#Sample API usage with browserify">Sample API usage with browserify</a> </div> <div class="heading h1"> <a href="#Example of marked renderer">Example of marked renderer</a> </div> <div class="heading h2"> <a href="#Advanced usage">Advanced usage</a> </div> </div> </div> <div id="sidebar-toggle"></div> <div id="container"><div class="docs markdown"><hr> <p>title: Usage</p> <div class="pilwrap" id="order: 1"> <h2> <a href="#order: 1" name="order: 1" class="pilcrow">&#182;</a> order: 1</h2> </div> <div class="pilwrap" id="Installation"> <h1> <a href="#Installation" name="Installation" class="pilcrow">&#182;</a> Installation</h1> </div> <p>Either use the npm or bower package managers as per below:</p> <div class="highlight"><pre><code><span class="nx">bower</span> <span class="nx">install</span> <span class="nx">mermaid</span> <span class="o">--</span><span class="nx">save</span><span class="o">-</span><span class="nx">dev</span> </code></pre></div> <div class="highlight"><pre><code><span class="nx">npm</span> <span class="nx">install</span> <span class="nx">mermaid</span> <span class="o">--</span><span class="nx">save</span><span class="o">-</span><span class="nx">dev</span> </code></pre></div> <p>Or download javascript files:</p> <ul> <li><a href="https://cdn.rawgit.com/knsv/mermaid/0.d.0/dist/mermaid.min.js">mermaid including dependencies</a></li> </ul> <p>There are some bundles to choose from:</p> <ul> <li>mermaid.js, mermaid.min.js This bundle contains everything you need to run mermaid</li> <li>mermaid.slim.js, mermaid.slim.min.js This bundle does not contain d3 which is usefull for sites that already have d3 in place</li> <li>mermaidAPI.js, mermaidAPI.min.js, This bundle does not contain the web integration provided in the other packages but has a render function instead returns svg code.</li> </ul> <p><strong> Important: </strong></p> <blockquote> <p>It&#39;s best to use a specific tag or commit hash in the URL (not a branch). Files are cached permanently after the first request.</p> </blockquote> <p>Read more about that at <a href="https://rawgit.com/">https://rawgit.com/</a></p> <div class="pilwrap" id="Usage"> <h1> <a href="#Usage" name="Usage" class="pilcrow">&#182;</a> Usage</h1> </div> <p>Include mermaid on your web page:</p> <div class="highlight"><pre><code><span class="nx">lt</span><span class="p">;</span><span class="nx">script</span> <span class="nx">src</span><span class="o">=</span><span class="nx">quot</span><span class="p">;</span><span class="nx">mermaid</span><span class="p">.</span><span class="nx">min</span><span class="p">.</span><span class="nx">jsquot</span><span class="p">;</span><span class="nx">gt</span><span class="p">;</span><span class="nx">lt</span><span class="p">;</span><span class="err">/scriptgt;</span> <span class="nx">lt</span><span class="p">;</span><span class="nx">scriptgt</span><span class="p">;</span><span class="nx">mermaid</span><span class="p">.</span><span class="nx">initialize</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">lt</span><span class="p">;</span><span class="err">/scriptgt;</span> </code></pre></div> <p>Further down on your page mermaid will look for tags with <code>class=&quot;mermaid&quot;</code>. From these tags mermaid will try to read the chart definiton which will be replaced with the svg chart.</p> <p>A chart defined like this:</p> <div class="highlight"><pre><code><span class="nx">lt</span><span class="p">;</span><span class="nx">div</span> <span class="kr">class</span><span class="o">=</span><span class="nx">quot</span><span class="p">;</span><span class="nx">mermaidquot</span><span class="p">;</span><span class="nx">gt</span><span class="p">;</span> <span class="nx">CHART</span> <span class="nx">DEFINITION</span> <span class="nx">GOES</span> <span class="nx">HERE</span> <span class="nx">lt</span><span class="p">;</span><span class="err">/divgt;</span> </code></pre></div> <p>Would end up like this:</p> <div class="highlight"><pre><code><span class="nx">lt</span><span class="p">;</span><span class="nx">div</span> <span class="kr">class</span><span class="o">=</span><span class="nx">quot</span><span class="p">;</span><span class="nx">mermaidquot</span><span class="p">;</span> <span class="nx">id</span><span class="o">=</span><span class="nx">quot</span><span class="p">;</span><span class="nx">mermaidChart0quot</span><span class="p">;</span><span class="nx">gt</span><span class="p">;</span> <span class="nx">lt</span><span class="p">;</span><span class="nx">svggt</span><span class="p">;</span> <span class="nx">Chart</span> <span class="nx">ends</span> <span class="nx">up</span> <span class="nx">here</span> <span class="nx">lt</span><span class="p">;</span><span class="err">/svggt;</span> <span class="nx">lt</span><span class="p">;</span><span class="err">/divgt;</span> </code></pre></div> <p>An id is also added to mermaid tags without id.</p> <div class="pilwrap" id="Calling `mermaid.init`"> <h2> <a href="#Calling `mermaid.init`" name="Calling `mermaid.init`" class="pilcrow">&#182;</a> Calling <code>mermaid.init</code></h2> </div> <p>By default, <code>mermaid.init</code> will be called when the document is ready, finding all elements with <code>class=&quot;mermaid&quot;</code>. If you are adding content after mermaid is loaded, or otherwise need finer-grained control of this behavior, you can call <code>init</code> yourself with:</p> <ul> <li>a configuration object</li> <li>some nodes, as<ul> <li>a node</li> <li>an a array-like of nodes</li> <li>or W3C selector that will find your nodes</li> </ul> </li> </ul> <p>Example:</p> <div class="highlight"><pre><code><span class="nx">mermaid</span><span class="p">.</span><span class="nx">init</span><span class="p">({</span><span class="nx">noteMargin</span><span class="o">:</span> <span class="mi">10</span><span class="p">},</span> <span class="p">.</span><span class="nx">someOtherClass</span><span class="p">);</span> </code></pre></div> <p>Or with no config object, and a jQuery selection:</p> <div class="highlight"><pre><code><span class="nx">mermaid</span><span class="p">.</span><span class="nx">init</span><span class="p">(</span><span class="kc">undefined</span><span class="p">,</span> <span class="nx">$</span><span class="p">(</span><span class="err">#</span><span class="nx">someId</span> <span class="p">.</span><span class="nx">yetAnotherClass</span><span class="p">));</span> </code></pre></div> <div class="pilwrap" id="Usage with browserify"> <h1> <a href="#Usage with browserify" name="Usage with browserify" class="pilcrow">&#182;</a> Usage with browserify</h1> </div> <p>Minimalistic javascript:</p> <div class="highlight"><pre><code><span class="nx">mermaid</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;mermaid&#39;</span><span class="p">);</span> </code></pre></div> <div class="pilwrap" id="API usage"> <h1> <a href="#API usage" name="API usage" class="pilcrow">&#182;</a> API usage</h1> </div> <p>Include mermaid on your web page:</p> <div class="highlight"><pre><code><span class="nx">lt</span><span class="p">;</span><span class="nx">script</span> <span class="nx">src</span><span class="o">=</span><span class="nx">quot</span><span class="p">;</span><span class="nx">mermaidAPI</span><span class="p">.</span><span class="nx">jsquot</span><span class="p">;</span><span class="nx">gt</span><span class="p">;</span><span class="nx">lt</span><span class="p">;</span><span class="err">/scriptgt;</span> <span class="nx">lt</span><span class="p">;</span><span class="nx">scriptgt</span><span class="p">;</span> <span class="nx">mermaidAPI</span><span class="p">.</span><span class="nx">initialize</span><span class="p">({</span> <span class="nx">startOnLoad</span><span class="o">:</span><span class="kc">false</span> <span class="p">});</span> <span class="nx">$</span><span class="p">(</span><span class="kd">function</span><span class="p">(){</span> <span class="kd">var</span> <span class="nx">graphDefinition</span> <span class="o">=</span> <span class="s1">&#39;graph TB\na--b&#39;</span><span class="p">;</span> <span class="kd">var</span> <span class="nx">graph</span> <span class="o">=</span> <span class="nx">mermaidAPI</span><span class="p">.</span><span class="nx">render</span><span class="p">(</span><span class="nx">graphDefinition</span><span class="p">);</span> <span class="nx">$</span><span class="p">(</span><span class="err">#</span><span class="nx">graphDiv</span><span class="p">).</span><span class="nx">html</span><span class="p">(</span><span class="nx">graph</span><span class="p">);</span> <span class="p">});</span> <span class="nx">lt</span><span class="p">;</span><span class="err">/scriptgt;</span> </code></pre></div> <div class="pilwrap" id="Sample API usage with browserify"> <h1> <a href="#Sample API usage with browserify" name="Sample API usage with browserify" class="pilcrow">&#182;</a> Sample API usage with browserify</h1> </div> <div class="highlight"><pre><code><span class="nx">$</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;jquery&#39;</span><span class="p">);</span> <span class="nx">mermaidAPI</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;mermaid&#39;</span><span class="p">).</span><span class="nx">mermaidAPI</span><span class="p">;</span> <span class="nx">mermaidAPI</span><span class="p">.</span><span class="nx">initialize</span><span class="p">({</span> <span class="nx">startOnLoad</span><span class="o">:</span><span class="kc">false</span> <span class="p">});</span> <span class="nx">$</span><span class="p">(</span><span class="kd">function</span><span class="p">(){</span> <span class="kd">var</span> <span class="nx">graphDefinition</span> <span class="o">=</span> <span class="s1">&#39;graph TB\na--b&#39;</span><span class="p">;</span> <span class="kd">var</span> <span class="nx">cb</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">html</span><span class="p">){</span> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">html</span><span class="p">);</span> <span class="p">}</span> <span class="nx">mermaidAPI</span><span class="p">.</span><span class="nx">render</span><span class="p">(</span><span class="s1">&#39;id1&#39;</span><span class="p">,</span><span class="nx">graphDefinition</span><span class="p">,</span><span class="nx">cb</span><span class="p">);</span> <span class="p">});</span> </code></pre></div> <div class="pilwrap" id="Example of marked renderer"> <h1> <a href="#Example of marked renderer" name="Example of marked renderer" class="pilcrow">&#182;</a> Example of marked renderer</h1> </div> <p>This is the renderer used for transforming the documentation from markdown to html with mermaid diagrams in the html.</p> <div class="highlight"><pre><code> <span class="kd">var</span> <span class="nx">renderer</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">marked</span><span class="p">.</span><span class="nx">Renderer</span><span class="p">();</span> <span class="nx">renderer</span><span class="p">.</span><span class="nx">code</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">code</span><span class="p">,</span> <span class="nx">language</span><span class="p">)</span> <span class="p">{</span> <span class="k">if</span><span class="p">(</span><span class="nx">code</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="sr">/^sequenceDiagram/</span><span class="p">)</span><span class="o">||</span><span class="nx">code</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="sr">/^graph/</span><span class="p">)){</span> <span class="k">return</span> <span class="s1">&#39;lt;div class=mermaid&#39;</span><span class="o">+</span><span class="nx">code</span><span class="o">+</span><span class="s1">&#39;lt;/div&#39;</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="s1">&#39;lt;prelt;code&#39;</span><span class="o">+</span><span class="nx">code</span><span class="o">+</span><span class="s1">&#39;lt;/codelt;/pre&#39;</span><span class="p">;</span> <span class="p">}</span> <span class="p">};</span> </code></pre></div> <p>Another example in coffeescript that also includes the mermaid script tag into the generated markup.</p> <div class="highlight"><pre><code><span class="nx">marked</span> <span class="o">=</span> <span class="nx">require</span> <span class="s1">&#39;marked&#39;</span> <span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="p">(</span><span class="nx">options</span><span class="p">)</span> <span class="o">-</span> <span class="nx">hasMermaid</span> <span class="o">=</span> <span class="kc">false</span> <span class="nx">renderer</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">marked</span><span class="p">.</span><span class="nx">Renderer</span><span class="p">()</span> <span class="nx">renderer</span><span class="p">.</span><span class="nx">defaultCode</span> <span class="o">=</span> <span class="nx">renderer</span><span class="p">.</span><span class="nx">code</span> <span class="nx">renderer</span><span class="p">.</span><span class="nx">code</span> <span class="o">=</span> <span class="p">(</span><span class="nx">code</span><span class="p">,</span> <span class="nx">language</span><span class="p">)</span> <span class="o">-</span> <span class="k">if</span> <span class="nx">language</span> <span class="nx">is</span> <span class="s1">&#39;mermaid&#39;</span> <span class="nx">html</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span> <span class="k">if</span> <span class="nx">not</span> <span class="nx">hasMermaid</span> <span class="nx">hasMermaid</span> <span class="o">=</span> <span class="kc">true</span> <span class="nx">html</span> <span class="o">+=</span> <span class="s1">&#39;script src=&#39;</span><span class="o">+</span><span class="nx">options</span><span class="p">.</span><span class="nx">mermaidPath</span><span class="o">+</span><span class="s1">&#39;/script&#39;</span> <span class="nx">html</span> <span class="o">+</span> <span class="s1">&#39;div class=mermaid&#39;</span><span class="o">+</span><span class="nx">code</span><span class="o">+</span><span class="s1">&#39;/div&#39;</span> <span class="k">else</span> <span class="err">@</span><span class="nx">defaultCode</span><span class="p">(</span><span class="nx">code</span><span class="p">,</span> <span class="nx">language</span><span class="p">)</span> <span class="nx">renderer</span> </code></pre></div> <div class="pilwrap" id="Advanced usage"> <h2> <a href="#Advanced usage" name="Advanced usage" class="pilcrow">&#182;</a> Advanced usage</h2> </div> <p><strong>Error handling</strong></p> <p>When the parser encounters invalid syntax the <strong>mermaid.parseError</strong> function is called. It is possible to override this function in order to handle the error in an application specific way.</p> <p><strong>Parsing text without rendering</strong></p> <p>It is also possible to validate the syntax before rendering in order to streamline the user experience. The function <strong>mermaid.parse(txt)</strong> takes a text string as an argument and returns true if the text is syntactically correct and false if it is not. The parseError function will be called when the parse function returns false.</p> <p>The code-example below in meta code illustrates how this could work:</p> <div class="highlight"><pre><code><span class="nx">mermaid</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="nx">displayErrorInGui</span><span class="p">(</span><span class="nx">err</span><span class="p">);</span> <span class="p">};</span> <span class="kd">var</span> <span class="nx">textFieldUpdated</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(){</span> <span class="kd">var</span> <span class="nx">textStr</span> <span class="o">=</span> <span class="nx">getTextFromFormField</span><span class="p">(</span><span class="s1">&#39;code&#39;</span><span class="p">);</span> <span class="k">if</span><span class="p">(</span><span class="nx">mermaid</span><span class="p">.</span><span class="nx">parse</span><span class="p">(</span><span class="nx">textStr</span><span class="p">)){</span> <span class="nx">reRender</span><span class="p">(</span><span class="nx">textStr</span><span class="p">)</span> <span class="p">}</span> <span class="p">};</span> <span class="nx">bindEventHandler</span><span class="p">(</span><span class="s1">&#39;change&#39;</span><span class="p">,</span> <span class="s1">&#39;code&#39;</span><span class="p">,</span> <span class="nx">textFieldUpdated</span><span class="p">);</span> </code></pre></div> </div> </div> </body> </html>