Files
zulip/static/js/setup.js
James Porter 25a13cb09b Defer loading zxcvbn in main webapp until necessary.
We only use zxcvbn in the main webapp for checking the user's password
in the change password form.  Since zxcvbn is a very large javascript
library (~700KB), loading it asynchronously only when a user is trying
to change their password results in a significant performance
improvement for loading the Zulip webapp on a slow network.

Fixes #263.
2016-06-22 17:06:37 -07:00

47 lines
1.6 KiB
JavaScript

// Miscellaneous early setup.
var csrf_token;
$(function () {
// Display loading indicator. This disappears after the first
// get_events completes.
if (page_params.have_initial_messages && !page_params.needs_tutorial) {
loading.make_indicator($('#page_loading_indicator'), {text: 'Loading...'});
} else if (!page_params.needs_tutorial) {
$('#first_run_message').show();
}
// This requires that we used Django's {% csrf_token %} somewhere on the page.
csrf_token = $('input[name="csrfmiddlewaretoken"]').attr('value');
$.ajaxSetup({
beforeSend: function (xhr, settings) {
if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
// Only send the token to relative URLs i.e. locally.
xhr.setRequestHeader("X-CSRFToken", csrf_token);
}
}
});
// For some reason, jQuery wants this to be attached to an element.
$('body').ajaxError(function (event, xhr) {
if (xhr.status === 401) {
// We got logged out somehow, perhaps from another window or a session timeout.
// We could display an error message, but jumping right to the login page seems
// smoother and conveys the same information.
window.location.replace(page_params.login_page);
}
});
if (typeof $ !== 'undefined') {
$.fn.expectOne = function () {
if (blueslip && this.length !== 1) {
blueslip.error("Expected one element in jQuery set, " + this.length + " found");
}
return this;
};
}
});