给网站增加显示Mermaid图形能力
网站都是用Markdown书写的,支持Mermaid似乎也在情理之中,下边咱们来实现一下。
对mermaid的支持需要从网站模版层面入手,这样,每次渲染的时候,就会自动渲染mermaid代码。
我们在我们的模版themes/mainroad下新建目录layouts/_default/_markup/,然后新建文件render-codeblock-mermaid.html,内容如下:
<pre class="mermaid">
{{- .Inner | htmlEscape | safeHTML }}
</pre>
{{ .Page.Store.Set "hasMermaid" true }}
接着,我们在layouts/_default/baseof.html的head标签最后,增加以下代码:
{{ if .Store.Get "hasMermaid" }}
<script type="module">
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs';
mermaid.initialize({ startOnLoad: true });
</script>
{{ end }}
// 以下代码是为了支持awesome符号
<link
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"
rel="stylesheet"
/>
我们测试如下:
流程图
flowchart TD A[所有工作] -->B(1.申请免费域名) A-->D(2.申请Cloudflare账号) D-->E(绑定域名到Cloudflare) E-->R(创建站点并授权) R-->S(设置域名) A-->C(3.申请Github账号) C-->G(克隆mainroad模版库) G-->F(创建仓库myblog) F-->H(创建personal access tokens) H--settings/developer settings-->J(创建Fine-grained Token) J--myblog/settings/secrets and variables-->K(创建Actions secrets<PERSONAL_TOKEN>) A-->L(4.Hugo环境) L-->M(创建网站) M-->N(配置网站) N-->P(创建文章) P-->Q(配置工作流) A-->T(5.Mermaid) T-->T1(Font Awesome)
架构图
architecture-beta
group api(cloud)[API]
service db(database)[Database] in api
service disk1(disk)[Storage] in api
service disk2(disk)[Storage] in api
service server(server)[Server] in api
db:L -- R:server
disk1:T -- B:server
disk2:T -- B:db
看板
---
config:
kanban:
ticketBaseUrl: 'https://mermaidchart.atlassian.net/browse/#TICKET#'
---
kanban
Todo
[Create Documentation]
docs[Create Blog about the new diagram]
[In progress]
id6[Create renderer so that it works in all cases. We also add som extra text here for testing purposes. And some more just for the extra flare.]
id9[Ready for deploy]
id8[Design grammar]@{ assigned: 'knsv' }
id10[Ready for test]
id4[Create parsing tests]@{ ticket: MC-2038, assigned: 'K.Sveidqvist', priority: 'High' }
id66[last item]@{ priority: 'Very Low', assigned: 'knsv' }
id11[Done]
id5[define getData]
id2[Title of diagram is more than 100 chars when user duplicates diagram with 100 char]@{ ticket: MC-2036, priority: 'Very High'}
id3[Update DB function]@{ ticket: MC-2037, assigned: knsv, priority: 'High' }
id12[Can't reproduce]
id3[Weird flickering in Firefox]
序列图
sequenceDiagram
actor Alice
actor Bob
Alice->>Bob: Hi Bob
Bob->>Alice: Hi Alice