rich formatting works

This commit is contained in:
or-else
2017-08-21 19:45:48 -07:00
parent 0c7549819a
commit fb6b4899cd
2 changed files with 187 additions and 26 deletions
+31 -3
View File
@@ -2027,12 +2027,38 @@
var Message = React.createClass({
render: function() {
var elementKey = 0;
var formatter = function(style, data, values) {
elementKey += 1;
var el = Drafty.tagName(style);
if (el) {
var attr = Drafty.attrValue(style, data) || {};
attr.key = elementKey;
return React.createElement(el, attr, values);
} else {
return values;
}
};
var sideClass = this.props.sequence + " " + (this.props.response ? "left" : "right");
var bubbleClass = (this.props.sequence === "single" || this.props.sequence === "last") ?
"bubble tip" : "bubble";
var avatar = this.props.userAvatar || true;
var fullDisplay = (this.props.userFrom && this.props.response &&
(this.props.sequence === "single" || this.props.sequence === "last"));
var content = this.props.content;
if (this.props.mimeType === "text/x-drafty+json") {
content = React.createElement('span', null, Drafty.format(content, formatter));
} else {
// Handle line breaks in plain text.
// Regex capure group keep line breaks in the array.
content = content.split(/(\n)/g).map(function(line, idx) {
return line.match("\n") ? <br key={idx} /> : line;
});
}
return (
<li className={sideClass}>
{this.props.userFrom && this.props.response ?
@@ -2045,7 +2071,7 @@
null}
<div>
<div className={bubbleClass}>
<p>{this.props.content}
<p>{content}
<Message.ReceivedMarker response={this.props.response}
timestamp={this.props.timestamp} received={this.props.received} />
</p>
@@ -2239,8 +2265,10 @@
} else {
chatBoxClass="chat-box";
}
messageNodes.push(
<Message content={msg.content} timestamp={msg.ts} response={isReply}
<Message content={msg.content} mimeType={msg.head ? msg.head.mime : null}
timestamp={msg.ts} response={isReply}
userFrom={userFrom} userName={userName} userAvatar={userAvatar}
sequence={sequence} received={msgReceived} key={msg.seq} />
);
@@ -2622,7 +2650,7 @@
var topic = Tinode.getTopic(this.state.topicSelected);
// Check if the message is formatted.
var dft = Drafty.parse(msg);
if (Drafty.isPlain(dft)) {
if (Drafty.isPlainText(dft)) {
// The message is simple text. Sned if as text/plain.
topic.publish(msg);
} else {