mirror of
https://github.com/McShelby/hugo-theme-relearn.git
synced 2024-11-27 01:33:04 +00:00
mermaid: allow for YAML frontmatter inside of graph #564
This commit is contained in:
parent
59428415f2
commit
e77afd6b70
2 changed files with 24 additions and 25 deletions
|
@ -117,11 +117,13 @@ mermaidZoom = true
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
### Flowchart with Non-Default Mermaid Theme
|
### Flowchart with YAML-Title
|
||||||
|
|
||||||
````go
|
````go
|
||||||
{{</* mermaid */>}}
|
{{</* mermaid */>}}
|
||||||
%%{init:{"theme":"forest"}}%%
|
---
|
||||||
|
title: Example Diagram
|
||||||
|
---
|
||||||
graph LR;
|
graph LR;
|
||||||
A[Hard edge] -->|Link text| B(Round edge)
|
A[Hard edge] -->|Link text| B(Round edge)
|
||||||
B --> C{<strong>Decision</strong>}
|
B --> C{<strong>Decision</strong>}
|
||||||
|
@ -131,7 +133,9 @@ graph LR;
|
||||||
````
|
````
|
||||||
|
|
||||||
{{< mermaid >}}
|
{{< mermaid >}}
|
||||||
%%{init:{"theme":"forest"}}%%
|
---
|
||||||
|
title: Example Diagram
|
||||||
|
---
|
||||||
graph LR;
|
graph LR;
|
||||||
A[Hard edge] -->|Link text| B(Round edge)
|
A[Hard edge] -->|Link text| B(Round edge)
|
||||||
B --> C{<strong>Decision</strong>}
|
B --> C{<strong>Decision</strong>}
|
||||||
|
@ -247,10 +251,11 @@ stateDiagram-v2
|
||||||
closed --> open: Open
|
closed --> open: Open
|
||||||
{{< /mermaid >}}
|
{{< /mermaid >}}
|
||||||
|
|
||||||
### Entity Relationship Model
|
### Entity Relationship Model with Non-Default Mermaid Theme
|
||||||
|
|
||||||
````go
|
````go
|
||||||
{{</* mermaid */>}}
|
{{</* mermaid */>}}
|
||||||
|
%%{init:{"theme":"forest"}}%%
|
||||||
erDiagram
|
erDiagram
|
||||||
CUSTOMER }|..|{ DELIVERY-ADDRESS : has
|
CUSTOMER }|..|{ DELIVERY-ADDRESS : has
|
||||||
CUSTOMER ||--o{ ORDER : places
|
CUSTOMER ||--o{ ORDER : places
|
||||||
|
@ -264,6 +269,7 @@ erDiagram
|
||||||
````
|
````
|
||||||
|
|
||||||
{{< mermaid >}}
|
{{< mermaid >}}
|
||||||
|
%%{init:{"theme":"forest"}}%%
|
||||||
erDiagram
|
erDiagram
|
||||||
CUSTOMER }|..|{ DELIVERY-ADDRESS : has
|
CUSTOMER }|..|{ DELIVERY-ADDRESS : has
|
||||||
CUSTOMER ||--o{ ORDER : places
|
CUSTOMER ||--o{ ORDER : places
|
||||||
|
|
|
@ -158,35 +158,28 @@ function initMermaid( update, attrs ) {
|
||||||
};
|
};
|
||||||
|
|
||||||
var parseGraph = function( graph ){
|
var parseGraph = function( graph ){
|
||||||
var d = /^\s*(%%\s*\{\s*\w+\s*:([^%]*?)%%\s*\n?)/g;
|
// See https://github.com/mermaid-js/mermaid/blob/9a080bb975b03b2b1d4ef6b7927d09e6b6b62760/packages/mermaid/src/diagram-api/frontmatter.ts#L10
|
||||||
|
// for reference on the regex originally taken from jekyll
|
||||||
|
var YAML=1;
|
||||||
|
var INIT=2;
|
||||||
|
var GRAPH=3;
|
||||||
|
var d = /^(?:\s*[\n\r])*(-{3}\s*[\n\r](?:.*?)[\n\r]-{3}(?:\s*[\n\r]+)+)?(?:\s*(?:%%\s*\{\s*\w+\s*:([^%]*?)%%\s*[\n\r]?))?(.*)$/s
|
||||||
var m = d.exec( graph );
|
var m = d.exec( graph );
|
||||||
|
var yaml = '';
|
||||||
var dir = {};
|
var dir = {};
|
||||||
var content = graph;
|
var content = graph;
|
||||||
if( m && m.length == 3 ){
|
if( m && m.length == 4 ){
|
||||||
dir = JSON.parse( '{ "dummy": ' + m[2] ).dummy;
|
yaml = m[YAML] ? m[YAML] : yaml;
|
||||||
content = graph.substring( d.lastIndex );
|
dir = m[INIT] ? JSON.parse( '{ "init": ' + m[INIT] ).init : dir;
|
||||||
|
content = m[GRAPH] ? m[GRAPH] : content;
|
||||||
}
|
}
|
||||||
content = content.trim();
|
var ret = { yaml: yaml, dir: dir, content: content.trim() }
|
||||||
return { dir: dir, content: content };
|
return ret;
|
||||||
};
|
};
|
||||||
|
|
||||||
var serializeGraph = function( graph ){
|
var serializeGraph = function( graph ){
|
||||||
// See https://github.com/mermaid-js/mermaid/blob/9a080bb975b03b2b1d4ef6b7927d09e6b6b62760/packages/mermaid/src/diagram-api/frontmatter.ts#L10
|
var s = graph.yaml + '%%{init: ' + JSON.stringify( graph.dir ) + '}%%\n' + graph.content;
|
||||||
// for reference on the regex originally taken from jekyll
|
|
||||||
const frontMatterRegex = /^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s;
|
|
||||||
const matches = graph.content.match(frontMatterRegex);
|
|
||||||
// if we find front matter, we need to put this before the `%%{init` directive.
|
|
||||||
if (matches) {
|
|
||||||
const ymlFrontMatter = graph.content.substring(0, matches[0].length);
|
|
||||||
const graphContent = graph.content.slice(matches[0].length);
|
|
||||||
var s = ymlFrontMatter + '\n%%{init: ' + JSON.stringify( graph.dir ) + '}%%\n';
|
|
||||||
s += graphContent;
|
|
||||||
return s;
|
return s;
|
||||||
} else {
|
|
||||||
var s = '%%{init: ' + JSON.stringify( graph.dir ) + '}%%\n';
|
|
||||||
s += graph.content;
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var init_func = function( attrs ){
|
var init_func = function( attrs ){
|
||||||
|
|
Loading…
Reference in a new issue