1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-18 09:35:20 +02:00
joplin/packages/renderer/MdToHtml/rules/mermaid_render.js

74 lines
2.0 KiB
JavaScript
Raw Normal View History

/* global mermaid */
function mermaidReady() {
Plugins: Added support for content scripts - For now, supports Markdown-it plugins - Also fixed slow rendering of notes in some cases - Simplified how Markdown-It plugins are created and cleaned MdToHtml code commit 89576de2896c99134f25f2a2db25008514cb1315 Merge: c75aa21f 5292fc14 Author: Laurent Cozic <laurent@cozic.net> Date: Wed Oct 21 00:23:00 2020 +0100 Merge branch 'release-1.3' into plugin_content_scripts commit c75aa21ffdc42764d71dc9deadba7a7ef4233995 Author: Laurent Cozic <laurent@cozic.net> Date: Wed Oct 21 00:19:52 2020 +0100 Fixed tests commit 075187729d11a16d385b651cbf1ebb89f14935e0 Author: Laurent Cozic <laurent@cozic.net> Date: Wed Oct 21 00:11:53 2020 +0100 Fixed tests commit 14696b8c651e7afdaf71269bcdbadf0d58d3ef8a Author: Laurent Cozic <laurent@cozic.net> Date: Tue Oct 20 23:27:58 2020 +0100 Fixed slow rendering of note commit 61c09f5bf856481f91b00cfe87ff05596c63d4bc Author: Laurent Cozic <laurent@cozic.net> Date: Tue Oct 20 22:35:21 2020 +0100 Clean up commit 9f7ea7d865a990b3a21cc8c59093390d9db61653 Author: Laurent Cozic <laurent@cozic.net> Date: Tue Oct 20 20:05:31 2020 +0100 Updated doc commit 98bf3bde8d6663f2f91ff965304b4aac00bdd98b Author: Laurent Cozic <laurent@cozic.net> Date: Tue Oct 20 19:56:34 2020 +0100 Finished converting plugins commit fe90d92e01427bd2b38200393713ea28763507a9 Author: Laurent Cozic <laurent@cozic.net> Date: Tue Oct 20 17:52:02 2020 +0100 Simplified how Markdown-It plugins are created commit 47c7b864cbb864d5df79849f27625aecf312df4b Author: Laurent Cozic <laurent@cozic.net> Date: Mon Oct 19 16:40:11 2020 +0100 Clean up rules commit d927a238bb635a4be45f9216d776f7d07cb0a584 Author: Laurent Cozic <laurent@cozic.net> Date: Mon Oct 19 14:29:40 2020 +0100 Fixed tests commit 388a56c5dde4c382e3ee0035791137150adaba1b Author: Laurent Cozic <laurent@cozic.net> Date: Mon Oct 19 14:00:47 2020 +0100 Add support for content scripts
2020-10-21 01:23:55 +02:00
// The Mermaid initialization code renders the Mermaid code within any element with class "mermaid" or
// ID "mermaid". However in some cases some elements might have this ID but not be Mermaid code.
// For example, Markdown code like this:
//
// # Mermaid
//
// Will generate this HTML:
//
// <h1 id="mermaid">Mermaid</h1>
//
// And that's going to make the lib set the `mermaid` object to the H1 element.
// So below, we double-check that what we have really is an instance of the library.
return typeof mermaid !== 'undefined' && mermaid !== null && typeof mermaid === 'object' && !!mermaid.initialize;
}
const isDarkMode = () => {
// If any mermaid elements are marked as requiring dark mode, render *all*
// mermaid elements in dark mode.
return !!document.querySelector('.mermaid.joplin--mermaid-use-dark-theme');
};
function mermaidInit() {
if (mermaidReady()) {
const mermaidTargetNodes = document.getElementsByClassName('mermaid');
try {
const darkMode = isDarkMode();
mermaid.initialize({
// We call mermaid.run ourselves whenever the note updates. Don't auto-start
startOnLoad: false,
darkMode,
theme: darkMode ? 'dark' : 'default',
});
mermaid.run({
nodes: mermaidTargetNodes,
});
} catch (error) {
console.error('Mermaid error', error);
}
// Resetting elements size - see mermaid.ts
for (const element of mermaidTargetNodes) {
2020-09-02 23:51:16 +02:00
element.style.width = '100%';
}
}
}
document.addEventListener('joplin-noteDidUpdate', () => {
mermaidInit();
});
const initIID_ = setInterval(() => {
const isReady = mermaidReady();
if (isReady) {
clearInterval(initIID_);
mermaidInit();
}
}, 100);
document.addEventListener('DOMContentLoaded', () => {
// In some environments, we can load Mermaid immediately (e.g. mobile).
// If we don't load it immediately in these environments, Mermaid seems
// to initialize and auto-run, but without our configuration changes.
if (mermaidReady()) {
mermaidInit();
} else {
clearInterval(initIID_);
}
});