mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 05:23:35 +00:00
Show 5 most recent "Private messages" when clicked.
Like the Stream Subject lists, Private messages are now shown when the user clicks on the "Private message" link. User can drill in to get more than 5 conversations. Selecting PMs from the user or group PM lists on the right sidebar also opens the list & highlights the selected conversation. [Edited by tabbott@mit.edu to fix some small bugs.]
This commit is contained in:
@@ -4,6 +4,7 @@ var exports = {};
|
||||
|
||||
var zoomed_to_topics = false;
|
||||
var zoomed_stream = '';
|
||||
var private_messages_open = false;
|
||||
var last_private_message_count = 0;
|
||||
var last_mention_count = 0;
|
||||
var previous_sort_order;
|
||||
@@ -115,13 +116,21 @@ function remove_expanded_subjects() {
|
||||
$("ul.expanded_subjects").remove();
|
||||
}
|
||||
|
||||
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 (zoomed_to_topics && narrowed_within_same_stream !== true) {
|
||||
zoom_out();
|
||||
}
|
||||
|
||||
private_messages_open = false;
|
||||
$("ul.filters li").removeClass('active-filter active-sub-filter');
|
||||
remove_expanded_subjects();
|
||||
remove_expanded_private_messages();
|
||||
}
|
||||
|
||||
function get_subject_filter_li(stream, subject) {
|
||||
@@ -129,6 +138,12 @@ function get_subject_filter_li(stream, subject) {
|
||||
return iterate_to_find(".expanded_subjects li.expanded_subject", subject, stream_li);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
exports.set_in_home_view = function (stream, in_home) {
|
||||
var li = get_filter_li('stream', stream);
|
||||
if (in_home) {
|
||||
@@ -257,6 +272,20 @@ exports.set_subject_count = function (stream, subject, count) {
|
||||
update_count_in_dom(count_span, value_span, count);
|
||||
};
|
||||
|
||||
|
||||
exports.set_pm_conversation_count = function (conversation, count) {
|
||||
var pm_li = get_private_message_filter_li(conversation);
|
||||
var count_span = pm_li.find('.private_message_count');
|
||||
var value_span = count_span.find('.value');
|
||||
|
||||
if (count_span.length === 0 || value_span.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
count_span.removeClass("zero_count");
|
||||
update_count_in_dom(count_span, value_span, count);
|
||||
};
|
||||
|
||||
exports.remove_narrow_filter = function (name, type) {
|
||||
get_filter_li(type, name).remove();
|
||||
};
|
||||
@@ -301,6 +330,42 @@ exports._build_subject_list = function (stream, active_topic, max_subjects) {
|
||||
return topic_dom;
|
||||
};
|
||||
|
||||
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);
|
||||
|
||||
// Show the most recent subjects, as well as any with unread messages
|
||||
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_subjects(stream, active_topic) {
|
||||
// TODO: Call rebuild_recent_subjects less, not on every new
|
||||
// message.
|
||||
@@ -316,6 +381,23 @@ function rebuild_recent_subjects(stream, active_topic) {
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
|
||||
@@ -336,6 +418,25 @@ 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");
|
||||
@@ -385,9 +486,9 @@ exports.update_dom_with_unread_counts = function (counts) {
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
counts.pm_count.each(function (count, person) {
|
||||
exports.set_presence_list_count(person, count);
|
||||
exports.set_pm_conversation_count(person, count);
|
||||
});
|
||||
|
||||
// integer counts
|
||||
@@ -420,10 +521,26 @@ $(function () {
|
||||
}
|
||||
var op_is = event.filter.operands('is');
|
||||
if (op_is.length !== 0) {
|
||||
if (['private', 'starred', 'mentioned'].indexOf(op_is[0]) !== -1) {
|
||||
if (['starred', 'mentioned'].indexOf(op_is[0]) !== -1) {
|
||||
$("#global_filters li[data-name='" + op_is[0] + "']").addClass('active-filter');
|
||||
}
|
||||
}
|
||||
|
||||
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("");
|
||||
}
|
||||
}
|
||||
|
||||
var op_stream = event.filter.operands('stream');
|
||||
if (op_stream.length !== 0 && stream_data.is_subscribed(op_stream[0])) {
|
||||
var stream_li = get_filter_li('stream', op_stream[0]);
|
||||
@@ -437,10 +554,6 @@ $(function () {
|
||||
rebuild_recent_subjects(op_stream[0], subject);
|
||||
unread.process_visible();
|
||||
}
|
||||
var op_pm = event.filter.operands('pm-with');
|
||||
if (op_pm.length === 1) {
|
||||
$("#user_presences li[data-email='" + op_pm[0] + "']").addClass('active-filter');
|
||||
}
|
||||
});
|
||||
|
||||
$(document).on('narrow_deactivated.zulip', function (event) {
|
||||
@@ -489,6 +602,17 @@ $(function () {
|
||||
e.stopPropagation();
|
||||
});
|
||||
|
||||
$('#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