diff --git a/src/HtmlUtils.js b/src/HtmlUtils.js index e07c6eb72b..b6a2bd0acb 100644 --- a/src/HtmlUtils.js +++ b/src/HtmlUtils.js @@ -112,6 +112,33 @@ export function charactersToImageNode(alt, useSvg, ...unicode) { />; } +export function processHtmlForSending(html: string): string { + const contentDiv = document.createElement('div'); + contentDiv.innerHTML = html; + + if (contentDiv.children.length === 0) { + return contentDiv.innerHTML; + } + + let contentHTML = ""; + for (let i=0; i < contentDiv.children.length; i++) { + const element = contentDiv.children[i]; + if (element.tagName.toLowerCase() === 'p') { + contentHTML += element.innerHTML; + // Don't add a
for the last

+ if (i !== contentDiv.children.length - 1) { + contentHTML += '
'; + } + } else { + const temp = document.createElement('div'); + temp.appendChild(element.cloneNode(true)); + contentHTML += temp.innerHTML; + } + } + + return contentHTML; +} + /* * Given an untrusted HTML string, return a React node with an sanitized version * of that HTML. diff --git a/src/Markdown.js b/src/Markdown.js index dc0d5962fd..acfea52100 100644 --- a/src/Markdown.js +++ b/src/Markdown.js @@ -111,7 +111,7 @@ export default class Markdown { // you can nest them. // // Let's try sending with

s anyway for now, though. -/* + const real_paragraph = renderer.paragraph; renderer.paragraph = function(node, entering) { @@ -124,10 +124,10 @@ export default class Markdown { real_paragraph.call(this, node, entering); } }; -*/ + renderer.html_inline = html_if_tag_allowed; - + renderer.html_block = function(node) { /* // as with `paragraph`, we only insert line breaks @@ -138,7 +138,7 @@ export default class Markdown { html_if_tag_allowed.call(this, node); /* if (isMultiLine) this.cr(); -*/ +*/ }; return renderer.render(this.parsed); diff --git a/src/components/views/rooms/MessageComposerInput.js b/src/components/views/rooms/MessageComposerInput.js index 4153311bc6..88b8280a4c 100644 --- a/src/components/views/rooms/MessageComposerInput.js +++ b/src/components/views/rooms/MessageComposerInput.js @@ -1089,8 +1089,7 @@ export default class MessageComposerInput extends React.Component { if (contentText === '') return true; if (shouldSendHTML) { - // FIXME: should we strip out the surrounding

? - contentHTML = this.html.serialize(editorState); // HtmlUtils.processHtmlForSending(); + contentHTML = HtmlUtils.processHtmlForSending(this.html.serialize(editorState)); } } else { const sourceWithPills = this.plainWithMdPills.serialize(editorState);