Skip to content

Conversation

@dave2wave
Copy link
Member

No description provided.

Copy link
Member

@potiuk potiuk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Despite using requirements files ;) -> this is great. Having diagrams generated from code is great. I love mermaid and the "editability" in place it gives.

@dave2wave
Copy link
Member Author

<script>
document.addEventListener("DOMContentLoaded", () => {
  document.querySelectorAll("pre > code.language-mermaid").forEach(code => {
    const div = document.createElement("div");
    div.className = "mermaid";
    div.textContent = code.textContent;  // preserve raw mermaid markup

    // Replace <pre><code>…</code></pre> with <div class="mermaid">…</div>
    code.parentElement.replaceWith(div);
  });

  // Now render them
  mermaid.init();
});
</script>

@dave2wave
Copy link
Member Author

div.textContent = decodeHtmlEntities(code.innerHTML);

@dave2wave
Copy link
Member Author

function decodeHtmlEntities(str) {
  const txt = document.createElement("textarea");
  txt.innerHTML = str;
  return txt.value;
}

@dave2wave
Copy link
Member Author

    const rawHtml = code.innerHTML;
    const decoded = decodeHtmlEntities(rawHtml);

    console.log("=== Mermaid block", i, "raw HTML ===");
    console.log(rawHtml);
    console.log("=== Mermaid block", i, "decoded text ===");
    console.log(decoded);

    const div = document.createElement("div");
    div.className = "mermaid";
    div.textContent = decoded;

    code.parentElement.replaceWith(div);

@dave2wave
Copy link
Member Author

<script>
document.addEventListener("DOMContentLoaded", () => {

  function decodeHtmlEntities(str) {
    const txt = document.createElement("textarea");
    txt.innerHTML = str;
    return txt.value;
  }

  document.querySelectorAll("pre > code.language-mermaid").forEach((code, i) => {
    let decoded = decodeHtmlEntities(code.innerHTML);

    // Normalize whitespace
    decoded = decoded.replace(/\t/g, "    ");
    decoded = decoded.replace(/^\s*\n/, "").replace(/\n\s*$/, "");

    const div = document.createElement("div");
    div.className = "mermaid";
    div.textContent = decoded;

    code.parentElement.replaceWith(div);

    console.log(`=== Mermaid block ${i} ===`);
    console.log(decoded);
  });

  // Mermaid v10+ runs asynchronously
  mermaid.run({ querySelector: ".mermaid" })
    .catch(err => {
      console.error("Mermaid rendering failed:", err);
    });
});
</script>

@dave2wave dave2wave marked this pull request as ready for review November 30, 2025 01:01
@dave2wave dave2wave merged commit f7ab016 into main Nov 30, 2025
2 checks passed
@dave2wave dave2wave deleted the pelican-mermaid branch November 30, 2025 01:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants