mirror of
https://github.com/zulip/zulip.git
synced 2025-11-04 05:53:43 +00:00
The only reason to use typeof foo === "undefined" is when foo is a global identifier that might not have been declared at all, so it might raise a ReferenceError if evaluated. For a variable declared with const or let or import, a function argument, or a complex expression, simply foo === undefined is equivalent. Some of these conditions have become impossible and can be removed entirely, and some can be replaced more idiomatically with default parameters (note that JavaScript does not share the Python misfeature of evaluating the default parameter at function declaration time). Signed-off-by: Anders Kaseorg <anders@zulip.com>
74 lines
2.6 KiB
JavaScript
74 lines
2.6 KiB
JavaScript
import $ from "jquery";
|
||
|
||
import * as blueslip from "./blueslip";
|
||
import * as loading from "./loading";
|
||
import * as util from "./util";
|
||
|
||
// Miscellaneous early setup.
|
||
export let password_change_in_progress = false;
|
||
|
||
export function set_password_change_in_progress(value) {
|
||
password_change_in_progress = value;
|
||
}
|
||
|
||
$(() => {
|
||
if (util.is_mobile()) {
|
||
// Disable the tutorial; it's ugly on mobile.
|
||
page_params.needs_tutorial = false;
|
||
}
|
||
|
||
page_params.page_load_time = Date.now();
|
||
|
||
// Display loading indicator. This disappears after the first
|
||
// get_events completes.
|
||
if (!page_params.needs_tutorial) {
|
||
loading.make_indicator($("#page_loading_indicator"), {
|
||
text: "Loading...",
|
||
abs_positioned: true,
|
||
});
|
||
}
|
||
|
||
// This is an issue fix 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).
|
||
$.fn.safeOuterHeight = function (...args) {
|
||
return this.outerHeight(...args) || 0;
|
||
};
|
||
|
||
$.fn.safeOuterWidth = function (...args) {
|
||
return this.outerWidth(...args) || 0;
|
||
};
|
||
|
||
// For some reason, jQuery wants this to be attached to an element.
|
||
$(document).ajaxError((event, xhr) => {
|
||
if (password_change_in_progress) {
|
||
// The backend for handling password change API requests
|
||
// will replace the user's session; this results in a
|
||
// brief race where any API request will fail with a 401
|
||
// error after the old session is deactivated but before
|
||
// the new one has been propagated to the browser. So we
|
||
// skip our normal HTTP 401 error handling if we're in the
|
||
// process of executing a password change.
|
||
return;
|
||
}
|
||
|
||
if (xhr.status === 401) {
|
||
// We got logged out somehow, perhaps from another window
|
||
// changing the user's password, or a session timeout. We
|
||
// could display an error message, but jumping right to
|
||
// the login page conveys the same information with a
|
||
// smoother re-login experience.
|
||
window.location.replace(page_params.login_page);
|
||
}
|
||
});
|
||
|
||
$.fn.expectOne = function () {
|
||
if (blueslip && this.length !== 1) {
|
||
blueslip.error("Expected one element in jQuery set, " + this.length + " found");
|
||
}
|
||
return this;
|
||
};
|
||
});
|