{{ _("Are you sure you want to delete this message?") }}
+diff --git a/frontend_tests/casper_tests/15-delete-message.js b/frontend_tests/casper_tests/15-delete-message.js new file mode 100644 index 0000000000..ae6969122d --- /dev/null +++ b/frontend_tests/casper_tests/15-delete-message.js @@ -0,0 +1,43 @@ +var common = require('../casper_lib/common.js').common; + +common.start_and_log_in(); + +var last_message_id; +var msgs_qty; + + +casper.then(function () { + casper.waitUntilVisible("#zhome"); +}); + +casper.then(function () { + msgs_qty = this.evaluate(function () { + return $('#zhome .message_row').length; + }); + last_message_id = this.evaluate(function () { + var msg = $('#zhome .message_row:last'); + msg.find('.info').click(); + $('.delete_message').click(); + return msg.attr('id'); + }); +}); + +casper.then(function () { + casper.waitUntilVisible("#delete_message_modal", function () { + casper.click('#do_delete_message_button'); + }); +}); + +casper.then(function () { + casper.waitWhileVisible(last_message_id, function () { + var msgs_after_deleting = casper.evaluate(function () { + return $('#zhome .message_row').length; + }); + casper.test.assertEquals(msgs_qty - 1, msgs_after_deleting); + casper.test.assertDoesntExist(last_message_id); + }); +}); + +casper.run(function () { + casper.test.done(); +}); diff --git a/static/js/message_edit.js b/static/js/message_edit.js index 107bbf7855..14b1b3e2a6 100644 --- a/static/js/message_edit.js +++ b/static/js/message_edit.js @@ -468,6 +468,26 @@ exports.show_history = function (message) { }); }; +exports.delete_message = function (msg_id) { + $("#delete-message-error").html(''); + $('#delete_message_modal').modal("show"); + $('#do_delete_message_button').off().on('click', function (e) { + e.stopPropagation(); + e.preventDefault(); + channel.del({ + url: "/json/messages/" + msg_id, + success: function () { + $('#delete_message_modal').modal("hide"); + }, + error: function (xhr) { + ui_report.error(i18n.t("Error deleting message."), xhr, + $("#delete-message-error")); + }, + }); + + }); +}; + $(document).on('narrow_deactivated.zulip', function () { _.each(currently_editing_messages, function (elem, idx) { if (current_msg_list.get(idx) !== undefined) { diff --git a/static/js/popovers.js b/static/js/popovers.js index c028159502..51d09f4e36 100644 --- a/static/js/popovers.js +++ b/static/js/popovers.js @@ -147,7 +147,7 @@ exports.toggle_actions_popover = function (element, id) { var should_display_edit_history_option = _.any(message.edit_history, function (entry) { return entry.prev_content !== undefined; }); - + var should_display_delete_option = page_params.is_admin; var args = { message: message, use_edit_icon: use_edit_icon, @@ -158,6 +158,7 @@ exports.toggle_actions_popover = function (element, id) { should_display_edit_history_option: should_display_edit_history_option, conversation_time_uri: narrow.by_conversation_and_time_uri(message, true), narrowed: narrow_state.active(), + should_display_delete_option: should_display_delete_option, }; var ypos = elt.offset().top; @@ -505,6 +506,14 @@ exports.register_click_handlers = function () { e.preventDefault(); }); + $('body').on('click', '.delete_message', function (e) { + var msgid = $(e.currentTarget).data('message-id'); + popovers.hide_actions_popover(); + message_edit.delete_message(msgid); + e.stopPropagation(); + e.preventDefault(); + }); + function initClipboard(selector) { return new Clipboard(selector); } diff --git a/static/js/server_events.js b/static/js/server_events.js index 42f57a10cb..e32552343f 100644 --- a/static/js/server_events.js +++ b/static/js/server_events.js @@ -346,6 +346,12 @@ function dispatch_normal_event(event) { break; } break; + + case 'delete_message': + var msg_id = event.message_id; + ui.remove_message(msg_id); + break; + } } diff --git a/static/js/ui.js b/static/js/ui.js index 99be4aa2fa..7d8b226d2b 100644 --- a/static/js/ui.js +++ b/static/js/ui.js @@ -98,6 +98,18 @@ exports.show_message_failed = function (message_id, failed_msg) { }); }; +exports.remove_message = function (message_id) { + _.each([message_list.all, home_msg_list, message_list.narrowed], function (list) { + if (list === undefined) { + return; + } + var row = list.get_row(message_id); + if (row !== undefined) { + list.remove_and_rerender([{id: message_id}]); + } + }); +}; + exports.show_failed_message_success = function (message_id) { // Previously failed message succeeded update_message_in_all_views(message_id, function update_row(row) { diff --git a/static/templates/actions_popover_content.handlebars b/static/templates/actions_popover_content.handlebars index 6bdd895724..314d90a8a6 100644 --- a/static/templates/actions_popover_content.handlebars +++ b/static/templates/actions_popover_content.handlebars @@ -28,7 +28,14 @@ {{/if}} - + {{#if should_display_delete_option}} +