44import { breakWord , meta , loc , options } from './helper'
55import AnchorJs from 'anchor-js'
66import { html , render } from 'lit-html'
7- import { getTheme } from './theme'
7+ import { getTheme , onThemeChange } from './theme'
88
99/**
1010 * Initialize markdown rendering.
@@ -23,6 +23,8 @@ export async function renderMarkdown() {
2323 renderMath ( ) ,
2424 renderMermaid ( )
2525 ] )
26+
27+ onThemeChange ( renderMermaid )
2628}
2729
2830async function renderMath ( ) {
@@ -32,33 +34,41 @@ async function renderMath() {
3234 }
3335}
3436
35- let mermaidRenderCount = 0
36-
3737/**
3838 * Render mermaid diagrams.
3939 */
4040async function renderMermaid ( ) {
41+ console . log ( 'asdf' )
4142 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 ) {
4345 return
4446 }
4547
4648 const { default : mermaid } = await import ( 'mermaid' )
4749 const theme = getTheme ( ) === 'dark' ? 'dark' : 'default'
4850
4951 // Turn off deterministic ids on re-render
50- const deterministicIds = mermaidRenderCount === 0
5152 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 ) )
5454
5555 const nodes = [ ]
5656 diagrams . forEach ( e => {
5757 // Rerender when elements becomes visible due to https://github.com/mermaid-js/mermaid/issues/1846
5858 if ( e . offsetParent ) {
5959 nodes . push ( e . parentElement )
60+ const code = e . innerHTML
6061 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 )
6272 }
6373 } )
6474
0 commit comments