X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=js%2Facl.js;h=054f5096026f96b222bcd9134807b1e8d0d67650;hb=62891d8de9605bb663419ce09fcaae546eaafd46;hp=e383224ca8aba067bd952b59e0f04e089b67a314;hpb=4bee1859be5fbf46ecc19728a908e31b4e9b09b6;p=friendica.git diff --git a/js/acl.js b/js/acl.js index e383224ca8..054f509602 100644 --- a/js/acl.js +++ b/js/acl.js @@ -1,78 +1,116 @@ -function ACL(backend_url, preset){ - that = this; - - that.url = backend_url; - - that.kp_timer = null; - +function ACL(backend_url, preset, automention, is_mobile){ + + this.url = backend_url; + this.automention = automention; + this.is_mobile = is_mobile; + + + this.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"); - + this.allow_cid = (preset[0] || []); + this.allow_gid = (preset[1] || []); + this.deny_cid = (preset[2] || []); + this.deny_gid = (preset[3] || []); + this.group_uids = []; + + if (this.is_mobile) { + this.nw = 1; + } else { + this.nw = 4; + } + + + this.list_content = $("#acl-list-content"); + this.item_tpl = unescape($(".acl-list-item[rel=acl-template]").html()); + this.showall = $("#acl-showall"); + + if (preset.length==0) this.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); - + this.showall.click(this.on_showall.bind(this)); + $(document).on("click", ".acl-button-show", this.on_button_show.bind(this)); + $(document).on("click", ".acl-button-hide", this.on_button_hide.bind(this)); + $("#acl-search").keypress(this.on_search.bind(this)); + $("#acl-wrapper").parents("form").submit(this.on_submit.bind(this)); + + /* add/remove mentions */ + this.element = $("#profile-jot-text"); + this.htmlelm = this.element.get()[0]; + /* startup! */ - that.get(0,100); + this.get(0,100); +} + +ACL.prototype.remove_mention = function(id) { + if (!this.automention) { + return; + } + var nick = this.data[id].nick; + var searchText = "@" + nick + "+" + id + " "; + var start = this.element.val().indexOf(searchText); + if (start < 0) { + return; + } + var end = start + searchText.length; + this.element.setSelection(start, end).replaceSelectedText('').collapseSelection(false); +} + +ACL.prototype.add_mention = function(id) { + if (!this.automention) { + return; + } + var nick = this.data[id].nick; + var searchText = "@" + nick + "+" + id + " "; + if (this.element.val().indexOf( searchText) >= 0 ) { + return; + } + this.element.val(searchText + this.element.val()).trigger('change'); } ACL.prototype.on_submit = function(){ - aclfileds = $("#acl-fields").html(""); - $(that.allow_gid).each(function(i,v){ - aclfileds.append(""); + var aclfields = $("#acl-fields").html(""); + $(this.allow_gid).each(function(i,v){ + aclfields.append(""); }); - $(that.allow_cid).each(function(i,v){ - aclfileds.append(""); + $(this.allow_cid).each(function(i,v){ + aclfields.append(""); }); - $(that.deny_gid).each(function(i,v){ - aclfileds.append(""); + $(this.deny_gid).each(function(i,v){ + aclfields.append(""); + }); + $(this.deny_cid).each(function(i,v){ + aclfields.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); + this.list_content.html(""); + this.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); + if (this.kp_timer) clearTimeout(this.kp_timer); + this.kp_timer = setTimeout( this.search.bind(this), 1000); } ACL.prototype.on_showall = function(event){ event.preventDefault() event.stopPropagation(); - - if (that.showall.hasClass("selected")){ + + if (this.showall.hasClass("selected")){ return false; } - that.showall.addClass("selected"); - - that.allow_cid = []; - that.allow_gid = []; - that.deny_cid = []; - that.deny_gid = []; - - that.update_view(); - + this.showall.addClass("selected"); + + this.allow_cid = []; + this.allow_gid = []; + this.deny_cid = []; + this.deny_gid = []; + + this.update_view(); + return false; } @@ -81,11 +119,7 @@ ACL.prototype.on_button_show = function(event){ event.stopImmediatePropagation() event.stopPropagation(); - /*that.showall.removeClass("selected"); - $(this).siblings(".acl-button-hide").removeClass("selected"); - $(this).toggleClass("selected");*/ - - that.set_allow($(this).parent().attr('id')); + this.set_allow($(event.target).parent().attr('id')); return false; } @@ -94,110 +128,115 @@ ACL.prototype.on_button_hide = function(event){ event.stopImmediatePropagation() event.stopPropagation(); - /*that.showall.removeClass("selected"); - $(this).siblings(".acl-button-show").removeClass("selected"); - $(this).toggleClass("selected");*/ - - that.set_deny($(this).parent().attr('id')); + this.set_deny($(event.target).parent().attr('id')); return false; } ACL.prototype.set_allow = function(itemid){ type = itemid[0]; - id = parseInt(itemid.substr(1)); + id = parseInt(itemid.substr(1)); + switch(type){ case "g": - if (that.allow_gid.indexOf(id)<0){ - that.allow_gid.push(id) + if (this.allow_gid.indexOf(id)<0){ + this.allow_gid.push(id) }else { - that.allow_gid.remove(id); + this.allow_gid.remove(id); } - if (that.deny_gid.indexOf(id)>=0) that.deny_gid.remove(id); + if (this.deny_gid.indexOf(id)>=0) this.deny_gid.remove(id); break; case "c": - if (that.allow_cid.indexOf(id)<0){ - that.allow_cid.push(id) + if (this.allow_cid.indexOf(id)<0){ + this.allow_cid.push(id) + if (this.data[id].forum=="1") this.add_mention(id); } else { - that.allow_cid.remove(id); + this.allow_cid.remove(id); + if (this.data[id].forum=="1") this.remove_mention(id); } - if (that.deny_cid.indexOf(id)>=0) that.deny_cid.remove(id); + if (this.deny_cid.indexOf(id)>=0) this.deny_cid.remove(id); break; } - that.update_view(); + this.update_view(); } ACL.prototype.set_deny = function(itemid){ type = itemid[0]; - id = parseInt(itemid.substr(1)); + id = parseInt(itemid.substr(1)); + switch(type){ case "g": - if (that.deny_gid.indexOf(id)<0){ - that.deny_gid.push(id) + if (this.deny_gid.indexOf(id)<0){ + this.deny_gid.push(id) } else { - that.deny_gid.remove(id); + this.deny_gid.remove(id); } - if (that.allow_gid.indexOf(id)>=0) that.allow_gid.remove(id); + if (this.allow_gid.indexOf(id)>=0) this.allow_gid.remove(id); break; case "c": - if (that.deny_cid.indexOf(id)<0){ - that.deny_cid.push(id) + if (this.data[id].forum=="1") this.remove_mention(id); + if (this.deny_cid.indexOf(id)<0){ + this.deny_cid.push(id) } else { - that.deny_cid.remove(id); + this.deny_cid.remove(id); } - if (that.allow_cid.indexOf(id)>=0) that.allow_cid.remove(id); + if (this.allow_cid.indexOf(id)>=0) this.allow_cid.remove(id); break; } - that.update_view(); + this.update_view(); +} + +ACL.prototype.is_show_all = function() { + return (this.allow_gid.length==0 && this.allow_cid.length==0 && + this.deny_gid.length==0 && this.deny_cid.length==0); } ACL.prototype.update_view = 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"); + if (this.is_show_all()){ + this.showall.addClass("selected"); /* jot acl */ $('#jot-perms-icon').removeClass('lock').addClass('unlock'); $('#jot-public').show(); - $('.profile-jot-net input').attr('disabled', false); + $('.profile-jot-net input').attr('disabled', false); if(typeof editor != 'undefined' && editor != false) { $('#profile-jot-desc').html(ispublic); } - + } else { - that.showall.removeClass("selected"); + this.showall.removeClass("selected"); /* jot acl */ $('#jot-perms-icon').removeClass('unlock').addClass('lock'); $('#jot-public').hide(); - $('.profile-jot-net input').attr('disabled', 'disabled'); + $('.profile-jot-net input').attr('disabled', 'disabled'); $('#profile-jot-desc').html(' '); } $("#acl-list-content .acl-list-item").each(function(){ $(this).removeClass("groupshow grouphide"); }); - - $("#acl-list-content .acl-list-item").each(function(){ - itemid = $(this).attr('id'); + + $("#acl-list-content .acl-list-item").each(function(index, element){ + itemid = $(element).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"); - + + btshow = $(element).children(".acl-button-show").removeClass("selected"); + bthide = $(element).children(".acl-button-hide").removeClass("selected"); + switch(type){ case "g": var uclass = ""; - if (that.allow_gid.indexOf(id)>=0){ + if (this.allow_gid.indexOf(id)>=0){ btshow.addClass("selected"); bthide.removeClass("selected"); uclass="groupshow"; } - if (that.deny_gid.indexOf(id)>=0){ + if (this.deny_gid.indexOf(id)>=0){ btshow.removeClass("selected"); bthide.addClass("selected"); uclass="grouphide"; } - - $(that.group_uids[id]).each(function(i,v) { + + $(this.group_uids[id]).each(function(i,v) { if(uclass == "grouphide") $("#c"+v).removeClass("groupshow"); if(uclass != "") { @@ -209,21 +248,21 @@ ACL.prototype.update_view = function(){ $("#c"+v).addClass(uclass); } }); - + break; case "c": - if (that.allow_cid.indexOf(id)>=0){ + if (this.allow_cid.indexOf(id)>=0){ btshow.addClass("selected"); bthide.removeClass("selected"); } - if (that.deny_cid.indexOf(id)>=0){ + if (this.deny_cid.indexOf(id)>=0){ btshow.removeClass("selected"); bthide.addClass("selected"); - } + } } - - }); - + + }.bind(this)); + } @@ -233,26 +272,33 @@ ACL.prototype.get = function(start,count, search){ count:count, search:search, } - + $.ajax({ type:'POST', - url: that.url, + url: this.url, data: postdata, dataType: 'json', - success:that.populate + success:this.populate.bind(this) }); } ACL.prototype.populate = function(data){ - var height = Math.ceil(data.tot / that.nw) * 42; - that.list_content.height(height); - $(data.items).each(function(){ - html = "