debian-mirror-gitlab/app/assets/javascripts/lib/mermaid.js

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

66 lines
1.5 KiB
JavaScript
Raw Normal View History

2022-03-02 08:16:31 +05:30
import mermaid from 'mermaid';
import { getParameterByName } from '~/lib/utils/url_utility';
const setIframeRenderedSize = (h, w) => {
const { origin } = window.location;
window.parent.postMessage({ h, w }, origin);
};
2023-07-09 08:55:56 +05:30
const drawDiagram = async (source) => {
2022-03-02 08:16:31 +05:30
const element = document.getElementById('app');
const insertSvg = (svgCode) => {
2022-10-11 01:57:18 +05:30
// eslint-disable-next-line no-unsanitized/property
2022-03-02 08:16:31 +05:30
element.innerHTML = svgCode;
2023-06-20 00:43:36 +05:30
element.firstElementChild.removeAttribute('height');
const { height, width } = element.firstElementChild.getBoundingClientRect();
2022-03-02 08:16:31 +05:30
setIframeRenderedSize(height, width);
};
2023-07-09 08:55:56 +05:30
const { svg } = await mermaid.mermaidAPI.render('mermaid', source);
insertSvg(svg);
2022-03-02 08:16:31 +05:30
};
const darkModeEnabled = () => getParameterByName('darkMode') === 'true';
const initMermaid = () => {
let theme = 'neutral';
if (darkModeEnabled()) {
theme = 'dark';
}
mermaid.initialize({
// mermaid core options
mermaid: {
startOnLoad: false,
},
// mermaidAPI options
theme,
flowchart: {
useMaxWidth: true,
htmlLabels: true,
},
secure: ['secure', 'securityLevel', 'startOnLoad', 'maxTextSize', 'htmlLabels'],
securityLevel: 'strict',
});
};
const addListener = () => {
window.addEventListener(
'message',
(event) => {
if (event.origin !== window.location.origin) {
return;
}
drawDiagram(event.data);
},
false,
);
};
addListener();
initMermaid();
export default {};