diff --git a/www/assets/js/callbacks.js b/www/assets/js/callbacks.js index 7c2945e3..e7b4c866 100644 --- a/www/assets/js/callbacks.js +++ b/www/assets/js/callbacks.js @@ -485,6 +485,8 @@ Callbacks = { setChannelRank: function(data) { var ents = $("#channelranks").data("entries"); + if(typeof ents === undefined) + return; for(var i = 0; i < ents.length; i++) { if(ents[i].name == data.user) { ents[i].rank = data.rank; @@ -618,11 +620,12 @@ Callbacks = { }, addUser: function(data) { - var div = $("
").attr("class", "userlist_item"); + var div = $("
") + .addClass("userlist_item userlist-" + data.name); var flair = $("").appendTo(div); var nametag = $("").text(data.name).appendTo(div); formatUserlistItem(div, data); - addUserDropdown(div, data.name); + addUserDropdown(div, data); var users = $("#userlist").children(); for(var i = 0; i < users.length; i++) { var othername = users[i].children[1].innerHTML; @@ -662,46 +665,24 @@ Callbacks = { } } - var users = $("#userlist").children(); - for(var i = 0; i < users.length; i++) { - var name = users[i].children[1].innerHTML; - // Reformat user - if(name == data.name) { - formatUserlistItem($(users[i]), data); - } - } - + var user = $(".userlist-" + data.name); + formatUserlistItem(user, data); + addUserDropdown(user, data); }, setAFK: function (data) { - var users = $("#userlist").children(); - for(var i = 0; i < users.length; i++) { - var name = users[i].children[1].innerHTML; - // Reformat user - if(name == data.name) { - var u = $(users[i]); - u.find(".icon-time").remove(); - $(users[i].children[1]).css("font-style", ""); - if(data.afk) { - $("").addClass("icon-time") - .appendTo(users[i].children[0]); - $(users[i].children[1]).css("font-style", "italic"); - } - } + var user = $(".userlist-" + data.name); + user.find(".icon-time").remove(); + $(user[0].children[1]).css("font-style", ""); + if(data.afk) { + $("").addClass("icon-time") + .appendTo(user[0].children[0]); + $(user[0].children[1]).css("font-style", "italic"); } }, userLeave: function(data) { - var users = $("#userlist").children(); - for(var i = 0; i < users.length; i++) { - var name = users[i].children[1].innerHTML; - if(name == data.name) { - $(users[i]).remove(); - // Note: no break statement here because allowing - // the loop to continue means a free cleanup if something - // goes wrong and there's a duplicate name - } - } + $(".userlist-" + data.name).remove(); }, drinkCount: function(count) { diff --git a/www/assets/js/util.js b/www/assets/js/util.js index 2f56d101..d11bacb9 100644 --- a/www/assets/js/util.js +++ b/www/assets/js/util.js @@ -116,64 +116,107 @@ function getNameColor(rank) { return ""; } -function addUserDropdown(entry, name) { +function addUserDropdown(entry, data) { + entry.data("dropdown-info", data); + var name = data.name, + rank = data.rank, + leader = data.leader; entry.find(".user-dropdown").remove(); - var menu = $("
").addClass("user-dropdown") - .appendTo(entry); - menu.hide(); + var menu = $("
") + .addClass("user-dropdown") + .appendTo(entry) + .hide(); $("").text(name).appendTo(menu); $("
").appendTo(menu); + + /* rank selector (admin+ only) + to prevent odd behaviour, this selector is only visible + when the selected user has a normal rank (e.g. not a guest + or a non-moderator leader + */ + if(CLIENT.rank >= 3 && CLIENT.rank > rank && rank > 0 && rank != 1.5) { + var sel = $("