Beamdog user ignore script

Blocks specified users on the Beamdog forums

  1. // ==UserScript==
  2. // @name Beamdog user ignore script
  3. // @namespace https://greasyfork.org
  4. // @description Blocks specified users on the Beamdog forums
  5. // @include https://forums.beamdog.com/*
  6. // @version 2
  7. // @grant none
  8. // @run-at document-ready
  9. // ==/UserScript==
  10. /*This script is based on the Achaea forums ignore script.
  11. Permission from original author, Ephemeralis, has been granted.*/
  12.  
  13.  
  14. //add a person to this list, enclosing their name with "". Separate multiple entries with a comma.
  15. var userlist = [
  16. "Shandyr"
  17. ];
  18.  
  19. var reactionsToDelete = document.querySelectorAll(".UserReactionWrap");
  20. var leaderBoxesToDelete = document.querySelectorAll(".Leaderboard-User");
  21. var threadsToDelete = document.querySelectorAll(".FirstUser");
  22. var mostRecentToDelete = document.querySelectorAll(".LastUser");
  23. var postsToDelete = document.querySelectorAll(".AuthorWrap");
  24. var quotesToHide = document.querySelectorAll(".QuoteAuthor");
  25. var onlineUsersToHide = document.querySelectorAll(".OnlineUserWrap");
  26. var activityWallPostToDelete = document.querySelectorAll(".Activity-WallPost");
  27. var activityStatusToDelete = document.querySelectorAll(".Activity-Status,.ActivityComment");
  28. var picChangeToDelete = document.querySelectorAll(".Activity-PictureChange");
  29. var bestofToDelete = document.querySelectorAll(".Tile");
  30. var messagesToDelete = document.querySelectorAll(".Conversation,.ConversationMessage");
  31. var badgesToDelete = document.querySelectorAll(".Activity-Badge,.Activity-Registration");
  32. var tagsToDelete = document.querySelectorAll(".Message a,.Excerpt a");
  33. var pollPicsToDelete = document.querySelectorAll(".PhotoGridSmall a");
  34.  
  35.  
  36. var url = window.location.href;
  37. var sub1 = "activity";
  38. var sub2 = "profile";
  39. var sub3 = "discussion";
  40. var sub4 = "categories";
  41. var sub5 = "bestof";
  42. var sub6 = "messages";
  43.  
  44.  
  45. //no URL check here
  46. //delete user reactions
  47. for (var i=0; i < reactionsToDelete.length; i++) {
  48. if (userlist.indexOf(reactionsToDelete[i].querySelector(".ProfilePhoto").getAttribute("alt")) > -1) {
  49. reactionsToDelete[i].style.display = 'none';
  50. }
  51. }
  52.  
  53. //delete from leaderboards
  54. for (var i=0; i < leaderBoxesToDelete.length; i++) {
  55. if (userlist.indexOf(leaderBoxesToDelete[i].querySelector(".Username").textContent) > -1 ) {
  56. leaderBoxesToDelete[i].parentNode.parentNode.style.display = 'none';
  57. }
  58. }
  59.  
  60. //delete user tags
  61. for (var i=0; i < tagsToDelete.length; i++) {
  62. var tag = tagsToDelete[i].textContent;
  63. if (tag[0] == '@' && userlist.indexOf(tag.substring(1, tag.length)) > -1 ) {
  64. tagsToDelete[i].outerHTML = '@blockedUser';
  65. }
  66. }
  67.  
  68.  
  69. //case URL contains "discussion" or "categories"
  70. if (url.indexOf(sub3) !== -1 || url.indexOf(sub4) !== -1){
  71.  
  72. //delete small avatar icons on polls
  73. for (var i=0; i < pollPicsToDelete.length; i++) {
  74. if (userlist.indexOf( pollPicsToDelete[i].getAttribute("title") ) > -1 ){
  75. //pollPicsToDelete[i].outerHTML = '';
  76. pollPicsToDelete[i].style.display = 'none';
  77.  
  78. }
  79. }
  80.  
  81. //delete threads
  82. //important to start with i=1 here; first element needs to be skipped; it's just the header for the "started by" column
  83. for (var i=1; i < threadsToDelete.length; i++) {
  84. if (userlist.indexOf(threadsToDelete[i].querySelector(".BlockTitle").textContent) > -1) {
  85. threadsToDelete[i].parentNode.style.display = 'none';
  86. }
  87. }
  88.  
  89. //delete most recent panel for a thread in discussion board if most recent poster is on ignore
  90. //start with i=1; same reason as above
  91. for (var i=1; i < mostRecentToDelete.length; i++) {
  92. if (userlist.indexOf(mostRecentToDelete[i].querySelector(".BlockTitle").textContent) > -1) {
  93. mostRecentToDelete[i].querySelector(".Block").style.display = 'none';
  94. }
  95. }
  96.  
  97. //delete comments
  98. for (var i=0; i < postsToDelete.length; i++) {
  99. if (userlist.indexOf(postsToDelete[i].querySelector(".Username").textContent) > -1) {
  100. postsToDelete[i].parentNode.parentNode.parentNode.style.display = 'none';
  101. }
  102. }
  103.  
  104. //delete quotes; needs to be worked on for nested quotes
  105. for (var i=0; i < quotesToHide.length; i++) {
  106. if (userlist.indexOf(quotesToHide[i].firstChild.textContent) > -1) {
  107. quotesToHide[i].parentNode.style.display = 'none';
  108. }
  109. }
  110.  
  111. //delete user name in "Who's online" box and decrease counter
  112. // substring: to remove the "+" in front of the number
  113. var guestCounter = parseInt(document.querySelector(".GuestCount").textContent.substring(1),10);
  114. var counter = onlineUsersToHide.length + guestCounter;
  115.  
  116. for (var i=0; i < onlineUsersToHide.length; i++) {
  117. if (userlist.indexOf(onlineUsersToHide[i].textContent) > -1) {
  118. onlineUsersToHide[i].style.display = 'none';
  119. counter -= 1;
  120. document.querySelector(".WhosOnline").querySelector(".Count").innerHTML = counter;
  121. }
  122. }
  123. }
  124.  
  125. //case URL contains "activity" or "profile"
  126. if (url.indexOf(sub1) !== -1 || url.indexOf(sub2) !== -1 ){
  127.  
  128. //delete wall post to or from an ignored user
  129. for (var i=0; i < activityWallPostToDelete.length; i++) {
  130. //[0] for the case that ignored member is addresser; [1] for the case they are recipient
  131. if (userlist.indexOf(activityWallPostToDelete[i].querySelectorAll(".Name")[0].textContent) > -1 ||
  132. userlist.indexOf(activityWallPostToDelete[i].querySelectorAll(".Name")[1].textContent) > -1) {
  133. activityWallPostToDelete[i].style.display = 'none';
  134. }
  135. }
  136.  
  137. //delete post on own wall
  138. for (var i=0; i < activityStatusToDelete.length; i++) {
  139. if (userlist.indexOf(activityStatusToDelete[i].querySelector(".Title").textContent) > -1 ) {
  140. activityStatusToDelete[i].style.display = 'none';
  141. }
  142. }
  143.  
  144. //delete picture change message
  145. for (var i=0; i < picChangeToDelete.length; i++) {
  146. if (userlist.indexOf(picChangeToDelete[i].querySelector(".PhotoWrap").getAttribute("href").substring(9)) > -1 ) {
  147. picChangeToDelete[i].style.display = 'none';
  148. }
  149. }
  150.  
  151. //delete badge activity and registration messages
  152. for (var i=0; i < badgesToDelete.length; i++) {
  153. for (var j=0; j < userlist.length; j++) {
  154. if (badgesToDelete[i].textContent.indexOf(userlist[j]) > -1) {
  155. badgesToDelete[i].style.display = 'none';
  156. break;
  157. }
  158. }
  159. }
  160. }
  161.  
  162. //case URL contains "bestof"
  163. if (url.indexOf(sub5) !== -1) {
  164.  
  165. //delete from best of
  166. for (var i=0; i < bestofToDelete.length; i++) {
  167. if (userlist.indexOf(bestofToDelete[i].querySelector(".PhotoWrap").getAttribute("title")) > -1 ) {
  168. bestofToDelete[i].style.display = 'none';
  169. }
  170. }
  171. }
  172.  
  173. //case URL contains "messages"
  174. if (url.indexOf(sub6) !== -1 ){
  175. //delete private messages
  176. for (var i=0; i < messagesToDelete.length; i++) {
  177. if (userlist.indexOf(messagesToDelete[i].querySelector(".PhotoWrap").getAttribute("title")) > -1) {
  178. messagesToDelete[i].parentNode.style.display = 'none';
  179. }
  180. }
  181. }