Add mermaid suport
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
This commit is contained in:
@@ -26,10 +26,14 @@ import (
|
||||
"github.com/yuin/goldmark"
|
||||
"github.com/yuin/goldmark/extension"
|
||||
gmhtml "github.com/yuin/goldmark/renderer/html"
|
||||
"go.abhg.dev/goldmark/mermaid"
|
||||
"go.probo.inc/probo/pkg/coredata"
|
||||
)
|
||||
|
||||
var (
|
||||
//go:embed mermaid.min.js
|
||||
mermaidJSSource string
|
||||
|
||||
//go:embed template.html
|
||||
htmlTemplateContent string
|
||||
|
||||
@@ -72,7 +76,13 @@ var (
|
||||
},
|
||||
"formatContent": func(content string) template.HTML {
|
||||
md := goldmark.New(
|
||||
goldmark.WithExtensions(extension.Table),
|
||||
goldmark.WithExtensions(
|
||||
extension.Table,
|
||||
&mermaid.Extender{
|
||||
RenderMode: mermaid.RenderModeClient,
|
||||
NoScript: true,
|
||||
},
|
||||
),
|
||||
goldmark.WithRendererOptions(
|
||||
gmhtml.WithUnsafe(),
|
||||
),
|
||||
@@ -209,6 +219,7 @@ type (
|
||||
PublishedAt *time.Time
|
||||
Signatures []SignatureData
|
||||
CompanyHorizontalLogoBase64 string
|
||||
MermaidJS template.JS
|
||||
}
|
||||
|
||||
SignatureData struct {
|
||||
@@ -321,6 +332,8 @@ const (
|
||||
)
|
||||
|
||||
func RenderHTML(data DocumentData) ([]byte, error) {
|
||||
data.MermaidJS = template.JS(mermaidJSSource)
|
||||
|
||||
var buf bytes.Buffer
|
||||
if err := documentTemplate.Execute(&buf, data); err != nil {
|
||||
return nil, fmt.Errorf("cannot execute template: %w", err)
|
||||
|
||||
2843
pkg/docgen/mermaid.min.js
vendored
Normal file
2843
pkg/docgen/mermaid.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -341,7 +341,31 @@
|
||||
background: transparent;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.document-content pre.mermaid {
|
||||
border: none;
|
||||
padding: 0;
|
||||
background: transparent;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.document-content pre.mermaid svg {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
</style>
|
||||
<script>{{.MermaidJS}}</script>
|
||||
<script>
|
||||
window.__mermaidReady = false;
|
||||
mermaid.initialize({ startOnLoad: false, theme: 'neutral' });
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
mermaid.run().then(function () {
|
||||
window.__mermaidReady = true;
|
||||
}).catch(function () {
|
||||
window.__mermaidReady = true;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document-container">
|
||||
|
||||
Reference in New Issue
Block a user