Sort user list within a single pass, use server provided user modes
This commit is contained in:
parent
516ccd965f
commit
071881a9fa
@ -23,18 +23,21 @@ function Chan(attr) {
|
||||
}, attr));
|
||||
}
|
||||
|
||||
Chan.prototype.sortUsers = function() {
|
||||
this.users = _.sortBy(
|
||||
this.users,
|
||||
function(u) { return u.name.toLowerCase(); }
|
||||
);
|
||||
Chan.prototype.sortUsers = function(irc) {
|
||||
var userModeSortPriority = {};
|
||||
irc.network.options.PREFIX.forEach(function(prefix, index) {
|
||||
userModeSortPriority[prefix.symbol] = index;
|
||||
});
|
||||
|
||||
["+", "%", "@", "&", "~"].forEach(function(mode) {
|
||||
this.users = _.remove(
|
||||
this.users,
|
||||
function(u) { return u.mode === mode; }
|
||||
).concat(this.users);
|
||||
}, this);
|
||||
userModeSortPriority[""] = 99; // No mode is lowest
|
||||
|
||||
this.users = this.users.sort(function(a, b) {
|
||||
if (a.mode === b.mode) {
|
||||
return a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1;
|
||||
}
|
||||
|
||||
return userModeSortPriority[a.mode] - userModeSortPriority[b.mode];
|
||||
});
|
||||
};
|
||||
|
||||
Chan.prototype.getMode = function(name) {
|
||||
|
@ -19,7 +19,7 @@ module.exports = function(irc, network) {
|
||||
});
|
||||
}
|
||||
chan.users.push(new User({nick: data.nick, modes: ""}));
|
||||
chan.sortUsers();
|
||||
chan.sortUsers(irc);
|
||||
client.emit("users", {
|
||||
chan: chan.id
|
||||
});
|
||||
|
@ -19,7 +19,7 @@ module.exports = function(irc, network) {
|
||||
|
||||
chan.users.push(user);
|
||||
});
|
||||
chan.sortUsers();
|
||||
chan.sortUsers(irc);
|
||||
client.emit("users", {
|
||||
chan: chan.id
|
||||
});
|
||||
|
@ -29,7 +29,7 @@ module.exports = function(irc, network) {
|
||||
return;
|
||||
}
|
||||
user.name = data.newnick;
|
||||
chan.sortUsers();
|
||||
chan.sortUsers(irc);
|
||||
client.emit("users", {
|
||||
chan: chan.id
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user