mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 21:43:21 +00:00
message_list_view: Move edited position conditionals to JS.
This adds three bools to message_container object which calculate bools where the "(EDITED)" label should appear: * `edited_in_left_col` -- when label appears in left column. * `edited_alongside_sender` -- when label appears alongside sender info. * `edited_status_msg` -- when label appears for a "/me" message. We use the new bools and remove the complicated if else statements from the templates for the "(EDITED)" label. This also allows us to add a unit test to verify the logic.
This commit is contained in:
@@ -46,6 +46,81 @@ set_global('rows', {
|
||||
},
|
||||
});
|
||||
|
||||
run_test('msg_edited_vars', () => {
|
||||
// This is a test to verify that only one of the three bools,
|
||||
// `edited_in_left_col`, `edited_alongside_sender`, `edited_status_msg`
|
||||
// is not false; Tests for three different kinds of messages:
|
||||
// * "/me" message
|
||||
// * message that includes sender
|
||||
// * message without sender
|
||||
|
||||
function build_message_context(message, message_context) {
|
||||
if (message_context === undefined) {
|
||||
message_context = {};
|
||||
}
|
||||
if (message === undefined) {
|
||||
message = {};
|
||||
}
|
||||
message_context = _.defaults(message_context, {
|
||||
include_sender: true,
|
||||
});
|
||||
message_context.msg = _.defaults(message, {
|
||||
is_me_message: false,
|
||||
last_edit_timestamp: _.uniqueId(),
|
||||
});
|
||||
return message_context;
|
||||
}
|
||||
|
||||
function build_message_group(messages) {
|
||||
return { message_containers: messages };
|
||||
}
|
||||
|
||||
function build_list(message_groups) {
|
||||
var list = new MessageListView(undefined, undefined, true);
|
||||
list._message_groups = message_groups;
|
||||
return list;
|
||||
}
|
||||
|
||||
function assert_left_col(message_container) {
|
||||
assert.equal(message_container.edited_in_left_col, true);
|
||||
assert.equal(message_container.edited_alongside_sender, false);
|
||||
assert.equal(message_container.edited_status_msg, false);
|
||||
}
|
||||
|
||||
function assert_alongside_sender(message_container) {
|
||||
assert.equal(message_container.edited_in_left_col, false);
|
||||
assert.equal(message_container.edited_alongside_sender, true);
|
||||
assert.equal(message_container.edited_status_msg, false);
|
||||
}
|
||||
|
||||
function assert_status_msg(message_container) {
|
||||
assert.equal(message_container.edited_in_left_col, false);
|
||||
assert.equal(message_container.edited_alongside_sender, false);
|
||||
assert.equal(message_container.edited_status_msg, true);
|
||||
}
|
||||
|
||||
(function test_msg_edited_vars() {
|
||||
var messages = [
|
||||
build_message_context(),
|
||||
build_message_context({}, { include_sender: false }),
|
||||
build_message_context({ is_me_message: true, content: "<p>/me test</p>" }),
|
||||
];
|
||||
var message_group = build_message_group(messages);
|
||||
var list = build_list([message_group]);
|
||||
|
||||
_.each(messages, function (message_container) {
|
||||
list._maybe_format_me_message(message_container);
|
||||
list._add_msg_edited_vars(message_container);
|
||||
});
|
||||
|
||||
var result = list._message_groups[0].message_containers;
|
||||
|
||||
assert_alongside_sender(result[0]);
|
||||
assert_left_col(result[1]);
|
||||
assert_status_msg(result[2]);
|
||||
}());
|
||||
});
|
||||
|
||||
run_test('merge_message_groups', () => {
|
||||
// MessageListView has lots of DOM code, so we are going to test the message
|
||||
// group mearging logic on its own.
|
||||
|
||||
@@ -201,9 +201,21 @@ MessageListView.prototype = {
|
||||
},
|
||||
|
||||
_add_msg_edited_vars: function (message_container) {
|
||||
// This adds variables to message_container object which calculate bools for
|
||||
// checking position of "(EDITED)" label as well as the edited timestring
|
||||
// The bools can be defined only when the message is edited
|
||||
// (or when the `last_edit_timestr` is defined). The bools are:
|
||||
// * `edited_in_left_col` -- when label appears in left column.
|
||||
// * `edited_alongside_sender` -- when label appears alongside sender info.
|
||||
// * `edited_status_msg` -- when label appears for a "/me" message.
|
||||
var last_edit_timestr = this._get_msg_timestring(message_container);
|
||||
var include_sender = message_container.include_sender;
|
||||
var status_message = Boolean(message_container.status_message);
|
||||
if (last_edit_timestr !== undefined) {
|
||||
message_container.last_edit_timestr = last_edit_timestr;
|
||||
message_container.edited_in_left_col = !include_sender;
|
||||
message_container.edited_alongside_sender = include_sender && !status_message;
|
||||
message_container.edited_status_msg = include_sender && status_message;
|
||||
}
|
||||
},
|
||||
|
||||
@@ -321,8 +333,6 @@ MessageListView.prototype = {
|
||||
message_container.sender_is_bot = people.sender_is_bot(message_container.msg);
|
||||
message_container.sender_is_guest = people.sender_is_guest(message_container.msg);
|
||||
|
||||
self._add_msg_edited_vars(message_container);
|
||||
|
||||
message_container.small_avatar_url = people.small_avatar_url(message_container.msg);
|
||||
if (message_container.msg.stream) {
|
||||
message_container.background_color =
|
||||
@@ -331,6 +341,8 @@ MessageListView.prototype = {
|
||||
|
||||
message_container.contains_mention = message_container.msg.mentioned;
|
||||
self._maybe_format_me_message(message_container);
|
||||
// Once all other variables are updated
|
||||
self._add_msg_edited_vars(message_container);
|
||||
|
||||
prev = message_container;
|
||||
});
|
||||
@@ -1153,8 +1165,8 @@ MessageListView.prototype = {
|
||||
var was_selected = this.list.selected_message() === message_container.msg;
|
||||
|
||||
// Re-render just this one message
|
||||
this._add_msg_edited_vars(message_container);
|
||||
this._maybe_format_me_message(message_container);
|
||||
this._add_msg_edited_vars(message_container);
|
||||
|
||||
// Make sure the right thing happens if the message was edited to mention us.
|
||||
message_container.contains_mention = message_container.msg.mentioned;
|
||||
|
||||
@@ -13,8 +13,8 @@
|
||||
{{{ status_message }}}
|
||||
</span>
|
||||
|
||||
{{#if_and last_edit_timestr include_sender}}
|
||||
{{#if edited_status_msg}}
|
||||
{{partial "edited_notice"}}
|
||||
{{/if_and}}
|
||||
{{/if}}
|
||||
</span>
|
||||
</span>
|
||||
|
||||
@@ -27,11 +27,9 @@
|
||||
{{timestr}}
|
||||
</span>
|
||||
|
||||
{{#if_and last_edit_timestr include_sender}}
|
||||
{{#unless status_message}}
|
||||
{{partial "edited_notice"}}
|
||||
{{/unless}}
|
||||
{{/if_and}}
|
||||
{{#if edited_alongside_sender}}
|
||||
{{partial "edited_notice"}}
|
||||
{{/if}}
|
||||
|
||||
{{partial "message_controls"}}
|
||||
|
||||
@@ -41,10 +39,8 @@
|
||||
<div class="message_content rendered_markdown">{{#if use_match_properties}}{{{msg/match_content}}}{{else}}{{{msg/content}}}{{/if}}</div>
|
||||
{{/unless}}
|
||||
|
||||
{{#if last_edit_timestr}}
|
||||
{{#unless include_sender}}
|
||||
{{partial "edited_notice"}}
|
||||
{{/unless}}
|
||||
{{#if edited_in_left_col}}
|
||||
{{partial "edited_notice"}}
|
||||
{{/if}}
|
||||
|
||||
<div class="message_edit">
|
||||
|
||||
Reference in New Issue
Block a user