4
4
import { breakWord , meta , loc , options } from './helper'
5
5
import AnchorJs from 'anchor-js'
6
6
import { html , render } from 'lit-html'
7
- import { getTheme } from './theme'
7
+ import { getTheme , onThemeChange } from './theme'
8
8
9
9
/**
10
10
* Initialize markdown rendering.
@@ -23,6 +23,8 @@ export async function renderMarkdown() {
23
23
renderMath ( ) ,
24
24
renderMermaid ( )
25
25
] )
26
+
27
+ onThemeChange ( renderMermaid )
26
28
}
27
29
28
30
async function renderMath ( ) {
@@ -39,7 +41,8 @@ let mermaidRenderCount = 0
39
41
*/
40
42
async function renderMermaid ( ) {
41
43
const diagrams = document . querySelectorAll < HTMLElement > ( 'pre code.lang-mermaid' )
42
- if ( diagrams . length <= 0 ) {
44
+ const processedDiagrams = document . querySelectorAll < HTMLElement > ( 'pre.mermaid[data-mermaid]' )
45
+ if ( diagrams . length <= 0 && processedDiagrams . length <= 0 ) {
43
46
return
44
47
}
45
48
@@ -57,8 +60,18 @@ async function renderMermaid() {
57
60
// Rerender when elements becomes visible due to https://github.com/mermaid-js/mermaid/issues/1846
58
61
if ( e . offsetParent ) {
59
62
nodes . push ( e . parentElement )
63
+ const code = e . innerHTML
60
64
e . parentElement . classList . add ( 'mermaid' )
61
- e . parentElement . innerHTML = e . innerHTML
65
+ e . parentElement . setAttribute ( "data-mermaid" , code )
66
+ e . parentElement . innerHTML = code
67
+ }
68
+ } )
69
+
70
+ processedDiagrams . forEach ( e => {
71
+ if ( e . offsetParent ) {
72
+ e . removeAttribute ( "data-processed" )
73
+ e . innerHTML = e . getAttribute ( "data-mermaid" )
74
+ nodes . push ( e )
62
75
}
63
76
} )
64
77
0 commit comments