- lab/
Mermaid Diagrams on Hugo
Table of Contents
created: 19/01/2019
updated: 19/01/2019
how do you get Mermaid diagrams on a Hugo blog #
1 #
Under themes/casper/layouts/ I created a shortcodes folder (I didn’t have one already, you might) and added mermaid.html:
<script src="/js/mermaid_dist_8.0.0-rc.6.js"></script>
<div class="mermaid">
{{ .Inner }}
</div>
2 #
Then under themes/casper/static/js/ I added the mermaid_dist_8.0.0-rc.6.js file referenced in the snippet above (Mermaid JS itself came from here)
tada #
I didn’t figure any of this out I was inspired by this excellent person who had already described how they added Mermaid to their Hugo site.
Though I did have to fiddle around with a couple of aspects as I couldn’t see tjheeta’s source on github, only the public versions, they were:
- using
< mermaid >rather than% mermaid %inside the{{ }}shortcode braces (%adds<p>where I didn’t want any) - adding semicolons to the ends of (certain) lines before mermaid diagram would render - this was unexpected based on my experience of not requiring semicolons when adding a Mermaid diagram in Grafana (in fact, this relates to mermaid version, and semicolons are not required in the version on my blog)
oops #
Later, as I added more and more diagrams to my blog post, I eventually noticed the page was taking longer and longer to render with each new diagram. It then occurred to me with the snippet above I was inserting the script tag every time there was a diagram, causing the page to download the (2.61MB!) mermaid JS file multiple times.
To remedy this I split the shortcode up as follows:
from
#
themes/casper/layouts/shortcodes/mermaid.html and
< mermaid > for every diagram
to
#
themes/casper/layouts/shortcodes/mermaid/source.html and
< mermaid/source > once at beginning of post
themes/casper/layouts/shortcodes/mermaid/diagram.html and
< mermaid/diagram > for each diagram