X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=js%2Facl.js;h=257e2c158fe867694cfc21c0a6b0df50a878500f;hb=569156422037859d13ae75cea3d4bd57651d8bb4;hp=3c96d134694146068d800641406238ed2dc5141f;hpb=909bca90e872be898c36aadac175b93badce5460;p=friendica.git diff --git a/js/acl.js b/js/acl.js index 3c96d13469..257e2c158f 100644 --- a/js/acl.js +++ b/js/acl.js @@ -1,133 +1,148 @@ 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 = []; + + if (preset == undefined) { + preset = []; + } this.allow_cid = (preset[0] || []); this.allow_gid = (preset[1] || []); this.deny_cid = (preset[2] || []); this.deny_gid = (preset[3] || []); this.group_uids = []; + this.forumCache = null; 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"); - + if (preset.length==0) { + this.showall.addClass("selected"); + } + /*events*/ 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! */ this.get(0,100); } ACL.prototype.remove_mention = function(id) { - if (!this.automention) return; + if (!this.automention) { + return; + } var nick = this.data[id].nick; - var searchText = "@"+nick+"+"+id+" "; - if (tinyMCE.activeEditor===null) { - start = this.element.val().indexOf(searchText); - if ( start<0) return; - end = start+searchText.length; - this.element.setSelection(start,end).replaceSelectedText('').collapseSelection(false); + var addr = this.data[id].addr; + + if (addr != "") { + var searchText = "!" + addr + " "; } else { - start = tinyMCE.activeEditor.getContent({format : 'raw'}).search( searchText ); - if ( start<0 ) return; - txt = tinyMCE.activeEditor.getContent(); - newtxt = txt.replace(searchText, ''); - tinyMCE.activeEditor.setContent(newtxt); + 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; + if (!this.automention) { + return; + } var nick = this.data[id].nick; - var searchText = "@"+nick+"+"+id+" "; - if (tinyMCE.activeEditor===null) { - if ( this.element.val().indexOf( searchText) >= 0 ) return; - this.element.val( searchText + this.element.val() ); + var addr = this.data[id].addr; + + if (addr != "") { + var searchText = "!" + addr + " "; } else { - if ( tinyMCE.activeEditor.getContent({format : 'raw'}).search(searchText) >= 0 ) return; - tinyMCE.activeEditor.dom.add(tinyMCE.activeEditor.getBody(), 'dummy', {}, searchText); + 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(""); + var aclfields = $("#acl-fields").html(""); $(this.allow_gid).each(function(i,v){ - aclfileds.append(""); + aclfields.append(""); }); $(this.allow_cid).each(function(i,v){ - aclfileds.append(""); + aclfields.append(""); }); $(this.deny_gid).each(function(i,v){ - aclfileds.append(""); + aclfields.append(""); }); $(this.deny_cid).each(function(i,v){ - aclfileds.append(""); - }); -} + aclfields.append(""); + }); +}; ACL.prototype.search = function(){ var srcstr = $("#acl-search").val(); this.list_content.html(""); this.get(0,100, srcstr); -} +}; ACL.prototype.on_search = function(event){ 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 (this.showall.hasClass("selected")){ return false; } this.showall.addClass("selected"); - + this.allow_cid = []; this.allow_gid = []; this.deny_cid = []; this.deny_gid = []; - + this.update_view(); - + return false; -} +}; ACL.prototype.on_button_show = function(event){ event.preventDefault() event.stopImmediatePropagation() event.stopPropagation(); - + this.set_allow($(event.target).parent().attr('id')); return false; -} +}; + ACL.prototype.on_button_hide = function(event){ event.preventDefault() event.stopImmediatePropagation() @@ -136,39 +151,55 @@ ACL.prototype.on_button_hide = function(event){ this.set_deny($(event.target).parent().attr('id')); return false; -} +}; -ACL.prototype.set_allow = function(itemid){ +ACL.prototype.set_allow = function(itemid) { type = itemid[0]; - id = parseInt(itemid.substr(1)); - - switch(type){ + id = parseInt(itemid.substr(1)); + + switch (type){ case "g": - if (this.allow_gid.indexOf(id)<0){ - this.allow_gid.push(id) + if (this.allow_gid.indexOf(id) < 0) { + this.allow_gid.push(id); }else { this.allow_gid.remove(id); } - if (this.deny_gid.indexOf(id)>=0) this.deny_gid.remove(id); + if (this.deny_gid.indexOf(id) >= 0) { + this.deny_gid.remove(id); + } break; case "c": - if (this.allow_cid.indexOf(id)<0){ - this.allow_cid.push(id) - if (this.data[id].forum=="1") this.add_mention(id); + if (this.allow_cid.indexOf(id) < 0){ + this.allow_cid.push(id); + if (this.data[id].forum == "1") { + // If we have select already a forum, + // we need to remove the old one (because friendica does + // allow only one forum as receiver). + if (this.forumCache !== null && this.forumCache !== id) { + this.deselectCid(this.forumCache); + } + // Update the forum cache. + this.forumCache = id; + this.add_mention(id); + } } else { this.allow_cid.remove(id); - if (this.data[id].forum=="1") this.remove_mention(id); + if (this.data[id].forum == "1") { + this.remove_mention(id); + } + } + if (this.deny_cid.indexOf(id) >=0 ) { + this.deny_cid.remove(id); } - if (this.deny_cid.indexOf(id)>=0) this.deny_cid.remove(id); break; } this.update_view(); -} +}; ACL.prototype.set_deny = function(itemid){ type = itemid[0]; id = parseInt(itemid.substr(1)); - + switch(type){ case "g": if (this.deny_gid.indexOf(id)<0){ @@ -189,12 +220,12 @@ ACL.prototype.set_deny = function(itemid){ break; } 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 (this.is_show_all()){ @@ -202,31 +233,31 @@ ACL.prototype.update_view = function(){ /* 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 { 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(index, element){ itemid = $(element).attr('id'); type = itemid[0]; id = parseInt(itemid.substr(1)); - + btshow = $(element).children(".acl-button-show").removeClass("selected"); - bthide = $(element).children(".acl-button-hide").removeClass("selected"); - + bthide = $(element).children(".acl-button-hide").removeClass("selected"); + switch(type){ case "g": var uclass = ""; @@ -240,7 +271,7 @@ ACL.prototype.update_view = function(){ bthide.addClass("selected"); uclass="grouphide"; } - + $(this.group_uids[id]).each(function(i,v) { if(uclass == "grouphide") $("#c"+v).removeClass("groupshow"); @@ -253,7 +284,7 @@ ACL.prototype.update_view = function(){ $("#c"+v).addClass(uclass); } }); - + break; case "c": if (this.allow_cid.indexOf(id)>=0){ @@ -263,13 +294,12 @@ ACL.prototype.update_view = function(){ if (this.deny_cid.indexOf(id)>=0){ btshow.removeClass("selected"); bthide.addClass("selected"); - } + } } - + }.bind(this)); - -} +} ACL.prototype.get = function(start,count, search){ var postdata = { @@ -277,7 +307,7 @@ ACL.prototype.get = function(start,count, search){ count:count, search:search, } - + $.ajax({ type:'POST', url: this.url, @@ -285,17 +315,22 @@ ACL.prototype.get = function(start,count, search){ dataType: 'json', success:this.populate.bind(this) }); -} +}; ACL.prototype.populate = function(data){ var height = Math.ceil(data.tot / this.nw) * 42; this.list_content.height(height); this.data = {}; - $(data.items).each(function(index, item){ - html = "
"+this.item_tpl+"
"; - html = html.format(item.photo, item.name, item.type, item.id, (item.forum=='1'?'forum':''), item.network, item.link); - if (item.uids!=undefined) this.group_uids[item.id] = item.uids; - + $(data.items).each(function(index, item) { + if (item.separator != undefined) { + html = "
"; + } else { + html = "
"+this.item_tpl+"
"; + html = html.format(item.photo, item.name, item.type, item.id, (item.forum=='1'?'forum':''), item.network, item.link); + if (item.uids != undefined) { + this.group_uids[item.id] = item.uids; + } + } this.list_content.append(html); this.data[item.id] = item; }.bind(this)); @@ -303,7 +338,22 @@ ACL.prototype.populate = function(data){ // Add src attribute for images with a data-src attribute $(el).attr('src', $(el).data("src")); }); - + this.update_view(); -} +}; +/** + * @brief Deselect previous selected contact. + * + * @param {int} id The contact ID. + * @returns {void} + */ +ACL.prototype.deselectCid = function(id) { + if (this.allow_cid.indexOf(id) >= 0) { + this.allow_cid.remove(id); + } + if (this.deny_cid.indexOf(id) >=0 ) { + this.deny_cid.remove(id); + } + this.remove_mention(id); +};