DZ.com post blocker

Automatically hides posts on DZ.com

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

You will need to install an extension such as Tampermonkey to install this script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

// ==UserScript==
// @name           DZ.com post blocker
// @namespace      greasyfork.org
// @description    Automatically hides posts on DZ.com
// @match          http://www.dropzone.com/cgi-bin/forum/gforum.cgi?*post=*
// @require http://code.jquery.com/jquery-latest.min.js
// @require http://code.jquery.com/ui/1.11.2/jquery-ui.min.js
// @grant none
// @version 0.8
// ==/UserScript==
var sThreadTitle;
currentVisibleThreads = [];
Posts = [];
nShownCount = 0;

$(document).ready(function() {
    //  CheckCloudSync();

    CreateStyles();
    CreateFilter();
    //	CreateControlPanel();
    CreateEventHandlers();

    //  SetOptions();

    UpdateHideLinks();
    UpdatePosts();
});

function CreateStyles()
{
    $("body").append("<link rel='stylesheet' href='//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css'>");

    if (localStorage.getItem("HideLinkStyle") != "HideShow")
        $("body").append(GetRemoveStyle());        
}

function CreateFilter()
{
    $('.dropdown-nav-top:first').parent().append("<select id='ThreadFilter'><option value='Unignored' selected='true'>Block Posts</option><option value='All'>Show All Posts</option></select>&nbsp;");
}

function GetRemoveStyle()
{
    var HideThreadStyle = 'margin-left: -11px;  margin-top: -38px;';
    var HideThreadStyle2 = 'padding-left:10px; margin-left:-45px;  margin-top:-2px;';

    RemoveStyle = '<style id="RemoveStyle">';
    RemoveStyle += '.threadbit > td > a[id^="RemoveThread"]:before {  content: "x";  font-size: 15pt;}';
    RemoveStyle += '.threadbit > td > a[id^="RemoveThread"] {  position: absolute !important;  ' + (navigator.userAgent.search("Chrome") >= 0 ? HideThreadStyle : HideThreadStyle2) + '  font-size: 0pt;  visibility: hidden !important;}';
    RemoveStyle += '.threadbit > td:hover > a[id^="RemoveThread"] {  visibility: visible !important; } ';

    RemoveStyle += '.threadbit > td > a[id^="RemoveUser"]:before {  content: "x";  font-size: 15pt;} ';
    RemoveStyle += '.threadbit > td > a[id^="RemoveUser"] {  position: absolute !important;   padding-left:10px; margin-left:-25px;  margin-top:-2px;   font-size: 0pt;  visibility: hidden !important;} ';
    RemoveStyle += '.threadbit > td:hover > a[id^="RemoveUser"] {  visibility: visible !important; } ';
    RemoveStyle += '</style>';

    return RemoveStyle;
}

function UpdateHideLinks()
{
    $("a[name][name!='last']").each(function( index,value ) { AddHideLink($(this).parent()[0])});
}

function CreateEventHandlers()
{
    $('#ThreadFilter').change(function() 
                              { 
                                  var sThreadFilterVal = $('#ThreadFilter').val();
                                  if (sThreadFilterVal == 'All') 
                                  {
                                      Posts.forEach( function(s) { 
                                          s.Hide = false;
                                      } )
                                  }
                                  UpdateHideLinks(); 
                                  UpdatePosts(); 
                              }); 
    //   $('#OpenFilterCP').click(OpenFilterCP);
    //    $('#AddIgnoredUserButton').click(AddToIgnoredUserList);
    //    $('input[name="HideLinkStyle"]').change(function () { localStorage.setItem('HideLinkStyle', this.value); RemoveHideLinks(); SaveLastUpdate();});
}

function RemoveHideLinks()
{
    $("a[id*='RemoveThread']").remove();
    $("a[id*='RemoveUser']").remove();

    $("#RemoveStyle").remove();

    if (localStorage.getItem("HideLinkStyle") != "HideShow")
        $("body").append(GetRemoveStyle());        
}


