| Total Complexity | 3 |
| Total Lines | 47 |
| Duplicated Lines | 0 % |
| Changes | 0 | ||
| 1 | from .typing import MermaidDiagram |
||
| 2 | |||
| 3 | HTML_TEMPLATE = """<!doctype html> |
||
| 4 | <html lang="en"> |
||
| 5 | <head> |
||
| 6 | <link rel="icon" type="image/x-icon" href="https://mermaid.js.org/favicon.ico"> |
||
| 7 | <meta charset="utf-8"> |
||
| 8 | <title>Mermaid Diagram</title> |
||
| 9 | <style> |
||
| 10 | pre.mermaid { |
||
| 11 | font-family: "Fira Mono", "Roboto Mono", "Source Code Pro", monospace; |
||
| 12 | } |
||
| 13 | </style> |
||
| 14 | </head> |
||
| 15 | <body> |
||
| 16 | <pre class="mermaid"> |
||
| 17 | </pre> |
||
| 18 | <script type="module"> |
||
| 19 | import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs'; |
||
| 20 | let config = { startOnLoad: true, flowchart: { useMaxWidth: false, htmlLabels: true } }; |
||
| 21 | mermaid.initialize(config); |
||
| 22 | </script> |
||
| 23 | </body> |
||
| 24 | </html> |
||
| 25 | """ |
||
| 26 | |||
| 27 | |||
| 28 | def markdown(diagram: MermaidDiagram) -> str: |
||
| 29 | """ |
||
| 30 | Generate Markdown code for a Mermaid diagram. |
||
| 31 | """ |
||
| 32 | return f"```mermaid\n{diagram}\n```" |
||
| 33 | |||
| 34 | |||
| 35 | def html(diagram: MermaidDiagram, title: str | None = None) -> str: |
||
| 36 | """ |
||
| 37 | Generate HTML code for a Mermaid diagram. |
||
| 38 | """ |
||
| 39 | output = HTML_TEMPLATE.replace( |
||
| 40 | '<pre class="mermaid">', f'<pre class="mermaid">\n{diagram}' |
||
| 41 | ) |
||
| 42 | if title: |
||
| 43 | output = output.replace( |
||
| 44 | "<title>Mermaid Diagram</title>", f"<title>{title}</title>" |
||
| 45 | ) |
||
| 46 | return output |
||
| 47 |