diff --git a/images/default-group-mm.png b/images/default-group-mm.png new file mode 100644 index 000000000..bfc8b335a Binary files /dev/null and b/images/default-group-mm.png differ diff --git a/images/hide_off.png b/images/hide_off.png new file mode 100644 index 000000000..d504ca2e2 Binary files /dev/null and b/images/hide_off.png differ diff --git a/images/hide_on.png b/images/hide_on.png new file mode 100644 index 000000000..960744c06 Binary files /dev/null and b/images/hide_on.png differ diff --git a/images/search_18.png b/images/search_18.png new file mode 100644 index 000000000..539739670 Binary files /dev/null and b/images/search_18.png differ diff --git a/images/show_all_off.png b/images/show_all_off.png new file mode 100644 index 000000000..cc96d28f0 Binary files /dev/null and b/images/show_all_off.png differ diff --git a/images/show_all_on.png b/images/show_all_on.png new file mode 100644 index 000000000..87a7710b5 Binary files /dev/null and b/images/show_all_on.png differ diff --git a/images/show_off.png b/images/show_off.png new file mode 100644 index 000000000..4bcf47123 Binary files /dev/null and b/images/show_off.png differ diff --git a/images/show_on.png b/images/show_on.png new file mode 100644 index 000000000..b8d1f5bac Binary files /dev/null and b/images/show_on.png differ diff --git a/include/acl.js b/include/acl.js new file mode 100644 index 000000000..a0a1f5dd8 --- /dev/null +++ b/include/acl.js @@ -0,0 +1,236 @@ +function ACL(backend_url, preset){ + that = this; + + that.url = backend_url; + + that.kp_timer = null; + + if (preset==undefined) preset = []; + that.allow_cid = (preset[0] || []); + that.allow_gid = (preset[1] || []); + that.deny_cid = (preset[2] || []); + that.deny_gid = (preset[3] || []); + that.group_uids = []; + that.nw = 4; //items per row. should be calulated from #acl-list.width + + that.list_content = $("#acl-list-content"); + that.item_tpl = unescape($(".acl-list-item[rel=acl-template]").html()); + that.showall = $("#acl-showall"); + + if (preset.length==0) that.showall.addClass("selected"); + + /*events*/ + that.showall.click(that.on_showall); + $(".acl-button-show").live('click', that.on_button_show); + $(".acl-button-hide").live('click', that.on_button_hide); + $("#acl-search").keypress(that.on_search); + $("#acl-wrapper").parents("form").submit(that.on_submit); + + /* startup! */ + that.get(0,100); +} + +ACL.prototype.on_submit = function(){ + aclfileds = $("#acl-fields").html(""); + $(that.allow_gid).each(function(i,v){ + aclfileds.append(""); + }); + $(that.allow_cid).each(function(i,v){ + aclfileds.append(""); + }); + $(that.deny_gid).each(function(i,v){ + aclfileds.append(""); + }); + $(that.deny_cid).each(function(i,v){ + aclfileds.append(""); + }); +} + +ACL.prototype.search = function(){ + var srcstr = $("#acl-search").val(); + that.list_content.html(""); + that.get(0,100, srcstr); +} + +ACL.prototype.on_search = function(event){ + if (that.kp_timer) clearTimeout(that.kp_timer); + that.kp_timer = setTimeout( that.search, 1000); +} + +ACL.prototype.on_showall = function(event){ + event.stopPropagation(); + if (that.showall.hasClass("selected")){ + return false; + } + that.showall.addClass("selected"); + + that.allow_cid = []; + that.allow_gid = []; + that.deny_cid = []; + that.deny_gid = []; + + that.updateview(); + + return false; +} + +ACL.prototype.on_button_show = function(event){ + event.stopPropagation(); + + /*that.showall.removeClass("selected"); + $(this).siblings(".acl-button-hide").removeClass("selected"); + $(this).toggleClass("selected");*/ + + that.set_allow($(this).parent().attr('id')); + + return false; +} +ACL.prototype.on_button_hide = function(event){ + event.stopPropagation(); + + /*that.showall.removeClass("selected"); + $(this).siblings(".acl-button-show").removeClass("selected"); + $(this).toggleClass("selected");*/ + + that.set_deny($(this).parent().attr('id')); + + return false; +} + +ACL.prototype.set_allow = function(itemid){ + type = itemid[0]; + id = parseInt(itemid.substr(1)); + switch(type){ + case "g": + if (that.allow_gid.indexOf(id)<0){ + that.allow_gid.push(id) + }else { + that.allow_gid.remove(id); + } + if (that.deny_gid.indexOf(id)>=0) that.deny_gid.remove(id); + break; + case "c": + if (that.allow_cid.indexOf(id)<0){ + that.allow_cid.push(id) + } else { + that.allow_cid.remove(id); + } + if (that.deny_cid.indexOf(id)>=0) that.deny_cid.remove(id); + break; + } + that.updateview(); +} + +ACL.prototype.set_deny = function(itemid){ + type = itemid[0]; + id = parseInt(itemid.substr(1)); + switch(type){ + case "g": + if (that.deny_gid.indexOf(id)<0){ + that.deny_gid.push(id) + } else { + that.deny_gid.remove(id); + } + if (that.allow_gid.indexOf(id)>=0) that.allow_gid.remove(id); + break; + case "c": + if (that.deny_cid.indexOf(id)<0){ + that.deny_cid.push(id) + } else { + that.deny_cid.remove(id); + } + if (that.allow_cid.indexOf(id)>=0) that.allow_cid.remove(id); + break; + } + that.updateview(); +} + +ACL.prototype.updateview = function(){ + if (that.allow_gid.length==0 && that.allow_cid.length==0 && + that.deny_gid.length==0 && that.deny_cid.length==0){ + that.showall.addClass("selected"); + /* jot acl */ + $('#jot-perms-icon').removeClass('lock').addClass('unlock'); + $('#jot-public').show(); + $('.profile-jot-net input').attr('disabled', false); + + } else { + that.showall.removeClass("selected"); + /* jot acl */ + $('#jot-perms-icon').removeClass('unlock').addClass('lock'); + $('#jot-public').hide(); + $('.profile-jot-net input').attr('disabled', 'disabled'); + } + + $("#acl-list-content .acl-list-item").each(function(){ + itemid = $(this).attr('id'); + type = itemid[0]; + id = parseInt(itemid.substr(1)); + + btshow = $(this).children(".acl-button-show").removeClass("selected"); + bthide = $(this).children(".acl-button-hide").removeClass("selected"); + + switch(type){ + case "g": + var uclass = ""; + if (that.allow_gid.indexOf(id)>=0){ + btshow.addClass("selected"); + bthide.removeClass("selected"); + uclass="groupshow"; + } + if (that.deny_gid.indexOf(id)>=0){ + btshow.removeClass("selected"); + bthide.addClass("selected"); + uclass="grouphide"; + } + + $(that.group_uids[id]).each(function(i,v){ + $("#c"+v).removeClass("groupshow grouphide").addClass(uclass); + }); + + break; + case "c": + if (that.allow_cid.indexOf(id)>=0){ + btshow.addClass("selected"); + bthide.removeClass("selected"); + } + if (that.deny_cid.indexOf(id)>=0){ + btshow.removeClass("selected"); + bthide.addClass("selected"); + } + } + + }); + +} + + +ACL.prototype.get = function(start,count, search){ + var postdata = { + start:start, + count:count, + search:search, + } + + $.ajax({ + type:'POST', + url: that.url, + data: postdata, + dataType: 'json', + success:that.populate + }); +} + +ACL.prototype.populate = function(data){ + var height = Math.ceil(data.tot / that.nw) * 42; + that.list_content.height(height); + $(data.items).each(function(){ + html = "