mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 21:43:21 +00:00
buddy list: Use user_ids in DOM list elements.
This commit is contained in:
@@ -52,6 +52,8 @@ global.people.add(mark);
|
||||
global.people.add(norbert);
|
||||
|
||||
|
||||
var people = global.people;
|
||||
|
||||
var activity = require('js/activity.js');
|
||||
|
||||
activity.update_huddles = function () {};
|
||||
@@ -75,10 +77,10 @@ activity.update_huddles = function () {};
|
||||
|
||||
(function test_process_loaded_messages() {
|
||||
|
||||
var huddle1 = 'bar@zulip.com,foo@zulip.com';
|
||||
var huddle1 = 'jill@zulip.com,norbert@zulip.com';
|
||||
var timestamp1 = 1382479029; // older
|
||||
|
||||
var huddle2 = 'alice@zulip.com,bob@zulip.com';
|
||||
var huddle2 = 'alice@zulip.com,fred@zulip.com';
|
||||
var timestamp2 = 1382479033; // newer
|
||||
|
||||
var old_timestamp = 1382479000;
|
||||
@@ -110,44 +112,56 @@ activity.update_huddles = function () {};
|
||||
|
||||
activity.process_loaded_messages(messages);
|
||||
|
||||
assert.deepEqual(activity.get_huddles(), [huddle2, huddle1]);
|
||||
var user_ids_string1 = people.emails_strings_to_user_ids_string(huddle1);
|
||||
var user_ids_string2 = people.emails_strings_to_user_ids_string(huddle2);
|
||||
assert.deepEqual(activity.get_huddles(), [user_ids_string2, user_ids_string1]);
|
||||
}());
|
||||
|
||||
(function test_full_huddle_name() {
|
||||
function full_name(emails_string) {
|
||||
var user_ids_string = people.emails_strings_to_user_ids_string(emails_string);
|
||||
return activity.full_huddle_name(user_ids_string);
|
||||
}
|
||||
|
||||
assert.equal(
|
||||
activity.full_huddle_name('alice@zulip.com,jill@zulip.com'),
|
||||
full_name('alice@zulip.com,jill@zulip.com'),
|
||||
'Alice Smith, Jill Hill'
|
||||
);
|
||||
|
||||
assert.equal(
|
||||
activity.full_huddle_name('alice@zulip.com,fred@zulip.com,jill@zulip.com'),
|
||||
full_name('alice@zulip.com,fred@zulip.com,jill@zulip.com'),
|
||||
'Alice Smith, Fred Flintstone, Jill Hill'
|
||||
);
|
||||
}());
|
||||
|
||||
(function test_short_huddle_name() {
|
||||
function short_name(emails_string) {
|
||||
var user_ids_string = people.emails_strings_to_user_ids_string(emails_string);
|
||||
return activity.short_huddle_name(user_ids_string);
|
||||
}
|
||||
|
||||
assert.equal(
|
||||
activity.short_huddle_name('alice@zulip.com'),
|
||||
short_name('alice@zulip.com'),
|
||||
'Alice Smith'
|
||||
);
|
||||
|
||||
assert.equal(
|
||||
activity.short_huddle_name('alice@zulip.com,jill@zulip.com'),
|
||||
short_name('alice@zulip.com,jill@zulip.com'),
|
||||
'Alice Smith, Jill Hill'
|
||||
);
|
||||
|
||||
assert.equal(
|
||||
activity.short_huddle_name('alice@zulip.com,fred@zulip.com,jill@zulip.com'),
|
||||
short_name('alice@zulip.com,fred@zulip.com,jill@zulip.com'),
|
||||
'Alice Smith, Fred Flintstone, Jill Hill'
|
||||
);
|
||||
|
||||
assert.equal(
|
||||
activity.short_huddle_name('alice@zulip.com,fred@zulip.com,jill@zulip.com,mark@zulip.com'),
|
||||
short_name('alice@zulip.com,fred@zulip.com,jill@zulip.com,mark@zulip.com'),
|
||||
'Alice Smith, Fred Flintstone, Jill Hill, + 1 other'
|
||||
);
|
||||
|
||||
assert.equal(
|
||||
activity.short_huddle_name('alice@zulip.com,fred@zulip.com,jill@zulip.com,mark@zulip.com,norbert@zulip.com'),
|
||||
short_name('alice@zulip.com,fred@zulip.com,jill@zulip.com,mark@zulip.com,norbert@zulip.com'),
|
||||
'Alice Smith, Fred Flintstone, Jill Hill, + 2 others'
|
||||
);
|
||||
|
||||
@@ -155,6 +169,7 @@ activity.update_huddles = function () {};
|
||||
|
||||
(function test_huddle_fraction_present() {
|
||||
var huddle = 'alice@zulip.com,fred@zulip.com,jill@zulip.com,mark@zulip.com';
|
||||
huddle = people.emails_strings_to_user_ids_string(huddle);
|
||||
|
||||
var presence_list = {};
|
||||
presence_list[alice.user_id] = {status: 'active'};
|
||||
|
||||
@@ -84,31 +84,31 @@ activity.presence_info[norbert.user_id] = {status: activity.ACTIVE};
|
||||
var users = activity.update_users();
|
||||
assert.deepEqual(users, [
|
||||
{ name: 'Fred Flintstone',
|
||||
email: 'fred@zulip.com',
|
||||
user_id: fred.user_id,
|
||||
num_unread: 0,
|
||||
type: 'active',
|
||||
type_desc: 'is active',
|
||||
mobile: undefined },
|
||||
{ name: 'Jill Hill',
|
||||
email: 'jill@zulip.com',
|
||||
user_id: jill.user_id,
|
||||
num_unread: 0,
|
||||
type: 'active',
|
||||
type_desc: 'is active',
|
||||
mobile: undefined },
|
||||
{ name: 'Norbert Oswald',
|
||||
email: 'norbert@zulip.com',
|
||||
user_id: norbert.user_id,
|
||||
num_unread: 0,
|
||||
type: 'active',
|
||||
type_desc: 'is active',
|
||||
mobile: undefined },
|
||||
{ name: 'Alice Smith',
|
||||
email: 'alice@zulip.com',
|
||||
user_id: alice.user_id,
|
||||
num_unread: 0,
|
||||
type: 'idle',
|
||||
type_desc: 'is not active',
|
||||
mobile: undefined },
|
||||
{ name: 'Marky Mark',
|
||||
email: 'mark@zulip.com',
|
||||
user_id: mark.user_id,
|
||||
num_unread: 0,
|
||||
type: 'idle',
|
||||
type_desc: 'is not active',
|
||||
@@ -126,7 +126,7 @@ activity.presence_info[norbert.user_id] = {status: activity.ACTIVE};
|
||||
users = activity.update_users(users);
|
||||
assert.deepEqual(users, [
|
||||
{ name: 'Alice Smith',
|
||||
email: 'alice@zulip.com',
|
||||
user_id: alice.user_id,
|
||||
num_unread: 0,
|
||||
type: 'active',
|
||||
type_desc: 'is active',
|
||||
@@ -143,7 +143,7 @@ activity.presence_info[norbert.user_id] = {status: activity.ACTIVE};
|
||||
users = activity.update_users(users);
|
||||
assert.deepEqual(users, [
|
||||
{ name: 'Marky Mark',
|
||||
email: 'mark@zulip.com',
|
||||
user_id: mark.user_id,
|
||||
num_unread: 0,
|
||||
type: 'active',
|
||||
type_desc: 'is active',
|
||||
|
||||
@@ -73,16 +73,16 @@ function update_count_in_dom(count_span, value_span, count) {
|
||||
value_span.text(count);
|
||||
}
|
||||
|
||||
function get_filter_li(name) {
|
||||
function get_filter_li(user_ids_string) {
|
||||
if (name.indexOf(",") < 0) {
|
||||
return $("li.user_sidebar_entry[data-email='" + name + "']");
|
||||
return $("li.user_sidebar_entry[data-user-id='" + user_ids_string + "']");
|
||||
} else {
|
||||
return $("li.group-pms-sidebar-entry[data-emails='" + name + "']");
|
||||
return $("li.group-pms-sidebar-entry[data-user-ids='" + user_ids_string + "']");
|
||||
}
|
||||
}
|
||||
|
||||
function set_count(name, count) {
|
||||
var count_span = get_filter_li(name).find('.count');
|
||||
function set_count(user_ids_string, count) {
|
||||
var count_span = get_filter_li(user_ids_string).find('.count');
|
||||
var value_span = count_span.find('.value');
|
||||
update_count_in_dom(count_span, value_span, count);
|
||||
}
|
||||
@@ -93,8 +93,7 @@ exports.update_dom_with_unread_counts = function (counts) {
|
||||
|
||||
counts.pm_count.each(function (count, user_ids_string) {
|
||||
// TODO: just use user_ids_string in our markup
|
||||
var emails_string = people.user_ids_string_to_emails_string(user_ids_string);
|
||||
set_count(emails_string, count);
|
||||
set_count(user_ids_string, count);
|
||||
});
|
||||
};
|
||||
|
||||
@@ -104,10 +103,17 @@ exports.process_loaded_messages = function (messages) {
|
||||
_.each(messages, function (message) {
|
||||
if (message.type === 'private') {
|
||||
if (message.reply_to.indexOf(',') > 0) {
|
||||
var old_timestamp = huddle_timestamps.get(message.reply_to);
|
||||
var user_ids_string = people.emails_strings_to_user_ids_string(
|
||||
message.reply_to);
|
||||
|
||||
if (!user_ids_string) {
|
||||
blueslip.warn('Bad reply_to for huddle: ' + message.reply_to);
|
||||
}
|
||||
|
||||
var old_timestamp = huddle_timestamps.get(user_ids_string);
|
||||
|
||||
if (!old_timestamp || (old_timestamp < message.timestamp)) {
|
||||
huddle_timestamps.set(message.reply_to, message.timestamp);
|
||||
huddle_timestamps.set(user_ids_string, message.timestamp);
|
||||
need_resize = true;
|
||||
}
|
||||
}
|
||||
@@ -130,25 +136,25 @@ exports.get_huddles = function () {
|
||||
};
|
||||
|
||||
exports.full_huddle_name = function (huddle) {
|
||||
var emails = huddle.split(',');
|
||||
var user_ids = huddle.split(',');
|
||||
|
||||
var names = _.map(emails, function (email) {
|
||||
var person = people.get_by_email(email);
|
||||
return person ? person.full_name : email;
|
||||
var names = _.map(user_ids, function (user_id) {
|
||||
var person = people.get_person_from_user_id(user_id);
|
||||
return person.full_name;
|
||||
});
|
||||
|
||||
return names.join(', ');
|
||||
};
|
||||
|
||||
exports.short_huddle_name = function (huddle) {
|
||||
var emails = huddle.split(',');
|
||||
var user_ids = huddle.split(',');
|
||||
|
||||
var num_to_show = 3;
|
||||
var names = _.map(emails.slice(0, num_to_show), function (email) {
|
||||
var person = people.get_by_email(email);
|
||||
return person ? person.full_name : email;
|
||||
var names = _.map(user_ids.slice(0, num_to_show), function (user_id) {
|
||||
var person = people.get_person_from_user_id(user_id);
|
||||
return person.full_name;
|
||||
});
|
||||
var others = emails.length - num_to_show;
|
||||
var others = user_ids.length - num_to_show;
|
||||
|
||||
if (others === 1) {
|
||||
names.push("+ 1 other");
|
||||
@@ -160,11 +166,10 @@ exports.short_huddle_name = function (huddle) {
|
||||
};
|
||||
|
||||
exports.huddle_fraction_present = function (huddle, presence_info) {
|
||||
var emails = huddle.split(',');
|
||||
var user_ids = huddle.split(',');
|
||||
|
||||
var num_present = 0;
|
||||
_.each(emails, function (email) {
|
||||
var user_id = people.get_user_id(email);
|
||||
_.each(user_ids, function (user_id) {
|
||||
if (presence_info[user_id]) {
|
||||
var status = presence_info[user_id].status;
|
||||
if (status && (status !== 'offline')) {
|
||||
@@ -173,7 +178,7 @@ exports.huddle_fraction_present = function (huddle, presence_info) {
|
||||
}
|
||||
});
|
||||
|
||||
var ratio = num_present / emails.length;
|
||||
var ratio = num_present / user_ids.length;
|
||||
|
||||
return ratio.toFixed(2);
|
||||
};
|
||||
@@ -289,7 +294,7 @@ exports.update_users = function (user_list) {
|
||||
var email = person.email;
|
||||
return {
|
||||
name: person.full_name,
|
||||
email: email,
|
||||
user_id: user_id,
|
||||
num_unread: get_num_unread(email),
|
||||
type: presence,
|
||||
type_desc: presence_descriptions[presence],
|
||||
@@ -300,9 +305,9 @@ exports.update_users = function (user_list) {
|
||||
var user_info = _.map(users, info_for);
|
||||
if (user_list !== undefined) {
|
||||
// Render right panel partially
|
||||
$.each(user_info, function (index, user) {
|
||||
var user_index = all_users.indexOf(user.email);
|
||||
$('#user_presences').find('[data-email="' + user.email + '"]').remove();
|
||||
_.each(user_info, function (user, index) {
|
||||
var user_index = all_users.indexOf(user.user_id);
|
||||
$('#user_presences').find('[data-user-id="' + user.user_id + '"]').remove();
|
||||
$('#user_presences li').eq(user_index).before(templates.render('user_presence_row', user));
|
||||
});
|
||||
} else {
|
||||
@@ -345,7 +350,7 @@ exports.update_huddles = function () {
|
||||
|
||||
var group_pms = _.map(huddles, function (huddle) {
|
||||
return {
|
||||
emails: huddle,
|
||||
user_ids_string: huddle,
|
||||
name: exports.full_huddle_name(huddle),
|
||||
fraction_present: exports.huddle_fraction_present(huddle, exports.presence_info),
|
||||
short_name: exports.short_huddle_name(huddle)
|
||||
@@ -355,9 +360,10 @@ exports.update_huddles = function () {
|
||||
var html = templates.render('group_pms', {group_pms: group_pms});
|
||||
$('#group-pms').expectOne().html(html);
|
||||
|
||||
_.each(huddles, function (huddle) {
|
||||
var count = unread.num_unread_for_person(huddle);
|
||||
set_count(huddle, count);
|
||||
_.each(huddles, function (user_ids_string) {
|
||||
var emails_string = people.user_ids_string_to_emails_string(user_ids_string);
|
||||
var count = unread.num_unread_for_person(emails_string);
|
||||
set_count(user_ids_string, count);
|
||||
});
|
||||
|
||||
show_huddles();
|
||||
@@ -520,11 +526,12 @@ function maybe_select_person (e) {
|
||||
// Prevent a newline from being entered into the soon-to-be-opened composebox
|
||||
e.preventDefault();
|
||||
|
||||
var topPerson = $('#user_presences li.user_sidebar_entry').first().data('email');
|
||||
var topPerson = $('#user_presences li.user_sidebar_entry').first().attr('data-user-id');
|
||||
if (topPerson !== undefined) {
|
||||
// undefined if there are no results
|
||||
var email = people.get_person_from_user_id(topPerson).email;
|
||||
compose.start('private',
|
||||
{trigger: 'sidebar enter key', "private_message_recipient": topPerson});
|
||||
{trigger: 'sidebar enter key', "private_message_recipient": email});
|
||||
}
|
||||
// Clear the user filter
|
||||
exports.escape_search();
|
||||
|
||||
@@ -185,7 +185,9 @@ $(function () {
|
||||
});
|
||||
|
||||
$('#user_presences').expectOne().on('click', '.selectable_sidebar_block', function (e) {
|
||||
var email = $(e.target).parents('li').data('email');
|
||||
var user_id = $(e.target).parents('li').attr('data-user-id');
|
||||
var email = people.get_person_from_user_id(user_id).email;
|
||||
|
||||
narrow.by('pm-with', email, {select_first_unread: true, trigger: 'sidebar'});
|
||||
// The preventDefault is necessary so that clicking the
|
||||
// link doesn't jump us to the top of the page.
|
||||
@@ -203,7 +205,8 @@ $(function () {
|
||||
});
|
||||
|
||||
$('#group-pms').expectOne().on('click', '.selectable_sidebar_block', function (e) {
|
||||
var emails = $(e.target).parents('li').data('emails');
|
||||
var user_ids_string = $(e.target).parents('li').attr('data-user-ids');
|
||||
var emails = people.user_ids_string_to_emails_string(user_ids_string);
|
||||
narrow.by('pm-with', emails, {select_first_unread: true, trigger: 'sidebar'});
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
@@ -130,7 +130,9 @@ function _fade_users() {
|
||||
}
|
||||
_.forEach($('.user_sidebar_entry'), function (elt) {
|
||||
elt = $(elt);
|
||||
var would_receive = exports.would_receive_message(elt.attr('data-email'));
|
||||
var user_id = elt.attr('data-user-id');
|
||||
var email = people.get_person_from_user_id(user_id).email;
|
||||
var would_receive = exports.would_receive_message(email);
|
||||
if (would_receive === true) {
|
||||
elt.addClass('unfaded').removeClass('faded');
|
||||
} else if (would_receive === false) {
|
||||
|
||||
@@ -206,7 +206,7 @@ exports.show_pm_list_sidebar = function () {
|
||||
|
||||
var current_stream_sidebar_elem;
|
||||
var current_topic_sidebar_elem;
|
||||
var current_user_sidebar_email;
|
||||
var current_user_sidebar_user_id;
|
||||
var current_user_sidebar_popover;
|
||||
|
||||
|
||||
@@ -253,7 +253,7 @@ exports.hide_user_sidebar_popover = function () {
|
||||
// and inject it here before calling destroy.
|
||||
$('#user_presences').data("popover", current_user_sidebar_popover);
|
||||
$('#user_presences').popover("destroy");
|
||||
current_user_sidebar_email = undefined;
|
||||
current_user_sidebar_user_id = undefined;
|
||||
current_user_sidebar_popover = undefined;
|
||||
}
|
||||
};
|
||||
@@ -397,11 +397,10 @@ exports.register_click_handlers = function () {
|
||||
// use email of currently selected user, rather than some elem comparison,
|
||||
// as the presence list may be redrawn with new elements.
|
||||
var target = $(this).closest('li');
|
||||
var email = target.find('a').attr('data-email');
|
||||
var user_id = target.find('a').attr('data-user-id');
|
||||
var name = target.find('a').attr('data-name');
|
||||
var user_id = people.get_user_id(email);
|
||||
|
||||
if (current_user_sidebar_email === email) {
|
||||
if (current_user_sidebar_user_id === user_id) {
|
||||
// If the popover is already shown, clicking again should toggle it.
|
||||
popovers.hide_all();
|
||||
return;
|
||||
@@ -421,7 +420,7 @@ exports.register_click_handlers = function () {
|
||||
fixed: true
|
||||
});
|
||||
target.popover("show");
|
||||
current_user_sidebar_email = email;
|
||||
current_user_sidebar_user_id = user_id;
|
||||
current_user_sidebar_popover = target.data('popover');
|
||||
|
||||
});
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{{! User Presence rows }}
|
||||
{{#each group_pms}}
|
||||
<li data-emails="{{emails}}" class="group-pms-sidebar-entry narrow-filter">
|
||||
<li data-user-ids="{{user_ids_string}}" class="group-pms-sidebar-entry narrow-filter">
|
||||
<span class="selectable_sidebar_block">
|
||||
<span class="group-pm-status-indicator" style="background:rgba(68,194,29,{{fraction_present}});"></span>
|
||||
<a href="#" data-name="{{name}}" title="{{name}}" class="group-pm-link">{{short_name}}</a>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<li data-email="{{email}}" class="user_sidebar_entry {{#if num_unread}}user-with-count {{/if}}narrow-filter user_{{type}}">
|
||||
<li data-user-id="{{user_id}}" class="user_sidebar_entry {{#if num_unread}}user-with-count {{/if}}narrow-filter user_{{type}}">
|
||||
<span class="selectable_sidebar_block{{#if mobile}}{{/if}}">
|
||||
<span class="user-status-indicator"></span>
|
||||
<span class="user-device-indicator">{{#if mobile}}{{/if}}</span>
|
||||
<a href="#" data-email="{{email}}" data-name="{{name}}" title="{{name}} {{type_desc}}"
|
||||
<a href="#" data-user-id="{{user_id}}" data-name="{{name}}" title="{{name}} {{type_desc}}"
|
||||
class="{{#if my_fullname}} my_fullname{{/if}}">{{name}}</a>
|
||||
</span>
|
||||
<span class="count"><span class="value">{{#if num_unread}}{{num_unread}}{{/if}}</span></span>
|
||||
|
||||
Reference in New Issue
Block a user