Beamdog user ignore script

Blocks specified users on the Beamdog forums

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name        Beamdog user ignore script
// @namespace   https://greasyfork.org
// @description Blocks specified users on the Beamdog forums
// @include     https://forums.beamdog.com/*
// @version     2
// @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 "". Separate multiple entries with a comma.
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 tagsToDelete = document.querySelectorAll(".Message a,.Excerpt a");
var pollPicsToDelete = document.querySelectorAll(".PhotoGridSmall a");


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';
      }
   }

   //delete user tags
   for (var i=0; i < tagsToDelete.length; i++) {
	   var tag = tagsToDelete[i].textContent;
     if (tag[0] == '@' && userlist.indexOf(tag.substring(1, tag.length)) > -1 ) {
       tagsToDelete[i].outerHTML = '@blockedUser';
      }
   }


//case URL contains "discussion" or "categories"
if (url.indexOf(sub3) !== -1 || url.indexOf(sub4) !== -1){

	//delete small avatar icons on polls
	for (var i=0; i < pollPicsToDelete.length; i++) {
		if (userlist.indexOf(  pollPicsToDelete[i].getAttribute("title")  ) > -1 ){
			//pollPicsToDelete[i].outerHTML = '';
			pollPicsToDelete[i].style.display = 'none';

		}
	}

    //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';
       }
    }
}