Rename message to message_container

Now that we are not directly using message in the message list view
rename the uses of message that are message_containers.

(imported from commit 5c355703a8934a74864f5de6ecb1e2fd851e5d41)
This commit is contained in:
Jason Michalski
2014-03-17 14:38:35 -04:00
parent 1613cad6f6
commit e60f76487f
5 changed files with 176 additions and 170 deletions

View File

@@ -229,7 +229,7 @@ exports.update_rendered_message_groups = function (message_groups, get_element)
// the other code takes advantage of blocks beneath recipient bars. // the other code takes advantage of blocks beneath recipient bars.
_.each(message_groups, function (message_group) { _.each(message_groups, function (message_group) {
var elt = get_element(message_group); var elt = get_element(message_group);
var first_message = message_group.messages[0]; var first_message = message_group.message_containers[0];
var should_fade = !fade_heuristic(focused_recipient, first_message); var should_fade = !fade_heuristic(focused_recipient, first_message);
change_fade_state(elt, should_fade); change_fade_state(elt, should_fade);
}); });

View File

@@ -2,7 +2,7 @@ function MessageListView(list, table_name, collapse_messages) {
this.list = list; this.list = list;
this.collapse_messages = collapse_messages; this.collapse_messages = collapse_messages;
this._rows = {}; this._rows = {};
this._list_messages = {}; this.message_containers = {};
this.table_name = table_name; this.table_name = table_name;
if (this.table_name) { if (this.table_name) {
this.clear_table(); this.clear_table();
@@ -44,8 +44,8 @@ function same_recipient(a, b) {
return util.same_recipient(a.msg, b.msg); return util.same_recipient(a.msg, b.msg);
} }
function add_display_time(group, message, prev) { function add_display_time(group, message_container, prev) {
var time = new XDate(message.msg.timestamp * 1000); var time = new XDate(message_container.msg.timestamp * 1000);
if (prev !== undefined) { if (prev !== undefined) {
var prev_time = new XDate(prev.msg.timestamp * 1000); var prev_time = new XDate(prev.msg.timestamp * 1000);
@@ -57,31 +57,31 @@ function add_display_time(group, message, prev) {
group.show_date = (timerender.render_date(time))[0].outerHTML; group.show_date = (timerender.render_date(time))[0].outerHTML;
} }
if (message.timestr === undefined) { if (message_container.timestr === undefined) {
message.timestr = stringify_time(time); message_container.timestr = stringify_time(time);
} }
} }
function populate_group_from_message(group, message) { function populate_group_from_message_container(group, message_container) {
group.is_stream = message.msg.is_stream; group.is_stream = message_container.msg.is_stream;
group.is_private = message.msg.is_private; group.is_private = message_container.msg.is_private;
if (group.is_stream) { if (group.is_stream) {
group.background_color = stream_data.get_color(message.msg.stream); group.background_color = stream_data.get_color(message_container.msg.stream);
group.color_class = stream_color.get_color_class(group.background_color); group.color_class = stream_color.get_color_class(group.background_color);
group.invite_only = stream_data.get_invite_only(message.msg.stream); group.invite_only = stream_data.get_invite_only(message_container.msg.stream);
group.subject = message.msg.subject; group.subject = message_container.msg.subject;
group.match_subject = message.match_subject; group.match_subject = message_container.match_subject;
group.stream_url = message.stream_url; group.stream_url = message_container.stream_url;
group.topic_url = message.topic_url; group.topic_url = message_container.topic_url;
} else if (group.is_private) { } else if (group.is_private) {
group.pm_with_url = message.pm_with_url; group.pm_with_url = message_container.pm_with_url;
group.display_reply_to = message.msg.display_reply_to; group.display_reply_to = message_container.msg.display_reply_to;
} }
group.display_recipient = message.msg.display_recipient; group.display_recipient = message_container.msg.display_recipient;
group.always_visible_topic_edit = message.msg.always_visible_topic_edit; group.always_visible_topic_edit = message_container.msg.always_visible_topic_edit;
group.on_hover_topic_edit = message.msg.on_hover_topic_edit; group.on_hover_topic_edit = message_container.msg.on_hover_topic_edit;
group.subject_links = message.msg.subject_links; group.subject_links = message_container.msg.subject_links;
} }
MessageListView.prototype = { MessageListView.prototype = {
@@ -91,34 +91,34 @@ MessageListView.prototype = {
// trigger a re-render // trigger a re-render
_RENDER_THRESHOLD: 50, _RENDER_THRESHOLD: 50,
_add_msg_timestring: function MessageListView___add_msg_timestring(message) { _add_msg_timestring: function MessageListView___add_msg_timestring(message_container) {
if (message.msg.last_edit_timestamp !== undefined) { if (message_container.msg.last_edit_timestamp !== undefined) {
// Add or update the last_edit_timestr // Add or update the last_edit_timestr
var last_edit_time = new XDate(message.msg.last_edit_timestamp * 1000); var last_edit_time = new XDate(message_container.msg.last_edit_timestamp * 1000);
message.last_edit_timestr = message_container.last_edit_timestr =
(timerender.render_date(last_edit_time))[0].innerText (timerender.render_date(last_edit_time))[0].innerText
+ " at " + stringify_time(last_edit_time); + " at " + stringify_time(last_edit_time);
} }
}, },
add_subscription_marker: function MessageListView__add_subscription_marker(group, last_msg, first_msg) { add_subscription_marker: function MessageListView__add_subscription_marker(group, last_msg_container, first_msg_container) {
if (last_msg !== undefined && if (last_msg_container !== undefined &&
first_msg.msg.historical !== last_msg.msg.historical) { first_msg_container.msg.historical !== last_msg_container.msg.historical) {
group.bookend_top = true; group.bookend_top = true;
if (first_msg.msg.historical) { if (first_msg_container.msg.historical) {
group.unsubscribed = first_msg.msg.stream; group.unsubscribed = first_msg_container.msg.stream;
group.bookend_content = this.list.unsubscribed_bookend_content(first_msg.msg.stream); group.bookend_content = this.list.unsubscribed_bookend_content(first_msg_container.msg.stream);
} else { } else {
group.subscribed = first_msg.msg.stream; group.subscribed = first_msg_container.msg.stream;
group.bookend_content = this.list.subscribed_bookend_content(first_msg.msg.stream); group.bookend_content = this.list.subscribed_bookend_content(first_msg_container.msg.stream);
} }
} }
}, },
build_message_groups: function MessageListView__build_message_groups(messages, message_id_prefix) { build_message_groups: function MessageListView__build_message_groups(message_containers, message_id_prefix) {
function start_group() { function start_group() {
return { return {
messages: [], message_containers: [],
message_group_id: _.uniqueId('message_group_') message_group_id: _.uniqueId('message_group_')
}; };
} }
@@ -128,82 +128,82 @@ MessageListView.prototype = {
var new_message_groups = []; var new_message_groups = [];
var prev; var prev;
function add_message_to_group(message) { function add_message_container_to_group(message_container) {
if (same_sender(prev, message)) { if (same_sender(prev, message_container)) {
prev.next_is_same_sender = true; prev.next_is_same_sender = true;
} }
current_group.messages.push(message); current_group.message_containers.push(message_container);
} }
function finish_group() { function finish_group() {
if (current_group.messages.length > 0) { if (current_group.message_containers.length > 0) {
populate_group_from_message(current_group, current_group.messages[0]); populate_group_from_message_container(current_group, current_group.message_containers[0]);
current_group.messages[current_group.messages.length - 1].include_footer = true; current_group.message_containers[current_group.message_containers.length - 1].include_footer = true;
new_message_groups.push(current_group); new_message_groups.push(current_group);
} }
} }
_.each(messages, function (message) { _.each(message_containers, function (message_container) {
message.include_recipient = false; message_container.include_recipient = false;
message.include_footer = false; message_container.include_footer = false;
if (same_recipient(prev, message) && self.collapse_messages && if (same_recipient(prev, message_container) && self.collapse_messages &&
prev.msg.historical === message.msg.historical && same_day(prev, message)) { prev.msg.historical === message_container.msg.historical && same_day(prev, message_container)) {
add_message_to_group(message); add_message_container_to_group(message_container);
} else { } else {
finish_group(); finish_group();
current_group = start_group(); current_group = start_group();
add_message_to_group(message); add_message_container_to_group(message_container);
message.include_recipient = true; message_container.include_recipient = true;
message.subscribed = false; message_container.subscribed = false;
message.unsubscribed = false; message_container.unsubscribed = false;
// This home_msg_list condition can be removed // This home_msg_list condition can be removed
// once we filter historical messages from the // once we filter historical messages from the
// home view on the server side (which requires // home view on the server side (which requires
// having an index on UserMessage.flags) // having an index on UserMessage.flags)
if (self.list !== home_msg_list) { if (self.list !== home_msg_list) {
self.add_subscription_marker(current_group, prev, message); self.add_subscription_marker(current_group, prev, message_container);
} }
if (message.msg.stream) { if (message_container.msg.stream) {
message.stream_url = narrow.by_stream_uri(message.msg.stream); message_container.stream_url = narrow.by_stream_uri(message_container.msg.stream);
message.topic_url = narrow.by_stream_subject_uri(message.msg.stream, message.msg.subject); message_container.topic_url = narrow.by_stream_subject_uri(message_container.msg.stream, message_container.msg.subject);
} else { } else {
message.pm_with_url = narrow.pm_with_uri(message.msg.reply_to); message_container.pm_with_url = narrow.pm_with_uri(message_container.msg.reply_to);
} }
} }
add_display_time(current_group, message, prev); add_display_time(current_group, message_container, prev);
message.include_sender = true; message_container.include_sender = true;
if (!message.include_recipient && if (!message_container.include_recipient &&
!prev.status_message && !prev.status_message &&
same_sender(prev, message)) { same_sender(prev, message_container)) {
message.include_sender = false; message_container.include_sender = false;
} }
self._add_msg_timestring(message); self._add_msg_timestring(message_container);
message.small_avatar_url = ui.small_avatar_url(message.msg); message_container.small_avatar_url = ui.small_avatar_url(message_container.msg);
if (message.msg.stream !== undefined) { if (message_container.msg.stream !== undefined) {
message.background_color = stream_data.get_color(message.msg.stream); message_container.background_color = stream_data.get_color(message_container.msg.stream);
} }
message.contains_mention = notifications.speaking_at_me(message.msg); message_container.contains_mention = notifications.speaking_at_me(message_container.msg);
message.unread = unread.message_unread(message.msg); message_container.unread = unread.message_unread(message_container.msg);
if (message.msg.is_me_message) { if (message_container.msg.is_me_message) {
// Slice the '<p>/me ' off the front, and '</p>' off the end // Slice the '<p>/me ' off the front, and '</p>' off the end
message.status_message = message.msg.content.slice(4 + 3, -4); message_container.status_message = message_container.msg.content.slice(4 + 3, -4);
message.include_sender = true; message_container.include_sender = true;
} }
else { else {
message.status_message = false; message_container.status_message = false;
} }
prev = message; prev = message_container;
}); });
finish_group(); finish_group();
@@ -220,23 +220,23 @@ MessageListView.prototype = {
if (first_group === undefined || second_group === undefined) { if (first_group === undefined || second_group === undefined) {
return false; return false;
} }
var last_msg = _.last(first_group.messages); var last_msg_container = _.last(first_group.message_containers);
var first_msg = _.first(second_group.messages); var first_msg_container = _.first(second_group.message_containers);
// Join two groups into one. // Join two groups into one.
if (this.collapse_messages && same_recipient(last_msg, first_msg) && same_day(last_msg, first_msg) && (last_msg.msg.historical === first_msg.msg.historical)) { if (this.collapse_messages && same_recipient(last_msg_container, first_msg_container) && same_day(last_msg_container, first_msg_container) && (last_msg_container.msg.historical === first_msg_container.msg.historical)) {
if (!last_msg.status_message && !first_msg.is_me_message && same_sender(last_msg, first_msg)) { if (!last_msg_container.status_message && !first_msg_container.is_me_message && same_sender(last_msg_container, first_msg_container)) {
first_msg.include_sender = false; first_msg_container.include_sender = false;
} }
if (same_sender(last_msg, first_msg)) { if (same_sender(last_msg_container, first_msg_container)) {
last_msg.next_is_same_sender = true; last_msg_container.next_is_same_sender = true;
} }
first_group.messages = first_group.messages.concat(second_group.messages); first_group.message_containers = first_group.message_containers.concat(second_group.message_containers);
return true; return true;
// Add a subscription marker // Add a subscription marker
} else if (this.list !== home_msg_list && last_msg.msg.historical !== first_msg.msg.historical) { } else if (this.list !== home_msg_list && last_msg_container.msg.historical !== first_msg_container.msg.historical) {
first_group.bookend_bottom = true; first_group.bookend_bottom = true;
this.add_subscription_marker(first_group, last_msg, first_msg); this.add_subscription_marker(first_group, last_msg_container, first_msg_container);
} }
return false; return false;
}, },
@@ -288,14 +288,14 @@ MessageListView.prototype = {
if (this.join_message_groups(first_group, second_group)) { if (this.join_message_groups(first_group, second_group)) {
// rerender the last message // rerender the last message
message_actions.rerender_messages.push( message_actions.rerender_messages.push(
first_group.messages[first_group.messages.length - second_group.messages.length - 1] first_group.message_containers[first_group.message_containers.length - second_group.message_containers.length - 1]
); );
message_actions.append_messages = _.first(new_message_groups).messages; message_actions.append_messages = _.first(new_message_groups).message_containers;
new_message_groups = _.rest(new_message_groups); new_message_groups = _.rest(new_message_groups);
} else if (first_group !== undefined && second_group !== undefined) { } else if (first_group !== undefined && second_group !== undefined) {
var last_msg = _.last(first_group.messages); var last_msg_container = _.last(first_group.message_containers);
var first_msg = _.first(second_group.messages); var first_msg_container = _.first(second_group.message_containers);
if (same_day(last_msg, first_msg)) { if (same_day(last_msg_container, first_msg_container)) {
// Clear the date if it is the same as the last group // Clear the date if it is the same as the last group
second_group.show_date = undefined; second_group.show_date = undefined;
} }
@@ -307,22 +307,22 @@ MessageListView.prototype = {
return message_actions; return message_actions;
}, },
_post_process_messages: function MessageListView___post_process_messages(messages) { _post_process_dom_messages: function MessageListView___post_process_dom_messages(dom_messages) {
// _post_process_messages adds applies some extra formating to messages // _post_process_dom_messages adds applies some extra formating to messages
// and stores them in self._rows and sends an event that the message is // and stores them in self._rows and sends an event that the message is
// complete. _post_process_messages should be a list of DOM nodes not // complete. _post_process_dom_messages should be a list of DOM nodes not
// jQuery objects. // jQuery objects.
var self = this; var self = this;
_.each(messages, function (message_row) { _.each(dom_messages, function (dom_message) {
if (!_.isElement(message_row)) { if (!_.isElement(dom_message)) {
blueslip.error('Only DOM nodes can be passed to _post_process_messages'); blueslip.warn('Only DOM nodes can be passed to _post_process_messages');
} }
var row = $(message_row); var row = $(dom_message);
// Save DOM elements by id into self._rows for O(1) lookup // Save DOM elements by id into self._rows for O(1) lookup
if (row.hasClass('message_row')) { if (row.hasClass('message_row')) {
self._rows[row.attr('zid')] = message_row; self._rows[row.attr('zid')] = dom_message;
} }
if (row.hasClass('mention')) { if (row.hasClass('mention')) {
@@ -362,7 +362,7 @@ MessageListView.prototype = {
// we we record if last_message_was_selected before updating the table // we we record if last_message_was_selected before updating the table
var last_message_was_selected = rows.id(rows.last_visible()) === list.selected_id(); var last_message_was_selected = rows.id(rows.last_visible()) === list.selected_id();
var orig_scrolltop_offset, last_message_id; var orig_scrolltop_offset, last_message_id;
var combined_messages, first_msg, last_msg; var message_containers, first_msg, last_msg;
var self = this; var self = this;
@@ -370,7 +370,7 @@ MessageListView.prototype = {
// all messages lists. To prevent having both list views overwriting // all messages lists. To prevent having both list views overwriting
// each others data we will make a new message object to add data to // each others data we will make a new message object to add data to
// for rendering. // for rendering.
messages = _.map(messages, function (message) { return {msg: message}; }); message_containers = _.map(messages, function (message) { return {msg: message}; });
function save_scroll_position() { function save_scroll_position() {
if (orig_scrolltop_offset === undefined && self.selected_row().length > 0) { if (orig_scrolltop_offset === undefined && self.selected_row().length > 0) {
@@ -388,16 +388,18 @@ MessageListView.prototype = {
// This function processes messages into chunks with separators between them, // This function processes messages into chunks with separators between them,
// and templates them to be inserted as table rows into the DOM. // and templates them to be inserted as table rows into the DOM.
if (messages.length === 0 || this.table_name === undefined) { if (message_containers.length === 0 || this.table_name === undefined) {
return; return;
} }
var new_message_groups = this.build_message_groups(messages, this.table_name); var new_message_groups = this.build_message_groups(message_containers, this.table_name);
var message_actions = this.merge_message_groups(new_message_groups, where); var message_actions = this.merge_message_groups(new_message_groups, where);
var new_dom_elements = []; var new_dom_elements = [];
var rendered_groups, dom_messages, last_message_row, last_group_row; var rendered_groups, dom_messages, last_message_row, last_group_row;
_.each(messages, function (message) { self._list_messages[message.msg.id] = message; }); _.each(message_containers, function (message_container) {
self.message_containers[message_container.msg.id] = message_container;
});
// Rerender message groups // Rerender message groups
@@ -418,7 +420,7 @@ MessageListView.prototype = {
dom_messages = rendered_groups.find('.message_row'); dom_messages = rendered_groups.find('.message_row');
// Not adding to new_dom_elements it is only used for autoscroll // Not adding to new_dom_elements it is only used for autoscroll
self._post_process_messages(dom_messages.get()); self._post_process_dom_messages(dom_messages.get());
old_message_group.replaceWith(rendered_groups); old_message_group.replaceWith(rendered_groups);
condense.condense_and_collapse(dom_messages); condense.condense_and_collapse(dom_messages);
}); });
@@ -437,7 +439,7 @@ MessageListView.prototype = {
dom_messages = rendered_groups.find('.message_row'); dom_messages = rendered_groups.find('.message_row');
new_dom_elements = new_dom_elements.concat(rendered_groups); new_dom_elements = new_dom_elements.concat(rendered_groups);
self._post_process_messages(dom_messages.get()); self._post_process_dom_messages(dom_messages.get());
// The date row will be included in the message groups // The date row will be included in the message groups
table.find('.recipient_row').first().prev('.date_row').remove(); table.find('.recipient_row').first().prev('.date_row').remove();
@@ -447,11 +449,11 @@ MessageListView.prototype = {
// Rerender message rows // Rerender message rows
if (message_actions.rerender_messages.length > 0) { if (message_actions.rerender_messages.length > 0) {
_.each(message_actions.rerender_messages, function (message) { _.each(message_actions.rerender_messages, function (message_container) {
var old_row = self.get_row(message.msg.id); var old_row = self.get_row(message_container.msg.id);
var msg_to_render = _.extend(message, {table_name: this.table_name}); var msg_to_render = _.extend(message_container, {table_name: this.table_name});
var row = $(templates.render('single_message', msg_to_render)); var row = $(templates.render('single_message', msg_to_render));
self._post_process_messages(row.get()); self._post_process_dom_messages(row.get());
old_row.replaceWith(row); old_row.replaceWith(row);
condense.condense_and_collapse(row); condense.condense_and_collapse(row);
list.reselect_selected_id(); list.reselect_selected_id();
@@ -462,12 +464,12 @@ MessageListView.prototype = {
if (message_actions.append_messages.length > 0) { if (message_actions.append_messages.length > 0) {
last_message_row = table.find('.message_row:last').expectOne(); last_message_row = table.find('.message_row:last').expectOne();
last_group_row = rows.get_message_recipient_row(last_message_row); last_group_row = rows.get_message_recipient_row(last_message_row);
dom_messages = $(_.map(message_actions.append_messages, function (message) { dom_messages = $(_.map(message_actions.append_messages, function (message_container) {
var msg_to_render = _.extend(message, {table_name: this.table_name}); var msg_to_render = _.extend(message_container, {table_name: this.table_name});
return templates.render('single_message', msg_to_render); return templates.render('single_message', msg_to_render);
}).join('')).filter('.message_row'); }).join('')).filter('.message_row');
self._post_process_messages(dom_messages.get()); self._post_process_dom_messages(dom_messages.get());
last_group_row.append(dom_messages); last_group_row.append(dom_messages);
new_dom_elements = new_dom_elements.concat(dom_messages); new_dom_elements = new_dom_elements.concat(dom_messages);
@@ -487,7 +489,7 @@ MessageListView.prototype = {
dom_messages = rendered_groups.find('.message_row'); dom_messages = rendered_groups.find('.message_row');
new_dom_elements = new_dom_elements.concat(rendered_groups); new_dom_elements = new_dom_elements.concat(rendered_groups);
self._post_process_messages(dom_messages.get()); self._post_process_dom_messages(dom_messages.get());
table.append(rendered_groups); table.append(rendered_groups);
condense.condense_and_collapse(dom_messages); condense.condense_and_collapse(dom_messages);
} }
@@ -496,7 +498,7 @@ MessageListView.prototype = {
var last_message_group = _.last(self._message_groups); var last_message_group = _.last(self._message_groups);
if (last_message_group !== undefined) { if (last_message_group !== undefined) {
list.last_message_historical = _.last(last_message_group.messages).msg.historical; list.last_message_historical = _.last(last_message_group.message_containers).msg.historical;
} }
list.update_trailing_bookend(); list.update_trailing_bookend();
@@ -508,7 +510,7 @@ MessageListView.prototype = {
// of rows.js from compose_fade. We provide a callback function to be lazy-- // of rows.js from compose_fade. We provide a callback function to be lazy--
// compose_fade may not actually need the elements depending on its internal // compose_fade may not actually need the elements depending on its internal
// state. // state.
var message_row = self.get_row(message_group.messages[0].msg.id); var message_row = self.get_row(message_group.message_containers[0].msg.id);
return rows.get_message_recipient_row(message_row); return rows.get_message_recipient_row(message_row);
}; };
@@ -699,14 +701,14 @@ MessageListView.prototype = {
} }
}, },
_rerender_header: function MessageListView__maybe_rerender_header(messages) { _rerender_header: function MessageListView__maybe_rerender_header(message_containers) {
// Given a list of messages that are in the **same** message group, // Given a list of messages that are in the **same** message group,
// rerender the header / recipient bar of the messages // rerender the header / recipient bar of the messages
if (messages.length === 0) { if (message_containers.length === 0) {
return; return;
} }
var first_row = this.get_row(messages[0].msg.id); var first_row = this.get_row(message_containers[0].msg.id);
// We may not have the row if the stream or topic was muted // We may not have the row if the stream or topic was muted
if (first_row.length === 0) { if (first_row.length === 0) {
@@ -716,17 +718,17 @@ MessageListView.prototype = {
var recipient_row = rows.get_message_recipient_row(first_row); var recipient_row = rows.get_message_recipient_row(first_row);
var header = recipient_row.find('.message_header'); var header = recipient_row.find('.message_header');
var group = {messages: messages}; var group = {message_containers: message_containers};
populate_group_from_message(group, messages[0]); populate_group_from_message_container(group, message_containers[0]);
var rendered_recipient_row = $(templates.render('recipient_row', group)); var rendered_recipient_row = $(templates.render('recipient_row', group));
header.replaceWith(rendered_recipient_row); header.replaceWith(rendered_recipient_row);
}, },
_rerender_message: function MessageListView___rerender_message(message) { _rerender_message: function MessageListView___rerender_message(message_container) {
var row = this.get_row(message.msg.id); var row = this.get_row(message_container.msg.id);
var was_selected = this.list.selected_message() === message; var was_selected = this.list.selected_message() === message_container.msg;
// We may not have the row if the stream or topic was muted // We may not have the row if the stream or topic was muted
if (row.length === 0) { if (row.length === 0) {
@@ -734,15 +736,15 @@ MessageListView.prototype = {
} }
// Re-render just this one message // Re-render just this one message
this._add_msg_timestring(message); this._add_msg_timestring(message_container);
var msg_to_render = _.extend(message, {table_name: this.table_name}); var msg_to_render = _.extend(message_container, {table_name: this.table_name});
var rendered_msg = $(templates.render('single_message', msg_to_render)); var rendered_msg = $(templates.render('single_message', msg_to_render));
this._post_process_messages(rendered_msg.get()); this._post_process_dom_messages(rendered_msg.get());
row.replaceWith(rendered_msg); row.replaceWith(rendered_msg);
if (was_selected) { if (was_selected) {
this.list.select_id(message.msg.id); this.list.select_id(message_container.msg.id);
} }
}, },
@@ -757,20 +759,20 @@ MessageListView.prototype = {
return message === undefined; return message === undefined;
}); });
// Convert messages to list messages // Convert messages to list messages
own_messages = _.map(messages, function (message) { var message_containers = _.map(messages, function (message) {
return self._list_messages[message.id]; return self.message_containers[message.id];
}); });
var message_groups = []; var message_groups = [];
var current_group = []; var current_group = [];
_.each(own_messages, function (message) { _.each(message_containers, function (message_container) {
if (current_group.length === 0 || same_recipient(current_group[current_group.length - 1], message)) { if (current_group.length === 0 || same_recipient(current_group[current_group.length - 1], message_container)) {
current_group.push(message); current_group.push(message_container);
} else { } else {
message_groups.push(current_group); message_groups.push(current_group);
current_group = []; current_group = [];
} }
self._rerender_message(message); self._rerender_message(message_container);
}); });
if (current_group.length !== 0) { if (current_group.length !== 0) {
message_groups.push(current_group); message_groups.push(current_group);
@@ -827,7 +829,7 @@ MessageListView.prototype = {
rows.get_table(this.table_name).children().detach(); rows.get_table(this.table_name).children().detach();
this._rows = {}; this._rows = {};
this._message_groups = []; this._message_groups = [];
this._list_messages = {}; this.message_containers = {};
}, },
get_row: function MessageListView_get_row(id) { get_row: function MessageListView_get_row(id) {
@@ -866,10 +868,10 @@ MessageListView.prototype = {
this._rows[new_id] = row; this._rows[new_id] = row;
} }
if (this._list_messages[old_id] !== undefined) { if (this.message_containers[old_id] !== undefined) {
var message = this._list_messages[old_id]; var message_container = this.message_containers[old_id];
delete this._list_messages[old_id]; delete this.message_containers[old_id];
this._list_messages[new_id] = message; this.message_containers[new_id] = message_container;
} }
} }

View File

@@ -13,7 +13,7 @@
<div class="recipient_row" id="{{message_group_id}}"> <div class="recipient_row" id="{{message_group_id}}">
{{partial "recipient_row" "use_match_properties" ../../use_match_properties}} {{partial "recipient_row" "use_match_properties" ../../use_match_properties}}
{{#each messages}} {{#each message_containers}}
{{#with this}} {{#with this}}
{{partial "single_message" "use_match_properties" ../../../../use_match_properties "table_name" ../../../../table_name}} {{partial "single_message" "use_match_properties" ../../../../use_match_properties "table_name" ../../../../table_name}}
{{/with}} {{/with}}

View File

@@ -17,27 +17,31 @@ set_global('unread', {message_unread: function () {}});
// MessageListView has lots of DOM code, so we are going to test the mesage // MessageListView has lots of DOM code, so we are going to test the mesage
// group mearging logic on its own. // group mearging logic on its own.
function build_message(message) { function build_message_context(message, message_context) {
if (message_context === undefined) {
message_context = {};
}
if (message === undefined) { if (message === undefined) {
message = {}; message = {};
} }
return { message_context = _.defaults(message_context, {
msg: _.defaults(message, { include_sender: true
id: _.uniqueId('test_message_'), });
status_message: false, message_context.msg = _.defaults(message, {
type: 'stream', id: _.uniqueId('test_message_'),
stream: 'Test Stream 1', status_message: false,
subject: 'Test Subject 1', type: 'stream',
sender_email: 'test@example.com', stream: 'Test Stream 1',
timestamp: _.uniqueId(), subject: 'Test Subject 1',
include_sender: true sender_email: 'test@example.com',
}) timestamp: _.uniqueId()
}; });
return message_context;
} }
function build_message_group(messages) { function build_message_group(messages) {
return { return {
messages: messages, message_containers: messages,
message_group_id: _.uniqueId('test_message_group_'), message_group_id: _.uniqueId('test_message_group_'),
show_date: true show_date: true
}; };
@@ -76,7 +80,7 @@ set_global('unread', {message_unread: function () {}});
(function test_empty_list_bottom() { (function test_empty_list_bottom() {
var list = build_list([]); var list = build_list([]);
var message_group = build_message_group([ var message_group = build_message_group([
build_message() build_message_context()
]); ]);
var result = list.merge_message_groups([message_group], 'bottom'); var result = list.merge_message_groups([message_group], 'bottom');
@@ -91,12 +95,12 @@ set_global('unread', {message_unread: function () {}});
(function test_append_message_same_subject() { (function test_append_message_same_subject() {
var message1 = build_message(); var message1 = build_message_context();
var message_group1 = build_message_group([ var message_group1 = build_message_group([
message1 message1
]); ]);
var message2 = build_message(); var message2 = build_message_context();
var message_group2 = build_message_group([ var message_group2 = build_message_group([
message2 message2
]); ]);
@@ -117,12 +121,12 @@ set_global('unread', {message_unread: function () {}});
(function test_append_message_diffrent_subject() { (function test_append_message_diffrent_subject() {
var message1 = build_message(); var message1 = build_message_context();
var message_group1 = build_message_group([ var message_group1 = build_message_group([
message1 message1
]); ]);
var message2 = build_message({subject: 'Test subject 2'}); var message2 = build_message_context({subject: 'Test subject 2'});
var message_group2 = build_message_group([ var message_group2 = build_message_group([
message2 message2
]); ]);
@@ -144,12 +148,12 @@ set_global('unread', {message_unread: function () {}});
(function test_append_message_diffrent_day() { (function test_append_message_diffrent_day() {
var message1 = build_message({timestamp: 1000}); var message1 = build_message_context({timestamp: 1000});
var message_group1 = build_message_group([ var message_group1 = build_message_group([
message1 message1
]); ]);
var message2 = build_message({timestamp: 900000}); var message2 = build_message_context({timestamp: 900000});
var message_group2 = build_message_group([ var message_group2 = build_message_group([
message2 message2
]); ]);
@@ -171,12 +175,12 @@ set_global('unread', {message_unread: function () {}});
(function test_append_message_historical() { (function test_append_message_historical() {
var message1 = build_message({historical: false}); var message1 = build_message_context({historical: false});
var message_group1 = build_message_group([ var message_group1 = build_message_group([
message1 message1
]); ]);
var message2 = build_message({historical: true}); var message2 = build_message_context({historical: true});
var message_group2 = build_message_group([ var message_group2 = build_message_group([
message2 message2
]); ]);
@@ -198,12 +202,12 @@ set_global('unread', {message_unread: function () {}});
(function test_append_message_same_subject_me_message() { (function test_append_message_same_subject_me_message() {
var message1 = build_message(); var message1 = build_message_context();
var message_group1 = build_message_group([ var message_group1 = build_message_group([
message1 message1
]); ]);
var message2 = build_message({is_me_message: true}); var message2 = build_message_context({}, {is_me_message: true});
var message_group2 = build_message_group([ var message_group2 = build_message_group([
message2 message2
]); ]);
@@ -226,12 +230,12 @@ set_global('unread', {message_unread: function () {}});
(function test_prepend_message_same_subject() { (function test_prepend_message_same_subject() {
var message1 = build_message(); var message1 = build_message_context();
var message_group1 = build_message_group([ var message_group1 = build_message_group([
message1 message1
]); ]);
var message2 = build_message(); var message2 = build_message_context();
var message_group2 = build_message_group([ var message_group2 = build_message_group([
message2 message2
]); ]);
@@ -254,12 +258,12 @@ set_global('unread', {message_unread: function () {}});
(function test_prepend_message_diffrent_subject() { (function test_prepend_message_diffrent_subject() {
var message1 = build_message(); var message1 = build_message_context();
var message_group1 = build_message_group([ var message_group1 = build_message_group([
message1 message1
]); ]);
var message2 = build_message({subject: 'Test Subject 2'}); var message2 = build_message_context({subject: 'Test Subject 2'});
var message_group2 = build_message_group([ var message_group2 = build_message_group([
message2 message2
]); ]);
@@ -280,12 +284,12 @@ set_global('unread', {message_unread: function () {}});
(function test_prepend_message_diffrent_day() { (function test_prepend_message_diffrent_day() {
var message1 = build_message({timestamp: 900000}); var message1 = build_message_context({timestamp: 900000});
var message_group1 = build_message_group([ var message_group1 = build_message_group([
message1 message1
]); ]);
var message2 = build_message({timestamp: 1000}); var message2 = build_message_context({timestamp: 1000});
var message_group2 = build_message_group([ var message_group2 = build_message_group([
message2 message2
]); ]);
@@ -307,12 +311,12 @@ set_global('unread', {message_unread: function () {}});
(function test_prepend_message_historical() { (function test_prepend_message_historical() {
var message1 = build_message({historical: false}); var message1 = build_message_context({historical: false});
var message_group1 = build_message_group([ var message_group1 = build_message_group([
message1 message1
]); ]);
var message2 = build_message({historical: true}); var message2 = build_message_context({historical: true});
var message_group2 = build_message_group([ var message_group2 = build_message_group([
message2 message2
]); ]);

View File

@@ -289,7 +289,7 @@ function render(template_name, args) {
display_recipient: "support", display_recipient: "support",
is_stream: true, is_stream: true,
message_ids: [1, 2], message_ids: [1, 2],
messages: messages, message_containers: messages,
show_date: '"<span id="timerender82">Jan&nbsp;07</span>"', show_date: '"<span id="timerender82">Jan&nbsp;07</span>"',
subject: 'two messages', subject: 'two messages',
match_subject: '<span class="highlight">two</span> messages' match_subject: '<span class="highlight">two</span> messages'