mirror of https://github.com/zulip/zulip.git
reload: Move initialize to new reload_setup module.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
parent
c4d338a6ab
commit
9c70f92514
|
@ -109,7 +109,7 @@ Here are some key functions in the reload system:
|
||||||
- `reload.preserve_state` is called when a server-initiated browser
|
- `reload.preserve_state` is called when a server-initiated browser
|
||||||
reload happens, and encodes a bunch of data like the current scroll
|
reload happens, and encodes a bunch of data like the current scroll
|
||||||
position into the hash.
|
position into the hash.
|
||||||
- `reload.initialize` handles restoring the preserved state after a
|
- `reload_setup.initialize` handles restoring the preserved state after a
|
||||||
reload where the hash starts with `/#reload`.
|
reload where the hash starts with `/#reload`.
|
||||||
|
|
||||||
## All reloads
|
## All reloads
|
||||||
|
|
|
@ -165,6 +165,7 @@ EXEMPT_FILES = make_set(
|
||||||
"web/src/recent_view_ui.js",
|
"web/src/recent_view_ui.js",
|
||||||
"web/src/recent_view_util.js",
|
"web/src/recent_view_util.js",
|
||||||
"web/src/reload.js",
|
"web/src/reload.js",
|
||||||
|
"web/src/reload_setup.js",
|
||||||
"web/src/reminder.js",
|
"web/src/reminder.js",
|
||||||
"web/src/resize.js",
|
"web/src/resize.js",
|
||||||
"web/src/resize_handler.js",
|
"web/src/resize_handler.js",
|
||||||
|
|
|
@ -1,18 +1,13 @@
|
||||||
import $ from "jquery";
|
import $ from "jquery";
|
||||||
|
|
||||||
import * as activity from "./activity";
|
|
||||||
import * as blueslip from "./blueslip";
|
import * as blueslip from "./blueslip";
|
||||||
import * as compose from "./compose";
|
|
||||||
import * as compose_actions from "./compose_actions";
|
|
||||||
import * as compose_state from "./compose_state";
|
import * as compose_state from "./compose_state";
|
||||||
import {csrf_token} from "./csrf";
|
import {csrf_token} from "./csrf";
|
||||||
import * as drafts from "./drafts";
|
import * as drafts from "./drafts";
|
||||||
import * as hash_util from "./hash_util";
|
import * as hash_util from "./hash_util";
|
||||||
import * as hashchange from "./hashchange";
|
|
||||||
import {localstorage} from "./localstorage";
|
import {localstorage} from "./localstorage";
|
||||||
import * as message_lists from "./message_lists";
|
import * as message_lists from "./message_lists";
|
||||||
import * as narrow_state from "./narrow_state";
|
import * as narrow_state from "./narrow_state";
|
||||||
import {page_params} from "./page_params";
|
|
||||||
import * as reload_state from "./reload_state";
|
import * as reload_state from "./reload_state";
|
||||||
import * as ui_report from "./ui_report";
|
import * as ui_report from "./ui_report";
|
||||||
import * as util from "./util";
|
import * as util from "./util";
|
||||||
|
@ -146,89 +141,6 @@ function delete_stale_tokens(ls) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if we're doing a compose-preserving reload. This must be
|
|
||||||
// done before the first call to get_events
|
|
||||||
export function initialize() {
|
|
||||||
// location.hash should be e.g. `#reload:12345123412312`
|
|
||||||
if (!location.hash.startsWith("#reload:")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const hash_fragment = location.hash.slice("#".length);
|
|
||||||
|
|
||||||
// Using the token, recover the saved pre-reload data from local
|
|
||||||
// storage. Afterwards, we clear the reload entry from local
|
|
||||||
// storage to avoid a local storage space leak.
|
|
||||||
const ls = localstorage();
|
|
||||||
let fragment = ls.get(hash_fragment);
|
|
||||||
if (fragment === undefined) {
|
|
||||||
// Since this can happen sometimes with hand-reloading, it's
|
|
||||||
// not really worth throwing an exception if these don't
|
|
||||||
// exist, but be log it so that it's available for future
|
|
||||||
// debugging if an exception happens later.
|
|
||||||
blueslip.info("Invalid hash change reload token");
|
|
||||||
hashchange.changehash("");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ls.remove(hash_fragment);
|
|
||||||
|
|
||||||
// TODO/compatibility: `fragment` was changed from a string
|
|
||||||
// to a map containing the string and a timestamp. For now we'll
|
|
||||||
// delete all tokens that only contain the url. Remove the
|
|
||||||
// `|| fragment` once you can no longer directly upgrade
|
|
||||||
// from Zulip 5.x to the current version.
|
|
||||||
[, fragment] = /^#reload:(.*)/.exec(fragment.url || fragment);
|
|
||||||
const keyvals = fragment.split("+");
|
|
||||||
const vars = {};
|
|
||||||
|
|
||||||
for (const str of keyvals) {
|
|
||||||
const pair = str.split("=");
|
|
||||||
vars[pair[0]] = decodeURIComponent(pair[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vars.msg !== undefined) {
|
|
||||||
const send_now = Number.parseInt(vars.send_after_reload, 10);
|
|
||||||
|
|
||||||
try {
|
|
||||||
compose_actions.start(vars.msg_type, {
|
|
||||||
stream: vars.stream || "",
|
|
||||||
topic: vars.topic || "",
|
|
||||||
private_message_recipient: vars.recipient || "",
|
|
||||||
content: vars.msg || "",
|
|
||||||
draft_id: vars.draft_id || "",
|
|
||||||
});
|
|
||||||
if (send_now) {
|
|
||||||
compose.finish();
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
// We log an error if we can't open the compose box, but otherwise
|
|
||||||
// we continue, since this is not critical.
|
|
||||||
blueslip.warn(error.toString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const pointer = Number.parseInt(vars.pointer, 10);
|
|
||||||
|
|
||||||
if (pointer) {
|
|
||||||
page_params.initial_pointer = pointer;
|
|
||||||
}
|
|
||||||
const offset = Number.parseInt(vars.offset, 10);
|
|
||||||
if (offset) {
|
|
||||||
page_params.initial_offset = offset;
|
|
||||||
}
|
|
||||||
|
|
||||||
const narrow_pointer = Number.parseInt(vars.narrow_pointer, 10);
|
|
||||||
if (narrow_pointer) {
|
|
||||||
page_params.initial_narrow_pointer = narrow_pointer;
|
|
||||||
}
|
|
||||||
const narrow_offset = Number.parseInt(vars.narrow_offset, 10);
|
|
||||||
if (narrow_offset) {
|
|
||||||
page_params.initial_narrow_offset = narrow_offset;
|
|
||||||
}
|
|
||||||
|
|
||||||
activity.set_new_user_input(false);
|
|
||||||
hashchange.changehash(vars.oldhash);
|
|
||||||
}
|
|
||||||
|
|
||||||
function do_reload_app(send_after_reload, save_pointer, save_narrow, save_compose, message_html) {
|
function do_reload_app(send_after_reload, save_pointer, save_narrow, save_compose, message_html) {
|
||||||
if (reload_state.is_in_progress()) {
|
if (reload_state.is_in_progress()) {
|
||||||
blueslip.log("do_reload_app: Doing nothing since reload_in_progress");
|
blueslip.log("do_reload_app: Doing nothing since reload_in_progress");
|
||||||
|
|
|
@ -0,0 +1,91 @@
|
||||||
|
import * as activity from "./activity";
|
||||||
|
import * as blueslip from "./blueslip";
|
||||||
|
import * as compose from "./compose";
|
||||||
|
import * as compose_actions from "./compose_actions";
|
||||||
|
import * as hashchange from "./hashchange";
|
||||||
|
import {localstorage} from "./localstorage";
|
||||||
|
import {page_params} from "./page_params";
|
||||||
|
|
||||||
|
// Check if we're doing a compose-preserving reload. This must be
|
||||||
|
// done before the first call to get_events
|
||||||
|
|
||||||
|
export function initialize() {
|
||||||
|
// location.hash should be e.g. `#reload:12345123412312`
|
||||||
|
if (!location.hash.startsWith("#reload:")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const hash_fragment = location.hash.slice("#".length);
|
||||||
|
|
||||||
|
// Using the token, recover the saved pre-reload data from local
|
||||||
|
// storage. Afterwards, we clear the reload entry from local
|
||||||
|
// storage to avoid a local storage space leak.
|
||||||
|
const ls = localstorage();
|
||||||
|
let fragment = ls.get(hash_fragment);
|
||||||
|
if (fragment === undefined) {
|
||||||
|
// Since this can happen sometimes with hand-reloading, it's
|
||||||
|
// not really worth throwing an exception if these don't
|
||||||
|
// exist, but be log it so that it's available for future
|
||||||
|
// debugging if an exception happens later.
|
||||||
|
blueslip.info("Invalid hash change reload token");
|
||||||
|
hashchange.changehash("");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ls.remove(hash_fragment);
|
||||||
|
|
||||||
|
// TODO/compatibility: `fragment` was changed from a string
|
||||||
|
// to a map containing the string and a timestamp. For now we'll
|
||||||
|
// delete all tokens that only contain the url. Remove the
|
||||||
|
// `|| fragment` once you can no longer directly upgrade
|
||||||
|
// from Zulip 5.x to the current version.
|
||||||
|
[, fragment] = /^#reload:(.*)/.exec(fragment.url || fragment);
|
||||||
|
const keyvals = fragment.split("+");
|
||||||
|
const vars = {};
|
||||||
|
|
||||||
|
for (const str of keyvals) {
|
||||||
|
const pair = str.split("=");
|
||||||
|
vars[pair[0]] = decodeURIComponent(pair[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vars.msg !== undefined) {
|
||||||
|
const send_now = Number.parseInt(vars.send_after_reload, 10);
|
||||||
|
|
||||||
|
try {
|
||||||
|
compose_actions.start(vars.msg_type, {
|
||||||
|
stream: vars.stream || "",
|
||||||
|
topic: vars.topic || "",
|
||||||
|
private_message_recipient: vars.recipient || "",
|
||||||
|
content: vars.msg || "",
|
||||||
|
draft_id: vars.draft_id || "",
|
||||||
|
});
|
||||||
|
if (send_now) {
|
||||||
|
compose.finish();
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
// We log an error if we can't open the compose box, but otherwise
|
||||||
|
// we continue, since this is not critical.
|
||||||
|
blueslip.warn(error.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const pointer = Number.parseInt(vars.pointer, 10);
|
||||||
|
|
||||||
|
if (pointer) {
|
||||||
|
page_params.initial_pointer = pointer;
|
||||||
|
}
|
||||||
|
const offset = Number.parseInt(vars.offset, 10);
|
||||||
|
if (offset) {
|
||||||
|
page_params.initial_offset = offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
const narrow_pointer = Number.parseInt(vars.narrow_pointer, 10);
|
||||||
|
if (narrow_pointer) {
|
||||||
|
page_params.initial_narrow_pointer = narrow_pointer;
|
||||||
|
}
|
||||||
|
const narrow_offset = Number.parseInt(vars.narrow_offset, 10);
|
||||||
|
if (narrow_offset) {
|
||||||
|
page_params.initial_narrow_offset = narrow_offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
activity.set_new_user_input(false);
|
||||||
|
hashchange.changehash(vars.oldhash);
|
||||||
|
}
|
|
@ -85,7 +85,7 @@ import * as realm_logo from "./realm_logo";
|
||||||
import * as realm_playground from "./realm_playground";
|
import * as realm_playground from "./realm_playground";
|
||||||
import * as realm_user_settings_defaults from "./realm_user_settings_defaults";
|
import * as realm_user_settings_defaults from "./realm_user_settings_defaults";
|
||||||
import * as recent_view_ui from "./recent_view_ui";
|
import * as recent_view_ui from "./recent_view_ui";
|
||||||
import * as reload from "./reload";
|
import * as reload_setup from "./reload_setup";
|
||||||
import * as rendered_markdown from "./rendered_markdown";
|
import * as rendered_markdown from "./rendered_markdown";
|
||||||
import * as resize_handler from "./resize_handler";
|
import * as resize_handler from "./resize_handler";
|
||||||
import * as scheduled_messages from "./scheduled_messages";
|
import * as scheduled_messages from "./scheduled_messages";
|
||||||
|
@ -638,7 +638,7 @@ export function initialize_everything() {
|
||||||
on_pill_create_or_remove: compose_recipient.update_placeholder_text,
|
on_pill_create_or_remove: compose_recipient.update_placeholder_text,
|
||||||
});
|
});
|
||||||
compose_closed_ui.initialize();
|
compose_closed_ui.initialize();
|
||||||
reload.initialize();
|
reload_setup.initialize();
|
||||||
unread.initialize(unread_params);
|
unread.initialize(unread_params);
|
||||||
bot_data.initialize(bot_params); // Must happen after people.initialize()
|
bot_data.initialize(bot_params); // Must happen after people.initialize()
|
||||||
message_fetch.initialize(server_events.home_view_loaded);
|
message_fetch.initialize(server_events.home_view_loaded);
|
||||||
|
|
Loading…
Reference in New Issue