Skip to content

Commit

Permalink
Various Mermaid improvments
Browse files Browse the repository at this point in the history
- Render into iframe for improved security
- Use built-in dark theme instead of color inversion
- Remove flexbox attributes, resulting in more consistent size rendering
- Update API usage and update to latest version
  • Loading branch information
silverwind committed Feb 15, 2022
1 parent 609c916 commit f501325
Show file tree
Hide file tree
Showing 8 changed files with 44 additions and 39 deletions.
30 changes: 15 additions & 15 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
"less": "4.1.2",
"less-loader": "10.2.0",
"license-checker-webpack-plugin": "0.2.1",
"mermaid": "8.13.10",
"mermaid": "8.14.0",
"mini-css-extract-plugin": "2.5.3",
"monaco-editor": "0.32.1",
"monaco-editor-webpack-plugin": "7.0.1",
Expand Down
27 changes: 18 additions & 9 deletions web_src/js/markup/mermaid.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import {isDarkTheme} from '../utils.js';
const {mermaidMaxSourceCharacters} = window.config;

function displayError(el, err) {
Expand All @@ -15,14 +16,8 @@ export async function renderMermaid() {
const {default: mermaid} = await import(/* webpackChunkName: "mermaid" */'mermaid');

mermaid.initialize({
mermaid: {
startOnLoad: false,
},
flowchart: {
useMaxWidth: true,
htmlLabels: false,
},
theme: 'neutral',
startOnLoad: false,
theme: isDarkTheme() ? 'dark' : 'neutral',
securityLevel: 'strict',
});

Expand All @@ -48,7 +43,21 @@ export async function renderMermaid() {
mermaid.init(undefined, el, (id) => {
const svg = document.getElementById(id);
svg.classList.add('mermaid-chart');
svg.closest('pre').replaceWith(svg);
const iframe = document.createElement('iframe');
iframe.classList.add('markup-render');
// allow-same-origin is to set inline style below
iframe.sandbox = 'allow-scripts allow-same-origin';
iframe.srcdoc = svg.outerHTML;
iframe.addEventListener('load', () => {
const style = document.createElement('style');
style.appendChild(document.createTextNode(`
body {margin: 0; padding: 0; overflow: hidden}
.mermaid-chart {display: block; margin: 0 auto}
`));
iframe.contentWindow.document.head.appendChild(style);
iframe.style.height = `${iframe.contentWindow.document.body.scrollHeight}px`;
});
svg.closest('pre').replaceWith(iframe);
});
} catch (err) {
displayError(el, err);
Expand Down
1 change: 1 addition & 0 deletions web_src/less/_base.less
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
/* other variables */
--border-radius: .28571429rem;
--opacity-disabled: .55;
--height-loading: 12rem;
--color-primary: #4183c4;
--color-primary-dark-1: #3876b3;
--color-primary-dark-2: #31699f;
Expand Down
2 changes: 1 addition & 1 deletion web_src/less/animations.less
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@

.markup pre.is-loading,
.editor-loading.is-loading {
height: 12rem;
height: var(--height-loading);
}

@keyframes fadein {
Expand Down
8 changes: 8 additions & 0 deletions web_src/less/markup/content.less
Original file line number Diff line number Diff line change
Expand Up @@ -536,6 +536,14 @@
}
}

.markup-render {
display: block;
border: none;
width: 100%;
height: var(--height-loading); // actual height is set in JS after loading
overflow: hidden;
}

.markup-block-error {
margin-bottom: 0 !important;
border-bottom-left-radius: 0 !important;
Expand Down
9 changes: 0 additions & 9 deletions web_src/less/markup/mermaid.less
Original file line number Diff line number Diff line change
@@ -1,12 +1,3 @@
.mermaid-chart {
display: flex;
justify-content: center;
align-items: center;
padding: 1rem;
margin: 1rem auto;
height: auto;
}

/* mermaid's errorRenderer seems to unavoidably spew stuff into <body>, hide it */
body > div[id*="mermaid-"] {
display: none !important;
Expand Down
4 changes: 0 additions & 4 deletions web_src/less/themes/theme-arc-green.less
Original file line number Diff line number Diff line change
Expand Up @@ -455,10 +455,6 @@ img[src$="/img/matrix.svg"] {
filter: invert(80%);
}

.mermaid-chart {
filter: invert(84%) hue-rotate(180deg);
}

.is-loading::after {
border-color: #4a4c58 #4a4c58 #d7d7da #d7d7da;
}
Expand Down

0 comments on commit f501325

Please sign in to comment.