@@ -10,7 +10,7 @@ import FNote from "../entities/fnote.js";
1010import FAttachment from "../entities/fattachment.js" ;
1111import imageContextMenuService from "../menus/image_context_menu.js" ;
1212import { applySingleBlockSyntaxHighlight , formatCodeBlocks } from "./syntax_highlight.js" ;
13- import { loadElkIfNeeded , postprocessMermaidSvg } from "./mermaid.js" ;
13+ import { getMermaidConfig , loadElkIfNeeded , postprocessMermaidSvg } from "./mermaid.js" ;
1414import renderDoc from "./doc_renderer.js" ;
1515import { t } from "../services/i18n.js" ;
1616import WheelZoom from 'vanilla-js-wheel-zoom' ;
@@ -136,6 +136,7 @@ async function renderText(note: FNote | FAttachment, $renderedContent: JQuery<HT
136136 await linkService . loadReferenceLinkTitle ( $ ( el ) ) ;
137137 }
138138
139+ await rewriteMermaidDiagramsInContainer ( $renderedContent [ 0 ] as HTMLDivElement ) ;
139140 await formatCodeBlocks ( $renderedContent ) ;
140141 } else if ( note instanceof FNote && ! options . noChildrenList ) {
141142 await renderChildrenList ( $renderedContent , note ) ;
@@ -370,6 +371,34 @@ function getRenderingType(entity: FNote | FAttachment) {
370371 return type ;
371372}
372373
374+ /** Rewrite the code block from <pre><code> to <div> in order not to apply a codeblock style to it. */
375+ export async function rewriteMermaidDiagramsInContainer ( container : HTMLDivElement ) {
376+ const mermaidBlocks = container . querySelectorAll ( 'pre:has(code[class="language-mermaid"])' ) ;
377+ if ( ! mermaidBlocks . length ) return ;
378+ const nodes : HTMLElement [ ] = [ ] ;
379+
380+ for ( const mermaidBlock of mermaidBlocks ) {
381+ const div = document . createElement ( "div" ) ;
382+ div . classList . add ( "mermaid-diagram" ) ;
383+ div . innerHTML = mermaidBlock . querySelector ( "code" ) ?. innerHTML ?? "" ;
384+ mermaidBlock . replaceWith ( div ) ;
385+ nodes . push ( div ) ;
386+ }
387+ }
388+
389+ export async function applyInlineMermaid ( container : HTMLDivElement ) {
390+ // Initialize mermaid
391+ const mermaid = ( await import ( "mermaid" ) ) . default ;
392+ mermaid . initialize ( getMermaidConfig ( ) ) ;
393+ const nodes = Array . from ( container . querySelectorAll < HTMLElement > ( "div.mermaid-diagram" ) ) ;
394+ console . log ( "Got nodes" , nodes ) ;
395+ try {
396+ await mermaid . run ( { nodes } ) ;
397+ } catch ( e ) {
398+ console . log ( e ) ;
399+ }
400+ }
401+
373402export default {
374403 getRenderedContent
375404} ;
0 commit comments