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 ( ) {
@@ -32,33 +34,41 @@ async function renderMath() {
32
34
}
33
35
}
34
36
35
- let mermaidRenderCount = 0
36
-
37
37
/**
38
38
* Render mermaid diagrams.
39
39
*/
40
40
async function renderMermaid ( ) {
41
+ console . log ( 'asdf' )
41
42
const diagrams = document . querySelectorAll < HTMLElement > ( 'pre code.lang-mermaid' )
42
- if ( diagrams . length <= 0 ) {
43
+ const processedDiagrams = document . querySelectorAll < HTMLElement > ( 'pre.mermaid[data-mermaid]' )
44
+ if ( diagrams . length <= 0 && processedDiagrams . length <= 0 ) {
43
45
return
44
46
}
45
47
46
48
const { default : mermaid } = await import ( 'mermaid' )
47
49
const theme = getTheme ( ) === 'dark' ? 'dark' : 'default'
48
50
49
51
// Turn off deterministic ids on re-render
50
- const deterministicIds = mermaidRenderCount === 0
51
52
const { mermaid : mermaidOptions } = await options ( )
52
- mermaid . initialize ( Object . assign ( { startOnLoad : false , deterministicIds, theme } , mermaidOptions ) )
53
- mermaidRenderCount ++
53
+ mermaid . initialize ( Object . assign ( { startOnLoad : false , theme } , mermaidOptions ) )
54
54
55
55
const nodes = [ ]
56
56
diagrams . forEach ( e => {
57
57
// Rerender when elements becomes visible due to https://github.com/mermaid-js/mermaid/issues/1846
58
58
if ( e . offsetParent ) {
59
59
nodes . push ( e . parentElement )
60
+ const code = e . innerHTML
60
61
e . parentElement . classList . add ( 'mermaid' )
61
- e . parentElement . innerHTML = e . innerHTML
62
+ e . parentElement . setAttribute ( "data-mermaid" , code )
63
+ e . parentElement . innerHTML = code
64
+ }
65
+ } )
66
+
67
+ processedDiagrams . forEach ( e => {
68
+ if ( e . offsetParent ) {
69
+ e . removeAttribute ( "data-processed" )
70
+ e . innerHTML = e . getAttribute ( "data-mermaid" )
71
+ nodes . push ( e )
62
72
}
63
73
} )
64
74
0 commit comments