Skip to content

Commit e9e81b6

Browse files
committed
POC for using markdown-it-diagrams
This is a hacky POC showing the use of markdown-it-diagrams for mermaid and svgbob. Notable changes: * Adds svgbob support for ascii diagrams * CDN config isn't tested because svgbob wasm isn't available via CDN * Mermaid doesn't show errors. Error code didn't work before removal. Signed-off-by: Douglas Mayle <[email protected]>
1 parent 7b14845 commit e9e81b6

File tree

7 files changed

+20
-24
lines changed

7 files changed

+20
-24
lines changed

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@
160160
"markdown-it-ruby": "^0.1.1",
161161
"markdown-it-sub": "~1.0.0",
162162
"markdown-it-sup": "~1.0.0",
163+
"markdown-it-diagrams": "~0.1.2",
163164
"markdownlint": "^0.17.0",
164165
"mathjax": "~2.7.5",
165166
"mermaid": "~8.4.8",

public/js/extra.js

+8-20
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ import markdownitContainer from 'markdown-it-container'
2323
/* Defined regex markdown it plugins */
2424
import Plugin from 'markdown-it-regexp'
2525

26+
/* Diagram suport for markdown */
27+
import {awaitRenderAvailable} from "markdown-it-diagrams"
28+
import {diagramPlugin} from "markdown-it-diagrams"
29+
2630
require('prismjs/themes/prism.css')
2731
require('prismjs/components/prism-wiki')
2832
require('prismjs/components/prism-haskell')
@@ -243,8 +247,6 @@ function replaceExtraTags (html) {
243247
return html
244248
}
245249

