aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/helpers/markdown.ts
diff options
context:
space:
mode:
Diffstat (limited to 'server/helpers/markdown.ts')
-rw-r--r--server/helpers/markdown.ts43
1 files changed, 43 insertions, 0 deletions
diff --git a/server/helpers/markdown.ts b/server/helpers/markdown.ts
new file mode 100644
index 000000000..2126bb752
--- /dev/null
+++ b/server/helpers/markdown.ts
@@ -0,0 +1,43 @@
1import { SANITIZE_OPTIONS, TEXT_WITH_HTML_RULES } from '@shared/core-utils'
2
3const sanitizeHtml = require('sanitize-html')
4const markdownItEmoji = require('markdown-it-emoji/light')
5const MarkdownItClass = require('markdown-it')
6const markdownIt = new MarkdownItClass('default', { linkify: true, breaks: true, html: true })
7
8markdownIt.enable(TEXT_WITH_HTML_RULES)
9markdownIt.use(markdownItEmoji)
10
11const toSafeHtml = text => {
12 if (!text) return ''
13
14 // Restore line feed
15 const textWithLineFeed = text.replace(/<br.?\/?>/g, '\r\n')
16
17 // Convert possible markdown (emojis, emphasis and lists) to html
18 const html = markdownIt.render(textWithLineFeed)
19
20 // Convert to safe Html
21 return sanitizeHtml(html, SANITIZE_OPTIONS)
22}
23
24const mdToPlainText = text => {
25 if (!text) return ''
26
27 // Convert possible markdown (emojis, emphasis and lists) to html
28 const html = markdownIt.render(text)
29
30 // Convert to safe Html
31 const safeHtml = sanitizeHtml(html, SANITIZE_OPTIONS)
32
33 return safeHtml.replace(/<[^>]+>/g, '')
34 .replace(/\n$/, '')
35 .replace('\n', ', ')
36}
37
38// ---------------------------------------------------------------------------
39
40export {
41 toSafeHtml,
42 mdToPlainText
43}