Skip to content

Commit 71fc964

Browse files
authored
Merge b607019 into 93cb197
2 parents 93cb197 + b607019 commit 71fc964

5 files changed

+34
-13
lines changed

templates/modern/src/markdown.ts

+18-8
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import { breakWord, meta, loc, options } from './helper'
55
import AnchorJs from 'anchor-js'
66
import { 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

2830
async function renderMath() {
@@ -32,33 +34,41 @@ async function renderMath() {
3234
}
3335
}
3436

35-
let mermaidRenderCount = 0
36-
3737
/**
3838
* Render mermaid diagrams.
3939
*/
4040
async 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

templates/modern/src/theme.ts

+5
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ export async function initTheme() {
2222
setTheme(await getDefaultTheme())
2323
}
2424

25+
export function onThemeChange(callback: (theme: 'light' | 'dark') => {}) {
26+
return new MutationObserver(() => callback(getTheme()))
27+
.observe(document.documentElement, { attributes: true, attributeFilter: ['data-bs-theme'] })
28+
}
29+
2530
export function getTheme(): 'light' | 'dark' {
2631
return document.documentElement.getAttribute('data-bs-theme') as 'light' | 'dark'
2732
}

0 commit comments

Comments
 (0)