Skip to content

Commit 6b768b4

Browse files
authored
Merge 49a2d3f into 93cb197
2 parents 93cb197 + 49a2d3f commit 6b768b4

4 files changed

+30
-6
lines changed

templates/modern/src/markdown.ts

+16-3
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() {
@@ -39,7 +41,8 @@ let mermaidRenderCount = 0
3941
*/
4042
async function renderMermaid() {
4143
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) {
4346
return
4447
}
4548

@@ -57,8 +60,18 @@ async function renderMermaid() {
5760
// Rerender when elements becomes visible due to https://github.com/mermaid-js/mermaid/issues/1846
5861
if (e.offsetParent) {
5962
nodes.push(e.parentElement)
63+
const code = e.innerHTML
6064
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)
6275
}
6376
})
6477

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)