mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	Split out new module people.js for tracking people.
(imported from commit fb9b769819ade25d1d3d6e452e68c7ee8651cfdd)
This commit is contained in:
		@@ -67,7 +67,7 @@ exports.full_huddle_name = function (huddle) {
 | 
			
		||||
    var emails = huddle.split(',');
 | 
			
		||||
 | 
			
		||||
    var names = _.map(emails, function (email) {
 | 
			
		||||
        var person = people_dict.get(email);
 | 
			
		||||
        var person = people.get_by_email(email);
 | 
			
		||||
        return person ? person.full_name : email;
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
@@ -79,7 +79,7 @@ exports.short_huddle_name = function (huddle) {
 | 
			
		||||
 | 
			
		||||
    var num_to_show = 3;
 | 
			
		||||
    var names = _.map(emails.slice(0, num_to_show), function (email) {
 | 
			
		||||
        var person = people_dict.get(email);
 | 
			
		||||
        var person = people.get_by_email(email);
 | 
			
		||||
        return person ? person.full_name : email;
 | 
			
		||||
    });
 | 
			
		||||
    var others = emails.length - num_to_show;
 | 
			
		||||
@@ -127,11 +127,11 @@ function sort_users(users, presence_info) {
 | 
			
		||||
        // Sort equivalent PM names alphabetically
 | 
			
		||||
        var full_name_a = a;
 | 
			
		||||
        var full_name_b = b;
 | 
			
		||||
        if (people_dict.has(a)) {
 | 
			
		||||
            full_name_a = people_dict.get(a).full_name;
 | 
			
		||||
        if (people.get_by_email(a)) {
 | 
			
		||||
            full_name_a = people.get_by_email(a).full_name;
 | 
			
		||||
        }
 | 
			
		||||
        if (people_dict.has(b)) {
 | 
			
		||||
            full_name_b = people_dict.get(b).full_name;
 | 
			
		||||
        if (people.get_by_email(b)) {
 | 
			
		||||
            full_name_b = people.get_by_email(b).full_name;
 | 
			
		||||
        }
 | 
			
		||||
        return util.strcmp(full_name_a, full_name_b);
 | 
			
		||||
    });
 | 
			
		||||
@@ -163,7 +163,7 @@ function filter_users_by_search(users) {
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    var filtered_users = _.filter(users, function (user) {
 | 
			
		||||
        var person = people_dict.get(user);
 | 
			
		||||
        var person = people.get_by_email(user);
 | 
			
		||||
        if (!person || !person.full_name) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
@@ -189,7 +189,7 @@ function actually_update_users() {
 | 
			
		||||
    var users = Object.keys(presence_info);
 | 
			
		||||
    users = filter_users_by_search(users);
 | 
			
		||||
    users = _.filter(users, function (email) {
 | 
			
		||||
        return people_dict.has(email);
 | 
			
		||||
        return people.get_by_email(email);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    users = sort_users(users, presence_info);
 | 
			
		||||
@@ -208,7 +208,7 @@ function actually_update_users() {
 | 
			
		||||
    function info_for(email) {
 | 
			
		||||
        var presence = presence_info[email];
 | 
			
		||||
        return {
 | 
			
		||||
            name: people_dict.get(email).full_name,
 | 
			
		||||
            name: people.get_by_email(email).full_name,
 | 
			
		||||
            email: email,
 | 
			
		||||
            num_unread: get_num_unread(email),
 | 
			
		||||
            type: presence,
 | 
			
		||||
 
 | 
			
		||||
@@ -111,7 +111,7 @@ exports.would_receive_message = function (email) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (focused_recipient.type === 'stream') {
 | 
			
		||||
        var user = realm_people_dict.get(email);
 | 
			
		||||
        var user = people.realm_get(email);
 | 
			
		||||
        var sub = stream_data.get_sub(focused_recipient.stream);
 | 
			
		||||
        if (user && sub && user.is_bot && !sub.invite_only) {
 | 
			
		||||
            // Bots may receive messages on public streams even if they are
 | 
			
		||||
 
 | 
			
		||||
@@ -149,7 +149,7 @@ function insert_local_message(message_request, local_id) {
 | 
			
		||||
        var emails = message_request.private_message_recipient.split(',');
 | 
			
		||||
        message.display_recipient = _.map(emails, function (email) {
 | 
			
		||||
            email = email.trim();
 | 
			
		||||
            var person = people_dict.get(email);
 | 
			
		||||
            var person = people.get_by_email(email);
 | 
			
		||||
            if (person !== undefined) {
 | 
			
		||||
                return person;
 | 
			
		||||
            }
 | 
			
		||||
@@ -239,8 +239,8 @@ exports.process_from_server = function process_from_server(messages) {
 | 
			
		||||
                if (client_message.display_reply_to !== reply_to) {
 | 
			
		||||
                    client_message.display_reply_to = reply_to;
 | 
			
		||||
                    _.each(message.display_recipient, function (person) {
 | 
			
		||||
                        if (people_dict.get(person.email).full_name !== person.full_name) {
 | 
			
		||||
                            reify_person(person);
 | 
			
		||||
                        if (people.get_by_email(person.email).full_name !== person.full_name) {
 | 
			
		||||
                            people.reify(person);
 | 
			
		||||
                        }
 | 
			
		||||
                    });
 | 
			
		||||
                    updated = true;
 | 
			
		||||
@@ -308,8 +308,8 @@ function handleEmoji(emoji_name) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function handleUserMentions(username) {
 | 
			
		||||
    if (people_by_name_dict.get(username)) {
 | 
			
		||||
        var person = people_by_name_dict.get(username);
 | 
			
		||||
    var person = people.get_by_name(username);
 | 
			
		||||
    if (person !== undefined) {
 | 
			
		||||
        return '<span class="user-mention" data-user-email="' + person.email + '">' +
 | 
			
		||||
                '@' + person.full_name + '</span>';
 | 
			
		||||
    } else if (username === 'all' || username === 'everyone') {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										163
									
								
								static/js/people.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								static/js/people.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,163 @@
 | 
			
		||||
var people = (function () {
 | 
			
		||||
 | 
			
		||||
var exports = {};
 | 
			
		||||
 | 
			
		||||
// The following three Dicts point to the same objects
 | 
			
		||||
// All people we've seen
 | 
			
		||||
var people_dict = new Dict();
 | 
			
		||||
var people_by_name_dict = new Dict();
 | 
			
		||||
// People in this realm
 | 
			
		||||
var realm_people_dict = new Dict();
 | 
			
		||||
 | 
			
		||||
exports.get_by_email = function get_by_email(email) {
 | 
			
		||||
    return people_dict.get(email);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.realm_get = function realm_get(email) {
 | 
			
		||||
    return realm_people_dict.get(email);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.get_by_name = function realm_get(name) {
 | 
			
		||||
    return people_by_name_dict.get(name);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// TODO: Replace these with the tests setting up page_params before
 | 
			
		||||
// loading people.js
 | 
			
		||||
exports.test_set_people_dict = function (data) {
 | 
			
		||||
    people_dict = new Dict.from(data);
 | 
			
		||||
};
 | 
			
		||||
exports.test_set_people_name_dict = function (data) {
 | 
			
		||||
    people_by_name_dict = new Dict.from(data);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function people_cmp(person1, person2) {
 | 
			
		||||
    // Compares objects of the form used in people_list.
 | 
			
		||||
    var name_cmp = util.strcmp(person1.full_name, person2.full_name);
 | 
			
		||||
    if (name_cmp < 0) {
 | 
			
		||||
        return -1;
 | 
			
		||||
    } else if (name_cmp > 0) {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
    return util.strcmp(person1.email, person2.email);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
exports.get_rest_of_realm = function get_rest_of_realm() {
 | 
			
		||||
    var people_minus_you = [];
 | 
			
		||||
    realm_people_dict.each(function (person) {
 | 
			
		||||
        if (person.email !== page_params.email) {
 | 
			
		||||
            people_minus_you.push({"email": person.email,
 | 
			
		||||
                                   "full_name": person.full_name});
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
    return people_minus_you.sort(people_cmp);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.add = function add(person, in_realm) {
 | 
			
		||||
    page_params.people_list.push(person);
 | 
			
		||||
    people_dict.set(person.email, person);
 | 
			
		||||
    people_by_name_dict.set(person.full_name, person);
 | 
			
		||||
    person.pm_recipient_count = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.add_in_realm = function add_in_realm(person) {
 | 
			
		||||
    realm_people_dict.set(person.email, person);
 | 
			
		||||
    exports.add(person);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.remove = function remove(person) {
 | 
			
		||||
    var i;
 | 
			
		||||
    for (i = 0; i < page_params.people_list.length; i++) {
 | 
			
		||||
        if (page_params.people_list[i].email === person.email) {
 | 
			
		||||
            page_params.people_list.splice(i, 1);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    people_dict.del(person.email);
 | 
			
		||||
    people_by_name_dict.del(person.full_name);
 | 
			
		||||
    realm_people_dict.del(person.email);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.reify = function reify(person) {
 | 
			
		||||
    // If a locally sent message is a PM to
 | 
			
		||||
    // an out-of-realm recipient, a people_dict
 | 
			
		||||
    // entry is created with simply an email address
 | 
			
		||||
    // Once we've received the full person object, replace
 | 
			
		||||
    // it
 | 
			
		||||
    if (! people_dict.has(person.email)) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    var old_person = people_dict.get(person.email);
 | 
			
		||||
    var old_idx = page_params.people_list.indexOf(old_person);
 | 
			
		||||
 | 
			
		||||
    var new_person = _.extend({}, old_person, person);
 | 
			
		||||
    people_dict.set(person.email, person);
 | 
			
		||||
    people_by_name_dict.set(person.full_name, person);
 | 
			
		||||
    page_params.people_list[old_idx] = new_person;
 | 
			
		||||
 | 
			
		||||
    if (people_by_name_dict.has(person.email)) {
 | 
			
		||||
        people_by_name_dict.del(person.email);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.update = function update(person) {
 | 
			
		||||
    // Currently the only attribute that can change is full_name, so
 | 
			
		||||
    // we just push out changes to that field.  As we add more things
 | 
			
		||||
    // that can change, this will need to either get complicated or be
 | 
			
		||||
    // replaced by MVC
 | 
			
		||||
    if (! people_dict.has(person.email)) {
 | 
			
		||||
        blueslip.error("Got update_person event for unexpected user",
 | 
			
		||||
                       {email: person.email});
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    var person_obj = people_dict.get(person.email);
 | 
			
		||||
 | 
			
		||||
    if (_.has(person, 'full_name')) {
 | 
			
		||||
        if (people_by_name_dict.has(person_obj.full_name)) {
 | 
			
		||||
            people_by_name_dict.set(person.full_name, person_obj);
 | 
			
		||||
            people_by_name_dict.del(person_obj.full_name);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        person_obj.full_name = person.full_name;
 | 
			
		||||
 | 
			
		||||
        if (person.email === page_params.email) {
 | 
			
		||||
            page_params.fullname = person.full_name;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (_.has(person, 'is_admin')) {
 | 
			
		||||
        person_obj.is_admin = person.is_admin;
 | 
			
		||||
 | 
			
		||||
        if (person.email === page_params.email) {
 | 
			
		||||
            page_params.is_admin = person.is_admin;
 | 
			
		||||
            admin.show_or_hide_menu_item();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    activity.set_user_statuses([]);
 | 
			
		||||
 | 
			
		||||
    // TODO: update sender names on messages
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
$(function () {
 | 
			
		||||
    _.each(page_params.people_list, function (person) {
 | 
			
		||||
        people_dict.set(person.email, person);
 | 
			
		||||
        people_by_name_dict.set(person.full_name, person);
 | 
			
		||||
        realm_people_dict.set(person.email, person);
 | 
			
		||||
        person.pm_recipient_count = 0;
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    // The special account feedback@zulip.com is used for in-app
 | 
			
		||||
    // feedback and should always show up as an autocomplete option.
 | 
			
		||||
    if (! people.get_by_email('feedback@zulip.com')) {
 | 
			
		||||
        exports.add({"email": "feedback@zulip.com",
 | 
			
		||||
                     "full_name": "Zulip Feedback Bot"});
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
return exports;
 | 
			
		||||
 | 
			
		||||
}());
 | 
			
		||||
if (typeof module !== 'undefined') {
 | 
			
		||||
    module.exports = people;
 | 
			
		||||
}
 | 
			
		||||
@@ -63,11 +63,11 @@ function get_events_success(events) {
 | 
			
		||||
            break;
 | 
			
		||||
        case 'realm_user':
 | 
			
		||||
            if (event.op === 'add') {
 | 
			
		||||
                add_person_in_realm(event.person);
 | 
			
		||||
                people.add_in_realm(event.person);
 | 
			
		||||
            } else if (event.op === 'remove') {
 | 
			
		||||
                remove_person(event.person);
 | 
			
		||||
                people.remove(event.person);
 | 
			
		||||
            } else if (event.op === 'update') {
 | 
			
		||||
                update_person(event.person);
 | 
			
		||||
                people.update(event.person);
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
        case 'stream':
 | 
			
		||||
 
 | 
			
		||||
@@ -548,17 +548,6 @@ function ajaxSubscribeForCreation(stream, principals, invite_only, announce) {
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function people_cmp(person1, person2) {
 | 
			
		||||
    // Compares objects of the form used in people_list.
 | 
			
		||||
    var name_cmp = util.strcmp(person1.full_name, person2.full_name);
 | 
			
		||||
    if (name_cmp < 0) {
 | 
			
		||||
        return -1;
 | 
			
		||||
    } else if (name_cmp > 0) {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
    return util.strcmp(person1.email, person2.email);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Within the new stream modal...
 | 
			
		||||
function update_announce_stream_state() {
 | 
			
		||||
    // If the stream is invite only, or everyone's added, disable
 | 
			
		||||
@@ -579,16 +568,8 @@ function update_announce_stream_state() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function show_new_stream_modal() {
 | 
			
		||||
    var people_minus_you_and_internal_users = [];
 | 
			
		||||
    realm_people_dict.each(function (person) {
 | 
			
		||||
        if (person.email !== page_params.email) {
 | 
			
		||||
            people_minus_you_and_internal_users.push({"email": person.email,
 | 
			
		||||
                "full_name": person.full_name});
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    $('#people_to_add').html(templates.render('new_stream_users', {
 | 
			
		||||
        users: people_minus_you_and_internal_users.sort(people_cmp)
 | 
			
		||||
        users: people.get_rest_of_realm()
 | 
			
		||||
    }));
 | 
			
		||||
 | 
			
		||||
    // Make the options default to the same each time:
 | 
			
		||||
@@ -797,7 +778,7 @@ $(function () {
 | 
			
		||||
                    // mark_subscribed adds the user to the member list
 | 
			
		||||
                    mark_subscribed(stream);
 | 
			
		||||
                } else {
 | 
			
		||||
                    add_to_member_list(list, people_dict.get(principal).full_name, principal);
 | 
			
		||||
                    add_to_member_list(list, people.get_by_email(principal).full_name, principal);
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                error_elem.addClass("hide");
 | 
			
		||||
@@ -961,11 +942,11 @@ $(function () {
 | 
			
		||||
            success: function (data) {
 | 
			
		||||
                util.destroy_loading_indicator(indicator_elem);
 | 
			
		||||
                var subscribers = _.map(data.subscribers, function (elem) {
 | 
			
		||||
                    var person = people_dict.get(elem);
 | 
			
		||||
                    var person = people.get_by_email(elem);
 | 
			
		||||
                    if (person === undefined) {
 | 
			
		||||
                        return elem;
 | 
			
		||||
                    }
 | 
			
		||||
                    return format_member_list_elem(people_dict.get(elem).full_name, elem);
 | 
			
		||||
                    return format_member_list_elem(people.get_by_email(elem).full_name, elem);
 | 
			
		||||
                });
 | 
			
		||||
                _.each(subscribers.sort().reverse(), function (elem) {
 | 
			
		||||
                    // add_element_to_member_list *prepends* the element,
 | 
			
		||||
 
 | 
			
		||||
@@ -50,10 +50,10 @@ function make_tab_data() {
 | 
			
		||||
            if (filter.has_operator("pm-with")) {
 | 
			
		||||
                var emails = filter.operands("pm-with")[0].split(',');
 | 
			
		||||
                var names = _.map(emails, function (email) {
 | 
			
		||||
                    if (! people_dict.has(email)) {
 | 
			
		||||
                    if (! people.get_by_email(email)) {
 | 
			
		||||
                        return email;
 | 
			
		||||
                    }
 | 
			
		||||
                    return people_dict.get(email).full_name;
 | 
			
		||||
                    return people.get_by_email(email).full_name;
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
                tabs.push(make_tab(names.join(', '), hashed));
 | 
			
		||||
@@ -69,8 +69,8 @@ function make_tab_data() {
 | 
			
		||||
            tabs.push(make_tab("Mentions", hashed));
 | 
			
		||||
        } else if (filter.has_operator("sender")) {
 | 
			
		||||
            var sender = filter.operands("sender")[0];
 | 
			
		||||
            if (people_dict.has(sender)) {
 | 
			
		||||
                sender = people_dict.get(sender).full_name;
 | 
			
		||||
            if (people.get_by_email(sender)) {
 | 
			
		||||
                sender = people.get_by_email(sender).full_name;
 | 
			
		||||
            }
 | 
			
		||||
            tabs.push(make_tab("Sent by " + sender, hashed));
 | 
			
		||||
        }  else if (filter.has_operator("search")) {
 | 
			
		||||
 
 | 
			
		||||
@@ -12,13 +12,6 @@ var home_msg_list = new MessageList('zhome',
 | 
			
		||||
var narrowed_msg_list;
 | 
			
		||||
var current_msg_list = home_msg_list;
 | 
			
		||||
 | 
			
		||||
// The following three Dicts point to the same objects
 | 
			
		||||
// All people we've seen
 | 
			
		||||
var people_dict = new Dict();
 | 
			
		||||
var people_by_name_dict = new Dict();
 | 
			
		||||
// People in this realm
 | 
			
		||||
var realm_people_dict = new Dict();
 | 
			
		||||
 | 
			
		||||
var recent_subjects = new Dict({fold_case: true});
 | 
			
		||||
 | 
			
		||||
var queued_mark_as_read = [];
 | 
			
		||||
@@ -46,93 +39,6 @@ var suppress_unread_counts = true;
 | 
			
		||||
 | 
			
		||||
var waiting_on_browser_scroll = true;
 | 
			
		||||
 | 
			
		||||
function add_person(person, in_realm) {
 | 
			
		||||
    page_params.people_list.push(person);
 | 
			
		||||
    people_dict.set(person.email, person);
 | 
			
		||||
    people_by_name_dict.set(person.full_name, person);
 | 
			
		||||
    person.pm_recipient_count = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function add_person_in_realm(person) {
 | 
			
		||||
    realm_people_dict.set(person.email, person);
 | 
			
		||||
    add_person(person);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function remove_person(person) {
 | 
			
		||||
    var i;
 | 
			
		||||
    for (i = 0; i < page_params.people_list.length; i++) {
 | 
			
		||||
        if (page_params.people_list[i].email === person.email) {
 | 
			
		||||
            page_params.people_list.splice(i, 1);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    people_dict.del(person.email);
 | 
			
		||||
    people_by_name_dict.del(person.full_name);
 | 
			
		||||
    realm_people_dict.del(person.email);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function reify_person(person) {
 | 
			
		||||
    // If a locally sent message is a PM to
 | 
			
		||||
    // an out-of-realm recipient, a people_dict
 | 
			
		||||
    // entry is created with simply an email address
 | 
			
		||||
    // Once we've received the full person object, replace
 | 
			
		||||
    // it
 | 
			
		||||
    if (! people_dict.has(person.email)) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    var old_person = people_dict.get(person.email);
 | 
			
		||||
    var old_idx = page_params.people_list.indexOf(old_person);
 | 
			
		||||
 | 
			
		||||
    var new_person = _.extend({}, old_person, person);
 | 
			
		||||
    people_dict.set(person.email, person);
 | 
			
		||||
    people_by_name_dict.set(person.full_name, person);
 | 
			
		||||
    page_params.people_list[old_idx] = new_person;
 | 
			
		||||
 | 
			
		||||
    if (people_by_name_dict.has(person.email)) {
 | 
			
		||||
        people_by_name_dict.del(person.email);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function update_person(person) {
 | 
			
		||||
    // Currently the only attribute that can change is full_name, so
 | 
			
		||||
    // we just push out changes to that field.  As we add more things
 | 
			
		||||
    // that can change, this will need to either get complicated or be
 | 
			
		||||
    // replaced by MVC
 | 
			
		||||
    if (! people_dict.has(person.email)) {
 | 
			
		||||
        blueslip.error("Got update_person event for unexpected user",
 | 
			
		||||
                       {email: person.email});
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    var person_obj = people_dict.get(person.email);
 | 
			
		||||
 | 
			
		||||
    if (_.has(person, 'full_name')) {
 | 
			
		||||
        if (people_by_name_dict.has(person_obj.full_name)) {
 | 
			
		||||
            people_by_name_dict.set(person.full_name, person_obj);
 | 
			
		||||
            people_by_name_dict.del(person_obj.full_name);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        person_obj.full_name = person.full_name;
 | 
			
		||||
 | 
			
		||||
        if (person.email === page_params.email) {
 | 
			
		||||
            page_params.fullname = person.full_name;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (_.has(person, 'is_admin')) {
 | 
			
		||||
        person_obj.is_admin = person.is_admin;
 | 
			
		||||
 | 
			
		||||
        if (person.email === page_params.email) {
 | 
			
		||||
            page_params.is_admin = person.is_admin;
 | 
			
		||||
            admin.show_or_hide_menu_item();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    activity.set_user_statuses([]);
 | 
			
		||||
 | 
			
		||||
    // TODO: update sender names on messages
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function within_viewport(row_offset, row_height) {
 | 
			
		||||
    // Returns true if a message is fully within the effectively visible
 | 
			
		||||
    // part of the viewport.
 | 
			
		||||
@@ -683,17 +589,17 @@ function add_message_metadata(message) {
 | 
			
		||||
    _.each(involved_people, function (person) {
 | 
			
		||||
        // Do the hasOwnProperty() call via the prototype to avoid problems
 | 
			
		||||
        // with keys like "hasOwnProperty"
 | 
			
		||||
        if (! people_dict.has(person.email)) {
 | 
			
		||||
            add_person(person);
 | 
			
		||||
        if (! people.get_by_email(person.email)) {
 | 
			
		||||
            people.add(person);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (people_dict.get(person.email).full_name !== person.full_name) {
 | 
			
		||||
            reify_person(person);
 | 
			
		||||
        if (people.get_by_email(person.email).full_name !== person.full_name) {
 | 
			
		||||
            people.reify(person);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (message.type === 'private' && message.sent_by_me) {
 | 
			
		||||
            // Track the number of PMs we've sent to this person to improve autocomplete
 | 
			
		||||
            people_dict.get(person.email).pm_recipient_count += 1;
 | 
			
		||||
            people.get_by_email(person.email).pm_recipient_count += 1;
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
@@ -1090,20 +996,6 @@ function consider_bankruptcy() {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_.each(page_params.people_list, function (person) {
 | 
			
		||||
    people_dict.set(person.email, person);
 | 
			
		||||
    people_by_name_dict.set(person.full_name, person);
 | 
			
		||||
    realm_people_dict.set(person.email, person);
 | 
			
		||||
    person.pm_recipient_count = 0;
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
// The special account feedback@zulip.com is used for in-app
 | 
			
		||||
// feedback and should always show up as an autocomplete option.
 | 
			
		||||
if (! people_dict.has('feedback@zulip.com')){
 | 
			
		||||
    add_person({"email": "feedback@zulip.com",
 | 
			
		||||
                "full_name": "Zulip Feedback Bot"});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function main() {
 | 
			
		||||
    activity.set_user_statuses(page_params.initial_presences,
 | 
			
		||||
                               page_params.initial_servertime);
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ var globals =
 | 
			
		||||
    + ' compose compose_fade rows hotkeys narrow reload notifications_bar search subs'
 | 
			
		||||
    + ' composebox_typeahead server_events typeahead_helper notifications hashchange'
 | 
			
		||||
    + ' invite ui util activity timerender MessageList MessageListView blueslip unread stream_list'
 | 
			
		||||
    + ' message_edit tab_bar emoji popovers navigate settings'
 | 
			
		||||
    + ' message_edit tab_bar emoji popovers navigate people settings'
 | 
			
		||||
    + ' avatar feature_flags search_suggestion referral stream_color Dict'
 | 
			
		||||
    + ' Filter summary admin stream_data muting WinChan muting_ui Socket channel'
 | 
			
		||||
 | 
			
		||||
@@ -53,7 +53,6 @@ var globals =
 | 
			
		||||
    // zulip.js
 | 
			
		||||
    + ' all_msg_list home_msg_list narrowed_msg_list current_msg_list get_updates_params'
 | 
			
		||||
    + ' add_messages'
 | 
			
		||||
    + ' people_dict people_by_name_dict realm_people_dict'
 | 
			
		||||
    + ' keep_pointer_in_view unread_messages_read_in_narrow'
 | 
			
		||||
    + ' respond_to_message recenter_view last_viewport_movement_direction'
 | 
			
		||||
    + ' scroll_to_selected get_private_message_recipient'
 | 
			
		||||
@@ -65,7 +64,6 @@ var globals =
 | 
			
		||||
    + ' mark_current_list_as_read message_range message_in_table process_loaded_for_unread'
 | 
			
		||||
    + ' mark_all_as_read message_unread process_read_messages unread_in_current_view'
 | 
			
		||||
    + ' fast_forward_pointer recent_subjects unread_subjects'
 | 
			
		||||
    + ' add_person_in_realm remove_person update_person'
 | 
			
		||||
    + ' furthest_read server_furthest_read update_messages'
 | 
			
		||||
    + ' add_message_metadata'
 | 
			
		||||
    + ' mark_message_as_read batched_flag_updater'
 | 
			
		||||
@@ -74,7 +72,7 @@ var globals =
 | 
			
		||||
    + ' suppress_unread_counts'
 | 
			
		||||
    + ' msg_metadata_cache'
 | 
			
		||||
    + ' report_as_received'
 | 
			
		||||
    + ' insert_new_messages process_message_for_recent_subjects reify_person'
 | 
			
		||||
    + ' insert_new_messages process_message_for_recent_subjects'
 | 
			
		||||
    ;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,5 @@
 | 
			
		||||
var assert = require('assert');
 | 
			
		||||
 | 
			
		||||
add_dependencies({
 | 
			
		||||
    _: 'third/underscore/underscore.js',
 | 
			
		||||
    util: 'js/util.js',
 | 
			
		||||
    Dict: 'js/dict.js'
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
set_global('$', function () {
 | 
			
		||||
    return {
 | 
			
		||||
        on: function () {
 | 
			
		||||
@@ -13,6 +7,18 @@ set_global('$', function () {
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
});
 | 
			
		||||
$.fn = {};
 | 
			
		||||
$.fn.expectOne = function () {
 | 
			
		||||
    assert(this.length === 1);
 | 
			
		||||
    return this;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
add_dependencies({
 | 
			
		||||
    _: 'third/underscore/underscore.js',
 | 
			
		||||
    util: 'js/util.js',
 | 
			
		||||
    Dict: 'js/dict.js',
 | 
			
		||||
    people: 'js/people.js'
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
set_global('document', {
 | 
			
		||||
    hasFocus: function () {
 | 
			
		||||
@@ -20,7 +26,8 @@ set_global('document', {
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
set_global('people_dict', new global.Dict.from({
 | 
			
		||||
var people = require("js/people.js");
 | 
			
		||||
people.test_set_people_dict({
 | 
			
		||||
    'alice@zulip.com': {
 | 
			
		||||
        full_name: 'Alice Smith'
 | 
			
		||||
    },
 | 
			
		||||
@@ -36,7 +43,7 @@ set_global('people_dict', new global.Dict.from({
 | 
			
		||||
    'norbert@zulip.com': {
 | 
			
		||||
        full_name: 'Norbert Oswald'
 | 
			
		||||
    }
 | 
			
		||||
}));
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
var activity = require('js/activity.js');
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -10,6 +10,7 @@ add_dependencies({
 | 
			
		||||
    marked: 'third/marked/lib/marked.js',
 | 
			
		||||
    Dict: 'js/dict.js',
 | 
			
		||||
    emoji: 'js/emoji.js',
 | 
			
		||||
    people: 'js/people.js',
 | 
			
		||||
    fenced_code: 'js/fenced_code.js'
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
@@ -35,7 +36,8 @@ set_global('page_params', {
 | 
			
		||||
 | 
			
		||||
set_global('feature_flags', {local_echo: true});
 | 
			
		||||
 | 
			
		||||
set_global('people_by_name_dict', Dict.from({'Cordelia Lear': {full_name: 'Cordelia Lear', email: 'cordelia@zulip.com'}}));
 | 
			
		||||
var people = require("js/people.js");
 | 
			
		||||
people.test_set_people_name_dict({'Cordelia Lear': {full_name: 'Cordelia Lear', email: 'cordelia@zulip.com'}});
 | 
			
		||||
 | 
			
		||||
var echo = require('js/echo.js');
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -553,6 +553,7 @@ JS_SPECS = {
 | 
			
		||||
            'js/message_list.js',
 | 
			
		||||
            'js/alert_words.js',
 | 
			
		||||
            'js/alert_words_ui.js',
 | 
			
		||||
            'js/people.js',
 | 
			
		||||
            'js/server_events.js',
 | 
			
		||||
            'js/zulip.js',
 | 
			
		||||
            'js/activity.js',
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user