mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +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