mermaid: refactor config to use mermaid_config.js include, only require mermaid.version in _config.yml (#909)

This PR has a bit of scope creep! This PR now:

- changes the mermaid opt-in logic to only check for the existence of a `mermaid` key instead of `mermaid != false`: this resolves the follow-up in #857
- changes the behaviour of mermaid configuration
    - instead of using `mermaid_init.html` with default settings, makes the include `mermaid_config.js`
    - the include is loaded directly into the contents of `mermaid_initialize`
    - by default, it is an empty object (i.e. `{}`), triggering the defaults
- updates docs
- adds an example to the markdown kitchen sink  

It does significantly change the interface provided in #857, and I apologize for the confusion. However, given the discussion in this PR, I think it's the best move forward!
This commit is contained in:
Matt Wang 2022-08-11 19:34:15 -07:00 committed by GitHub
parent 1d15ea3b84
commit e2f1546c61
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 66 additions and 101 deletions

View File

@ -51,26 +51,14 @@ search:
# Supports true or false (default) # Supports true or false (default)
button: false button: false
# Enable or disable support for mermaid diagrams (https://mermaid-js.github.io/mermaid/) # To enable support for mermaid diagrams (https://mermaid-js.github.io/mermaid/),
# Supports true or false (default) # uncomment the `mermaid` and `version` keys below
mermaid_enabled: false # mermaid:
mermaid: # # Version of mermaid library
# Version of mermaid library # # Pick an available version from https://cdn.jsdelivr.net/npm/mermaid/
# Pick an available version from https://cdn.jsdelivr.net/npm/mermaid/ # version: "9.1.3"
version: "9.1.3" # # Put any additional configuration, such as setting the theme, in _includes/mermaid_config.js
# Configured theme of mermaid diagrams # # See also docs/ui-components/code
# Pick an avaiable theme from https://mermaid-js.github.io/mermaid/#/theming
theme: "default"
# Additional configuration available matching pattern as defined in https://mermaid-js.github.io/mermaid/#/./Setup.
# For example,
# logLevel: 'fatal',
# sequence:
# diagramMarginX: 50
# actorMargin: 50
# gantt:
# barGap: 4
# topPadding: 50
# Enable or disable heading anchors # Enable or disable heading anchors
heading_anchors: true heading_anchors: true

View File

@ -30,7 +30,7 @@
<script type="text/javascript" src="{{ '/assets/js/vendor/lunr.min.js' | relative_url }}"></script> <script type="text/javascript" src="{{ '/assets/js/vendor/lunr.min.js' | relative_url }}"></script>
{% endif %} {% endif %}
{% if site.mermaid_enabled != false %} {% if site.mermaid %}
<script src="https://cdn.jsdelivr.net/npm/mermaid@{{ site.mermaid.version }}/dist/mermaid.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/mermaid@{{ site.mermaid.version }}/dist/mermaid.min.js"></script>
{% endif %} {% endif %}

View File

@ -0,0 +1 @@
{}

View File

@ -1,58 +0,0 @@
<script>
var config = {
theme: '{{ site.mermaid.theme | default: "default" }}',
logLevel: '{{ site.mermaid.logLevel | default: "fatal" }}',
securityLevel: '{{ site.mermaid.securityLevel | default: "strict" }}',
startOnLoad: {{ site.mermaid.startOnLoad | default: true }},
arrowMarkerAbsolute: {{ site.mermaid.arrowMarkerAbsolute | default: false }},
er: {
diagramPadding: {{ site.mermaid.er.diagramPadding | default: 20 }},
layoutDirection: '{{ site.mermaid.er.layoutDirection | default: "TB" }}',
minEntityWidth: {{ site.mermaid.er.minEntityWidth | default: 100 }},
minEntityHeight: {{ site.mermaid.er.minEntityHeight | default: 75 }},
entityPadding: {{ site.mermaid.er.entityPadding | default: 15 }},
stroke: '{{ site.mermaid.er.stroke | default: "gray" }}',
fill: '{{ site.mermaid.er.fill | default: "honeydew" }}',
fontSize: {{ site.mermaid.er.fontSize | default: 12 }},
useMaxWidth: {{ site.mermaid.er.useMaxWidth | default: true }},
},
flowchart:{
diagramPadding: {{ site.mermaid.flowchart.diagramPadding | default: 8 }},
htmlLabels: {{ site.mermaid.flowchart.htmlLabels | default: true }},
curve: '{{ site.mermaid.flowchart.curve | default: "basis" }}',
},
sequence: {
diagramMarginX: {{ site.mermaid.sequence.diagramMarginX | default: 50 }},
diagramMarginY: {{ site.mermaid.sequence.diagramMarginY | default: 10 }},
actorMargin: {{ site.mermaid.sequence.actorMargin | default: 50 }},
width: {{ site.mermaid.sequence.width | default: 150 }},
height: {{ site.mermaid.sequence.height | default: 65 }},
boxMargin: {{ site.mermaid.sequence.boxMargin | default: 10 }},
boxTextMargin: {{ site.mermaid.sequence.boxTextMargin | default: 5 }},
noteMargin: {{ site.mermaid.sequence.noteMargin | default: 10 }},
messageMargin: {{ site.mermaid.sequence.messageMargin | default: 35 }},
messageAlign: '{{ site.mermaid.sequence.messageAlign | default: "center" }}',
mirrorActors: {{ site.mermaid.sequence.mirrorActors | default: true }},
bottomMarginAdj: {{ site.mermaid.sequence.bottomMarginAdj | default: 1 }},
useMaxWidth: {{ site.mermaid.sequence.useMaxWidth | default: true }},
rightAngles: {{ site.mermaid.sequence.rightAngles | default: false }},
showSequenceNumbers: {{ site.mermaid.sequence.showSequenceNumbers | default: false }},
},
gantt: {
titleTopMargin: {{ site.mermaid.gantt.titleTopMargin | default: 25 }},
barHeight: {{ site.mermaid.gantt.barHeight | default: 20 }},
barGap: {{ site.mermaid.gantt.barGap | default: 4 }},
topPadding: {{ site.mermaid.gantt.topPadding | default: 50 }},
leftPadding: {{ site.mermaid.gantt.leftPadding | default: 75 }},
fontSize: {{ site.mermaid.gantt.fontSize | default: 11 }},
gridLineStartPadding: {{ site.mermaid.gantt.gridLineStartPadding | default: 35 }},
fontFamily: '{{ site.mermaid.gantt.fontFamily | default: "\'Open Sans\', sans-serif" }}',
numberSectionStyles: {{ site.mermaid.gantt.numberSectionStyles | default: 4 }},
axisFormat: '{{ site.mermaid.gantt.axisFormat | default: "%Y-%m-%d" }}',
topAxis: {{ site.mermaid.gantt.topAxis | default: false }},
},
};
mermaid.initialize(config);
window.mermaid.init(undefined, document.querySelectorAll('.language-mermaid'));
</script>

View File

@ -215,7 +215,11 @@ layout: table_wrappers
{% endif %} {% endif %}
</div> </div>
</body> </body>
{% if site.mermaid_enabled != false %} {% if site.mermaid %}
{%- include mermaid_init.html -%} <script>
var config = {% include mermaid_config.js %};
mermaid.initialize(config);
window.mermaid.init(undefined, document.querySelectorAll('.language-mermaid'));
</script>
{% endif %} {% endif %}
</html> </html>

View File

@ -60,30 +60,18 @@ search:
``` ```
## Mermaid Diagrams ## Mermaid Diagrams
See [Code]({{ site.baseurl }}{% link docs/ui-components/code.md %}#mermaid-diagram-code-blocks) for more information.
The minimum configuration requires the key for `version` ([from jsDelivr](https://cdn.jsdelivr.net/npm/mermaid/)) in `_config.yml`:
```yaml ```yaml
# Enable or disable support for mermaid diagrams (https://mermaid-js.github.io/mermaid/)
# Supports true or false (default)
mermaid_enabled: false
mermaid: mermaid:
# Version of mermaid library # Version of mermaid library
# Pick an available version from https://cdn.jsdelivr.net/npm/mermaid/ # Pick an available version from https://cdn.jsdelivr.net/npm/mermaid/
version: "9.1.3" version: "9.1.3"
# Configured theme of mermaid diagrams
# Pick an avaiable theme from https://mermaid-js.github.io/mermaid/#/theming
theme: "default"
# Additional configuration available matching pattern as defined in https://mermaid-js.github.io/mermaid/#/./Setup.
# For example,
# logLevel: 'fatal',
# sequence:
# diagramMarginX: 50
# actorMargin: 50
# gantt:
# barGap: 4
# topPadding: 50
``` ```
See [the Code documentation]({{ site.baseurl }}{% link docs/ui-components/code.md %}#mermaid-diagram-code-blocks) for more configuration options and information.
## Aux links ## Aux links
```yaml ```yaml
@ -261,6 +249,7 @@ just_the_docs:
# Supports true or false (default) # Supports true or false (default)
# search_exclude: true # search_exclude: true
``` ```
The navigation for all your normal pages (if any) is displayed before those in collections. The navigation for all your normal pages (if any) is displayed before those in collections.
You can reference multiple collections. You can reference multiple collections.
@ -282,6 +271,7 @@ just_the_docs:
tutorials: tutorials:
name: Tutorials name: Tutorials
``` ```
When *all* your pages are in a single collection, its name is not displayed. When *all* your pages are in a single collection, its name is not displayed.
The navigation for each collection is a separate name space for page titles: a page in one collection cannot be a child of a page in a different collection, or of a normal page. The navigation for each collection is a separate name space for page titles: a page in one collection cannot be a child of a page in a different collection, or of a normal page.

View File

@ -298,6 +298,19 @@ class conditions(object):
Long, single-line code blocks should not wrap. They should horizontally scroll if they are too long. This line should be long enough to demonstrate this. Long, single-line code blocks should not wrap. They should horizontally scroll if they are too long. This line should be long enough to demonstrate this.
``` ```
### Mermaid Diagrams
The following code is displayed as a diagram only when a `mermaid` key supplied in `_config.yml`.
```mermaid
graph TD;
A-->B;
A-->C;
B-->D;
C-->D;
```
``` ```
The final element. The final element.
``` ```

View File

@ -91,9 +91,36 @@ To demonstrate front end code, sometimes it's useful to show a rendered example
## Mermaid diagram code blocks ## Mermaid diagram code blocks
[Mermaid](https://mermaid-js.github.io/mermaid/) allows you to add diagrams and visualizations using Markdown code blocks. You can turn on support for mermaid by adding `mermaid_enabled: true` to your \_config.yml. [Mermaid](https://mermaid-js.github.io/mermaid/) allows you to add diagrams and visualizations using Markdown code blocks. You can turn on support for mermaid by adding a `mermaid` key to your `_config.yml`.
The markdown for a simple flowchart example might look like the following: The minimum configuration requires a `version` key (matching a version in [jsDelivr](https://cdn.jsdelivr.net/npm/mermaid/)):
```yaml
mermaid:
# Version of mermaid library
# Pick an available version from https://cdn.jsdelivr.net/npm/mermaid/
version: "9.1.3"
```
Additional configuration options are loaded through `_includes/mermaid_config.js`. By default, the contents of the file are the empty object:
```js
// _includes/mermaid_config.js
{}
```
This loads the default settings.
The contents of this object should follow [mermaid's configuration API](https://mermaid-js.github.io/mermaid/#/./Setup?id=configuration). For example, to override the theme, change `_includes/mermaid_config.js` to:
```js
// _includes/mermaid_config.js
{
theme: "forest"
}
```
Once mermaid is installed, it can be used in markdown files. The markdown for a simple flowchart example might look like the following:
{% highlight markdown %} {% highlight markdown %}
```mermaid ```mermaid