From 7f168d49a686a7e779b2012d6e05f8717c5400f9 Mon Sep 17 00:00:00 2001 From: j433866 Date: Fri, 12 Jul 2019 09:33:13 +0100 Subject: [PATCH 1/2] Add render markdown operation --- package.json | 1 + src/core/operations/RenderMarkdown.mjs | 59 ++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 src/core/operations/RenderMarkdown.mjs diff --git a/package.json b/package.json index 5dea14a9..88e4c8a2 100644 --- a/package.json +++ b/package.json @@ -129,6 +129,7 @@ "lodash": "^4.17.11", "loglevel": "^1.6.3", "loglevel-message-prefix": "^3.0.0", + "markdown-it": "^9.0.0", "moment": "^2.24.0", "moment-timezone": "^0.5.25", "ngeohash": "^0.6.3", diff --git a/src/core/operations/RenderMarkdown.mjs b/src/core/operations/RenderMarkdown.mjs new file mode 100644 index 00000000..d329e993 --- /dev/null +++ b/src/core/operations/RenderMarkdown.mjs @@ -0,0 +1,59 @@ +/** + * @author j433866 [j433866@gmail.com] + * @copyright Crown Copyright 2019 + * @license Apache-2.0 + */ + +import Operation from "../Operation"; +import MarkdownIt from "markdown-it"; + +/** + * Render Markdown operation + */ +class RenderMarkdown extends Operation { + + /** + * RenderMarkdown constructor + */ + constructor() { + super(); + + this.name = "Render Markdown"; + this.module = "Default"; + this.description = "Renders Markdown as HTML."; + this.infoURL = "https://wikipedia.org/wiki/Markdown"; + this.inputType = "string"; + this.outputType = "html"; + this.args = [ + { + name: "Autoconvert URLs to links", + type: "boolean", + value: false + }, + { + name: "Convert \\n to <br>", + type: "boolean", + value: false + } + ]; + } + + /** + * @param {string} input + * @param {Object[]} args + * @returns {html} + */ + run(input, args) { + const [convertLinks, convertNewLine] = args, + md = new MarkdownIt({ + breaks: convertNewLine, + linkify: convertLinks + }), + rendered = md.render(input); + + return `
${rendered}
`; + } + +} + +export default RenderMarkdown; From b94eb6adb085bd454c08536f318ee66e15c6d451 Mon Sep 17 00:00:00 2001 From: j433866 Date: Thu, 29 Aug 2019 14:08:07 +0100 Subject: [PATCH 2/2] Add syntax highlighting Explicitly disable HTML rendering. Updated description. --- src/core/operations/RenderMarkdown.mjs | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/core/operations/RenderMarkdown.mjs b/src/core/operations/RenderMarkdown.mjs index d329e993..60afa0fb 100644 --- a/src/core/operations/RenderMarkdown.mjs +++ b/src/core/operations/RenderMarkdown.mjs @@ -4,8 +4,9 @@ * @license Apache-2.0 */ -import Operation from "../Operation"; +import Operation from "../Operation.mjs"; import MarkdownIt from "markdown-it"; +import hljs from "highlight.js"; /** * Render Markdown operation @@ -20,7 +21,7 @@ class RenderMarkdown extends Operation { this.name = "Render Markdown"; this.module = "Default"; - this.description = "Renders Markdown as HTML."; + this.description = "Renders input Markdown as HTML."; this.infoURL = "https://wikipedia.org/wiki/Markdown"; this.inputType = "string"; this.outputType = "html"; @@ -31,9 +32,9 @@ class RenderMarkdown extends Operation { value: false }, { - name: "Convert \\n to <br>", + name: "Enable syntax highlighting", type: "boolean", - value: false + value: true } ]; } @@ -44,10 +45,19 @@ class RenderMarkdown extends Operation { * @returns {html} */ run(input, args) { - const [convertLinks, convertNewLine] = args, + const [convertLinks, enableHighlighting] = args, md = new MarkdownIt({ - breaks: convertNewLine, - linkify: convertLinks + linkify: convertLinks, + html: false, // Explicitly disable HTML rendering + highlight: function(str, lang) { + if (lang && hljs.getLanguage(lang) && enableHighlighting) { + try { + return hljs.highlight(lang, str).value; + } catch (__) {} + } + + return ""; + } }), rendered = md.render(input);