feat: Mermaid diagram rendering in WASM doc
This commit is contained in:
@@ -4,6 +4,8 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>Momentry API Docs</title>
|
<title>Momentry API Docs</title>
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js"></script>
|
||||||
|
<script>mermaid.initialize({startOnLoad:false,theme:'base',themeVariables:{primaryColor:'#1a1a2e',lineColor:'#e94560',secondaryColor:'#16213e'}});</script>
|
||||||
<style>
|
<style>
|
||||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||||
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: #f5f5f5; color: #333; }
|
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: #f5f5f5; color: #333; }
|
||||||
@@ -114,7 +116,10 @@ function md2html(md) {
|
|||||||
const rlen = result[1];
|
const rlen = result[1];
|
||||||
const ret = new TextDecoder().decode(new Uint8Array(memory.buffer, rptr, rlen));
|
const ret = new TextDecoder().decode(new Uint8Array(memory.buffer, rptr, rlen));
|
||||||
free(rptr, rlen, 1);
|
free(rptr, rlen, 1);
|
||||||
return ret.replace(/<table>/g, '<table class="table">');
|
// Convert mermaid code blocks: <pre><code class="language-mermaid">...</code></pre> → <pre class="mermaid">...</pre>
|
||||||
|
var h = ret.replace(/<table>/g, '<table class="table">');
|
||||||
|
h = h.replace(/<pre><code class="language-mermaid">([\s\S]*?)<\/code><\/pre>/g, '<pre class="mermaid">$1</pre>');
|
||||||
|
return h;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function loadDoc(name) {
|
async function loadDoc(name) {
|
||||||
@@ -125,6 +130,7 @@ async function loadDoc(name) {
|
|||||||
const md = await resp.text();
|
const md = await resp.text();
|
||||||
if (!wasm_exports) throw new Error('WASM not loaded');
|
if (!wasm_exports) throw new Error('WASM not loaded');
|
||||||
el.innerHTML = md2html(md);
|
el.innerHTML = md2html(md);
|
||||||
|
if (typeof mermaid !== 'undefined') mermaid.run({nodes:[el.querySelector('.mermaid')].filter(Boolean)});
|
||||||
document.querySelectorAll('.sidebar a.module-link').forEach(function(a) { a.classList.remove('active'); });
|
document.querySelectorAll('.sidebar a.module-link').forEach(function(a) { a.classList.remove('active'); });
|
||||||
var link = document.querySelector('.sidebar a[data-module="' + name + '"]');
|
var link = document.querySelector('.sidebar a[data-module="' + name + '"]');
|
||||||
if (link) link.classList.add('active');
|
if (link) link.classList.add('active');
|
||||||
|
|||||||
Reference in New Issue
Block a user