mirror of
https://github.com/zulip/zulip.git
synced 2025-11-02 13:03:29 +00:00
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:
committed by
Leo Franchi
parent
a1538b4bab
commit
50bc5401a4
@@ -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
88
static/js/loading.js
Normal 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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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();
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user