Beamdog forums ignore script

Blocks specified users on the Beamdog forums

当前为 2016-08-07 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        Beamdog forums ignore script
// @namespace   https://greasyfork.org
// @description Blocks specified users on the Beamdog forums
// @include     https://forums.beamdog.com/*
// @version     1
// @grant       none
// @run-at      document-ready
// ==/UserScript==
/*This script is based on the Achaea forums ignore script.
Permission from original author, Ephemeralis, has been granted.*/


//add a person to this list, enclosing their name with "" and ending with ,
var userlist = [
   "Shandyr", 
];

var reactionsToDelete = document.querySelectorAll(".UserReactionWrap");
var leaderBoxesToDelete = document.querySelectorAll(".Leaderboard-User");
var threadsToDelete = document.querySelectorAll(".FirstUser");
var mostRecentToDelete = document.querySelectorAll(".LastUser");
var postsToDelete = document.querySelectorAll(".AuthorWrap");
var quotesToHide = document.querySelectorAll(".QuoteAuthor");
var onlineUsersToHide = document.querySelectorAll(".OnlineUserWrap");
var activityWallPostToDelete = document.querySelectorAll(".Activity-WallPost");
var activityStatusToDelete = document.querySelectorAll(".Activity-Status,.ActivityComment");
var picChangeToDelete = document.querySelectorAll(".Activity-PictureChange");
var bestofToDelete = document.querySelectorAll(".Tile");
var messagesToDelete = document.querySelectorAll(".Conversation,.ConversationMessage");
var badgesToDelete = document.querySelectorAll(".Activity-Badge,.Activity-Registration");

var url = window.location.href;
var sub1 = "activity";
var sub2 = "profile";
var sub3 = "discussion";
var sub4 = "categories";
var sub5 = "bestof";
var sub6 = "messages";


//no URL check here
   //delete user reactions
   for (var i=0; i < reactionsToDelete.length; i++)
   {
     if (userlist.indexOf(reactionsToDelete[i].querySelector(".ProfilePhoto").getAttribute("alt")) > -1)
      {
       reactionsToDelete[i].style.display = 'none';
      }
   }

   //delete from leaderboards
   for (var i=0; i < leaderBoxesToDelete.length; i++)
   {
     if (userlist.indexOf(leaderBoxesToDelete[i].querySelector(".Username").textContent) > -1 )
      {
       leaderBoxesToDelete[i].parentNode.parentNode.style.display = 'none';
      }
   }
    

//case URL contains "discussion" or "categories"
if (url.indexOf(sub3) !== -1 || url.indexOf(sub4) !== -1){
    
    //delete threads 
    //important to start with i=1 here; first element needs to be skipped; it's just the header for the "started by" column
    for (var i=1; i < threadsToDelete.length; i++)
    {
      if (userlist.indexOf(threadsToDelete[i].querySelector(".BlockTitle").textContent) > -1)
         {
           threadsToDelete[i].parentNode.style.display = 'none';
         }
    }   
    
    //delete most recent panel for a thread in discussion board if most recent poster is on ignore
    //start with i=1; same reason as above
    for (var i=1; i < mostRecentToDelete.length; i++)
    {
      if (userlist.indexOf(mostRecentToDelete[i].querySelector(".BlockTitle").textContent) > -1)
         {
           mostRecentToDelete[i].querySelector(".Block").style.display = 'none';
         }
    }  
    
    //delete comments
    for (var i=0; i < postsToDelete.length; i++)
    {
       if (userlist.indexOf(postsToDelete[i].querySelector(".Username").textContent) > -1)
       {
           postsToDelete[i].parentNode.parentNode.parentNode.style.display = 'none';
       }
    } 
    
    //delete quotes; needs to be worked on for nested quotes
    for (var i=0; i < quotesToHide.length; i++)
    {
       if (userlist.indexOf(quotesToHide[i].firstChild.textContent) > -1)
       {
        quotesToHide[i].parentNode.style.display = 'none';
       }
    }  

    //delete user name in "Who's online" box and decrease counter
    // substring: to remove the "+" in front of the number
    var guestCounter = parseInt(document.querySelector(".GuestCount").textContent.substring(1),10);
    var counter = onlineUsersToHide.length + guestCounter;
    
    for (var i=0; i < onlineUsersToHide.length; i++)
    {
      if (userlist.indexOf(onlineUsersToHide[i].textContent) > -1)
       {
        onlineUsersToHide[i].style.display = 'none';
        counter -= 1;
        document.querySelector(".WhosOnline").querySelector(".Count").innerHTML = counter; 
        }
    }
}

//case URL contains "activity" or "profile"
if (url.indexOf(sub1) !== -1 || url.indexOf(sub2) !== -1 ){

    //delete wall post to or from an ignored user
    for (var i=0; i < activityWallPostToDelete.length; i++)
    {
       //[0] for the case that ignored member is addresser; [1] for the case they are recipient
       if (userlist.indexOf(activityWallPostToDelete[i].querySelectorAll(".Name")[0].textContent) > -1 ||
           userlist.indexOf(activityWallPostToDelete[i].querySelectorAll(".Name")[1].textContent) > -1)
       {
           activityWallPostToDelete[i].style.display = 'none';
       }
    }

    //delete post on own wall
    for (var i=0; i < activityStatusToDelete.length; i++)
    {
      if (userlist.indexOf(activityStatusToDelete[i].querySelector(".Title").textContent) > -1 )
       {
          activityStatusToDelete[i].style.display = 'none';
       }
    }
    
    //delete picture change message
    for (var i=0; i < picChangeToDelete.length; i++)
    {
       if (userlist.indexOf(picChangeToDelete[i].querySelector(".PhotoWrap").getAttribute("href").substring(9)) > -1 )     
       {
          picChangeToDelete[i].style.display = 'none';
       }
    }
    
    //delete badge activity and registration messages
    for (var i=0; i < badgesToDelete.length; i++)
    {
      for (var j=0; j < userlist.length; j++)
      {
         if (badgesToDelete[i].textContent.indexOf(userlist[j]) > -1)
         {
          badgesToDelete[i].style.display = 'none';
         break; 
         }
      }
    }
}


//case URL contains "bestof"
if (url.indexOf(sub5) !== -1) {
    
    //delete from best of
     for (var i=0; i < bestofToDelete.length; i++)
    {
       if (userlist.indexOf(bestofToDelete[i].querySelector(".PhotoWrap").getAttribute("title")) > -1 )
       {
          bestofToDelete[i].style.display = 'none';
       }
    }   
}


//case URL contains "messages"
if (url.indexOf(sub6) !== -1 ){
     //delete private messages
    for (var i=0; i < messagesToDelete.length; i++)
    {
       if (userlist.indexOf(messagesToDelete[i].querySelector(".PhotoWrap").getAttribute("title")) > -1)
       {
           messagesToDelete[i].parentNode.style.display = 'none';
       }
    }
}