diff --git a/frontend_tests/node_tests/activity.js b/frontend_tests/node_tests/activity.js index 1f13fb5ec3..b734699a65 100644 --- a/frontend_tests/node_tests/activity.js +++ b/frontend_tests/node_tests/activity.js @@ -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'}; diff --git a/frontend_tests/node_tests/presence_list_performance.js b/frontend_tests/node_tests/presence_list_performance.js index 6b331f9aac..4e0b312636 100644 --- a/frontend_tests/node_tests/presence_list_performance.js +++ b/frontend_tests/node_tests/presence_list_performance.js @@ -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', diff --git a/static/js/activity.js b/static/js/activity.js index ff296f13b3..f9f7a03186 100644 --- a/static/js/activity.js +++ b/static/js/activity.js @@ -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(); diff --git a/static/js/click_handlers.js b/static/js/click_handlers.js index 3bc3fba09a..bc06d22584 100644 --- a/static/js/click_handlers.js +++ b/static/js/click_handlers.js @@ -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(); diff --git a/static/js/compose_fade.js b/static/js/compose_fade.js index 4e94d75652..06322b06ae 100644 --- a/static/js/compose_fade.js +++ b/static/js/compose_fade.js @@ -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) { diff --git a/static/js/popovers.js b/static/js/popovers.js index 851f47160f..8ef8f35a59 100644 --- a/static/js/popovers.js +++ b/static/js/popovers.js @@ -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'); }); diff --git a/static/templates/group_pms.handlebars b/static/templates/group_pms.handlebars index f29e48e072..cc7c89bc41 100644 --- a/static/templates/group_pms.handlebars +++ b/static/templates/group_pms.handlebars @@ -1,6 +1,6 @@ {{! User Presence rows }} {{#each group_pms}} -