Add mermaid tiptap extension
Signed-off-by: Émile Ré <emile@getprobo.com>
This commit is contained in:
@@ -71,15 +71,23 @@ func renderNode(buf *bytes.Buffer, n Node) error {
|
||||
if err != nil {
|
||||
return fmt.Errorf("cannot render code block node: %w", err)
|
||||
}
|
||||
buf.WriteString("<pre><code")
|
||||
if attrs.Language != nil {
|
||||
writeAttr(buf, "class", "language-"+*attrs.Language)
|
||||
if attrs.Language != nil && *attrs.Language == "mermaid" {
|
||||
buf.WriteString(`<pre class="mermaid">`)
|
||||
if err := renderChildren(buf, n.Content); err != nil {
|
||||
return err
|
||||
}
|
||||
buf.WriteString("</pre>")
|
||||
} else {
|
||||
buf.WriteString("<pre><code")
|
||||
if attrs.Language != nil {
|
||||
writeAttr(buf, "class", "language-"+*attrs.Language)
|
||||
}
|
||||
buf.WriteByte('>')
|
||||
if err := renderChildren(buf, n.Content); err != nil {
|
||||
return err
|
||||
}
|
||||
buf.WriteString("</code></pre>")
|
||||
}
|
||||
buf.WriteByte('>')
|
||||
if err := renderChildren(buf, n.Content); err != nil {
|
||||
return err
|
||||
}
|
||||
buf.WriteString("</code></pre>")
|
||||
case NodeHorizontalRule:
|
||||
buf.WriteString("<hr>")
|
||||
case NodeHardBreak:
|
||||
|
||||
@@ -100,6 +100,18 @@ func TestRenderHTML_CodeBlockWithLanguage(t *testing.T) {
|
||||
assert.Equal(t, `<pre><code class="language-go">fmt.Println()</code></pre>`, got)
|
||||
}
|
||||
|
||||
func TestRenderHTML_CodeBlockMermaid(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
raw := `{"type":"codeBlock","attrs":{"language":"mermaid"},"content":[{"type":"text","text":"graph TD\n A-->B"}]}`
|
||||
var n Node
|
||||
require.NoError(t, json.Unmarshal([]byte(raw), &n))
|
||||
|
||||
got, err := RenderHTML(n)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, "<pre class=\"mermaid\">graph TD\n A-->B</pre>", got)
|
||||
}
|
||||
|
||||
func TestRenderHTML_CodeBlockWithoutLanguage(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user