mirror of https://github.com/zulip/zulip.git
Only reload the page when the user is idle
Also, clean up reload-related function names a bit (imported from commit 4c2e17c06d7567e71b92f6e1b04a44aeff419bff)
This commit is contained in:
parent
ae08f512dd
commit
88e09c6166
|
@ -30,6 +30,7 @@
|
||||||
<script type="text/javascript" src="{{ static_third }}spin/spin.min.js"></script>
|
<script type="text/javascript" src="{{ static_third }}spin/spin.min.js"></script>
|
||||||
<script type="text/javascript" src="{{ static_third }}jquery-mousewheel/jquery.mousewheel.js"></script>
|
<script type="text/javascript" src="{{ static_third }}jquery-mousewheel/jquery.mousewheel.js"></script>
|
||||||
<script type="text/javascript" src="{{ static_third }}jquery-throttle-debounce/jquery.ba-throttle-debounce.min.js"></script>
|
<script type="text/javascript" src="{{ static_third }}jquery-throttle-debounce/jquery.ba-throttle-debounce.min.js"></script>
|
||||||
|
<script type="text/javascript" src="{{ static_third }}jquery.idle/jquery.idle.js"></script>
|
||||||
<script type="text/javascript" src="{{ static_hidden }}js/setup.js"></script>
|
<script type="text/javascript" src="{{ static_hidden }}js/setup.js"></script>
|
||||||
<script type="text/javascript" src="{{ static_hidden }}js/rows.js"></script>
|
<script type="text/javascript" src="{{ static_hidden }}js/rows.js"></script>
|
||||||
<script type="text/javascript" src="{{ static_hidden }}js/narrow.js"></script>
|
<script type="text/javascript" src="{{ static_hidden }}js/narrow.js"></script>
|
||||||
|
|
|
@ -42,7 +42,7 @@ var globals =
|
||||||
+ ' select_message select_message_by_id'
|
+ ' select_message select_message_by_id'
|
||||||
+ ' scroll_to_selected select_and_show_by_id'
|
+ ' scroll_to_selected select_and_show_by_id'
|
||||||
+ ' selected_message selected_message_id'
|
+ ' selected_message selected_message_id'
|
||||||
+ ' reload_app reloading_app reload_app_preserving_compose'
|
+ ' start_reload_app reloading_app do_reload_app_preserving_compose'
|
||||||
+ ' at_top_of_viewport at_bottom_of_viewport'
|
+ ' at_top_of_viewport at_bottom_of_viewport'
|
||||||
+ ' viewport'
|
+ ' viewport'
|
||||||
;
|
;
|
||||||
|
|
|
@ -30,15 +30,12 @@ $(function () {
|
||||||
send_status.hide();
|
send_status.hide();
|
||||||
compose.hide();
|
compose.hide();
|
||||||
buttons.removeAttr('disabled');
|
buttons.removeAttr('disabled');
|
||||||
if (get_updates_params.reload_pending) {
|
start_reload_app();
|
||||||
reload_app();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
error: function (xhr, error_type) {
|
error: function (xhr, error_type) {
|
||||||
if (error_type !== 'timeout' && get_updates_params.reload_pending) {
|
if (error_type !== 'timeout' && get_updates_params.reload_pending) {
|
||||||
// The error might be due to the server changing
|
// The error might be due to the server changing
|
||||||
reload_app_preserving_compose(true);
|
do_reload_app_preserving_compose(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var response = "Error sending message";
|
var response = "Error sending message";
|
||||||
|
@ -521,19 +518,54 @@ function do_reload_app() {
|
||||||
window.location.reload(true);
|
window.location.reload(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
function reload_app() {
|
function start_reload_app() {
|
||||||
// If we can, reload the page immediately
|
if (get_updates_params.reload_pending) {
|
||||||
if (! compose.composing()) {
|
return;
|
||||||
do_reload_app();
|
}
|
||||||
|
get_updates_params.reload_pending = 1;
|
||||||
|
|
||||||
|
// Always reload after 5 minutes
|
||||||
|
setTimeout(function () { do_reload_app_preserving_compose(false); },
|
||||||
|
1000 * 60 * 5);
|
||||||
|
|
||||||
|
// If the user is composing a message, reload if they become
|
||||||
|
// idle while composing. If they finish composing, the
|
||||||
|
// submit code will reload the app. If they cancel the
|
||||||
|
// compose, wait until they're idle again
|
||||||
|
|
||||||
|
// If the user is not composing, reload if the user becomes idle.
|
||||||
|
// If they start composing, postpone reloading
|
||||||
|
|
||||||
|
var idle_control;
|
||||||
|
var composing_timeout = 1000*30;
|
||||||
|
var home_timeout = 1000*10;
|
||||||
|
var compose_canceled_handler, compose_started_handler;
|
||||||
|
|
||||||
|
compose_canceled_handler = function () {
|
||||||
|
idle_control.cancel();
|
||||||
|
idle_control = $(document).idle({'idle': home_timeout,
|
||||||
|
'onIdle': do_reload_app});
|
||||||
|
$(document).one('compose_started.zephyr', compose_started_handler);
|
||||||
|
};
|
||||||
|
compose_started_handler = function () {
|
||||||
|
idle_control.cancel();
|
||||||
|
idle_control = $(document).idle({'idle': composing_timeout,
|
||||||
|
'onIdle': do_reload_app_preserving_compose});
|
||||||
|
$(document).one('compose_canceled.zephyr', compose_canceled_handler);
|
||||||
|
};
|
||||||
|
|
||||||
|
if (compose.composing()) {
|
||||||
|
idle_control = $(document).idle({'idle': composing_timeout,
|
||||||
|
'onIdle': do_reload_app_preserving_compose});
|
||||||
|
$(document).one('compose_canceled.zephyr', compose_canceled_handler);
|
||||||
|
} else {
|
||||||
|
idle_control = $(document).idle({'idle': home_timeout,
|
||||||
|
'onIdle': do_reload_app});
|
||||||
|
$(document).one('compose_started.zephyr', compose_started_handler);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the user is composing a message, wait until he's done or
|
function do_reload_app_preserving_compose(send_after_reload) {
|
||||||
// until a timeout expires
|
|
||||||
setTimeout(function () { reload_app_preserving_compose(false); },
|
|
||||||
1000 * 60 * 5); // 5 minutes
|
|
||||||
}
|
|
||||||
|
|
||||||
function reload_app_preserving_compose(send_after_reload) {
|
|
||||||
var url = "#reload:send_after_reload=" + Number(send_after_reload);
|
var url = "#reload:send_after_reload=" + Number(send_after_reload);
|
||||||
if (compose.composing() === 'stream') {
|
if (compose.composing() === 'stream') {
|
||||||
url += "+msg_type=stream";
|
url += "+msg_type=stream";
|
||||||
|
@ -596,8 +628,7 @@ function get_updates() {
|
||||||
if (get_updates_params.server_generation === -1) {
|
if (get_updates_params.server_generation === -1) {
|
||||||
get_updates_params.server_generation = data.server_generation;
|
get_updates_params.server_generation = data.server_generation;
|
||||||
} else if (data.server_generation !== get_updates_params.server_generation) {
|
} else if (data.server_generation !== get_updates_params.server_generation) {
|
||||||
get_updates_params.reload_pending = 1;
|
start_reload_app();
|
||||||
reload_app();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
add_messages(data);
|
add_messages(data);
|
||||||
|
|
Loading…
Reference in New Issue