diff --git a/acp.js b/acp.js
index 9a4bbcfb..5d7b81fa 100644
--- a/acp.js
+++ b/acp.js
@@ -137,8 +137,8 @@ module.exports = {
}
});
- user.socket.on("acp-actionlog-clear", function() {
- ActionLog.clear();
+ user.socket.on("acp-actionlog-clear", function(data) {
+ ActionLog.clear(data);
ActionLog.record(user.ip, user.name, "acp-actionlog-clear");
});
}
diff --git a/www/acp.html b/www/acp.html
index 3b3fa1fc..e4d949f1 100644
--- a/www/acp.html
+++ b/www/acp.html
@@ -150,10 +150,10 @@
- | UID |
- Name |
- Global Rank |
- Email |
+ UID |
+ Name |
+ Global Rank |
+ Email |
Password Reset |
diff --git a/www/assets/js/acp.js b/www/assets/js/acp.js
index 1d946aec..60439c4f 100644
--- a/www/assets/js/acp.js
+++ b/www/assets/js/acp.js
@@ -41,6 +41,26 @@ menuHandler("#show_logview", "#logview");
menuHandler("#show_announce", "#announcepanel");
menuHandler("#show_gbans", "#gbanpanel");
menuHandler("#show_userlookup", "#userlookup");
+function tableResort(tbl, sortby) {
+ if(tbl.data("sortby") == sortby)
+ tbl.data("sort_desc", !tbl.data("sort_desc"));
+ else
+ tbl.data("sortby", sortby)
+ loadPage(tbl, 0);
+}
+$("#userlookup_uid").click(function() {
+ tableResort($("#userlookup table"), "id");
+});
+$("#userlookup_uname").click(function() {
+ tableResort($("#userlookup table"), "uname");
+});
+$("#userlookup_rank").click(function() {
+ tableResort($("#userlookup table"), "global_rank");
+});
+$("#userlookup_email").click(function() {
+ tableResort($("#userlookup table"), "email");
+});
+
menuHandler("#show_chanloaded", "#channellist");
$("#show_chanloaded").click(function() {
socket.emit("acp-list-loaded");
@@ -151,6 +171,41 @@ $("#userlookup_submit").click(function() {
socket.emit("acp-lookup-user", $("#userlookup_name").val());
});
+function loadPage(tbl, page) {
+ var sort_field = tbl.data("sortby");
+ var sort_desc = tbl.data("sort_desc");
+ var generator = tbl.data("generator");
+ var pag = tbl.data("pagination");
+ if(pag) {
+ pag.find("li").each(function() {
+ $(this).removeClass("active");
+ });
+ $(pag.find("li")[page]).addClass("active");
+ }
+ var e = tbl.data("entries");
+
+ tbl.find("tbody").remove();
+
+ if(sort_field) {
+ e.sort(function(a, b) {
+ var x = a[sort_field];
+ if(typeof x == "string")
+ x = x.toLowerCase();
+ var y = b[sort_field];
+ if(typeof y == "string")
+ y = y.toLowerCase();
+ var z = x == y ? 0 : (x < y ? -1 : 1);
+ if(sort_desc)
+ z = -z;
+ return z;
+ });
+ }
+
+ for(var i = page * 20; i < page * 20 + 20; i++) {
+ generator(e[i]);
+ }
+}
+
function setupCallbacks() {
socket.on("connect", function() {
if(NAME && SESSION) {
@@ -213,21 +268,34 @@ function setupCallbacks() {
});
socket.on("acp-userdata", function(data) {
- data = data.sort(function(a, b) {
- var x = a.uname.toLowerCase();
- var y = b.uname.toLowerCase();
- return x == y ? 0 : (x < y ? -1 : 1);
- });
-
- $("#userlookup tbody").remove();
- for(var i = 0; i < data.length; i++) {
- var u = data[i];
+ var tbl = $("#userlookup table");
+ if(data.length > 20) {
+ var pag = $("").addClass("pagination")
+ .attr("id", "userlookup_pagination")
+ .insertAfter($("#userlookup table"));
+ var btns = $("").appendTo(pag);
+ for(var i = 0; i < data.length / 20; i++) {
+ var li = $("").appendTo(btns);
+ (function(i) {
+ $("").attr("href", "javascript:void(0)")
+ .text(i+1)
+ .click(function() {
+ loadPage(tbl, i);
+ })
+ .appendTo(li);
+ })(i);
+ }
+ tbl.data("pagination", pag);
+ }
+ tbl.data("entries", data);
+ tbl.data("sortby", "uname");
+ tbl.data("sort_desc", false);
+ tbl.data("generator", function(u) {
var tr = $("
").appendTo($("#userlookup table"));
$(" | ").text(u.id).appendTo(tr);
$(" | ").text(u.uname).appendTo(tr);
var rank = $(" | ").text(u.global_rank).appendTo(tr);
$(" | ").text(u.email).appendTo(tr);
- (function(name, email) {
$("").addClass("btn btn-mini")
.text("Reset password")
.appendTo($(" | ").appendTo(tr))
@@ -235,43 +303,41 @@ function setupCallbacks() {
var reset = confirm("Really reset password?");
if(reset) {
socket.emit("acp-reset-password", {
- name: name,
- email: email
+ name: u.uname,
+ email: u.email
});
}
});
- })(u.uname, u.email);
- (function(u) {
- rank.click(function() {
- if(this.find(".rank-edit").length > 0)
- return;
- var r = this.text();
- this.text("");
- var edit = $("").attr("type", "text")
- .attr("placeholder", r)
- .addClass("rank-edit")
- .appendTo(this)
- .focus();
+ rank.click(function() {
+ if(this.find(".rank-edit").length > 0)
+ return;
+ var r = this.text();
+ this.text("");
+ var edit = $("").attr("type", "text")
+ .attr("placeholder", r)
+ .addClass("rank-edit")
+ .appendTo(this)
+ .focus();
- function save() {
- var r = this.val();
- var r2 = r;
- if(r.trim() == "")
- r = this.attr("placeholder");
- this.parent().text(this.attr("placeholder"));
- socket.emit("acp-set-rank", {
- name: u.uname,
- rank: parseInt(r)
- });
- }
- edit.blur(save.bind(edit));
- edit.keydown(function(ev) {
- if(ev.keyCode == 13)
- save.bind(edit)();
+ function save() {
+ var r = this.val();
+ var r2 = r;
+ if(r.trim() == "")
+ r = this.attr("placeholder");
+ this.parent().text(this.attr("placeholder"));
+ socket.emit("acp-set-rank", {
+ name: u.uname,
+ rank: parseInt(r)
});
- }.bind(rank));
- })(u);
- }
+ }
+ edit.blur(save.bind(edit));
+ edit.keydown(function(ev) {
+ if(ev.keyCode == 13)
+ save.bind(edit)();
+ });
+ }.bind(rank));
+ });
+ loadPage($("#userlookup table"), 0);
});
socket.on("acp-set-rank", function(data) {