mirror of
https://github.com/zulip/zulip.git
synced 2025-11-14 19:06:09 +00:00
Re-focus on the compose box after a send, auto-move cursor
Re-focuses on the compose box after a send, under these conditions: 1) narrowed to stream+subject -or- responding to PM/huddle 2) compose was initiated by clicking on a message or hitting "r"/"enter" 3) cursor has not moved since you've started the composition Additionally, if you are thus narrowed, we will move your cursor when you've sent a message to that message, assuming that such a message initially appears visible. (imported from commit 373c858081694e6fc9994639340a847d66edb566)
This commit is contained in:
@@ -357,9 +357,12 @@ function send_message() {
|
||||
$("#compose-send-button").removeAttr('disabled');
|
||||
$("#sending-indicator").hide();
|
||||
send_status.hide();
|
||||
if (respond_to_cursor) {
|
||||
if (respond_to_cursor && narrow.narrowed_by_reply()) {
|
||||
respond_to_message({trigger: 'autorespond'});
|
||||
}
|
||||
else {
|
||||
respond_to_cursor = false;
|
||||
}
|
||||
},
|
||||
error: function (xhr, error_type) {
|
||||
if (error_type !== 'timeout' && reload.is_pending()) {
|
||||
|
||||
@@ -628,6 +628,20 @@ exports.narrowed_to_pms = function () {
|
||||
return false;
|
||||
};
|
||||
|
||||
// We auto-reply under certain conditions, namely when you're narrowed
|
||||
// to a PM (or huddle), and when you're narrowed to some stream/subject pair
|
||||
exports.narrowed_by_reply = function () {
|
||||
if (narrow.filter() === undefined) {
|
||||
return false;
|
||||
}
|
||||
var operators = narrow.filter().operators();
|
||||
return ((operators.length === 1 &&
|
||||
operators[0][0] === "pm-with") ||
|
||||
(operators.length === 2 &&
|
||||
operators[0][0] === "stream" &&
|
||||
operators[1][0] === "subject"));
|
||||
};
|
||||
|
||||
return exports;
|
||||
|
||||
}());
|
||||
|
||||
@@ -188,6 +188,7 @@ function respond_to_message(opts) {
|
||||
'private_message_recipient': pm_recipient,
|
||||
'replying_to_message': message,
|
||||
'trigger': opts.trigger});
|
||||
|
||||
}
|
||||
|
||||
// Returns messages from the given message list in the specified range, inclusive
|
||||
@@ -310,7 +311,7 @@ function process_read_messages(messages) {
|
||||
|
||||
// If we ever materially change the algorithm for this function, we
|
||||
// may need to update notifications.received_messages as well.
|
||||
function process_visible_unread_messages() {
|
||||
function process_visible_unread_messages(update_cursor) {
|
||||
// For any messages visible on the screen, make sure they have been marked
|
||||
// as unread.
|
||||
if (! notifications.window_has_focus()) {
|
||||
@@ -336,6 +337,22 @@ function process_visible_unread_messages() {
|
||||
return (row_height > height && row_offset.top > top) || within_viewport(row_offset, row_height);
|
||||
});
|
||||
|
||||
if (update_cursor) {
|
||||
//save the state of respond_to_cursor, and reapply it every time we move the cursor
|
||||
var probably_from_sent_message = respond_to_cursor;
|
||||
$.map(visible_messages, function(msg) {
|
||||
if ((current_msg_list.get(rows.id($(msg))).sender_email === page_params.email) &&
|
||||
(current_msg_list.selected_message().id < rows.id($(msg)))) {
|
||||
// every time we move the cursor, we set respond_to_cursor to false. This should only
|
||||
// happen if the user initiated the cursor move, not us, so we reset it when processing
|
||||
// these messages
|
||||
current_msg_list.select_id(rows.id($(msg)), {then_scroll: true,
|
||||
from_scroll: true});
|
||||
respond_to_cursor = probably_from_sent_message;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var mark_as_read = $.map(visible_messages, function(msg) {
|
||||
var message = current_msg_list.get(rows.id($(msg)));
|
||||
if (! unread.message_unread(message)) {
|
||||
@@ -396,6 +413,7 @@ $(function () {
|
||||
keepTracking: true});
|
||||
|
||||
$(document).on('message_selected.zephyr', function (event) {
|
||||
|
||||
// Narrowing is a temporary view on top of the home view and
|
||||
// doesn't affect your pointer in the home view.
|
||||
if (event.msg_list === home_msg_list
|
||||
@@ -853,7 +871,16 @@ function get_updates(options) {
|
||||
// notifications.received_messages uses values set by
|
||||
// process_visible_unread_messages and thus must
|
||||
// be called after it
|
||||
process_visible_unread_messages();
|
||||
var i;
|
||||
var update_cursor = false;
|
||||
// check if we need to update the cursor, and do so if needed.
|
||||
for (i = 0; i < messages.length; i++) {
|
||||
if (messages[i].sender_email === page_params.email && narrow.narrowed_by_reply()) {
|
||||
update_cursor = true;
|
||||
}
|
||||
}
|
||||
|
||||
process_visible_unread_messages(update_cursor);
|
||||
notifications.received_messages(messages);
|
||||
compose.update_faded_messages();
|
||||
stream_list.update_streams_sidebar();
|
||||
|
||||
Reference in New Issue
Block a user