Fix escaping markdown by rendering plaintext

We still need to parse "plaintext" messages through the markdown
renderer so that escappes are rendered properly.

Fixes vector-im/riot-web#2870.

Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
This commit is contained in:
Johannes Löthberg 2016-12-02 19:58:35 +01:00
parent fcb1d7a664
commit 893a5c971f
2 changed files with 25 additions and 15 deletions

View file

@ -56,23 +56,31 @@ export default class Markdown {
return is_plain;
}
toHTML() {
render(html) {
const parser = new commonmark.Parser();
const renderer = new commonmark.HtmlRenderer({safe: true});
const real_paragraph = renderer.paragraph;
renderer.paragraph = function(node, entering) {
// If there is only one top level node, just return the
// bare text: it's a single line of text and so should be
// 'inline', rather than unnecessarily wrapped in its own
// p tag. If, however, we have multiple nodes, each gets
// its own p tag to keep them as separate paragraphs.
var par = node;
while (par.parent) {
par = par.parent
if (html) {
renderer.paragraph = function(node, entering) {
// If there is only one top level node, just return the
// bare text: it's a single line of text and so should be
// 'inline', rather than unnecessarily wrapped in its own
// p tag. If, however, we have multiple nodes, each gets
// its own p tag to keep them as separate paragraphs.
var par = node;
while (par.parent) {
par = par.parent
}
if (par.firstChild != par.lastChild) {
real_paragraph.call(this, node, entering);
}
}
if (par.firstChild != par.lastChild) {
real_paragraph.call(this, node, entering);
} else {
renderer.paragraph = function(node, entering) {
if (entering) {
this.lit('\n\n');
}
}
}