import { Random } from 'meteor/random'; import _ from 'underscore'; import _marked from 'marked'; import hljs from '../../hljs'; import { escapeHTML } from '../../../../../lib/escapeHTML'; import { unescapeHTML } from '../../../../../lib/unescapeHTML'; const renderer = new _marked.Renderer(); let msg = null; renderer.code = function(code, lang, escaped) { if (this.options.highlight) { const out = this.options.highlight(code, lang); if (out != null && out !== code) { escaped = true; code = out; } } let text = null; if (!lang) { text = `
${ escaped ? code : escapeHTML(code) }
`; } else { text = `
${ escaped ? code : escapeHTML(code) }
`; } if (_.isString(msg)) { return text; } const token = `=!=${ Random.id() }=!=`; msg.tokens.push({ highlight: true, token, text, }); return token; }; renderer.codespan = function(text) { text = `${ text }`; if (_.isString(msg)) { return text; } const token = `=!=${ Random.id() }=!=`; msg.tokens.push({ token, text, }); return token; }; renderer.blockquote = function(quote) { return `
${ quote }
`; }; const linkRenderer = renderer.link; renderer.link = function(href, title, text) { const html = linkRenderer.call(renderer, href, title, text); return html.replace(/^ { msg = message; if (!message.tokens) { message.tokens = []; } message.html = _marked(unescapeHTML(message.html), { gfm, tables, breaks, pedantic, smartLists, smartypants, renderer, sanitize: true, highlight, }); return message; };