message_edit: Refactor .save and .end to separate inline topic edits.

This commit makes it so that inline (recipient bar) topic edits follow
a different path from full message row edits in `message_edit.js`.
This commit:
- deletes `.save()` endpoint and replaces all calls to it with
 `.save_message_row_edit()` and  `.save_inline_topic_edit()`
- deletes `.end()` endpoint and replaces all calls to it with calls to
  either ".end_message_row_edit()" and ".end_inline_topic_edit()".
This commit is contained in:
YashRE42
2020-04-13 19:16:41 +05:30
committed by Tim Abbott
parent 53dde9af68
commit f18ef0469a
4 changed files with 68 additions and 34 deletions

View File

@@ -107,7 +107,7 @@ run_test('update_messages', () => {
const side_effects = [
'condense.un_cache_message_content_height',
'message_edit.end',
'message_edit.end_message_row_edit',
'notifications.received_messages',
'unread_ui.update_unread_counts',
'stream_list.update_streams_sidebar',

View File

@@ -252,37 +252,37 @@ exports.initialize = function () {
$("body").on("click", ".topic_edit_save", function (e) {
const recipient_row = $(this).closest(".recipient_row");
message_edit.show_topic_edit_spinner(recipient_row);
message_edit.save(recipient_row, true);
message_edit.save_inline_topic_edit(recipient_row);
e.stopPropagation();
popovers.hide_all();
});
$("body").on("click", ".topic_edit_cancel", function (e) {
const recipient_row = $(this).closest(".recipient_row");
current_msg_list.hide_edit_topic_on_recipient_row(recipient_row);
message_edit.end_inline_topic_edit(recipient_row);
e.stopPropagation();
popovers.hide_all();
});
$("body").on("click", ".message_edit_save", function (e) {
const row = $(this).closest(".message_row");
message_edit.save(row, false);
message_edit.save_message_row_edit(row);
e.stopPropagation();
popovers.hide_all();
});
$("body").on("click", ".message_edit_cancel", function (e) {
const row = $(this).closest(".message_row");
message_edit.end(row);
message_edit.end_message_row_edit(row);
e.stopPropagation();
popovers.hide_all();
});
$("body").on("click", ".message_edit_close", function (e) {
const row = $(this).closest(".message_row");
message_edit.end(row);
message_edit.end_message_row_edit(row);
e.stopPropagation();
popovers.hide_all();
});
$("body").on("click", ".copy_message", function (e) {
const row = $(this).closest(".message_row");
message_edit.end(row);
message_edit.end_message_row_edit(row);
row.find(".alert-msg").text(i18n.t("Copied!"));
row.find(".alert-msg").css("display", "block");
row.find(".alert-msg").delay(1000).fadeOut(300);

View File

@@ -149,11 +149,11 @@ exports.end_if_focused = function () {
if (focused_elem.length === 1) {
focused_elem.blur();
const row = focused_elem.closest('.message_row');
exports.end(row);
exports.end_message_row_edit(row);
}
};
function handle_edit_keydown(from_topic_edited_only, e) {
function handle_edit_keydown(e) {
let row;
const code = e.keyCode || e.which;
switch (code) {
@@ -178,13 +178,13 @@ function handle_edit_keydown(from_topic_edited_only, e) {
} else if (($(e.target).hasClass("message_edit_topic") ||
$(e.target).hasClass("message_edit_topic_propagate"))) {
row = $(e.target).closest(".message_row");
exports.save(row, from_topic_edited_only);
exports.save_message_row_edit(row);
e.stopPropagation();
e.preventDefault();
} else if (e.target.id === "inline_topic_edit") {
row = $(e.target).closest(".recipient_row");
exports.show_topic_edit_spinner(row);
exports.save(row, from_topic_edited_only);
exports.save_inline_topic_edit(row);
e.stopPropagation();
e.preventDefault();
}
@@ -447,7 +447,11 @@ exports.is_editing = function (id) {
return currently_editing_messages.has(id);
};
exports.end = function (row) {
exports.end_inline_topic_edit = function (row) {
current_msg_list.hide_edit_topic_on_recipient_row(row);
};
exports.end_message_row_edit = function (row) {
const message = current_msg_list.get(rows.id(row));
if (message !== undefined &&
currently_editing_messages.has(message.id)) {
@@ -466,9 +470,6 @@ exports.end = function (row) {
currently_editing_messages.delete(message.id);
current_msg_list.hide_edit_message(row);
}
if (row !== undefined) {
current_msg_list.hide_edit_topic_on_recipient_row(row);
}
condense.show_message_expander(row);
row.find(".message_reactions").show();
@@ -477,15 +478,53 @@ exports.end = function (row) {
row.find(".message_edit").blur();
};
exports.save = function (row, from_topic_edited_only) {
exports.save_inline_topic_edit = function (row) {
const msg_list = current_msg_list;
let message_id;
let message_id = rows.id_for_recipient_row(row);
const message = current_msg_list.get(message_id);
if (row.hasClass('recipient_row')) {
message_id = rows.id_for_recipient_row(row);
} else {
message_id = rows.id(row);
const old_topic = message.topic;
const new_topic = row.find(".inline_topic_edit").val();
const topic_changed = new_topic !== old_topic && new_topic.trim() !== "";
if (!topic_changed) {
// this means the inline_topic_edit was opened and submitted without
// changing anything, therefore, we should just close the inline topic edit.
exports.end_inline_topic_edit(row);
return;
}
if (message.locally_echoed) {
if (topic_changed) {
echo.edit_locally(message, {new_topic: new_topic});
row = current_msg_list.get_row(message_id);
}
exports.end_inline_topic_edit(row);
return;
}
const request = {
message_id: message.id,
topic: new_topic,
propagate_mode: "change_later",
};
channel.patch({
url: '/json/messages/' + message.id,
data: request,
success: function () {
const spinner = row.find(".topic_edit_spinner");
loading.destroy_indicator(spinner);
},
error: function (xhr) {
// do nothing
},
});
};
exports.save_message_row_edit = function (row) {
const msg_list = current_msg_list;
let message_id = rows.id(row);
const message = current_msg_list.get(message_id);
let changed = false;
let edit_locally_echoed = false;
@@ -496,24 +535,21 @@ exports.save = function (row, from_topic_edited_only) {
const old_topic = message.topic;
if (message.type === "stream") {
if (from_topic_edited_only) {
new_topic = row.find(".inline_topic_edit").val();
} else {
new_topic = row.find(".message_edit_topic").val();
}
topic_changed = new_topic !== old_topic && new_topic.trim() !== "";
}
// Editing a not-yet-acked message (because the original send attempt failed)
// just results in the in-memory message being changed
if (message.locally_echoed) {
if (new_content !== message.raw_content || topic_changed) {
// `edit_locally` handles the case where `new_topic` is undefined
echo.edit_locally(message, {
raw_content: new_content,
new_topic: new_topic,
});
row = current_msg_list.get_row(message_id);
}
exports.end(row);
exports.end_message_row_edit(row);
return;
}
@@ -525,13 +561,14 @@ exports.save = function (row, from_topic_edited_only) {
changed = true;
}
if (new_content !== message.raw_content && !from_topic_edited_only) {
if (new_content !== message.raw_content) {
request.content = new_content;
changed = true;
}
if (!changed) {
// If they didn't change anything, just cancel it.
exports.end(row);
exports.end_message_row_edit(row);
return;
}
@@ -569,16 +606,13 @@ exports.save = function (row, from_topic_edited_only) {
echo.edit_locally(message, currently_echoing_messages.get(message_id));
row = current_msg_list.get_row(message_id);
message_edit.end(row);
message_edit.end_message_row_edit(row);
}
channel.patch({
url: '/json/messages/' + message.id,
data: request,
success: function () {
const spinner = row.find(".topic_edit_spinner");
loading.destroy_indicator(spinner);
if (edit_locally_echoed) {
delete message.local_edit_timestamp;
currently_echoing_messages.delete(message_id);

View File

@@ -135,7 +135,7 @@ exports.update_messages = function update_messages(events) {
const row = current_msg_list.get_row(event.message_id);
if (row.length > 0) {
message_edit.end(row);
message_edit.end_message_row_edit(row);
}
const new_topic = util.get_edit_event_topic(event);