PLT-135 Showing "(Edited)" indicator if a message has been edited. (#4923)

Этот коммит содержится в:
Debanshu Kundu
2017-01-12 21:17:29 +05:30
коммит произвёл Harrison Healey
родитель 99493bc5fa
Коммит 739f32272f
12 изменённых файлов: 102 добавлений и 16 удалений

Просмотреть файл

@@ -89,7 +89,7 @@ export default class PostMessageContainer extends React.Component {
return (
<PostMessageView
options={this.props.options}
message={this.props.post.message}
post={this.props.post}
emojis={this.state.emojis}
enableFormatting={this.state.enableFormatting}
mentionKeys={this.state.mentionKeys}

Просмотреть файл

@@ -2,14 +2,16 @@
// See License.txt for license information.
import React from 'react';
import {FormattedMessage} from 'react-intl';
import * as TextFormatting from 'utils/text_formatting.jsx';
import * as Utils from 'utils/utils.jsx';
import * as PostUtils from 'utils/post_utils.jsx';
export default class PostMessageView extends React.Component {
static propTypes = {
options: React.PropTypes.object.isRequired,
message: React.PropTypes.string.isRequired,
post: React.PropTypes.object.isRequired,
emojis: React.PropTypes.object.isRequired,
enableFormatting: React.PropTypes.bool.isRequired,
mentionKeys: React.PropTypes.arrayOf(React.PropTypes.string).isRequired,
@@ -23,7 +25,7 @@ export default class PostMessageView extends React.Component {
return true;
}
if (nextProps.message !== this.props.message) {
if (nextProps.post.message !== this.props.post.message) {
return true;
}
@@ -47,9 +49,28 @@ export default class PostMessageView extends React.Component {
return false;
}
editedIndicator() {
return (
PostUtils.isEdited(this.props.post) ?
<span className='edited'>
<FormattedMessage
id='post_message_view.edited'
defaultMessage='(edited)'
/>
</span> :
''
);
}
render() {
if (!this.props.enableFormatting) {
return <span>{this.props.message}</span>;
return (
<span>
{this.props.post.message}
&nbsp;
{this.editedIndicator()}
</span>
);
}
const options = Object.assign({}, this.props.options, {
@@ -62,10 +83,13 @@ export default class PostMessageView extends React.Component {
});
return (
<span
onClick={Utils.handleFormattedTextClick}
dangerouslySetInnerHTML={{__html: TextFormatting.formatText(this.props.message, options)}}
/>
<div>
<span
onClick={Utils.handleFormattedTextClick}
dangerouslySetInnerHTML={{__html: TextFormatting.formatText(this.props.post.message, options)}}
/>
{this.editedIndicator()}
</div>
);
}
}

Просмотреть файл

@@ -285,7 +285,7 @@ export default class SearchResultsItem extends React.Component {
</li>
{rhsControls}
</ul>
<div className='search-item-snippet'>
<div className='search-item-snippet post__body'>
{message}
</div>
</div>

Просмотреть файл

@@ -1667,6 +1667,7 @@
"post_info.mobile.unflag": "Unflag",
"post_info.permalink": "Permalink",
"post_info.reply": "Reply",
"post_message_view.edited": "(edited)",
"posts_view.loadMore": "Load more messages",
"posts_view.newMsg": "New Messages",
"posts_view.newMsgBelow": "New {count, plural, one {message} other {messages}} below",

Просмотреть файл

@@ -560,9 +560,9 @@
}
blockquote {
display: inline-block;
font-size: 1em;
margin-left: 0;
margin-top: 1.3em;
padding: 3px 0 0 25px;
vertical-align: top;
@@ -572,6 +572,11 @@
top: 2px;
}
}
.search-item-snippet {
blockquote {
margin-top: 0;
}
}
.markdown__heading {
clear: both;
@@ -598,7 +603,15 @@
}
p + p {
margin-top: 1em;
margin: 1em 0;
&:last-of-type {
margin-bottom: 0;
}
}
span {
> p:first-child {
margin-bottom: 1em;
}
}
ol,
@@ -978,12 +991,24 @@
width: 100%;
word-wrap: break-word;
p {
div {
margin: 0 0 .4em;
}
p + p {
margin-top: 1.4em;
margin: 1.4em 0;
&:last-of-type {
margin-bottom: 0;
}
}
span {
> p:last-child {
display: inline;
}
> p:first-child {
margin-bottom: 1.4em;
}
}
li {
@@ -1063,6 +1088,12 @@
color: $white;
}
}
span.edited {
color: #A3A3A3;
font-size: 0.87em;
opacity: 0.6;
}
}
.post__link {

Просмотреть файл

@@ -213,6 +213,9 @@
}
}
}
blockquote {
margin-top: 0;
}
}
&.same--root {

Просмотреть файл

@@ -15,6 +15,10 @@ export function isComment(post) {
return false;
}
export function isEdited(post) {
return post.edit_at > 0;
}
export function getProfilePicSrcForPost(post, timestamp) {
let src = Client.getUsersRoute() + '/' + post.user_id + '/image?time=' + timestamp;
if (post.props && post.props.from_webhook && global.window.mm_config.EnablePostIconOverride === 'true') {
@@ -28,4 +32,4 @@ export function getProfilePicSrcForPost(post, timestamp) {
}
return src;
}
}