mirror of
https://github.com/zulip/zulip.git
synced 2025-11-01 12:33:40 +00:00
Extract static/js/pm_list.js.
This handles most of the details of building the Private Messages section in the upper left corner of the app.
This commit is contained in:
@@ -3,7 +3,6 @@ var stream_list = (function () {
|
||||
var exports = {};
|
||||
|
||||
var zoomed_stream = '';
|
||||
var private_messages_open = false;
|
||||
var last_private_message_count = 0;
|
||||
var last_mention_count = 0;
|
||||
var previous_sort_order;
|
||||
@@ -178,12 +177,6 @@ function zoom_out(options) {
|
||||
$("#stream_filters li.narrow-filter").show();
|
||||
}
|
||||
|
||||
function remove_expanded_private_messages() {
|
||||
popovers.hide_topic_sidebar_popover();
|
||||
$("ul.expanded_private_messages").remove();
|
||||
resize.resize_stream_filters_container();
|
||||
}
|
||||
|
||||
function reset_to_unnarrowed(narrowed_within_same_stream) {
|
||||
if (topic_list.is_zoomed() && narrowed_within_same_stream !== true) {
|
||||
zoom_out({clear_topics: true});
|
||||
@@ -191,15 +184,7 @@ function reset_to_unnarrowed(narrowed_within_same_stream) {
|
||||
topic_list.remove_expanded_topics();
|
||||
}
|
||||
|
||||
private_messages_open = false;
|
||||
$("ul.filters li").removeClass('active-filter active-sub-filter');
|
||||
remove_expanded_private_messages();
|
||||
}
|
||||
|
||||
function get_private_message_filter_li(conversation) {
|
||||
var pm_li = get_filter_li('global', 'private');
|
||||
return iterate_to_find(".expanded_private_messages li.expanded_private_message",
|
||||
conversation, pm_li);
|
||||
pm_list.reset_to_unnarrowed();
|
||||
}
|
||||
|
||||
exports.set_in_home_view = function (stream, in_home) {
|
||||
@@ -334,7 +319,7 @@ function set_count_toggle_button(elem, count) {
|
||||
}
|
||||
|
||||
exports.set_pm_conversation_count = function (conversation, count) {
|
||||
var pm_li = get_private_message_filter_li(conversation);
|
||||
var pm_li = pm_list.get_private_message_filter_li(conversation);
|
||||
var count_span = pm_li.find('.private_message_count');
|
||||
var value_span = count_span.find('.value');
|
||||
|
||||
@@ -350,41 +335,6 @@ exports.remove_narrow_filter = function (name, type) {
|
||||
get_filter_li(type, name).remove();
|
||||
};
|
||||
|
||||
exports._build_private_messages_list = function (active_conversation, max_private_messages) {
|
||||
|
||||
var private_messages = message_store.recent_private_messages || [];
|
||||
var display_messages = [];
|
||||
var hiding_messages = false;
|
||||
|
||||
_.each(private_messages, function (private_message_obj, idx) {
|
||||
var recipients_string = private_message_obj.display_reply_to;
|
||||
var replies_to = private_message_obj.reply_to;
|
||||
var num_unread = unread.num_unread_for_person(private_message_obj.reply_to);
|
||||
|
||||
var always_visible = (idx < max_private_messages) || (num_unread > 0)
|
||||
|| (replies_to === active_conversation);
|
||||
|
||||
if (!always_visible) {
|
||||
hiding_messages = true;
|
||||
}
|
||||
|
||||
var display_message = {
|
||||
recipients: recipients_string,
|
||||
reply_to: replies_to,
|
||||
unread: num_unread,
|
||||
is_zero: num_unread === 0,
|
||||
zoom_out_hide: !always_visible,
|
||||
url: narrow.pm_with_uri(private_message_obj.reply_to)
|
||||
};
|
||||
display_messages.push(display_message);
|
||||
});
|
||||
|
||||
var recipients_dom = templates.render('sidebar_private_message_list',
|
||||
{messages: display_messages,
|
||||
want_show_more_messages_links: hiding_messages});
|
||||
return recipients_dom;
|
||||
};
|
||||
|
||||
function rebuild_recent_topics(stream) {
|
||||
// TODO: Call rebuild_recent_topics less, not on every new
|
||||
// message.
|
||||
@@ -392,23 +342,6 @@ function rebuild_recent_topics(stream) {
|
||||
topic_list.rebuild(stream_li, stream);
|
||||
}
|
||||
|
||||
function rebuild_recent_private_messages(active_conversation) {
|
||||
remove_expanded_private_messages();
|
||||
if (private_messages_open)
|
||||
{
|
||||
var max_private_messages = 5;
|
||||
var private_li = get_filter_li('global', 'private');
|
||||
var private_messages_dom = exports._build_private_messages_list(active_conversation,
|
||||
max_private_messages);
|
||||
private_li.append(private_messages_dom);
|
||||
}
|
||||
if (active_conversation) {
|
||||
get_private_message_filter_li(active_conversation).addClass('active-sub-filter');
|
||||
}
|
||||
|
||||
resize.resize_stream_filters_container();
|
||||
}
|
||||
|
||||
exports.update_streams_sidebar = function () {
|
||||
exports.build_stream_list();
|
||||
|
||||
@@ -424,25 +357,6 @@ exports.update_streams_sidebar = function () {
|
||||
}
|
||||
};
|
||||
|
||||
exports.update_private_messages = function () {
|
||||
exports._build_private_messages_list();
|
||||
|
||||
if (! narrow.active()) {
|
||||
return;
|
||||
}
|
||||
|
||||
var is_pm_filter = _.contains(narrow.filter().operands('is'), "private");
|
||||
var conversation = narrow.filter().operands('pm-with');
|
||||
if (conversation.length === 1) {
|
||||
rebuild_recent_private_messages(conversation[0]);
|
||||
} else if (conversation.length !== 0) {
|
||||
// TODO: This should be the reply-to of the thread.
|
||||
rebuild_recent_private_messages("");
|
||||
} else if (is_pm_filter) {
|
||||
rebuild_recent_private_messages("");
|
||||
}
|
||||
};
|
||||
|
||||
function do_new_messages_animation(message_type) {
|
||||
var li = get_filter_li("global", message_type);
|
||||
li.addClass("new_messages");
|
||||
@@ -532,6 +446,8 @@ $(function () {
|
||||
zoom_out: zoom_out
|
||||
});
|
||||
|
||||
pm_list.set_click_handlers();
|
||||
|
||||
$(document).on('narrow_activated.zulip', function (event) {
|
||||
reset_to_unnarrowed(narrow.stream() === zoomed_stream);
|
||||
|
||||
@@ -551,17 +467,7 @@ $(function () {
|
||||
|
||||
var op_pm = event.filter.operands('pm-with');
|
||||
if ((op_is.length !== 0 && _.contains(op_is, "private")) || op_pm.length !== 0) {
|
||||
private_messages_open = true;
|
||||
if (op_pm.length === 1) {
|
||||
$("#user_presences li[data-email='" + op_pm[0] + "']").addClass('active-filter');
|
||||
rebuild_recent_private_messages(op_pm[0]);
|
||||
} else if (op_pm.length !== 0) {
|
||||
// TODO: Should pass the reply-to of the thread
|
||||
rebuild_recent_private_messages("");
|
||||
} else {
|
||||
$("#global_filters li[data-name='private']").addClass('active-filter zoom-out');
|
||||
rebuild_recent_private_messages("");
|
||||
}
|
||||
pm_list.expand(op_pm);
|
||||
}
|
||||
|
||||
var op_stream = event.filter.operands('stream');
|
||||
@@ -594,17 +500,6 @@ $(function () {
|
||||
previous_unpinned_order = undefined;
|
||||
});
|
||||
|
||||
$('#global_filters').on('click', '.show-more-private-messages', function (e) {
|
||||
popovers.hide_all();
|
||||
$(".expanded_private_messages").expectOne().removeClass("zoom-out").addClass("zoom-in");
|
||||
$(".expanded_private_messages li.expanded_private_message").each(function () {
|
||||
$(this).show();
|
||||
});
|
||||
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
});
|
||||
|
||||
$('#stream_filters').on('click', 'li .subscription_block', function (e) {
|
||||
if (e.metaKey || e.ctrlKey) {
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user