diff --git a/frontend_tests/node_tests/buddy_data.js b/frontend_tests/node_tests/buddy_data.js index bb4b89df20..84c4cc7ee8 100644 --- a/frontend_tests/node_tests/buddy_data.js +++ b/frontend_tests/node_tests/buddy_data.js @@ -91,6 +91,15 @@ run_test('buddy_status', () => { assert.equal(buddy_data.buddy_status(me.user_id), 'active'); }); +run_test('user_title', () => { + assert.equal(buddy_data.user_title(me.user_id), 'Human Myself is active'); + user_status.set_status_text({ + user_id: me.user_id, + status_text: 'out to lunch', + }); + assert.equal(buddy_data.user_title(me.user_id), 'out to lunch'); +}); + run_test('simple search', () => { const user_ids = buddy_data.get_filtered_and_sorted_user_ids('sel'); diff --git a/static/js/buddy_data.js b/static/js/buddy_data.js index 8c961e2bac..d15405d55d 100644 --- a/static/js/buddy_data.js +++ b/static/js/buddy_data.js @@ -134,10 +134,33 @@ exports.my_user_status = function (user_id) { return i18n.t('(you)'); }; +exports.user_title = function (user_id) { + var buddy_status = exports.buddy_status(user_id); + var type_desc = presence_descriptions[buddy_status]; + var status_text = user_status.get_status_text(user_id); + var person = people.get_person_from_user_id(user_id); + var title; + + if (status_text) { + // The user-set status, like "out to lunch", + // is more important than actual presence. + title = status_text; + } else { + title = person.full_name; + if (type_desc) { + // example: "Cordelia Lear is away" + title += ' ' + type_desc; + } + } + + return title; +}; + exports.info_for = function (user_id) { var buddy_status = exports.buddy_status(user_id); var person = people.get_person_from_user_id(user_id); var my_user_status = exports.my_user_status(user_id); + var title = exports.user_title(user_id); return { href: hash_util.pm_with_uri(person.email), @@ -147,7 +170,7 @@ exports.info_for = function (user_id) { is_current_user: people.is_my_user_id(user_id), num_unread: get_num_unread(user_id), type: buddy_status, - type_desc: presence_descriptions[buddy_status], + title: title, }; }; diff --git a/static/js/server_events_dispatch.js b/static/js/server_events_dispatch.js index b0ea355ed4..ff7f2e45ac 100644 --- a/static/js/server_events_dispatch.js +++ b/static/js/server_events_dispatch.js @@ -472,6 +472,7 @@ exports.dispatch_normal_event = function dispatch_normal_event(event) { user_id: event.user_id, status_text: event.status_text, }); + activity.redraw_user(event.user_id); } break; } diff --git a/static/templates/user_presence_row.handlebars b/static/templates/user_presence_row.handlebars index cdd726ed9c..d353a9c83a 100644 --- a/static/templates/user_presence_row.handlebars +++ b/static/templates/user_presence_row.handlebars @@ -5,7 +5,7 @@ href="{{href}}" data-user-id="{{user_id}}" data-name="{{name}}" - title="{{name}} {{type_desc}}"> + title="{{title}}"> {{name}} {{#if my_user_status}} {{my_user_status}}