From 7d3732c58f2900f344321b044aa7d9ac096a1670 Mon Sep 17 00:00:00 2001 From: Le Tan Date: Sun, 1 Mar 2020 09:24:17 +0800 Subject: [PATCH] fix MathJax v3 support 1. Support MathJax inside a fenced code block; 2. Support scale factor in preview; --- src/resources/markdown-it.js | 7 ------- src/resources/markdown_template.js | 16 ++++++++++++---- src/resources/mathjax_preview_template.html | 13 +++++++------ src/utils/vutils.cpp | 2 -- src/vconstants.h | 1 + src/vnote.cpp | 2 ++ 6 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/resources/markdown-it.js b/src/resources/markdown-it.js index b71fa67d..5a623251 100644 --- a/src/resources/markdown-it.js +++ b/src/resources/markdown-it.js @@ -256,13 +256,6 @@ var postProcessMathJaxWhenMathjaxReady = function() { content.setLog("err: " + err); } } - - if (node.tagName.toLowerCase() == 'code') { - var pre = node.parentNode; - var p = document.createElement('p'); - p.innerHTML = node.innerHTML; - pre.parentNode.replaceChild(p, pre); - } } }; diff --git a/src/resources/markdown_template.js b/src/resources/markdown_template.js index f7b153a0..8081e519 100644 --- a/src/resources/markdown_template.js +++ b/src/resources/markdown_template.js @@ -1269,6 +1269,7 @@ var renderCodeBlockLineNumber = function() { var addClassToCodeBlock = function() { var codes = document.getElementsByTagName('code'); + var mathCodes = []; for (var i = 0; i < codes.length; ++i) { var code = codes[i]; var pare = code.parentElement; @@ -1278,13 +1279,20 @@ var addClassToCodeBlock = function() { if (VEnableMathjax && (code.classList.contains("lang-mathjax") || code.classList.contains("language-mathjax"))) { - // Add the class to pre. - pare.classList.add("lang-mathjax"); - pare.classList.add("language-mathjax"); - pare.classList.add("tex-to-render"); + mathCodes.push(code); } } } + + // Replace math codes with . + for (var i = mathCodes.length - 1; i >= 0; --i) { + var code = mathCodes[i]; + var pare = code.parentElement; + var xeqn = document.createElement('x-eqn'); + xeqn.classList.add("tex-to-render"); + xeqn.innerHTML = code.innerHTML; + pare.parentNode.replaceChild(xeqn, pare); + } }; var addCopyButtonToCodeBlock = function() { diff --git a/src/resources/mathjax_preview_template.html b/src/resources/mathjax_preview_template.html index 69e37351..2c962053 100644 --- a/src/resources/mathjax_preview_template.html +++ b/src/resources/mathjax_preview_template.html @@ -12,12 +12,13 @@ diff --git a/src/utils/vutils.cpp b/src/utils/vutils.cpp index c25789f7..f8d9ce74 100644 --- a/src/utils/vutils.cpp +++ b/src/utils/vutils.cpp @@ -967,8 +967,6 @@ QString VUtils::generateMathJaxPreviewTemplate() QString extraFile; - QString mathjaxScale = QString::number((int)(100 * VUtils::calculateScaleFactor())); - /* // Mermaid. extraFile += "getMermaidCssStyleUrl() + "\"/>\n" + diff --git a/src/vconstants.h b/src/vconstants.h index 803ba9ac..b166021a 100644 --- a/src/vconstants.h +++ b/src/vconstants.h @@ -45,6 +45,7 @@ namespace HtmlHolder static const QString c_cssHolder = "CSS_PLACE_HOLDER"; static const QString c_codeBlockCssHolder = "HIGHLIGHTJS_CSS_PLACE_HOLDER"; static const QString c_commonCssHolder = "COMMON_CSS_PLACE_HOLDER"; + static const QString c_scaleFactorHolder = "SCALE_FACTOR_PLACE_HOLDER"; static const QString c_globalStyleHolder = "/* STYLE_GLOBAL_PLACE_HOLDER */"; static const QString c_extraHolder = ""; static const QString c_bodyHolder = ""; diff --git a/src/vnote.cpp b/src/vnote.cpp index 59fff844..c96f3656 100644 --- a/src/vnote.cpp +++ b/src/vnote.cpp @@ -195,6 +195,8 @@ QString VNote::generateMathJaxPreviewTemplate() templ.replace(HtmlHolder::c_cssHolder, g_config->getCssStyleUrl()); + templ.replace(HtmlHolder::c_scaleFactorHolder, QString::number(VUtils::calculateScaleFactor())); + return templ; }