Skip to content

Commit 3b91f9b

Browse files
authored
Merge pull request #2173 from enyaxu/feature/389
Add mermaid support
2 parents 20061d2 + 866a0e7 commit 3b91f9b

File tree

5 files changed

+324
-6
lines changed

5 files changed

+324
-6
lines changed

browser/components/MarkdownPreview.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'codemirror-mode-elixir'
77
import consts from 'browser/lib/consts'
88
import Raphael from 'raphael'
99
import flowchart from 'flowchart'
10+
import mermaidRender from './render/MermaidRender'
1011
import SequenceDiagram from 'js-sequence-diagrams'
1112
import eventEmitter from 'browser/main/lib/eventEmitter'
1213
import htmlTextHelper from 'browser/lib/htmlTextHelper'
@@ -533,6 +534,10 @@ export default class MarkdownPreview extends React.Component {
533534
el.innerHTML = 'Sequence diagram parse error: ' + e.message
534535
}
535536
})
537+
538+
_.forEach(this.refs.root.contentWindow.document.querySelectorAll('.mermaid'), (el) => {
539+
mermaidRender(el, htmlTextHelper.decodeEntities(el.innerHTML))
540+
})
536541
}
537542

538543
focus () {
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import mermaidAPI from 'mermaid'
2+
3+
function getRandomInt (min, max) {
4+
return Math.floor(Math.random() * (max - min)) + min
5+
}
6+
7+
function getId () {
8+
var pool = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
9+
var id = 'm-'
10+
for (var i = 0; i < 7; i++) {
11+
id += pool[getRandomInt(0, 16)]
12+
}
13+
return id
14+
}
15+
16+
function render (element, content) {
17+
try {
18+
mermaidAPI.render(getId(), content, (svgGraph) => {
19+
element.innerHTML = svgGraph
20+
})
21+
} catch (e) {
22+
console.error(e)
23+
element.className = 'mermaid-error'
24+
element.innerHTML = 'mermaid diagram parse error: ' + e.message
25+
}
26+
}
27+
28+
export default render

browser/lib/markdown.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ class Markdown {
4040
if (langType === 'sequence') {
4141
return `<pre class="sequence">${str}</pre>`
4242
}
43+
if (langType === 'mermaid') {
44+
return `<pre class="mermaid">${str}</pre>`
45+
}
4346
return '<pre class="code CodeMirror">' +
4447
'<span class="filename">' + fileName + '</span>' +
4548
createGutter(str, firstLineNumber) +

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@
8181
"markdown-it-plantuml": "^1.1.0",
8282
"markdown-it-smartarrows": "^1.0.1",
8383
"mdurl": "^1.0.1",
84+
"mermaid": "^8.0.0-rc.8",
8485
"moment": "^2.10.3",
8586
"mousetrap": "^1.6.1",
8687
"mousetrap-global-bind": "^1.1.0",

0 commit comments

Comments
 (0)