mirror of
https://github.com/zulip/zulip.git
synced 2025-11-01 20:44:04 +00:00
Without this, the "Since you were last here" text got rendered in English for me every time when I tested in German, both in dev and on chat.zulip.org. This brings us to 9 places we invoke `ensure_i18n`. That seems like a sign that there may well be more places we're still missing, and that we should probably find a more systematic way to make sure all our frontend UI rendering waits for translation to be ready. Anyway, for now, fix this one.
122 lines
3.5 KiB
JavaScript
122 lines
3.5 KiB
JavaScript
var unread_ui = (function () {
|
|
|
|
var exports = {};
|
|
|
|
var last_private_message_count = 0;
|
|
var last_mention_count = 0;
|
|
|
|
function do_new_messages_animation(li) {
|
|
li.addClass("new_messages");
|
|
function mid_animation() {
|
|
li.removeClass("new_messages");
|
|
li.addClass("new_messages_fadeout");
|
|
}
|
|
function end_animation() {
|
|
li.removeClass("new_messages_fadeout");
|
|
}
|
|
setTimeout(mid_animation, 3000);
|
|
setTimeout(end_animation, 6000);
|
|
}
|
|
|
|
exports.animate_private_message_changes = function (li, new_private_message_count) {
|
|
if (new_private_message_count > last_private_message_count) {
|
|
do_new_messages_animation(li);
|
|
}
|
|
last_private_message_count = new_private_message_count;
|
|
};
|
|
|
|
exports.animate_mention_changes = function (li, new_mention_count) {
|
|
if (new_mention_count > last_mention_count) {
|
|
do_new_messages_animation(li);
|
|
}
|
|
last_mention_count = new_mention_count;
|
|
};
|
|
|
|
exports.set_count_toggle_button = function (elem, count) {
|
|
if (count === 0) {
|
|
if (elem.is(':animated')) {
|
|
return elem.stop(true, true).hide();
|
|
}
|
|
return elem.hide(500);
|
|
} else if ((count > 0) && (count < 1000)) {
|
|
elem.show(500);
|
|
return elem.text(count);
|
|
}
|
|
elem.show(500);
|
|
return elem.text("1k+");
|
|
};
|
|
|
|
exports.update_unread_counts = function () {
|
|
if (unread.suppress_unread_counts) {
|
|
return;
|
|
}
|
|
|
|
// Pure computation:
|
|
var res = unread.get_counts();
|
|
|
|
// Side effects from here down:
|
|
// This updates some DOM elements directly, so try to
|
|
// avoid excessive calls to this.
|
|
activity.update_dom_with_unread_counts(res);
|
|
stream_list.update_dom_with_unread_counts(res);
|
|
pm_list.update_dom_with_unread_counts(res);
|
|
notifications.update_title_count(res.home_unread_messages);
|
|
notifications.update_pm_count(res.private_message_count);
|
|
};
|
|
|
|
exports.enable = function enable() {
|
|
unread.suppress_unread_counts = false;
|
|
exports.update_unread_counts();
|
|
};
|
|
|
|
function consider_bankruptcy() {
|
|
// Until we've handled possibly declaring bankruptcy, don't show
|
|
// unread counts since they only consider messages that are loaded
|
|
// client side and may be different from the numbers reported by
|
|
// the server.
|
|
|
|
if (!page_params.furthest_read_time) {
|
|
// We've never read a message.
|
|
exports.enable();
|
|
return;
|
|
}
|
|
|
|
var now = new XDate(true).getTime() / 1000;
|
|
if ((page_params.unread_count > 500) &&
|
|
(now - page_params.furthest_read_time > 60 * 60 * 24 * 2)) { // 2 days.
|
|
var unread_info = templates.render('bankruptcy_modal',
|
|
{unread_count: page_params.unread_count});
|
|
$('#bankruptcy-unread-count').html(unread_info);
|
|
$('#bankruptcy').modal('show');
|
|
} else {
|
|
exports.enable();
|
|
}
|
|
}
|
|
|
|
function _initialize() {
|
|
// No matter how the bankruptcy modal is closed, show unread counts after.
|
|
$("#bankruptcy").on("hide", function () {
|
|
unread_ui.enable();
|
|
});
|
|
|
|
$('#yes-bankrupt').click(function () {
|
|
pointer.fast_forward_pointer();
|
|
$("#yes-bankrupt").hide();
|
|
$("#no-bankrupt").hide();
|
|
$(this).after($("<div>").addClass("alert alert-info settings_committed")
|
|
.text(i18n.t("Bringing you to your latest messages…")));
|
|
});
|
|
|
|
consider_bankruptcy();
|
|
}
|
|
|
|
exports.initialize = function () {
|
|
i18n.ensure_i18n(_initialize);
|
|
};
|
|
|
|
return exports;
|
|
}());
|
|
if (typeof module !== 'undefined') {
|
|
module.exports = unread_ui;
|
|
}
|