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; };