Files
zulip/static/js/panels.js
Jagan 5a1df798bc banner: Notify organization admins to change default description.
We've noticed that many production organizations don't set either an
organization description or profile picture, even large open source
organizations that could definitely take advantage of this feature.

This adds a top-of-page banner that bugs organization administrators
to add an organization description and profile picture, generally
starting on the second login (as we only do it on page load after
notifications are configured).

Significantly tweaked by tabbott to get the right user experience.

Fixes #14019.
2020-03-26 13:10:37 -07:00

106 lines
3.7 KiB
JavaScript

const util = require("./util");
const resize_app = function () {
const panels_height = $("#panels").height();
$("body > .app").height("calc(100% - " + panels_height + "px)");
// the floating recipient bar is usually positioned 10px below the
// header, so add that to the panels height to get the new `top` value.
$("#floating_recipient_bar").css("top", panels_height + $(".header").height() + 10 + "px");
};
exports.resize_app = resize_app;
const show_step = function ($process, step) {
$process.find("[data-step]").hide().filter("[data-step=" + step + "]").show();
};
const get_step = function ($process) {
return $process.find("[data-step]").filter(":visible").data("step");
};
function should_show_notifications(ls) {
// if the user said to never show banner on this computer again, it will
// be stored as `true` so we want to negate that.
if (localstorage.supported()) {
if (ls.get("dontAskForNotifications") === true) {
return false;
}
}
return (
// notifications *basically* don't work on any mobile platforms, so don't
// event show the banners. This prevents trying to access things that
// don't exist like `Notification.permission`.
!util.is_mobile() &&
// if permission has not been granted yet.
!notifications.granted_desktop_notifications_permission() &&
// if permission is allowed to be requested (e.g. not in "denied" state).
notifications.permission_state() !== "denied"
);
}
exports.check_profile_incomplete = function () {
if (!page_params.is_admin) {
return;
}
// Eventually, we might also check page_params.realm_icon_source,
// but it feels too aggressive to ask users to do change that
// since their organization might not have a logo yet.
if (page_params.realm_description === '' ||
page_params.realm_description.startsWith("Organization imported from")) {
$("[data-process='profile-incomplete']").show();
} else {
$("[data-process='profile-incomplete']").hide();
}
};
exports.initialize = function () {
const ls = localstorage();
if (page_params.insecure_desktop_app) {
exports.open($("[data-process='insecure-desktop-app']"));
} else if (page_params.warn_no_email === true && page_params.is_admin) {
// if email has not been set up and the user is the admin,
// display a warning to tell them to set up an email server.
exports.open($("[data-process='email-server']"));
} else if (should_show_notifications(ls)) {
exports.open($("[data-process='notifications']"));
} else {
// TODO: This should be restructured with separate check and
// show calls.
exports.check_profile_incomplete();
}
// Configure click handlers.
$(".request-desktop-notifications").on("click", function (e) {
e.preventDefault();
$(this).closest(".alert").hide();
notifications.request_desktop_notifications_permission();
resize_app();
});
$(".reject-notifications").on("click", function () {
$(this).closest(".alert").hide();
ls.set("dontAskForNotifications", true);
resize_app();
});
$("#panels").on("click", ".alert .close, .alert .exit", function (e) {
e.stopPropagation();
const $process = $(e.target).closest("[data-process]");
if (get_step($process) === 1 && $process.data("process") === "notifications") {
show_step($process, 2);
} else {
$(this).closest(".alert").hide();
}
resize_app();
});
};
exports.open = function ($process) {
$("[data-process]").hide();
$process.show();
resize_app();
};
window.panels = exports;