mirror of
https://github.com/zulip/zulip.git
synced 2025-11-06 06:53:25 +00:00
Refactor reload.js to allow saving only some state when reloading.
The reload state is now divided into 3 different components: pointer, narrow, compose
This commit is contained in:
committed by
Tim Abbott
parent
9a3331acaf
commit
24b63f30ba
@@ -13,13 +13,14 @@ exports.is_in_progress = function () {
|
|||||||
return reload_in_progress;
|
return reload_in_progress;
|
||||||
};
|
};
|
||||||
|
|
||||||
function preserve_state(send_after_reload) {
|
function preserve_state(send_after_reload, save_pointer, save_narrow, save_compose) {
|
||||||
if (send_after_reload === undefined) {
|
if (send_after_reload === undefined) {
|
||||||
send_after_reload = 0;
|
send_after_reload = 0;
|
||||||
}
|
}
|
||||||
var url = "#reload:send_after_reload=" + Number(send_after_reload);
|
var url = "#reload:send_after_reload=" + Number(send_after_reload);
|
||||||
url += "+csrf_token=" + encodeURIComponent(csrf_token);
|
url += "+csrf_token=" + encodeURIComponent(csrf_token);
|
||||||
|
|
||||||
|
if (save_compose) {
|
||||||
if (compose.composing() === 'stream') {
|
if (compose.composing() === 'stream') {
|
||||||
url += "+msg_type=stream";
|
url += "+msg_type=stream";
|
||||||
url += "+stream=" + encodeURIComponent(compose.stream_name());
|
url += "+stream=" + encodeURIComponent(compose.stream_name());
|
||||||
@@ -32,11 +33,16 @@ function preserve_state(send_after_reload) {
|
|||||||
if (compose.composing()) {
|
if (compose.composing()) {
|
||||||
url += "+msg=" + encodeURIComponent(compose.message_content());
|
url += "+msg=" + encodeURIComponent(compose.message_content());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (save_pointer) {
|
||||||
var pointer = home_msg_list.selected_id();
|
var pointer = home_msg_list.selected_id();
|
||||||
if (pointer !== -1) {
|
if (pointer !== -1) {
|
||||||
url += "+pointer=" + pointer;
|
url += "+pointer=" + pointer;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (save_narrow) {
|
||||||
var row = home_msg_list.selected_row();
|
var row = home_msg_list.selected_row();
|
||||||
if (!narrow.active()) {
|
if (!narrow.active()) {
|
||||||
if (row.length > 0) {
|
if (row.length > 0) {
|
||||||
@@ -54,6 +60,7 @@ function preserve_state(send_after_reload) {
|
|||||||
url += "+narrow_offset=" + narrow_row.offset().top;
|
url += "+narrow_offset=" + narrow_row.offset().top;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var oldhash = window.location.hash;
|
var oldhash = window.location.hash;
|
||||||
if (oldhash.length !== 0 && oldhash[0] === '#') {
|
if (oldhash.length !== 0 && oldhash[0] === '#') {
|
||||||
@@ -159,12 +166,12 @@ function cleanup_before_reload() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function do_reload_app(send_after_reload, save_state, message) {
|
function do_reload_app(send_after_reload, save_pointer, save_narrow, save_compose, message) {
|
||||||
if (reload_in_progress) { return; }
|
if (reload_in_progress) { return; }
|
||||||
|
|
||||||
// TODO: we should completely disable the UI here
|
// TODO: we should completely disable the UI here
|
||||||
if (save_state) {
|
if (save_pointer || save_narrow || save_compose) {
|
||||||
preserve_state(send_after_reload);
|
preserve_state(send_after_reload, save_pointer, save_narrow, save_compose);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message === undefined) {
|
if (message === undefined) {
|
||||||
@@ -186,12 +193,18 @@ function do_reload_app(send_after_reload, save_state, message) {
|
|||||||
exports.initiate = function (options) {
|
exports.initiate = function (options) {
|
||||||
options = _.defaults({}, options, {
|
options = _.defaults({}, options, {
|
||||||
immediate: false,
|
immediate: false,
|
||||||
save_state: true,
|
save_pointer: true,
|
||||||
|
save_narrow: true,
|
||||||
|
save_compose: true,
|
||||||
send_after_reload: false
|
send_after_reload: false
|
||||||
});
|
});
|
||||||
|
|
||||||
if (options.immediate) {
|
if (options.immediate) {
|
||||||
do_reload_app(options.send_after_reload, options.save_state, options.message);
|
do_reload_app(options.send_after_reload,
|
||||||
|
options.save_pointer,
|
||||||
|
options.save_narrow,
|
||||||
|
options.save_compose,
|
||||||
|
options.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reload_pending) {
|
if (reload_pending) {
|
||||||
@@ -209,7 +222,11 @@ exports.initiate = function (options) {
|
|||||||
var compose_done_handler, compose_started_handler;
|
var compose_done_handler, compose_started_handler;
|
||||||
|
|
||||||
function reload_from_idle () {
|
function reload_from_idle () {
|
||||||
do_reload_app(false, options.save_state, options.message);
|
do_reload_app(false,
|
||||||
|
options.save_pointer,
|
||||||
|
options.save_narrow,
|
||||||
|
options.save_compose,
|
||||||
|
options.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure we always do a reload eventually
|
// Make sure we always do a reload eventually
|
||||||
|
|||||||
@@ -287,7 +287,10 @@ function get_events(options) {
|
|||||||
($.parseJSON(xhr.responseText).msg.indexOf("too old") !== -1 ||
|
($.parseJSON(xhr.responseText).msg.indexOf("too old") !== -1 ||
|
||||||
$.parseJSON(xhr.responseText).msg.indexOf("Bad event queue id") !== -1)) {
|
$.parseJSON(xhr.responseText).msg.indexOf("Bad event queue id") !== -1)) {
|
||||||
page_params.event_queue_expired = true;
|
page_params.event_queue_expired = true;
|
||||||
reload.initiate({immediate: true, save_state: false});
|
reload.initiate({immediate: true,
|
||||||
|
save_pointer: false,
|
||||||
|
save_narrow: false,
|
||||||
|
save_compose: false});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (error_type === 'abort') {
|
if (error_type === 'abort') {
|
||||||
|
|||||||
@@ -273,7 +273,10 @@ function fast_forward_pointer() {
|
|||||||
furthest_read = data.max_message_id;
|
furthest_read = data.max_message_id;
|
||||||
unconditionally_send_pointer_update().then(function () {
|
unconditionally_send_pointer_update().then(function () {
|
||||||
ui.change_tab_to('#home');
|
ui.change_tab_to('#home');
|
||||||
reload.initiate({immediate: true, save_state: false});
|
reload.initiate({immediate: true,
|
||||||
|
save_pointer: false,
|
||||||
|
save_narrow: false,
|
||||||
|
save_compose: false});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user