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;