summaryrefslogtreecommitdiffstats
path: root/web_src/js/markdown/mermaid.js
diff options
context:
space:
mode:
authorsilverwind <me@silverwind.io>2020-07-27 08:24:09 +0200
committerGitHub <noreply@github.com>2020-07-27 02:24:09 -0400
commit4315e313d12bbf0655710b6ab0aad121e0f7dba2 (patch)
treedfcc816a013288f5112f3be4f38ac183557220fb /web_src/js/markdown/mermaid.js
parent46ef562a161a2685d429ffd7dc594383de533c07 (diff)
downloadgitea-4315e313d12bbf0655710b6ab0aad121e0f7dba2.tar.gz
gitea-4315e313d12bbf0655710b6ab0aad121e0f7dba2.zip
Add mermaid JS renderer (#12334)
* Add mermaid JS renderer For feature parity with GitLab. Tested in files, issues, wiki, editor. arc-green only does an inversion because the renderer seems to like to render white backgrounds on boxes. Ref: https://github.com/go-gitea/gitea/issues/3340 Fixes: https://github.com/go-gitea/gitea/issues/12307 * add feature entry, switch to neutral theme, remove border * add bindFunctions support * remove unnecessary border-radius Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: techknowlogick <techknowlogick@gitea.io>
Diffstat (limited to 'web_src/js/markdown/mermaid.js')
-rw-r--r--web_src/js/markdown/mermaid.js23
1 files changed, 23 insertions, 0 deletions
diff --git a/web_src/js/markdown/mermaid.js b/web_src/js/markdown/mermaid.js
new file mode 100644
index 0000000000..1fda101dc0
--- /dev/null
+++ b/web_src/js/markdown/mermaid.js
@@ -0,0 +1,23 @@
+import {random} from '../utils.js';
+
+export async function renderMermaid(els) {
+ if (!els || !els.length) return;
+
+ const {mermaidAPI} = await import(/* webpackChunkName: "mermaid" */'mermaid');
+
+ mermaidAPI.initialize({
+ startOnLoad: false,
+ theme: 'neutral',
+ securityLevel: 'strict',
+ });
+
+ for (const el of els) {
+ mermaidAPI.render(`mermaid-${random(12)}`, el.textContent, (svg, bindFunctions) => {
+ const div = document.createElement('div');
+ div.classList.add('mermaid-chart');
+ div.innerHTML = svg;
+ if (typeof bindFunctions === 'function') bindFunctions(div);
+ el.closest('pre').replaceWith(div);
+ });
+ }
+}