「速记」基于 mermaid 给 Jekyll 的 minima 主题增加流程图显示功能
问题背景
以往我都是自己手绘图。近来因为各种原因,了解到大部分技术者越来越地使用 mermaid 来绘制各种流程图。有一个在线编辑和预览功能,我使用了下,确实非常简洁方便。实际使用时,VSCode中的 markdown 也支持 mermaid 的直接预览,相对会更方便一些。
我现在对 mermaid 还不太熟悉。如果你有相对复杂的业务图标的绘制需求,我可能还是建议先用 drawio。
不过,说实话,不管用什么工具,似乎都没有我在纸上手绘的流程图,有神韵。总觉得缺少了点什么。可能的原因是:手绘时,我可以集中注意力在要表达的逻辑本身;而借助工具时,可能不得不受到工具本身的各种桎梏。
所以说,初始版本,可能还是手绘比较好。先手绘,理清自己的思路,然后再借助工具,沉淀下来,同时便于共享与后期修改。
在网页中基于 mermaid 绘制流程图的原理
graph TD;
A[页面 mermaid 代码]-->B[网页加载完成]-->C[ mermaid 库将代码绘制为SVG] --> D[将 SVG 图替换到 Dom 中的代码];
具体要修改的文件:
footer-script.html
- 完整路径: _includes/footer-script.html
- 作用:新增文件,主要用于放一些自定义的JS的代码。
- 代码:文件内的完整代码如下。
{%- if page.mermaid -%}
<script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script>
{%- include mermaid.html -%}
{%- endif -%}
footer.html
- 完整路径: _includes/footer.html
- 作用:初始版本,请从系统主题目录中查找。确认 minima 主题本地安装目录的命令如下:
bundle info --path minima
- 代码:在主题初始代码的末尾添加上下述代码。
{%- include footer-script.html -%}
mermaid.html
- 完整路径: _includes/mermaid.html
- 作用:用于mermaid代码的动态渲染。本次的核心。
- 代码:完整代码如下。 mermaid 不同版本,API可能有差异,请自行对应修改。
<script src="https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.9.0/mermaid.min.js"></script>
<script>
$(document).ready(function () {
// 可选主题,参考:https://mermaid.js.org/config/theming.html#available-themes
mermaid.initialize({
startOnLoad: false,
theme: "default",
});
// 不同版本的 API 有差异,参考:https://github.com/mermaid-js/mermaid/blob/release/10.8.0/docs/config/usage.md
mermaid.run({
querySelector: '.language-mermaid',
})
});
</script>
github-syntax-highlighting.scss
- 完整路径: _sass/github-syntax-highlighting.scss
- 作用:初始版本,来自于我当初对该代码高亮的优化。详见: 如何将 github 的代码高亮样式, 应用于 jekyll minima 主题?
- 代码:请在初版代码的末尾追加下述代码。
// 使 mermaid 居中显示。ref: https://github.com/mermaid-js/mermaid/issues/150#issuecomment-689353672
code.language-mermaid {
display: flex !important;
justify-content: center;
}
博客本身的修改:
mermaid: true
考虑到性能,默认不支持 mermaid。需要支持的话,开头加上上述代码即可。