Skip to content

Commit 6a979a5

Browse files
authored
Merge pull request #16 from mambax7/master
mermaid
2 parents c94b8fb + e6e29ed commit 6a979a5

2 files changed

Lines changed: 24 additions & 14 deletions

File tree

apps/docs-27/public/mermaid-init.js

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
// Mermaid diagram renderer for XOOPS Docs
22
// Loaded as a static asset — no build step, no npm dependency.
3-
// Finds every <pre><code class="language-mermaid"> block that Starlight emits
4-
// and replaces it with a rendered SVG. Re-renders when the user switches
5-
// between dark and light mode.
3+
// Starlight uses expressive-code, which renders mermaid blocks as:
4+
// <div class="expressive-code">
5+
// <figure><pre data-language="mermaid"><code>...</code></pre></figure>
6+
// </div>
7+
// We target that structure, extract the raw source via textContent,
8+
// replace the whole expressive-code container with the rendered SVG,
9+
// and re-render when the user toggles dark/light mode.
610

711
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
812

@@ -13,14 +17,15 @@ function currentTheme() {
1317
}
1418

1519
async function renderMermaid() {
16-
const codeBlocks = document.querySelectorAll('pre code.language-mermaid');
20+
const codeBlocks = document.querySelectorAll('pre[data-language="mermaid"] code');
1721
if (!codeBlocks.length) return;
1822

1923
mermaid.initialize({ startOnLoad: false, theme: currentTheme() });
2024

2125
for (const code of codeBlocks) {
22-
const pre = code.closest('pre');
23-
const src = code.textContent;
26+
const src = code.textContent.trim();
27+
// Replace the whole expressive-code wrapper, falling back to the <pre>
28+
const container = code.closest('.expressive-code') || code.closest('pre');
2429
const wrapper = document.createElement('div');
2530
wrapper.dataset.mermaidSrc = src;
2631
wrapper.className = 'mermaid-diagram not-content';
@@ -32,7 +37,7 @@ async function renderMermaid() {
3237
} catch {
3338
wrapper.textContent = src;
3439
}
35-
pre.replaceWith(wrapper);
40+
container.replaceWith(wrapper);
3641
}
3742
}
3843

apps/docs-4x/public/mermaid-init.js

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
// Mermaid diagram renderer for XOOPS Docs
22
// Loaded as a static asset — no build step, no npm dependency.
3-
// Finds every <pre><code class="language-mermaid"> block that Starlight emits
4-
// and replaces it with a rendered SVG. Re-renders when the user switches
5-
// between dark and light mode.
3+
// Starlight uses expressive-code, which renders mermaid blocks as:
4+
// <div class="expressive-code">
5+
// <figure><pre data-language="mermaid"><code>...</code></pre></figure>
6+
// </div>
7+
// We target that structure, extract the raw source via textContent,
8+
// replace the whole expressive-code container with the rendered SVG,
9+
// and re-render when the user toggles dark/light mode.
610

711
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
812

@@ -13,14 +17,15 @@ function currentTheme() {
1317
}
1418

1519
async function renderMermaid() {
16-
const codeBlocks = document.querySelectorAll('pre code.language-mermaid');
20+
const codeBlocks = document.querySelectorAll('pre[data-language="mermaid"] code');
1721
if (!codeBlocks.length) return;
1822

1923
mermaid.initialize({ startOnLoad: false, theme: currentTheme() });
2024

2125
for (const code of codeBlocks) {
22-
const pre = code.closest('pre');
23-
const src = code.textContent;
26+
const src = code.textContent.trim();
27+
// Replace the whole expressive-code wrapper, falling back to the <pre>
28+
const container = code.closest('.expressive-code') || code.closest('pre');
2429
const wrapper = document.createElement('div');
2530
wrapper.dataset.mermaidSrc = src;
2631
wrapper.className = 'mermaid-diagram not-content';
@@ -32,7 +37,7 @@ async function renderMermaid() {
3237
} catch {
3338
wrapper.textContent = src;
3439
}
35-
pre.replaceWith(wrapper);
40+
container.replaceWith(wrapper);
3641
}
3742
}
3843

0 commit comments

Comments
 (0)