zulip/static/js/top_left_corner.js

119 lines
3.1 KiB
JavaScript
Raw Normal View History

var top_left_corner = (function () {
var exports = {};
exports.get_global_filter_li = function (filter_name) {
var selector = "#global_filters li[data-name='" + filter_name + "']";
return $(selector);
};
exports.update_count_in_dom = function (unread_count_elem, count) {
var count_span = unread_count_elem.find('.count');
var value_span = count_span.find('.value');
if (count === 0) {
count_span.hide();
value_span.text('');
return;
}
count_span.show();
value_span.text(count);
};
exports.update_dom_with_unread_counts = function (counts) {
// Note that "Private messages" counts are handled in pm_list.js.
// mentioned/home have simple integer counts
var mentioned_li = exports.get_global_filter_li('mentioned');
var home_li = exports.get_global_filter_li('home');
exports.update_count_in_dom(mentioned_li, counts.mentioned_message_count);
exports.update_count_in_dom(home_li, counts.home_unread_messages);
unread_ui.animate_mention_changes(mentioned_li,
counts.mentioned_message_count);
};
function deselect_top_left_corner_items() {
function remove(name) {
var li = exports.get_global_filter_li(name);
li.removeClass('active-filter active-sub-filter');
}
remove('home');
remove('private');
remove('starred');
remove('mentioned');
}
exports.handle_narrow_activated = function (filter) {
deselect_top_left_corner_items();
var ops;
var filter_name;
var filter_li;
// TODO: handle confused filters like "in:all stream:foo"
ops = filter.operands('in');
if (ops.length >= 1) {
filter_name = ops[0];
if (filter_name === 'home') {
filter_li = exports.get_global_filter_li(filter_name);
filter_li.addClass('active-filter');
}
}
ops = filter.operands('is');
if (ops.length >= 1) {
filter_name = ops[0];
if (filter_name === 'starred' || filter_name === 'mentioned') {
filter_li = exports.get_global_filter_li(filter_name);
filter_li.addClass('active-filter');
}
}
if (exports.should_expand_pm_list(filter)) {
var op_pm = filter.operands('pm-with');
pm_list.expand(op_pm);
} else {
pm_list.close();
}
};
exports.should_expand_pm_list = function (filter) {
var op_is = filter.operands('is');
if (op_is.length >= 1 && _.contains(op_is, "private")) {
return true;
}
var op_pm = filter.operands('pm-with');
if (op_pm.length !== 1) {
return false;
}
var emails_strings = op_pm[0];
var emails = emails_strings.split(',');
var has_valid_emails = people.is_valid_bulk_emails_for_compose(emails);
return has_valid_emails;
};
exports.handle_narrow_deactivated = function () {
deselect_top_left_corner_items();
pm_list.close();
var filter_li = exports.get_global_filter_li('home');
filter_li.addClass('active-filter');
};
return exports;
}());
if (typeof module !== 'undefined') {
module.exports = top_left_corner;
}
window.top_left_corner = top_left_corner;