Implement ACL for channel owners (Issue #42)

This commit is contained in:
Calvin Montgomery 2013-04-22 22:28:40 +04:00
parent d7de1fc69e
commit bb019deeb7
10 changed files with 173 additions and 26 deletions

View file

@ -101,6 +101,8 @@ function initCallbacks() {
updateBanlist(data.entries);
});
socket.on("acl", updateACL);
socket.on("voteskip", function(data) {
if(data.count > 0) {
$("#voteskip").text("Voteskip ("+data.count+"/"+data.need+")");

View file

@ -382,41 +382,50 @@ $("#updatemotd").click(function() {
});
$("#show_chancontrols").click(function() {
$("#show_banlist").parent().removeClass("active");
$("#show_motdeditor").parent().removeClass("active");
$("#show_filtereditor").parent().removeClass("active");
$("#show_chancontrols").parent().addClass("active");
$("#modnav li").each(function() {
$(this).removeClass("active");
});
$(".modonly").hide();
$("#show_chancontrols").parent().addClass("active");
$("#chancontrols").show();
});
$("#show_banlist").click(function() {
$("#show_chancontrols").parent().removeClass("active");
$("#show_motdeditor").parent().removeClass("active");
$("#show_filtereditor").parent().removeClass("active");
$("#show_banlist").parent().addClass("active");
$("#modnav li").each(function() {
$(this).removeClass("active");
});
$(".modonly").hide();
$("#show_banlist").parent().addClass("active");
$("#banlist").show();
});
$("#show_motdeditor").click(function() {
$("#show_chancontrols").parent().removeClass("active");
$("#show_banlist").parent().removeClass("active");
$("#show_filtereditor").parent().removeClass("active");
$("#show_motdeditor").parent().addClass("active");
$("#modnav li").each(function() {
$(this).removeClass("active");
});
$(".modonly").hide();
$("#show_motdeditor").parent().addClass("active");
$("#motdeditor").show();
});
$("#show_filtereditor").click(function() {
$("#show_chancontrols").parent().removeClass("active");
$("#show_banlist").parent().removeClass("active");
$("#show_motdeditor").parent().removeClass("active");
$("#show_filtereditor").parent().addClass("active");
$("#modnav li").each(function() {
$(this).removeClass("active");
});
$(".modonly").hide();
$("#show_filtereditor").parent().addClass("active");
$("#filtereditor").show();
});
$("#show_acl").click(function() {
$("#modnav li").each(function() {
$(this).removeClass("active");
});
$(".modonly").hide();
$("#show_acl").parent().addClass("active");
$("#channelranks").show();
});
function searchLibrary() {
socket.emit("searchLibrary", {
query: $("#library_query").val()

View file

@ -672,6 +672,50 @@ function updateChatFilters(entries) {
add.click(cback);
}
function updateACL(entries) {
entries.sort(function(a, b) {
var x = a.name.toLowerCase();
var y = b.name.toLowerCase();
return y == x ? 0 : (x < y ? -1 : 1);
});
var tbl = $("#channelranks table");
if(tbl.children().length > 1) {
$(tbl.children()[1]).remove();
}
for(var i = 0; i < entries.length; i++) {
var tr = $("<tr/>").appendTo(tbl);
var name = $("<td/>").text(entries[i].name).appendTo(tr);
name.addClass(getNameColor(entries[i].rank));
var rank = $("<td/>").text(entries[i].rank).appendTo(tr);
var control = $("<td/>").appendTo(tr);
var up = $("<button/>").addClass("btn btn-mini btn-success")
.appendTo(control);
$("<i/>").addClass("icon-plus").appendTo(up);
var down = $("<button/>").addClass("btn btn-mini btn-danger")
.appendTo(control);
$("<i/>").addClass("icon-minus").appendTo(down);
if(entries[i].rank + 1 >= RANK) {
up.attr("disabled", true);
}
else {
up.click(function(name) { return function() {
socket.emit("promote", {
name: name
});
}}(entries[i].name));
}
if(entries[i].rank >= RANK) {
down.attr("disabled", true);
}
else {
down.click(function(name) { return function() {
socket.emit("demote", {
name: name
});
}}(entries[i].name));
}
}
}
function handleRankChange() {
rebuildPlaylist();
if(RANK >= Rank.Moderator || LEADER) {