mirror of https://github.com/zulip/zulip.git
Consolidate the multiple zephyr.js onload functions into a single
function. It's easier to keep track of everything in one place. (imported from commit 2ff55fd8ee7c3ff465644ad4b921bf6efa97d02c)
This commit is contained in:
parent
8bff4779e6
commit
7347bc7213
|
@ -83,23 +83,6 @@ function update_person(person) {
|
||||||
// TODO: update sender names on messages
|
// TODO: update sender names on messages
|
||||||
}
|
}
|
||||||
|
|
||||||
$(function () {
|
|
||||||
_.each(page_params.people_list, function (person) {
|
|
||||||
people_dict[person.email] = person;
|
|
||||||
person.pm_recipient_count = 0;
|
|
||||||
});
|
|
||||||
|
|
||||||
// The special account feedback@zulip.com is used for in-app
|
|
||||||
// feedback and should always show up as an autocomplete option.
|
|
||||||
if (people_dict['feedback@zulip.com'] === undefined){
|
|
||||||
add_person({"email": "feedback@zulip.com",
|
|
||||||
"full_name": "Zulip Feedback Bot"});
|
|
||||||
}
|
|
||||||
|
|
||||||
activity.set_user_statuses(page_params.initial_presences,
|
|
||||||
page_params.initial_servertime);
|
|
||||||
});
|
|
||||||
|
|
||||||
function within_viewport(row_offset, row_height) {
|
function within_viewport(row_offset, row_height) {
|
||||||
// Returns true if a message is fully within the effectively visible
|
// Returns true if a message is fully within the effectively visible
|
||||||
// part of the viewport.
|
// part of the viewport.
|
||||||
|
@ -505,47 +488,6 @@ function unconditionally_send_pointer_update() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$(function () {
|
|
||||||
furthest_read = page_params.initial_pointer;
|
|
||||||
server_furthest_read = page_params.initial_pointer;
|
|
||||||
|
|
||||||
// We only send pointer updates when the user has been idle for a
|
|
||||||
// short while to avoid hammering the server
|
|
||||||
$(document).idle({idle: 1000,
|
|
||||||
onIdle: send_pointer_update,
|
|
||||||
keepTracking: true});
|
|
||||||
|
|
||||||
$(document).on('message_selected.zulip', 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
|
|
||||||
&& event.id > furthest_read)
|
|
||||||
{
|
|
||||||
furthest_read = event.id;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we move the pointer, we don't want to respond to what's at the pointer
|
|
||||||
if (event.previously_selected !== event.id) {
|
|
||||||
respond_to_cursor = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (event.mark_read && event.previously_selected !== -1) {
|
|
||||||
// Mark messages between old pointer and new pointer as read
|
|
||||||
var messages;
|
|
||||||
if (event.id < event.previously_selected) {
|
|
||||||
messages = message_range(event.msg_list, event.id, event.previously_selected);
|
|
||||||
} else {
|
|
||||||
messages = message_range(event.msg_list, event.previously_selected, event.id);
|
|
||||||
}
|
|
||||||
mark_messages_as_read(messages, {from: 'pointer'});
|
|
||||||
_.each(messages, function (message) {
|
|
||||||
message_tour.visit(message.id);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
function case_insensitive_find(term, array) {
|
function case_insensitive_find(term, array) {
|
||||||
var lowered_term = term.toLowerCase();
|
var lowered_term = term.toLowerCase();
|
||||||
return _.filter(array, function (elt) {
|
return _.filter(array, function (elt) {
|
||||||
|
@ -1166,79 +1108,6 @@ function load_old_messages(opts) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// get the initial message list
|
|
||||||
$(function () {
|
|
||||||
function load_more(messages) {
|
|
||||||
|
|
||||||
// Before trying to load anything: is this user way behind?
|
|
||||||
var last_read_message = home_msg_list.get(home_msg_list.closest_id(page_params.initial_pointer));
|
|
||||||
if (last_read_message !== undefined) {
|
|
||||||
var now = new XDate().getTime() / 1000;
|
|
||||||
var num_unread = unread.get_counts().home_unread_messages;
|
|
||||||
|
|
||||||
if ((num_unread > 500) &&
|
|
||||||
(now - last_read_message.timestamp > 60 * 60 * 24 * 2)) { // 2 days.
|
|
||||||
var unread_info = templates.render('bankruptcy_modal',
|
|
||||||
{"unread_count": num_unread});
|
|
||||||
$('#bankruptcy-unread-count').html(unread_info);
|
|
||||||
$('#bankruptcy').modal('show');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we received the initially selected message, select it on the client side,
|
|
||||||
// but not if the user has already selected another one during load.
|
|
||||||
//
|
|
||||||
// We fall back to the closest selected id, as the user may have removed
|
|
||||||
// a stream from the home before already
|
|
||||||
if (home_msg_list.selected_id() === -1) {
|
|
||||||
home_msg_list.select_id(page_params.initial_pointer,
|
|
||||||
{then_scroll: true, use_closest: true});
|
|
||||||
}
|
|
||||||
|
|
||||||
// catch the user up
|
|
||||||
if (messages.length !== 0) {
|
|
||||||
var latest_id = messages[messages.length-1].id;
|
|
||||||
if (latest_id < page_params.max_message_id) {
|
|
||||||
load_old_messages({
|
|
||||||
anchor: latest_id,
|
|
||||||
num_before: 0,
|
|
||||||
num_after: 400,
|
|
||||||
msg_list: home_msg_list,
|
|
||||||
cont: load_more
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// now start subscribing to updates
|
|
||||||
get_updates();
|
|
||||||
|
|
||||||
// backfill more messages after the user is idle
|
|
||||||
var backfill_batch_size = 1000;
|
|
||||||
$(document).idle({'idle': 1000*10,
|
|
||||||
'onIdle': function () {
|
|
||||||
var first_id = all_msg_list.first().id;
|
|
||||||
load_old_messages({
|
|
||||||
anchor: first_id,
|
|
||||||
num_before: backfill_batch_size,
|
|
||||||
num_after: 0,
|
|
||||||
msg_list: home_msg_list
|
|
||||||
});
|
|
||||||
}});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (page_params.have_initial_messages) {
|
|
||||||
load_old_messages({
|
|
||||||
anchor: page_params.initial_pointer,
|
|
||||||
num_before: 200,
|
|
||||||
num_after: 200,
|
|
||||||
msg_list: home_msg_list,
|
|
||||||
cont: load_more
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
get_updates();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
function restart_get_updates(options) {
|
function restart_get_updates(options) {
|
||||||
if (get_updates_xhr !== undefined) {
|
if (get_updates_xhr !== undefined) {
|
||||||
get_updates_xhr.abort();
|
get_updates_xhr.abort();
|
||||||
|
@ -1314,3 +1183,134 @@ function fast_forward_pointer() {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function main() {
|
||||||
|
_.each(page_params.people_list, function (person) {
|
||||||
|
people_dict[person.email] = person;
|
||||||
|
person.pm_recipient_count = 0;
|
||||||
|
});
|
||||||
|
|
||||||
|
// The special account feedback@zulip.com is used for in-app
|
||||||
|
// feedback and should always show up as an autocomplete option.
|
||||||
|
if (people_dict['feedback@zulip.com'] === undefined){
|
||||||
|
add_person({"email": "feedback@zulip.com",
|
||||||
|
"full_name": "Zulip Feedback Bot"});
|
||||||
|
}
|
||||||
|
|
||||||
|
activity.set_user_statuses(page_params.initial_presences,
|
||||||
|
page_params.initial_servertime);
|
||||||
|
|
||||||
|
furthest_read = page_params.initial_pointer;
|
||||||
|
server_furthest_read = page_params.initial_pointer;
|
||||||
|
|
||||||
|
// We only send pointer updates when the user has been idle for a
|
||||||
|
// short while to avoid hammering the server
|
||||||
|
$(document).idle({idle: 1000,
|
||||||
|
onIdle: send_pointer_update,
|
||||||
|
keepTracking: true});
|
||||||
|
|
||||||
|
$(document).on('message_selected.zulip', 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
|
||||||
|
&& event.id > furthest_read)
|
||||||
|
{
|
||||||
|
furthest_read = event.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we move the pointer, we don't want to respond to what's at the pointer
|
||||||
|
if (event.previously_selected !== event.id) {
|
||||||
|
respond_to_cursor = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (event.mark_read && event.previously_selected !== -1) {
|
||||||
|
// Mark messages between old pointer and new pointer as read
|
||||||
|
var messages;
|
||||||
|
if (event.id < event.previously_selected) {
|
||||||
|
messages = message_range(event.msg_list, event.id, event.previously_selected);
|
||||||
|
} else {
|
||||||
|
messages = message_range(event.msg_list, event.previously_selected, event.id);
|
||||||
|
}
|
||||||
|
mark_messages_as_read(messages, {from: 'pointer'});
|
||||||
|
_.each(messages, function (message) {
|
||||||
|
message_tour.visit(message.id);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// get the initial message list
|
||||||
|
function load_more(messages) {
|
||||||
|
|
||||||
|
// Before trying to load anything: is this user way behind?
|
||||||
|
var last_read_message = home_msg_list.get(home_msg_list.closest_id(page_params.initial_pointer));
|
||||||
|
if (last_read_message !== undefined) {
|
||||||
|
var now = new XDate().getTime() / 1000;
|
||||||
|
var num_unread = unread.get_counts().home_unread_messages;
|
||||||
|
|
||||||
|
if ((num_unread > 500) &&
|
||||||
|
(now - last_read_message.timestamp > 60 * 60 * 24 * 2)) { // 2 days.
|
||||||
|
var unread_info = templates.render('bankruptcy_modal',
|
||||||
|
{"unread_count": num_unread});
|
||||||
|
$('#bankruptcy-unread-count').html(unread_info);
|
||||||
|
$('#bankruptcy').modal('show');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we received the initially selected message, select it on the client side,
|
||||||
|
// but not if the user has already selected another one during load.
|
||||||
|
//
|
||||||
|
// We fall back to the closest selected id, as the user may have removed
|
||||||
|
// a stream from the home before already
|
||||||
|
if (home_msg_list.selected_id() === -1) {
|
||||||
|
home_msg_list.select_id(page_params.initial_pointer,
|
||||||
|
{then_scroll: true, use_closest: true});
|
||||||
|
}
|
||||||
|
|
||||||
|
// catch the user up
|
||||||
|
if (messages.length !== 0) {
|
||||||
|
var latest_id = messages[messages.length-1].id;
|
||||||
|
if (latest_id < page_params.max_message_id) {
|
||||||
|
load_old_messages({
|
||||||
|
anchor: latest_id,
|
||||||
|
num_before: 0,
|
||||||
|
num_after: 400,
|
||||||
|
msg_list: home_msg_list,
|
||||||
|
cont: load_more
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// now start subscribing to updates
|
||||||
|
get_updates();
|
||||||
|
|
||||||
|
// backfill more messages after the user is idle
|
||||||
|
var backfill_batch_size = 1000;
|
||||||
|
$(document).idle({'idle': 1000*10,
|
||||||
|
'onIdle': function () {
|
||||||
|
var first_id = all_msg_list.first().id;
|
||||||
|
load_old_messages({
|
||||||
|
anchor: first_id,
|
||||||
|
num_before: backfill_batch_size,
|
||||||
|
num_after: 0,
|
||||||
|
msg_list: home_msg_list
|
||||||
|
});
|
||||||
|
}});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (page_params.have_initial_messages) {
|
||||||
|
load_old_messages({
|
||||||
|
anchor: page_params.initial_pointer,
|
||||||
|
num_before: 200,
|
||||||
|
num_after: 200,
|
||||||
|
msg_list: home_msg_list,
|
||||||
|
cont: load_more
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
get_updates();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$(function () {
|
||||||
|
main();
|
||||||
|
});
|
||||||
|
|
Loading…
Reference in New Issue