Moved loading_indicator functions to loading.js.

util.make_loading_indicator -> loading.make_indicator
util.destroy_loading_indicator -> loading.destroy_indicator

(imported from commit 8a171622a6096476dd040912d3f1460d53159f20)
This commit is contained in:
Steve Howell
2014-03-13 10:03:01 -04:00
committed by Leo Franchi
parent a1538b4bab
commit 50bc5401a4
11 changed files with 117 additions and 106 deletions

View File

@@ -12,7 +12,7 @@ exports.show_or_hide_menu_item = function () {
};
function failed_listing_users(xhr, error) {
util.destroy_loading_indicator($('#subs_page_loading_indicator'));
loading.destroy_indicator($('#subs_page_loading_indicator'));
ui.report_error("Error listing users or bots", xhr, $("#administration-status"));
}
@@ -56,9 +56,9 @@ function populate_users (realm_people_data) {
_.each(deactivated_users, function (user) {
deactivated_users_table.append(templates.render("admin_user_list", {user: user}));
});
util.destroy_loading_indicator($('#admin_page_users_loading_indicator'));
util.destroy_loading_indicator($('#admin_page_bots_loading_indicator'));
util.destroy_loading_indicator($('#admin_page_deactivated_users_loading_indicator'));
loading.destroy_indicator($('#admin_page_users_loading_indicator'));
loading.destroy_indicator($('#admin_page_bots_loading_indicator'));
loading.destroy_indicator($('#admin_page_deactivated_users_loading_indicator'));
}
function populate_streams (streams_data) {
@@ -67,7 +67,7 @@ function populate_streams (streams_data) {
_.each(streams_data.streams, function (stream) {
streams_table.append(templates.render("admin_streams_list", {stream: stream}));
});
util.destroy_loading_indicator($('#admin_page_streams_loading_indicator'));
loading.destroy_indicator($('#admin_page_streams_loading_indicator'));
}
exports.setup_page = function () {
@@ -76,10 +76,10 @@ exports.setup_page = function () {
$("#administration-status").hide();
// create loading indicators
util.make_loading_indicator($('#admin_page_users_loading_indicator'));
util.make_loading_indicator($('#admin_page_bots_loading_indicator'));
util.make_loading_indicator($('#admin_page_streams_loading_indicator'));
util.make_loading_indicator($('#admin_page_deactivated_users_loading_indicator'));
loading.make_indicator($('#admin_page_users_loading_indicator'));
loading.make_indicator($('#admin_page_bots_loading_indicator'));
loading.make_indicator($('#admin_page_streams_loading_indicator'));
loading.make_indicator($('#admin_page_deactivated_users_loading_indicator'));
// Populate users and bots tables
channel.get({

88
static/js/loading.js Normal file
View File

@@ -0,0 +1,88 @@
var loading = (function () {
var exports = {};
exports.make_indicator = function (outer_container, opts) {
opts = opts || {};
var container = outer_container;
container.empty();
if (opts.abs_positioned !== undefined && opts.abs_positioned) {
// Create some additional containers to facilitate absolutely
// positioned spinners.
var container_id = container.attr('id');
var inner_container = $('<div id="' + container_id + '_box_container"></div>');
container.append(inner_container);
container = inner_container;
inner_container = $('<div id="' + container_id + '_box"></div>');
container.append(inner_container);
container = inner_container;
}
var spinner_elem = $('<div class="loading_indicator_spinner"></div>');
container.append(spinner_elem);
var text_width = 0;
if (opts.text !== undefined && opts.text !== '') {
var text_elem = $('<span class="loading_indicator_text"></span>');
text_elem.text(opts.text);
container.append(text_elem);
// See note, below
text_width = 20 + text_elem.width();
}
// These width calculations are tied to the spinner width and
// margins defined via CSS
//
// TODO: We set white-space to 'nowrap' because under some
// unknown circumstances (it happens on Keegan's laptop) the text
// width calculation, above, returns a result that's a few pixels
// too small. The container's div will be slightly too small,
// but that's probably OK for our purposes.
container.css({width: 38 + text_width,
height: 38});
outer_container.css({display: 'block',
'white-space': 'nowrap'});
var spinner = new Spinner({
lines: 8,
length: 0,
width: 9,
radius: 9,
speed: 1.25,
shadow: false,
zIndex: 1000
}).spin(spinner_elem[0]);
outer_container.data("spinner_obj", spinner);
outer_container.data("destroying", false);
// Make the spinner appear in the center of its enclosing
// element. spinner.el is a 0x0 div. The parts of the spinner
// are arranged so that they're centered on the upper-left corner
// of spinner.el. So, by setting spinner.el's position to
// relative and top/left to 50%, the center of the spinner will
// be located at the center of spinner_elem.
$(spinner.el).css({left: '50%', top: '50%'});
};
exports.destroy_indicator = function (container) {
if (container.data("destroying")) {
return;
}
container.data("destroying", true);
var spinner = container.data("spinner_obj");
if (spinner !== undefined) {
spinner.stop();
}
container.removeData("spinner_obj");
container.empty();
container.css({width: 0, height: 0, display: 'none'});
};
return exports;
}());
if (typeof module !== 'undefined') {
module.exports = loading;
}

View File

@@ -151,7 +151,7 @@ exports.add_messages = function add_messages(messages, msg_list, opts) {
opts = _.extend({messages_are_new: false, delay_render: false}, opts);
util.destroy_loading_indicator($('#page_loading_indicator'));
loading.destroy_indicator($('#page_loading_indicator'));
util.destroy_first_run_message();
msg_list.add_messages(messages, opts);
@@ -414,7 +414,7 @@ function get_old_messages_success(data, opts) {
// Don't actually process the messages until the tutorial is
// finished, but do disable the loading indicator so it isn't
// distracting in the background
util.destroy_loading_indicator($('#page_loading_indicator'));
loading.destroy_indicator($('#page_loading_indicator'));
tutorial.defer(function () { get_old_messages_success(data, opts); });
return;
}

View File

@@ -424,7 +424,7 @@ exports.setup_page = function () {
});
var spinner = $("#upload_avatar_spinner").expectOne();
util.make_loading_indicator(spinner, {text: 'Uploading avatar.'});
loading.make_indicator(spinner, {text: 'Uploading avatar.'});
channel.post({
url: '/json/set_avatar',
@@ -433,7 +433,7 @@ exports.setup_page = function () {
processData: false,
contentType: false,
success: function (data) {
util.destroy_loading_indicator($("#upload_avatar_spinner"));
loading.destroy_indicator($("#upload_avatar_spinner"));
var url = data.avatar_url + '&stamp=' + exports.avatar_stamp;
$("#user-settings-avatar").expectOne().attr("src", url);
exports.avatar_stamp += 1;
@@ -599,7 +599,7 @@ exports.setup_page = function () {
jQuery.each(file_input[0].files, function (i, file) {
formData.append('file-'+i, file);
});
util.make_loading_indicator(spinner, {text: 'Editing bot'});
loading.make_indicator(spinner, {text: 'Editing bot'});
edit_button.hide();
channel.patch({
url: '/json/bots/' + encodeURIComponent(email),
@@ -608,7 +608,7 @@ exports.setup_page = function () {
processData: false,
contentType: false,
success: function (data) {
util.destroy_loading_indicator(spinner);
loading.destroy_indicator(spinner);
errors.hide();
edit_button.show();
show_row_again();
@@ -622,7 +622,7 @@ exports.setup_page = function () {
}
},
error: function (xhr, error_type, exn) {
util.destroy_loading_indicator(spinner);
loading.destroy_indicator(spinner);
edit_button.show();
errors.text(JSON.parse(xhr.responseText).msg).show();
}

View File

@@ -5,7 +5,7 @@ $(function () {
// Display loading indicator. This disappears after the first
// get_events completes.
if (page_params.have_initial_messages && !page_params.needs_tutorial) {
util.make_loading_indicator($('#page_loading_indicator'), {text: 'Loading...'});
loading.make_indicator($('#page_loading_indicator'), {text: 'Loading...'});
} else if (!page_params.needs_tutorial) {
util.show_first_run_message();
}

View File

@@ -426,7 +426,7 @@ function populate_subscriptions(subs, subscribed) {
}
exports.setup_page = function () {
util.make_loading_indicator($('#subs_page_loading_indicator'));
loading.make_indicator($('#subs_page_loading_indicator'));
function populate_and_fill(public_streams) {
@@ -482,12 +482,12 @@ exports.setup_page = function () {
add_email_hint(row);
});
util.destroy_loading_indicator($('#subs_page_loading_indicator'));
loading.destroy_indicator($('#subs_page_loading_indicator'));
$(document).trigger($.Event('subs_page_loaded.zulip'));
}
function failed_listing(xhr, error) {
util.destroy_loading_indicator($('#subs_page_loading_indicator'));
loading.destroy_indicator($('#subs_page_loading_indicator'));
ui.report_error("Error listing streams or subscriptions", xhr, $("#subscriptions-status"));
}
@@ -1040,14 +1040,14 @@ $(function () {
error_elem.addClass('hide');
list.empty();
util.make_loading_indicator(indicator_elem);
loading.make_indicator(indicator_elem);
channel.post({
url: "/json/get_subscribers",
idempotent: true,
data: {stream: stream},
success: function (data) {
util.destroy_loading_indicator(indicator_elem);
loading.destroy_indicator(indicator_elem);
var subscribers = _.map(data.subscribers, function (elem) {
var person = people.get_by_email(elem);
if (person === undefined) {
@@ -1063,7 +1063,7 @@ $(function () {
});
},
error: function (xhr) {
util.destroy_loading_indicator(indicator_elem);
loading.destroy_indicator(indicator_elem);
error_elem.removeClass("hide").text("Could not fetch subscriber list");
}
});

View File

@@ -780,7 +780,7 @@ exports.small_avatar_url = function (message) {
var loading_more_messages_indicator_showing = false;
exports.show_loading_more_messages_indicator = function () {
if (! loading_more_messages_indicator_showing) {
util.make_loading_indicator($('#loading_more_messages_indicator'),
loading.make_indicator($('#loading_more_messages_indicator'),
{abs_positioned: true});
loading_more_messages_indicator_showing = true;
hide_floating_recipient_bar();
@@ -789,7 +789,7 @@ exports.show_loading_more_messages_indicator = function () {
exports.hide_loading_more_messages_indicator = function () {
if (loading_more_messages_indicator_showing) {
util.destroy_loading_indicator($("#loading_more_messages_indicator"));
loading.destroy_indicator($("#loading_more_messages_indicator"));
loading_more_messages_indicator_showing = false;
}
};

View File

@@ -32,84 +32,6 @@ exports.set_favicon = function (url) {
}
};
exports.make_loading_indicator = function (outer_container, opts) {
opts = opts || {};
var container = outer_container;
container.empty();
if (opts.abs_positioned !== undefined && opts.abs_positioned) {
// Create some additional containers to facilitate absolutely
// positioned spinners.
var container_id = container.attr('id');
var inner_container = $('<div id="' + container_id + '_box_container"></div>');
container.append(inner_container);
container = inner_container;
inner_container = $('<div id="' + container_id + '_box"></div>');
container.append(inner_container);
container = inner_container;
}
var spinner_elem = $('<div class="loading_indicator_spinner"></div>');
container.append(spinner_elem);
var text_width = 0;
if (opts.text !== undefined && opts.text !== '') {
var text_elem = $('<span class="loading_indicator_text"></span>');
text_elem.text(opts.text);
container.append(text_elem);
// See note, below
text_width = 20 + text_elem.width();
}
// These width calculations are tied to the spinner width and
// margins defined via CSS
//
// TODO: We set white-space to 'nowrap' because under some
// unknown circumstances (it happens on Keegan's laptop) the text
// width calculation, above, returns a result that's a few pixels
// too small. The container's div will be slightly too small,
// but that's probably OK for our purposes.
container.css({width: 38 + text_width,
height: 38});
outer_container.css({display: 'block',
'white-space': 'nowrap'});
var spinner = new Spinner({
lines: 8,
length: 0,
width: 9,
radius: 9,
speed: 1.25,
shadow: false,
zIndex: 1000
}).spin(spinner_elem[0]);
outer_container.data("spinner_obj", spinner);
outer_container.data("destroying", false);
// Make the spinner appear in the center of its enclosing
// element. spinner.el is a 0x0 div. The parts of the spinner
// are arranged so that they're centered on the upper-left corner
// of spinner.el. So, by setting spinner.el's position to
// relative and top/left to 50%, the center of the spinner will
// be located at the center of spinner_elem.
$(spinner.el).css({left: '50%', top: '50%'});
};
exports.destroy_loading_indicator = function (container) {
if (container.data("destroying")) {
return;
}
container.data("destroying", true);
var spinner = container.data("spinner_obj");
if (spinner !== undefined) {
spinner.stop();
}
container.removeData("spinner_obj");
container.empty();
container.css({width: 0, height: 0, display: 'none'});
};
exports.show_first_run_message = function () {
$('#first_run_message').show();
};

View File

@@ -2210,7 +2210,7 @@ div.floating_recipient {
.loading_indicator_spinner {
/* If you change these, make sure to adjust the constants in
* make_loading_indicator as well */
* loading.make_indicator as well */
height: 38px;
width: 38px;
float: left;
@@ -2218,7 +2218,7 @@ div.floating_recipient {
.loading_indicator_text {
/* If you change these, make sure to adjust the constants in
* make_loading_indicator as well */
* loading.make_indicator as well */
margin-left: 20px;
font-size: 33px;
font-weight: bold;