Index: lams_learning/web/includes/javascript/presence.js
===================================================================
diff -u -rbe6b9658350d706f615e5ce3e4a6b96b8513c5ee -rc8ec910997b4a17fed848ece1895350daf6d3e5d
--- lams_learning/web/includes/javascript/presence.js (.../presence.js) (revision be6b9658350d706f615e5ce3e4a6b96b8513c5ee)
+++ lams_learning/web/includes/javascript/presence.js (.../presence.js) (revision c8ec910997b4a17fed848ece1895350daf6d3e5d)
@@ -2,13 +2,21 @@
var pollInProgress = false;
var roster = {
- users : [],
+ // association nick -> localId, the latter being just some ID made in this script
+ users : {},
+ maxUserLocalId : 0,
// map "tab" -> "last message in tab", so we don't fetch all messages every time, only new ones
lastMessageUids : [],
// when user clicked another user in roster
- handleUserClicked : function(index) {
- var nick = roster.users[index];
+ handleUserClicked : function(localId) {
+ var nick = null;
+ $.each(roster.users, function(key, value){
+ if (value == localId) {
+ nick = key;
+ return false;
+ }
+ });
if(nick != nickname){
var tag = nickToTag(nick);
@@ -31,19 +39,23 @@
updateDisplay : function(users) {
// sort alphabetically
users.sort();
- this.users = users;
-
- // for all users
- jQuery.each(this.users, function(index, nick){
+ // repopulate user objects array
+ var rosterUsers = {};
+ $.each(users, function(index, nick){
+ var localId = roster.users[nick];
+ rosterUsers[nick] = localId ? localId : ++roster.maxUserLocalId;
+ });
+ this.users = rosterUsers;
+
+ jQuery.each(this.users, function(nick, localId){
var tag = nickToTag(nick);
var listingName = tagToListing(tag);
var listing = $("#" + listingName);
-
// if no listing in roster exists
if (listing.length == 0){
// create listing div
var listingDiv = $('