function AddHideLink(currentPost)
{

    IgnoredUserList = GetListFromLocalStorage('IgnoredUserList');

    nPost = $(currentPost).find('a[name][name!="last"]')[0];
    nPostID = $(nPost).attr('name');   
    MemberLink = $(currentPost).find('a[href*="?username="]')[0];
    if (MemberLink)
    {
        nUserID = MemberLink.href.replace("http://www.dropzone.com/cgi-bin/forum/gforum.cgi?username=","").replace(";","");

        var bUserIgnored = (containsObject(nUserID,IgnoredUserList) == -1) ? false : true;

        var UserIgnoreText = bUserIgnored ? "Restore User" : "RU"; 
        var ThreadIgnoreText = bUserIgnored ? "Show" : "Hide";

        if ($(currentPost).has("a[id*='HidePost" + nPostID + "']").length === 0)
        {
            var RemoveUserLinks = $('a[id*="RemoveUser' + nUserID + '"]').toArray();

            sUserIDReference = (RemoveUserLinks.length > 0) ? nUserID + RemoveUserLinks.length : nUserID;

            if (localStorage.getItem("HideLinkStyle") == "HideShow")
                $(MemberLink).after("<br /><a id='RemoveUser" + sUserIDReference + "'>" + UserIgnoreText + " User</a>");
            else
                $(MemberLink).before("<a id='RemoveUser" + sUserIDReference + "'>" + UserIgnoreText + " User</a>");

            $('#RemoveUser' + sUserIDReference).click({param1: nUserID, param2: 'IgnoredUserList', param3: UpdatePosts, param4: currentPost}, IgnoreItem); 
            $(nPost).before("<a id='HidePost" + nPostID + "'>" + ThreadIgnoreText + "</a>");

            $('#HidePost' + nPostID).click({param1: nPostID, param2: 'IgnoreList', param3: UpdatePosts, param4: currentPost}, IgnoreItem);

            addItem = {};
            addItem.ID = nPostID;
            addItem.UserID = nUserID;
            addItem.Hide = bUserIgnored;
            addItem.Post = currentPost;
            Posts.push(addItem);

        }
        var postIndex = containsObject(nPostID,Posts);
        var bThreadIgnored = postIndex >= 0 ? Posts[postIndex].Hide : false;

        ThreadIgnoreText = bThreadIgnored ? "Show post from " + nUserID : "Hide";

        $('#HidePost' + nPostID).text(ThreadIgnoreText);
        $('a[id*="RemoveUser' + nUserID +'"').text(UserIgnoreText);
    }
}

function UpdatePosts()
{
    nShownCount = 0;
    $('#ThreadFilter').blur();
    localStorage.setItem('ThreadFilter',document.getElementById("ThreadFilter").value);
    IgnoredUserList = GetListFromLocalStorage('IgnoredUserList');
    currentVisibleThreads = [];
    var sThreadFilterVal = $('#ThreadFilter').val();  
    $("a[name][name!='last']").each(function(index) 
                                    {
                                        nPostID = $(this).attr('name');

                                        sParent = $(this).parent()[0];
                                        sUser = $(sParent).find('a[href*="gforum.cgi?username="]')[0];
                                        sUserID = sUser.href.replace("http://www.dropzone.com/cgi-bin/forum/gforum.cgi?username=","").replace(";","");
                                        var postIndex = containsObject(nPostID,Posts);
                                        var bThreadIgnored = postIndex >= 0 ? Posts[postIndex].Hide : false;
                                        if (bThreadIgnored)
                                            $(this).siblings('table').hide();
                                        else
                                        {
                                            currentVisibleThreads.push(nPostID);
                                            nShownCount++;
                                            $(this).siblings('table').show();
                                        }
                                    });
}     

function IgnoreItem(event) 
{ 
    var nCurrentID = event.data.param1;
    var sList = event.data.param2;

    if (sList == 'IgnoredUserList') 
    {
        addItem = {}
        addItem.ID = nCurrentID;
        CurrentList = GetListFromLocalStorage(sList);
        nFoundIndex = containsObject(nCurrentID,CurrentList);

        if (nFoundIndex == -1) 
            CurrentList.push(addItem); 
        else 
            CurrentList.splice(nFoundIndex,1);
        localStorage.setItem(sList, JSON.stringify(CurrentList));
        Posts.forEach( function(s) { 
            if (s.UserID == nCurrentID) 
            {
                s.Hide = nFoundIndex == -1 ?  true : false;
                AddHideLink(s.Post);
            }
        } )

    }
    else
    {
        Posts.forEach( function(s) { 
            if (s.ID == nCurrentID) 
            {
                s.Hide = !s.Hide;
                AddHideLink(s.Post);
            }
        } )
    }
    if (event.data.param3)
        event.data.param3();



    return 0;
}
function GetListFromLocalStorage(sListName)
{
    return localStorage.getItem(sListName) ? JSON.parse(localStorage.getItem(sListName)) : [];
}

function containsObject(id, list) {
    var i;
    for (i = 0; i < list.length; i++) {
        if (list[i].ID == id) {
            return i;
        }
    }

    return -1;
}