Display a message and disable compose while reloading.

(imported from commit f998d2e4053e7e2d676f7fe08ee274118dd9faba)
This commit is contained in:
Tim Abbott 2012-10-17 14:43:20 -04:00
parent fdfe81bfb9
commit 5c50375e02
6 changed files with 31 additions and 9 deletions

View File

@ -116,9 +116,11 @@ var people_list = [
<button type="button" class="btn btn-large btn-block" id="new_message_button" onclick="compose_button('stream');">New Message</button>
</div>
<div class="alert alert_sidebar alert-error" id="connection-error">
<div class="alert alert_sidebar alert-error home-error-bar" id="connection-error">
<strong>Can't receive messages</strong> &mdash; try reloading the page.
</div>
<div class="alert alert_sidebar alert-error home-error-bar" id="reloading-application">
</div>
<div class="alert alert_sidebar" id="home-error"></div>
<div class="alert alert_sidebar" id="stream-dne">
<p>The stream <span class="streamname" id="stream-dne-name"></span> does not exist.</p>

View File

@ -36,7 +36,7 @@ var globals =
// ui.js
+ ' register_onclick hide_email show_email'
+ ' report_error report_success clicking mouse_moved'
+ ' report_error report_success report_message clicking mouse_moved'
+ ' update_autocomplete autocomplete_needs_update'
// zephyr.js
@ -47,7 +47,7 @@ var globals =
+ ' select_message select_message_by_id'
+ ' scroll_to_selected select_and_show_by_id'
+ ' selected_message selected_message_id'
+ ' reload_app reload_app_preserving_compose'
+ ' reload_app reloading_app reload_app_preserving_compose'
+ ' at_top_of_viewport at_bottom_of_viewport'
+ ' viewport'
;

View File

@ -1,6 +1,9 @@
var status_classes = 'alert-error alert-success alert-info';
function show_compose(tabname, focus_area) {
if (reloading_app) {
return;
}
$("#send-status").removeClass(status_classes).hide();
$('#compose').css({visibility: "visible"});
$('.message_comp').slideDown(100);

View File

@ -57,6 +57,12 @@ function report_success(response, status_box) {
status_box.show();
}
function report_message(response, status_box) {
status_box.removeClass(status_classes).addClass('alert')
.text(response).stop(true).fadeTo(0, 1);
status_box.show();
}
var clicking = false;
var mouse_moved = false;

View File

@ -6,6 +6,7 @@ var people_hash = {};
var selected_message_class = 'selected_message';
var viewport = $(window);
var app_needs_reload = false;
var reloading_app = false;
$(function () {
var i;
@ -511,15 +512,21 @@ function add_messages(data) {
update_autocomplete();
}
function do_reload_app() {
// TODO: We need a better API for showing messages.
report_message("The application has been updated; reloading!", $("#reloading-application"));
reloading_app = true;
window.location.reload(true);
}
function reload_app() {
// If we can, reload the page immediately
if (! composing_message()) {
window.location.reload(true);
do_reload_app();
}
// If the user is composing a message, wait until he's done or
// until a timeout expires
app_needs_reload = true;
setTimeout(function () { reload_app_preserving_compose(false); },
1000 * 60 * 5); // 5 minutes
}
@ -537,7 +544,7 @@ function reload_app_preserving_compose(send_after_reload) {
url += "+msg="+ encodeURIComponent(compose_message());
window.location.replace(url);
window.location.reload(true);
do_reload_app();
}
// Check if we're doing a compose-preserving reload. This must be
@ -593,7 +600,11 @@ function get_updates() {
received.failures = 0;
$('#connection-error').hide();
if (data.server_generation > server_generation) {
if (data.server_generation > server_generation && !app_needs_reload) {
// We need to set server_generation here to avoid
// pounding the server with get_updates requests.
server_generation = data.server_generation;
app_needs_reload = true;
reload_app();
}

View File

@ -281,7 +281,7 @@ img.profile_picture {
display: none;
}
#connection-error {
.home-error-bar {
margin-top: 5px;
display: none;
}
@ -298,7 +298,7 @@ img.profile_picture {
font-weight: bold;
}
#connection-error .alert {
.home-error-bar .alert {
margin-bottom: auto;
}