Files
zulip/static/js/setup.js
Brock Whittaker d01549e8e3 Fix outerHeight to OR with 0 to not produce NaN.
This is an issue where in jQuery v3 the result of outerHeight on a node
that doesn’t exist is now “undefined” rather than “null”, which means
it will no longer cast to a Number but rather NaN. For this, we create
the safeOuterHeight and safeOuterWidth functions to safely return a
result (or 0).

This is a better solution than manually going to each instance and
ORing it with 0 for type safety.

https://stackoverflow.com/questions/41454285/jquery-outerheight-returns-
undefined-instead-of-null
2017-07-27 14:16:57 -07:00

73 lines
2.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Miscellaneous early setup.
var csrf_token;
$(function () {
if (util.is_mobile()) {
// if the client is mobile, disable websockets for message sending
// (it doesn't work on iOS for some reason).
page_params.use_websockets = false;
// Also disable the tutorial; it's ugly on mobile.
page_params.needs_tutorial = false;
}
page_params.page_load_time = new Date().getTime();
// 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...', abs_positioned: true});
} 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');
// This is an issue fix where in jQuery v3 the result of outerHeight on a node
// that doesnt exist is now “undefined” rather than “null”, which means it
// will no longer cast to a Number but rather NaN. For this, we create the
// `safeOuterHeight` and `safeOuterWidth` functions to safely return a result
// (or 0).
$.fn.safeOuterHeight = function () {
return $(this).outerHeight.apply(this, arguments) || 0;
};
$.fn.safeOuterWidth = function () {
return $(this).outerWidth.apply(this, arguments) || 0;
};
$.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.
$(document).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;
};
$.fn.within = function (sel) {
return ($(this).is(sel) || $(this).closest(sel).length);
};
}
});