Mutinga! (Silenciar Usuarios)

Ocultar post, shouts y comentarios de usuarios

当前为 2016-12-24 提交的版本,查看 最新版本

// ==UserScript==
// @name         Mutinga! (Silenciar Usuarios)
// @version      1.4.3a
// @description  Ocultar post, shouts y comentarios de usuarios
// @author       master_ripper
// @match        http://www.taringa.net/*
// @match        https://www.taringa.net/*
// @grant        none
// @namespace https://gf.qytechs.cn/users/89223
// ==/UserScript==

/* TODO
- Boton en perfil
- Overlay con los usuarios bloqueados
*/

(function() {
    function getmutedUsers() { 
        if (localStorage.mutedUsers === undefined) { 
            localStorage.setItem('mutedUsers', '[]');
            return []; 
        } 
        
        var dee = JSON.parse(localStorage.mutedUsers); 
        return dee; 
    } 
    
    function addUser(user) { 
        var dee = JSON.parse(localStorage.mutedUsers);
        //Check that the users isn't already muted 
        if (dee.indexOf(user)<0) { 
            dee.push(user); 
            console.log("Added User: ",user);
            localStorage.mutedUsers = JSON.stringify(dee);
        }
    }

    function searchUser(user) { 
        var dee = JSON.parse(localStorage.mutedUsers);
        //Check that the users isn't already muted 
        return (dee.indexOf(user)>=0);
    } 
    
    function delUser(user) {
        var dee = JSON.parse(localStorage.mutedUsers); 
        var indx = dee.indexOf(user); 
        
        //Check if user exist in list
        if (indx > -1) { 
            dee.splice(indx, 1);
            localStorage.mutedUsers = JSON.stringify(dee);
            console.log("Deleted User: ",user);
        } 
    } 

    
    
    var box = `<div class="box" id="blockedcrap">
                   <div class="title clearfix">
                       <h2>Usuarios Muteados</h2>
                   </div>
                   <!--<div style="margin-top: 8px; width: 95%">
                       <input type="text" class="input" style="width: 100%;" id="usersBlock" autocomplete="off" placeholder="Usuario a Silenciar">
                       <button class="btn r" style="width: 100%; margin-top: 5px;">Silenciar</button>
                   </div>-->
                   <div class="list" style="max-height: 300px; overflow-x: hidden;">
                   </div>
               </div>`;
    //var list_elements = '<div class="list-element"><b>%username%</b><span style="cursor:pointer" class="value delUser" data-users="%username%">Desbloquear</span></div>';
    
    
    $("body").on("click", "#blockedcrap button", function(e) {
        var usersBlock = $("#usersBlock").val().trim();
        
        if ($.inArray(usersBlock, getmutedUsers()) == -1) {
           addUser(usersBlock);
           $("#blockedcrap > div.list").append(list_elements.replace(/%username%/g, usersBlock));
        }
    });
    
    
    


    function hidePosts(user){
        var selector = 'a[title="' + user + '"]'; 
        var usuario = document.querySelectorAll(selector); 
        for (i = 0; i < usuario.length; i++) { 
           usuario[i].parentNode.parentNode.style.display =  'none';
        } 
        
        var usuario2 = $('p:contains('+user+')');
        //console.log(usuario2);
        for (var i = usuario2.length - 1; i >= 0; i--) {
            usuario2[i].parentNode.parentNode.style.display= 'none';
        }
    }

    function hideShouts(user){
        var selector = 'a.hovercard.shout-user_name[href="http://www.taringa.net/' + user + '"]';
        var usuario = document.querySelectorAll(selector);
        for (i = 0; i < usuario.length; i++) {
            usuario[i].parentNode.parentNode.parentNode.parentNode.style.display = 'none';
        }

        //HomePage shouts
        var selector2 = 'a.shoutsb__user[href="http://www.taringa.net/' + user + '"]';
        var usuario2 = document.querySelectorAll(selector2);
        for (i = 0; i < usuario2.length; i++) {
            usuario2[i].parentNode.style.display = 'none';
        }
    }
    
    function hideComments(user){
        var commentselector = 'div.comment-text a:not(.muted)[href*="/' + user + '"]';
        var comments = document.querySelectorAll(commentselector);
        //console.log("Comments: ",comments);
        for (i = 0; i < comments.length; i++) { 
            $(comments[i]).addClass('muted');
            var com = comments[i].parentNode;
            while(!com.classList.contains('comment')){
                com = com.parentNode;
            }
            if (com.parentNode.classList.contains('comment-replies-container')) {
                com = com.parentNode;
            }
            console.log("com= ",com);
            com.style.display =  'none';
        }
    }

    function hideContent(){
        var userslist = getmutedUsers();  
        userslist.forEach(function  (user){
            if (window.location.pathname.indexOf('/mi')>-1 || window.location.pathname.indexOf('/shouts')>-1) {
                hideShouts(user);
            }
            if (window.location.pathname.length === 1){ //Hide posts on home page
                hidePosts(user);
            }
            else{
                hideComments(user);
            }
        });
    }

    var list_elements = `<div class="list-element" style="height:25px;">
        <div class="container">
            <div style="float:left;width: 10%;box-sizing:border-box;">
                <img src="%avatarurl%" class="avatar-32" style="height: 26px;width: 26px;margin: -2px 0 -6px -7px;display: inline-block;">
            </div>
            <div style="float:left;width: 55%;box-sizing:border-box;">
                <div style="padding-top: 3px;">%username%</div>
            </div>
            <div style="float:left; width:35%; box-sizing:border-box;">
                <div style="padding-top: 3px;cursor:pointer;" class="value delUser" data-users="%username%">Desbloquear</div>
            </div>
            <div style="clear:both;"></div>
        </div>
    </div>`;

    function showList(){
        var modalbackground = `<div id="mysimplemodaloverlay" class="simplemodal-overlay" style="opacity: 0.75; position: fixed; left: 0px; top: 0px; z-index: 1001; background-color: #000;"></div>`;
        $('body').append(modalbackground);
        $('#mysimplemodaloverlay').css({ width: window.innerWidth, height: window.innerHeight });

        var modalcontainer = `<div class="simplemodalcontainer" id="mysimplemodalcontainer" style="position: fixed; z-index: 1002; height: 360px; width: 360px; background-color: rgb(238, 238, 238); border-width: 4px; border-style: solid; border-color: rgb(68, 68, 68); border-image: initial; padding: 12px;">
            <a class="modalCloseImg simplemodal-close icon-cerrar" style="width: 25px;height: 29px;display: inline;z-index: 3200;position: absolute;top: -21px;right: -18px;cursor: pointer;font-size: x-large;color: rgb(255, 96, 96);" title="Cerrar"></a>
            <div class="simplemodal-wrap" style="height: 100%; outline: 0px; width: 100%; overflow-x: hidden;" tabindex="-1">
                <div class="list" style="overflow-x: hidden;">
            </div>
        </div>`;
        $('body').append(modalcontainer);

        $('#mysimplemodalcontainer').css({ left: (window.innerWidth-360)/2, top: (window.innerHeight-360)/2 });

        $('body').on('click', '#mysimplemodalcontainer > a.modalCloseImg', function(event) {
            event.preventDefault();
            $('#mysimplemodalcontainer').remove();
            $('#mysimplemodaloverlay').remove();
        });

        var userslist = getmutedUsers();
        var $list = $("#mysimplemodalcontainer > div > div.list");
        userslist.forEach(function (user){
            var list_el = list_elements.replace(/%username%/g, user);
            var avatarurl;
            $.get('https://api.taringa.net/user/nick/view/'+user,function(res,status){
                avatarurl=res.avatar.small;     
                console.log("avatarurl inside: ",avatarurl);
                $list.append(list_el.replace(/%avatarurl%/g, avatarurl));
            });
            //console.log("avatarurl outside: ",avatarurl);
        });
    }

    function propagateButtons(){
        //Comments Buttons
        var buttonhide = `<li class="">
                    <a class="addUnlike mutebtn" username="%username%" title="Silenciar Usuario">
                        <i class="icon-no-ver"></i>
                    </a>
                </li>`;

        $('div.comment-text a:not(.comment-content a)').each(function() {
            var $a = $(this);
            var name = $a.text();
            var buttonhide_ = buttonhide.replace(/%username%/g,name);
            $a.closest('.comment').find('.comment-actions ul:not(.hasmutebtn)').append(buttonhide_).addClass('hasmutebtn');
        });

        //Shout Buttons
        var muteatshout = `<li><div class="icon-no-ver shout-action shout-mutebtn" username="%username%">Silenciar</div></li>`;

        $('a.hovercard.shout-user_name').each(function() {
            var $a = $(this);
            var name = $a.text();
            var muteatshout_ = muteatshout.replace(/%username%/g,name);
            $a.closest('.shout-heading').find('ul.shouts_actions:not(.hasmutebtn)').append(muteatshout_).addClass('hasmutebtn');
        });

        //Profile Buttons
        if (document.body.classList.contains('section-perfil')) {
            var logged_user = $('span.user-name').text().trim();
            var username = window.location.pathname.substr(1);
            
            if(logged_user != username){ 
                //Other Profile
                var buttonAddUser = `<a title="Silenciar" class="btn g muteprofile" username="%username%" style="display:none;">
                            <div class="btn-text follow-text">
                                Silenciar
                            </div>
                        </a>`;
                var buttonMutedUser = `<a title="Quitar de la lista negra" class="btn r unmuteprofile" username="%username%" style="display:none;">
                            <div class="btn-text follow-text">
                                Silenciado
                            </div>
                        </a>`;
                $('div.follow-buttons').after(buttonMutedUser.replace(/%username%/g,username), buttonAddUser.replace(/%username%/g,username));
                
                if (searchUser(username)) { //Search user in db
                    //Blocked User
                    $('a.unmuteprofile').css('display', 'inline-block');
                }
                else{
                    //Not Blocked User
                    $('a.muteprofile').css('display', 'inline-block');
                }
            }
            else{
                //Own profile
                var buttonShowList = `<a title="Ver Lista de Usuarios Silenciados" class="btn g showlistbtn">
                            <div class="btn-text follow-text">
                                Usuarios Silenciados
                            </div>
                        </a>`;
                $('a.btn[href="/cuenta"]').after(buttonShowList);
            }
        }
    }
    
    function vanishComment(comm){
        comm[0].style= 'transition : opacity 0.5s linear; opacity : 0';
    }

    function assignActions(){
        //Comments Buttons
        var mutebtns = document.querySelectorAll('a.mutebtn:not(.action-assigned)');
        for (var i = 0, len = mutebtns.length; i < len; i++) {
          mutebtns[i].addEventListener("click", function() {
            addUser(this.getAttribute("username"));
            $(this).addClass('action-assigned');
            vanishComment($(this).closest('.comment'));
            setTimeout(hideContent,750);
          });
        }

        //Shout Buttons
        var shoutmutebtns = document.querySelectorAll('div.shout-mutebtn:not(.action-assigned)');
        for (var i = 0, len = shoutmutebtns.length; i < len; i++) {
          shoutmutebtns[i].addEventListener("click", function() {
            addUser(this.getAttribute("username"));
            $(this).addClass('action-assigned');
            vanishComment($(this).closest('.shout-item'));
            setTimeout(hideContent,500);
          });
        }

        if (document.body.classList.contains('section-perfil')) {
           
            var muteprofilebtn = document.querySelectorAll('a.muteprofile:not(.action-assigned)');
            for (var i = 0, len = muteprofilebtn.length; i < len; i++) {
              muteprofilebtn[i].addEventListener("click", function() {
                addUser(this.getAttribute("username"));
                $(this).addClass('action-assigned');
                $(this).css('display', 'none');
                $('a.unmuteprofile').css('display', 'inline-block');
              });
            }

            var unmuteprofilebtn = document.querySelectorAll('a.unmuteprofile:not(.action-assigned)');
            for (var i = 0, len = unmuteprofilebtn.length; i < len; i++) {
              unmuteprofilebtn[i].addEventListener("click", function() {
                delUser(this.getAttribute("username"));
                $(this).addClass('action-assigned');
                $(this).css('display', 'none');
                $('a.muteprofile').css('display', 'inline-block');
              });
            }

            var showlistbtn = document.querySelectorAll('a.showlistbtn:not(.action-assigned)');
            for (var i = 0, len = showlistbtn.length; i < len; i++) {
              showlistbtn[i].addEventListener("click", function() {
                showList();
                $(this).addClass('action-assigned');
              });
            }

            $("body").on("click", ".delUser", function(e){
                delUser($(this).data("users"));
                $(this).closest("div.list-element").remove();
            });
        }

    }

    function main() {
        propagateButtons();
        assignActions();

        hideContent();
        
    }

    $(document).ready(function(e) {
        main();
    });

    $(document).ajaxSuccess(function(event, jqXHR, settings) {
        if (settings.url.indexOf('/comments') > -1 || settings.url.indexOf('ajax/feed/fetch') > -1 || settings.url.indexOf('serv/more') > -1 ) {
            main();
        }
    });
    
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址