Make RTE mode use the new Markdown wrapper class

Equivalent of https://github.com/matrix-org/matrix-react-sdk/pull/492 for rich text mode
pull/21833/head
David Baker 2016-09-23 18:50:25 +01:00
parent 18cbd452b0
commit db3f0d298a
1 changed files with 25 additions and 29 deletions

View File

@ -15,17 +15,6 @@ limitations under the License.
*/ */
import React from 'react'; import React from 'react';
import type SyntheticKeyboardEvent from 'react/lib/SyntheticKeyboardEvent'; import type SyntheticKeyboardEvent from 'react/lib/SyntheticKeyboardEvent';
import marked from 'marked';
marked.setOptions({
renderer: new marked.Renderer(),
gfm: true,
tables: true,
breaks: false,
pedantic: false,
sanitize: true,
smartLists: true,
smartypants: false,
});
import {Editor, EditorState, RichUtils, CompositeDecorator, import {Editor, EditorState, RichUtils, CompositeDecorator,
convertFromRaw, convertToRaw, Modifier, EditorChangeType, convertFromRaw, convertToRaw, Modifier, EditorChangeType,
@ -50,6 +39,7 @@ import * as RichText from '../../../RichText';
import * as HtmlUtils from '../../../HtmlUtils'; import * as HtmlUtils from '../../../HtmlUtils';
import Autocomplete from './Autocomplete'; import Autocomplete from './Autocomplete';
import {Completion} from "../../../autocomplete/Autocompleter"; import {Completion} from "../../../autocomplete/Autocompleter";
import Markdown from '../../../Markdown';
const TYPING_USER_TIMEOUT = 10000, TYPING_SERVER_TIMEOUT = 30000; const TYPING_USER_TIMEOUT = 10000, TYPING_SERVER_TIMEOUT = 30000;
@ -64,12 +54,6 @@ function stateToMarkdown(state) {
''); // this is *not* a zero width space, trust me :) ''); // this is *not* a zero width space, trust me :)
} }
function mdownToHtml(mdown: string): string {
let html = marked(mdown) || "";
html = html.trim();
return html;
}
/* /*
* The textInput part of the MessageComposer * The textInput part of the MessageComposer
*/ */
@ -416,8 +400,8 @@ export default class MessageComposerInput extends React.Component {
enableRichtext(enabled: boolean) { enableRichtext(enabled: boolean) {
let contentState = null; let contentState = null;
if (enabled) { if (enabled) {
const html = mdownToHtml(this.state.editorState.getCurrentContent().getPlainText()); const md = new Markdown(this.state.editorState.getCurrentContent().getPlainText());
contentState = RichText.HTMLtoContentState(html); contentState = RichText.HTMLtoContentState(md.toHTML());
} else { } else {
let markdown = stateToMarkdown(this.state.editorState.getCurrentContent()); let markdown = stateToMarkdown(this.state.editorState.getCurrentContent());
if (markdown[markdown.length - 1] === '\n') { if (markdown[markdown.length - 1] === '\n') {
@ -499,7 +483,7 @@ export default class MessageComposerInput extends React.Component {
if (!contentState.hasText()) { if (!contentState.hasText()) {
return true; return true;
} }
let contentText = contentState.getPlainText(), contentHTML; let contentText = contentState.getPlainText(), contentHTML;
@ -534,24 +518,36 @@ export default class MessageComposerInput extends React.Component {
} }
if (this.state.isRichtextEnabled) { if (this.state.isRichtextEnabled) {
contentHTML = RichText.contentStateToHTML(contentState); contentHTML = HtmlUtils.stripParagraphs(
RichText.contentStateToHTML(contentState)
);
} else { } else {
contentHTML = mdownToHtml(contentText); const md = new Markdown(contentText);
if (!md.isPlainText()) {
contentHTML = md.toHTML();
}
} }
contentHTML = HtmlUtils.stripParagraphs(contentHTML); let sendHtmlFn = this.client.sendHtmlMessage;
let sendTextFn = this.client.sendTextMessage;
let sendFn = this.client.sendHtmlMessage;
if (contentText.startsWith('/me')) { if (contentText.startsWith('/me')) {
contentText = contentText.replace('/me', ''); contentText = contentText.replace('/me', '');
// bit of a hack, but the alternative would be quite complicated // bit of a hack, but the alternative would be quite complicated
contentHTML = contentHTML.replace('/me', ''); if (contentHTML) contentHTML = contentHTML.replace('/me', '');
sendFn = this.client.sendHtmlEmote; sendHtmlFn = this.client.sendHtmlEmote;
sendTextFn = this.client.sendTextEmote;
} }
this.sentHistory.push(contentHTML); this.sentHistory.push(contentHTML || contentText);
let sendMessagePromise = sendFn.call(this.client, this.props.room.roomId, contentText, contentHTML); let sendMessagePromise;
if (contentHTML) {
sendMessagePromise = sendHtmlFn.call(
this.client, this.props.room.roomId, contentText, contentHTML
);
} else {
sendMessagePromise = sendTextFn.call(this.client, this.props.room.roomId, contentText);
}
sendMessagePromise.then(() => { sendMessagePromise.then(() => {
dis.dispatch({ dis.dispatch({