Merge pull request #217 from thelounge/xpaw/keep-autocomplete

Keep autocompletion sort whenever user list updates
This commit is contained in:
Pavel Djundik 2016-05-01 08:56:13 +03:00
commit c6c32e7d5f
3 changed files with 32 additions and 23 deletions

View File

@ -153,7 +153,7 @@ $(function() {
channels: channels
})
);
channels.forEach(renderChannelMessages);
channels.forEach(renderChannel);
confirmExit();
}
@ -191,7 +191,7 @@ $(function() {
channels: [data.chan]
})
);
renderChannelMessages(data.chan);
renderChannel(data.chan);
var chan = sidebar.find(".chan")
.sort(function(a, b) { return $(a).data("id") - $(b).data("id"); })
.last();
@ -260,11 +260,38 @@ $(function() {
}, $(document.createDocumentFragment()));
}
function renderChannel(data) {
renderChannelMessages(data);
renderChannelUsers(data);
}
function renderChannelMessages(data) {
var documentFragment = buildChannelMessages(data.id, data.messages);
chat.find("#chan-" + data.id + " .messages").append(documentFragment);
}
function renderChannelUsers(data) {
var users = chat.find("#chan-" + data.id).find(".users");
var nicks = users.data("nicks") || [];
var i, oldSortOrder = {};
for (i in nicks) {
oldSortOrder[nicks[i]] = i;
}
nicks = [];
for (i in data.users) {
nicks.push(data.users[i].name);
}
nicks = nicks.sort(function(a, b) {
return (oldSortOrder[a] || Number.MAX_VALUE) - (oldSortOrder[b] || Number.MAX_VALUE);
});
users.html(render("user", data)).data("nicks", nicks);
}
socket.on("msg", function(data) {
var msg = buildChatMessage(data);
var target = "#chan-" + data.chan;
@ -401,14 +428,7 @@ $(function() {
}
});
socket.on("names", function(data) {
var users = chat.find("#chan-" + data.chan).find(".users").html(render("user", data));
var nicks = [];
for (var i in data.users) {
nicks.push(data.users[i].name);
}
users.data("nicks", nicks);
});
socket.on("names", renderChannelUsers);
var userStyles = $("#user-specified-css");
var settings = $("#settings");
@ -965,15 +985,6 @@ $(function() {
var users = chat.find(".active").find(".users");
var nicks = users.data("nicks");
if (!nicks) {
nicks = [];
users.find(".user").each(function() {
var nick = $(this).text().replace(/[~&@%+]/, "");
nicks.push(nick);
});
users.data("nicks", nicks);
}
for (var i in nicks) {
words.push(nicks[i]);
}

View File

@ -18,9 +18,7 @@
<div class="messages"></div>
</div>
<aside class="sidebar">
<div class="users">
{{partial "user"}}
</div>
<div class="users"></div>
</aside>
</div>
{{/each}}

View File

@ -344,7 +344,7 @@ Client.prototype.names = function(data) {
}
client.emit("names", {
chan: target.chan.id,
id: target.chan.id,
users: target.chan.users
});
};