feat: inject mermaid.js into slides that use it

This commit is contained in:
sjat 2026-05-10 17:42:35 +02:00
parent 7b045979a5
commit b5226fd74c

View file

@ -33,4 +33,44 @@ else
marpteam/marp-cli --html --output /home/marp/output "${REL_SLIDES[@]}" marpteam/marp-cli --html --output /home/marp/output "${REL_SLIDES[@]}"
fi fi
# Inject mermaid.js into any HTML that contains mermaid code blocks.
# Marp emits fenced mermaid blocks as <pre><code class="language-mermaid">.
# The script finds those elements, replaces them with <div class="mermaid">,
# then loads and runs mermaid.js from CDN.
inject_mermaid() {
local html_file="$1"
python3 - "$html_file" << 'PYEOF'
import sys
path = sys.argv[1]
snippet = """\
<script type="module">
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
document.querySelectorAll('code.language-mermaid').forEach(el => {
const div = document.createElement('div');
div.className = 'mermaid';
div.textContent = el.textContent;
el.closest('pre').replaceWith(div);
});
mermaid.initialize({ startOnLoad: false, theme: 'dark' });
await mermaid.run();
</script>"""
content = open(path).read()
open(path, 'w').write(content.replace('</body>', snippet + '\n</body>', 1))
PYEOF
}
if command -v python3 &>/dev/null; then
for html_file in "$OUTPUT_DIR"/*.html; do
[ -f "$html_file" ] || continue
if grep -q 'class="language-mermaid"' "$html_file"; then
inject_mermaid "$html_file"
echo " Injected mermaid.js into $(basename "$html_file")"
fi
done
else
echo "Warning: python3 not found — skipping mermaid injection"
fi
echo "Done — slides in $OUTPUT_DIR/" echo "Done — slides in $OUTPUT_DIR/"