246-
if (typeof window.mermaid !== 'undefined' && window.mermaid) window.mermaid.startOnLoad = false
247-
248250
// dynamic event or object binding here
249251
export function finishView (view) {
250252
// todo list
@@ -379,23 +381,6 @@ export function finishView (view) {
379381
console.warn(err)
380382
}
381383
})
382-
// mermaid
383-
const mermaids = view.find('div.mermaid.raw').removeClass('raw')
384-
mermaids.each((key, value) => {
385-
try {
386-
var $value = $(value)
387-
const $ele = $(value).closest('pre')
388-
389-
window.mermaid.parse($value.text())
390-
$ele.addClass('mermaid')
391-
$ele.html($value.text())
392-
window.mermaid.init(undefined, $ele)
393-
} catch (err) {
394-
$value.unwrap()
395-
$value.parent().append(`<div class="alert alert-warning">${escapeHTML(err.str)}</div>`)
396-
console.warn(err)
397-
}
398-
})
399384
// abc.js
400385
const abcs = view.find('div.abc.raw').removeClass('raw')
401386
abcs.each((key, value) => {
@@ -1033,7 +1018,6 @@ const fenceCodeAlias = {
10331018
sequence: 'sequence-diagram',
10341019
flow: 'flow-chart',
10351020
graphviz: 'graphviz',
1036-
mermaid: 'mermaid',
10371021
abc: 'abc',
10381022
vega: 'vega',
10391023
geo: 'geo'
@@ -1083,6 +1067,10 @@ export const md = markdownit('default', {
10831067
})
10841068
window.md = md
10851069

1070+
md.awaitRenderAvailable = awaitRenderAvailable;
1071+
// Doesn't work when we use the plugin from here, so store it for later use.
1072+
// md.use(diagramPlugin)
1073+
md.diagramPlugin = diagramPlugin
10861074
md.use(require('markdown-it-abbr'))
10871075
md.use(require('markdown-it-footnote'))
10881076
md.use(require('markdown-it-deflist'))

public/js/index.js

+6-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ var cursorActivityDebounce = 50
102102
var cursorAnimatePeriod = 100
103103
var supportContainers = ['success', 'info', 'warning', 'danger', 'spoiler']
104104
var supportCodeModes = ['javascript', 'typescript', 'jsx', 'htmlmixed', 'htmlembedded', 'css', 'xml', 'clike', 'clojure', 'ruby', 'python', 'shell', 'php', 'sql', 'haskell', 'coffeescript', 'yaml', 'pug', 'lua', 'cmake', 'nginx', 'perl', 'sass', 'r', 'dockerfile', 'tiddlywiki', 'mediawiki', 'go', 'gherkin'].concat(hljs.listLanguages())
105-
var supportCharts = ['sequence', 'flow', 'graphviz', 'mermaid', 'abc', 'plantuml', 'vega', 'geo']
105+
var supportCharts = ['sequence', 'flow', 'graphviz', 'mermaid', 'abc', 'plantuml', 'vega', 'geo', 'bob']
106106
var supportHeaders = [
107107
{
108108
text: '# h1',
@@ -2782,10 +2782,14 @@ var postUpdateEvent = null
27822782

27832783
function updateViewInner () {
27842784
if (appState.currentMode === modeType.edit || !isDirty) return
2785+
(async function() {
2786+
// Didn't work when we used it from extra.js, so we use it here instead
2787+
md.use(md.diagramPlugin)
27852788
var value = editor.getValue()
27862789
var lastMeta = md.meta
27872790
md.meta = {}
27882791
delete md.metaError
2792+
await md.awaitRenderAvailable();
27892793
var rendered = md.render(value)
27902794
if (md.meta.type && md.meta.type === 'slide') {
27912795
var slideOptions = {
@@ -2819,6 +2823,7 @@ function updateViewInner () {
28192823
if (result && lastResult && result.length !== lastResult.length) { updateDataAttrs(result, ui.area.markdown.children().toArray()) }
28202824
lastResult = $(result).clone()
28212825
}
2826+
})();
28222827
removeDOMEvents(ui.area.markdown)
28232828
finishView(ui.area.markdown)
28242829
autoLinkify(ui.area.markdown)

public/js/pretty.js

+5
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,14 @@ require('../css/site.css')
2525
require('highlight.js/styles/github-gist.css')
2626

2727
const markdown = $('#doc.markdown-body')
28+
(async function() {
29+
// Didn't work when we used it from extra.js, so we use it here instead
30+
md.use(md.diagramPlugin)
2831
const text = markdown.text()
2932
const lastMeta = md.meta
3033
md.meta = {}
3134
delete md.metaError
35+
await md.awaitRenderAvailable();
3236
let rendered = md.render(text)
3337
if (md.meta.type && md.meta.type === 'slide') {
3438
const slideOptions = {
@@ -69,6 +73,7 @@ smoothHashScroll()
6973
window.createtime = window.lastchangeui.time.attr('data-createtime')
7074
window.lastchangetime = window.lastchangeui.time.attr('data-updatetime')
7175
updateLastChange()
76+
})();
7277

7378
const url = window.location.pathname
7479
$('.ui-edit').attr('href', `${url}/edit`)

public/views/codimd/foot.ejs

-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-immzXfCGLhnx3Zfi9F/dUcqxEM8K3o3oTFy9Bh6HCwg=" crossorigin="anonymous" defer></script>
1111
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/config/Safe.js" integrity="sha256-0ygBUDksNDXZS4vm5HMNH1a33KUu6QT1cdNTN+ZLF+4=" crossorigin="anonymous" defer></script>
1212
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment-with-locales.min.js" integrity="sha256-AdQN98MVZs44Eq2yTwtoKufhnU+uZ7v2kXnD5vqzZVo=" crossorigin="anonymous" defer></script>
13-
<script src="https://cdnjs.cloudflare.com/ajax/libs/mermaid/8.4.8/mermaid.min.js" integrity="sha256-lyWCDMnMeZiXRi7Zl54sZGKYmgQs4izcT7+tKc+KUBk=" crossorigin="anonymous" defer></script>
1413
<script src="https://cdn.jsdelivr.net/npm/@hackmd/[email protected]/dist/js/emojify-browser.min.js" integrity="sha256-swgfXtqk2bC98KzPoE8tXRz5tmrzpjJWhhXlhYo/wRA=" crossorigin="anonymous" defer></script>
1514
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.2/lodash.min.js" integrity="sha256-Cv5v4i4SuYvwRYzIONifZjoc99CkwfncROMSWat1cVA=" crossorigin="anonymous" defer></script>
1615
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.1.1/socket.io.js" integrity="sha256-ji09tECORKvr8xB9iCl8DJ8iNMLriDchC1+p+yt1hSs=" crossorigin="anonymous"></script>

public/views/pretty.ejs

-1
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@
8383
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-immzXfCGLhnx3Zfi9F/dUcqxEM8K3o3oTFy9Bh6HCwg=" crossorigin="anonymous" defer></script>
8484
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/config/Safe.js" integrity="sha256-0ygBUDksNDXZS4vm5HMNH1a33KUu6QT1cdNTN+ZLF+4=" crossorigin="anonymous" defer></script>
8585
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment-with-locales.min.js" integrity="sha256-AdQN98MVZs44Eq2yTwtoKufhnU+uZ7v2kXnD5vqzZVo=" crossorigin="anonymous" defer></script>
86-
<script src="https://cdnjs.cloudflare.com/ajax/libs/mermaid/8.4.8/mermaid.min.js" integrity="sha256-lyWCDMnMeZiXRi7Zl54sZGKYmgQs4izcT7+tKc+KUBk=" crossorigin="anonymous" defer></script>
8786
<script src="https://cdn.jsdelivr.net/npm/@hackmd/[email protected]/dist/js/emojify-browser.min.js" integrity="sha256-swgfXtqk2bC98KzPoE8tXRz5tmrzpjJWhhXlhYo/wRA=" crossorigin="anonymous" defer></script>
8887
<script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.1.2/handlebars.min.js" integrity="sha256-ngJY93C4H39YbmrWhnLzSyiepRuQDVKDNCWO2iyMzFw=" crossorigin="anonymous" defer></script>
8988
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.10/highlight.min.js" integrity="sha256-1zu+3BnLYV9LdiY85uXMzii3bdrkelyp37e0ZyTAQh0=" crossorigin="anonymous" defer></script>

public/views/slide.ejs

-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,6 @@
9898
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-immzXfCGLhnx3Zfi9F/dUcqxEM8K3o3oTFy9Bh6HCwg=" crossorigin="anonymous" defer></script>
9999
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/config/Safe.js" integrity="sha256-0ygBUDksNDXZS4vm5HMNH1a33KUu6QT1cdNTN+ZLF+4=" crossorigin="anonymous" defer></script>
100100
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment-with-locales.min.js" integrity="sha256-AdQN98MVZs44Eq2yTwtoKufhnU+uZ7v2kXnD5vqzZVo=" crossorigin="anonymous" defer></script>
101-
<script src="https://cdnjs.cloudflare.com/ajax/libs/mermaid/8.4.8/mermaid.min.js" integrity="sha256-lyWCDMnMeZiXRi7Zl54sZGKYmgQs4izcT7+tKc+KUBk=" crossorigin="anonymous" defer></script>
102101
<script src="https://cdn.jsdelivr.net/npm/@hackmd/[email protected]/dist/js/emojify-browser.min.js" integrity="sha256-swgfXtqk2bC98KzPoE8tXRz5tmrzpjJWhhXlhYo/wRA=" crossorigin="anonymous" defer></script>
103102
<script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.1.2/handlebars.min.js" integrity="sha256-ngJY93C4H39YbmrWhnLzSyiepRuQDVKDNCWO2iyMzFw=" crossorigin="anonymous" defer></script>
104103
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.10/highlight.min.js" integrity="sha256-1zu+3BnLYV9LdiY85uXMzii3bdrkelyp37e0ZyTAQh0=" crossorigin="anonymous" defer></script>

0 commit comments

Comments
 (0)