diff --git a/src/resources/hoedown.js b/src/resources/hoedown.js index f68df31a..0b0da2b4 100644 --- a/src/resources/hoedown.js +++ b/src/resources/hoedown.js @@ -3,20 +3,22 @@ var placeholder = document.getElementById('placeholder'); var updateHtml = function(html) { placeholder.innerHTML = html; var codes = document.getElementsByTagName('code'); - var mermaidIdx = 0; + mermaidIdx = 0; for (var i = 0; i < codes.length; ++i) { var code = codes[i]; if (code.parentElement.tagName.toLowerCase() == 'pre') { if (VEnableMermaid && code.classList.contains('language-mermaid')) { // Mermaid code block. mermaidParserErr = false; + mermaidIdx++; try { - var graph = mermaidAPI.render('mermaid-diagram-' + mermaidIdx++, code.innerText, function(){}); + // Do not increment mermaidIdx here. + var graph = mermaidAPI.render('mermaid-diagram-' + mermaidIdx, code.innerText, function(){}); } catch (err) { content.setLog("err: " + err); continue; } - if (mermaidParserErr) { + if (mermaidParserErr || typeof graph == "undefined") { continue; } var graphDiv = document.createElement('div'); diff --git a/src/resources/markdown_template.js b/src/resources/markdown_template.js index 4b83e01b..800fa0ce 100644 --- a/src/resources/markdown_template.js +++ b/src/resources/markdown_template.js @@ -137,10 +137,18 @@ document.onkeydown = function(e) { }; var mermaidParserErr = false; +var mermaidIdx = 0; mermaidAPI.parseError = function(err, hash) { content.setLog("err: " + err); mermaidParserErr = true; + + // Clean the container element, or mermaidAPI won't render the graph with + // the same id. + var errGraph = document.getElementById('mermaid-diagram-' + mermaidIdx); + var parentNode = errGraph.parentElement; + parentNode.outerHTML = ''; + delete parentNode; }; // @className, the class name of the mermaid code block, such as 'lang-mermaid'. @@ -149,19 +157,21 @@ var renderMermaid = function(className) { return; } var codes = document.getElementsByTagName('code'); - var mermaidIdx = 0; + mermaidIdx = 0; for (var i = 0; i < codes.length; ++i) { var code = codes[i]; if (code.classList.contains(className)) { // Mermaid code block. mermaidParserErr = false; + mermaidIdx++; try { - var graph = mermaidAPI.render('mermaid-diagram-' + mermaidIdx++, code.innerText, function(){}); + // Do not increment mermaidIdx here. + var graph = mermaidAPI.render('mermaid-diagram-' + mermaidIdx, code.innerText, function(){}); } catch (err) { content.setLog("err: " + err); continue; } - if (mermaidParserErr) { + if (mermaidParserErr || typeof graph == "undefined") { continue; } var graphDiv = document.createElement('div');