diff --git a/static/js/message_list.js b/static/js/message_list.js index c8955267c0..b9f37984c3 100644 --- a/static/js/message_list.js +++ b/static/js/message_list.js @@ -406,6 +406,32 @@ MessageList.prototype = { this.view.rerender_the_whole_thing(); }, + remove_and_rerender: function MessageList_remove_and_rerender(messages) { + var self = this; + _.each(messages, function (message) { + var stored_message = self._hash[message.id]; + if (stored_message !== undefined) { + delete self._hash[stored_message]; + } + }); + + var msg_ids_to_remove = {}; + _.each(messages, function (message) { + msg_ids_to_remove[message.id] = true; + }); + this._items = _.filter(this._items, function (message) { + return !msg_ids_to_remove.hasOwnProperty(message.id); + }); + if (this.muting_enabled) { + this._all_items = _.filter(this._all_items, function (message) { + return !msg_ids_to_remove.hasOwnProperty(message.id); + }); + } + + this.view.rerender_the_whole_thing(); + this.select_id(this.selected_id(), {use_closest: true, empty_ok: true}); + }, + show_edit_message: function MessageList_show_edit_message(row, edit_obj) { row.find(".message_edit_form").empty().append(edit_obj.form); row.find(".message_content").hide(); diff --git a/zerver/tests/frontend/node/message_list.js b/zerver/tests/frontend/node/message_list.js index d02f0f29de..28fff8733d 100644 --- a/zerver/tests/frontend/node/message_list.js +++ b/zerver/tests/frontend/node/message_list.js @@ -96,8 +96,14 @@ var MessageList = require('js/message_list'); list.append(new_messages, true); assert.equal(list.last().id, 90); - list.view.clear_table = function () {}; + + list.remove_and_rerender([{id: 60}]); + var removed = list.all().filter(function (msg) { + return msg.id !== 60; + }); + assert.deepEqual(list.all(), removed); + list.clear(); assert.deepEqual(list.all(), []);