From b8b6dcf68d9ce305bf3568b7432fbac23aca027a Mon Sep 17 00:00:00 2001 From: Liu Jiangyi Date: Mon, 22 Jun 2020 00:00:48 +0800 Subject: [PATCH] feat: markdown render for thread author --- package-lock.json | 51 +++++++++++++++++++++++++++++++++++++++++++++++ package.json | 2 ++ src/Flows.js | 3 ++- src/Markdown.js | 8 ++++++++ 4 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 src/Markdown.js diff --git a/package-lock.json b/package-lock.json index e5996db0..4af2a5cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7899,6 +7899,14 @@ "object.assign": "^4.1.0" } }, + "katex": { + "version": "0.6.0", + "resolved": "https://r.cnpmjs.org/katex/download/katex-0.6.0.tgz", + "integrity": "sha1-EkGOCRIcBckgQbazuftrqyE8tvM=", + "requires": { + "match-at": "^0.1.0" + } + }, "killable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", @@ -7958,6 +7966,14 @@ "type-check": "~0.3.2" } }, + "linkify-it": { + "version": "3.0.2", + "resolved": "https://r.cnpmjs.org/linkify-it/download/linkify-it-3.0.2.tgz", + "integrity": "sha1-9V7ri8HTrnVASeEkqzu1bZd5f7g=", + "requires": { + "uc.micro": "^1.0.1" + } + }, "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -8182,6 +8198,31 @@ "object-visit": "^1.0.0" } }, + "markdown-it": { + "version": "11.0.0", + "resolved": "https://r.cnpmjs.org/markdown-it/download/markdown-it-11.0.0.tgz", + "integrity": "sha1-2/wwNj5D11brxSw4WGuRuQBGuHY=", + "requires": { + "argparse": "^1.0.7", + "entities": "~2.0.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + } + }, + "markdown-it-katex": { + "version": "2.0.3", + "resolved": "https://r.cnpmjs.org/markdown-it-katex/download/markdown-it-katex-2.0.3.tgz", + "integrity": "sha1-17hqGuoLnWSW+rTnkZoY/e9YnDk=", + "requires": { + "katex": "^0.6.0" + } + }, + "match-at": { + "version": "0.1.1", + "resolved": "https://r.cnpmjs.org/match-at/download/match-at-0.1.1.tgz", + "integrity": "sha1-JdBA0pF3dwTV5lVru3kjDsLeBUA=" + }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -8197,6 +8238,11 @@ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://r.cnpmjs.org/mdurl/download/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -12396,6 +12442,11 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://r.cnpmjs.org/uc.micro/download/uc.micro-1.0.6.tgz", + "integrity": "sha1-nEEagCpAmpH8bPdAgbq6NLJEmaw=" + }, "uglify-js": { "version": "3.4.10", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", diff --git a/package.json b/package.json index 8342d91d..b663dad2 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,8 @@ "fix-orientation": "^1.1.0", "gh-pages": "^3.0.0", "load-script": "^1.0.0", + "markdown-it": "^11.0.0", + "markdown-it-katex": "^2.0.3", "pressure": "^2.1.2", "react": "^16.9.0", "react-dom": "^16.9.0", diff --git a/src/Flows.js b/src/Flows.js index 35aa88d4..98bef478 100644 --- a/src/Flows.js +++ b/src/Flows.js @@ -7,6 +7,7 @@ import './Flows.css'; import LazyLoad from './react-lazyload/src'; import {AudioWidget} from './AudioWidget'; import {TokenCtx, ReplyForm} from './UserAction'; +import renderMd from './Markdown' import {API, THUHOLE_API_ROOT} from './flows_api'; @@ -129,7 +130,7 @@ class FlowItem extends PureComponent { render() { let props=this.props; - let parts=props.parts||split_text(props.info.text,[ + let parts=props.parts||split_text(renderMd(props.info.text),[ ['url_pid',URL_PID_RE], ['url',URL_RE], ['pid',PID_RE], diff --git a/src/Markdown.js b/src/Markdown.js new file mode 100644 index 00000000..be96ad6b --- /dev/null +++ b/src/Markdown.js @@ -0,0 +1,8 @@ +import MarkdownIt from 'markdown-it' + +let md = new MarkdownIt({ + html: false, + linkify: false // avoid collision with text_splitter.js +}) + +export default (text) => md.render(text) \ No newline at end of file