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:
Steve Howell
2016-11-11 03:33:51 -08:00
committed by Tim Abbott
parent af794bec7a
commit 7b0c6459b4
7 changed files with 164 additions and 115 deletions

View File

@@ -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;