Advertisement
CrazyJeux

TotalBlacklist new position

May 5th, 2017
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name        TotalBlacklist
  3. // @namespace   CrazyJeux/Daring-Do
  4. // @author      CrazyJeux/Daring-Do
  5. // @match       *://www.jeuxvideo.com/*
  6. // @description Cache les messages et les topics des forumeurs blacklistés depuis l'installation du script.
  7. // @version     6
  8. // @grant       none
  9. // ==/UserScript==
  10.  
  11.     var showInfoBar = true;
  12.  
  13. function handleBlacklist() {
  14.     var nickname = this.parentNode.parentNode.querySelector("a.bloc-pseudo-msg");
  15.     if (nickname === null) {
  16.         alert("Erreur : le script TotalBlacklist n'a pas pu enregistrer cet utilisateur.");
  17.         return;
  18.     }
  19.     nickname = nickname.textContent.replace(/[\s\n]/g, "").toLowerCase();
  20.     //Don't register users that cannot be blacklisted (admins, ...)
  21.     /*var timer = setInterval(function () {
  22.      var element = document.querySelector(".modal-generic-content");
  23.      if (element !== null) {
  24.      clearInterval(timer);
  25.      if (element.textContent.indexOf("Cet utilisateur a bien été ajouté à la blacklist de votre compte") >= 0) {*/
  26.     addToBlacklist(nickname);
  27.     /*}
  28.      }
  29.      }, 25);*/
  30.  
  31.     //Useful for administrator/moderator messages
  32.     var msgs = document.querySelectorAll(".bloc-message-forum");
  33.     for (var i = 0; i < msgs.length; i++) {
  34.         var messageAuthor = msgs[i].querySelector("a.bloc-pseudo-msg");
  35.         if (messageAuthor !== null) {
  36.             messageAuthor = messageAuthor.innerHTML.replace(/[\s\n]/g, "").toLowerCase();
  37.             if (messageAuthor === nickname) {
  38.                 msgs[i].style.display = "none";
  39.                 msgs[i].className += " hiddenbytotalblacklist";
  40.             }
  41.         }
  42.     }
  43. }
  44.  
  45. function handleUnblacklist() {
  46.     var nickname = this.parentNode.querySelector("a");
  47.     if (nickname === null) {
  48.         alert("Erreur : le script TotalBlacklist n'a pas pu désenregistrer cet utilisateur.");
  49.         return;
  50.     }
  51.     var href = nickname.getAttribute("href");
  52.     nickname = href.substring(1, href.substring(1).indexOf("/") + 1).replace(/[\s\n]/g, "").toLowerCase();
  53.     removeFromBlacklist(nickname);
  54. }
  55.  
  56. function addToBlacklist(nickname) {
  57.     if (nickname === "auteurblacklisté" || nickname === "#") {
  58.         return;
  59.     }
  60.     //console.log("nickname to blacklist: '" + nickname + "'");
  61.     var currentArray = localStorage.getItem("blacklisted");
  62.     //console.log("currentArray before: " + currentArray);
  63.     if (currentArray === null || currentArray === "") {
  64.         currentArray = [];
  65.     } else {
  66.         currentArray = JSON.parse(currentArray);
  67.     }
  68.     if (currentArray.indexOf(nickname) < 0) {
  69.         currentArray.push(nickname);
  70.         //console.log("currentArray after: " + JSON.stringify(currentArray, null, 4));
  71.         localStorage.setItem("blacklisted", JSON.stringify(currentArray));
  72.     }
  73. }
  74.  
  75. function removeFromBlacklist(nickname) {
  76.     if (nickname === "auteurblacklisté" || nickname === "#") {
  77.         return;
  78.     }
  79.     //console.log("nickname to unregister: '" + nickname + "'");
  80.     var blacklisted = localStorage.getItem("blacklisted");
  81.     //console.log("blacklisted before: " + blacklisted);
  82.     if (blacklisted === null || blacklisted === "") {
  83.         return;
  84.     }
  85.     blacklisted = JSON.parse(blacklisted);
  86.     var index = blacklisted.indexOf(nickname);
  87.     if (index >= 0) {
  88.         blacklisted.splice(index, 1);
  89.         //console.log("blacklisted after: " + JSON.stringify(blacklisted, null, 4));
  90.         localStorage.setItem("blacklisted", JSON.stringify(blacklisted));
  91.     }
  92. }
  93.  
  94. function handleShowHiddenMessages() {
  95.     var hiddenElements = document.querySelectorAll(".hiddenbytotalblacklist");
  96.     if (hiddenElements.length > 0) {
  97.         this.innerHTML = "cacher";
  98.         for (var i = 0; i < hiddenElements.length; i++) {
  99.             var el = hiddenElements[i];
  100.             //If message
  101.             if (el.tagName !== "LI") {
  102.                 el.style.display = "block";
  103.             } else { //If thread
  104.                 //Doesn't work?
  105.                 //el.style.display = "cell";
  106.                 //el.style.cssText = "display: cell;";
  107.                 el.style.display = "table-row";
  108.             }
  109.             el.className = el.className.replace("hiddenbytotalblacklist", "shownbytotalblacklist");
  110.         }
  111.         return;
  112.     }
  113.     var shownElements = document.querySelectorAll(".shownbytotalblacklist");
  114.     if (shownElements.length > 0) {
  115.         this.innerHTML = "voir";
  116.         for (var i = 0; i < shownElements.length; i++) {
  117.             var el = shownElements[i];
  118.             el.style.display = "none";
  119.             el.className = el.className.replace("shownbytotalblacklist", "hiddenbytotalblacklist");
  120.         }
  121.     }
  122. }
  123.  
  124. function handleShowBlacklistedUsers() {
  125.     var listofblacklistedusers = this.parentNode.querySelector("#listofblacklistedusers");
  126.     var d = listofblacklistedusers.style.display;
  127.     listofblacklistedusers.style.display = ((d === "inline") ? "none" : "inline");
  128.     this.innerHTML = ((d === "inline") ? "voir" : "cacher");
  129. }
  130.  
  131. function handleUnblacklistAllUsers() {
  132.     localStorage.setItem("blacklisted", "[]");
  133.     //Show all the hidden messages/threads on this page
  134.     //Messages
  135.     var hidden = document.querySelectorAll(".msg-pseudo-blacklist, .hiddenbytotalblacklist");
  136.     for (var i = 0; i < hidden.length; i++) {
  137.         var message = hidden[i];
  138.         if (message.tagName !== "LI") {
  139.             message.style.display = "block";
  140.             message.className = message.className.replace("hiddenbytotalblacklist", "").replace("shownbytotalblacklist", "");
  141.         }
  142.     }
  143.     //Threads
  144.     var threadsAuthors = document.querySelectorAll("li.hiddenbytotalblacklist, li.shownbytotalblacklist");
  145.     for (var i = 0; i < threadsAuthors.length; i++) {
  146.         threadsAuthors[i].style.display = "table-row";
  147.         //threadsAuthors[i].style.cssText = "display: cell";
  148.         threadsAuthors[i].className = threadsAuthors[i].className.replace("hiddenbytotalblacklist", "").replace("shownbytotalblacklist", "");
  149.     }
  150.     alert("Tous les pseudos ont bien été retirés de la blacklist du script.\n\nAttention, ils n'ont pas été retirés de votre blacklist sur JVC.\n\n"
  151.         + "Plus aucun pseudo n'est blacklisté, la barre d'informations va donc être supprimée.");
  152.     document.querySelector("#totalblacklistbar").remove();
  153. }
  154.  
  155. function handleUnblacklistSingleUser() {
  156.     var nickname = this.innerHTML.trim();
  157.     removeFromBlacklist(nickname);
  158.     //Show all their hidden messages/threads on this page
  159.     var nbMsgsShown = 0;
  160.     //Messages
  161.     var hidden = document.querySelectorAll(".msg-pseudo-blacklist");
  162.     for (var i = 0; i < hidden.length; i++) {
  163.         var messageAuthor = hidden[i].querySelector(".liens-blacklist a");
  164.         var href = messageAuthor.getAttribute("href");
  165.         messageAuthor = href.substring(1, href.substring(1).indexOf("/") + 1).replace(/[\s\n]/g, "").toLowerCase();
  166.         if (messageAuthor === nickname) {
  167.             hidden[i].style.display = "block";
  168.             hidden[i].className = hidden[i].className.replace("hiddenbytotalblacklist", "").replace("shownbytotalblacklist", "");
  169.             nbMsgsShown++;
  170.         }
  171.     }
  172.     //Useful for administrator/moderator messages
  173.     var msgs = document.querySelectorAll(".bloc-message-forum");
  174.     for (var i = 0; i < msgs.length; i++) {
  175.         if (msgs[i].style.display === "none") {
  176.             var messageAuthor = msgs[i].querySelector("a.bloc-pseudo-msg");
  177.             if (messageAuthor !== null) {
  178.                 messageAuthor = messageAuthor.innerHTML.replace(/[\s\n]/g, "").toLowerCase();
  179.                 if (messageAuthor === nickname) {
  180.                     msgs[i].style.display = "block";
  181.                     msgs[i].className = msgs[i].className.replace("hiddenbytotalblacklist", "").replace("shownbytotalblacklist", "");
  182.                     nbMsgsShown++;
  183.                 }
  184.             }
  185.         }
  186.     }
  187.     //Threads
  188.     var threadsAuthors = document.querySelectorAll(".topic-author");
  189.     for (var i = 0; i < threadsAuthors.length; i++) {
  190.         var threadAuthor = threadsAuthors[i].textContent.replace(/[\s\n]/g, "").toLowerCase();
  191.         if (threadAuthor === nickname) {
  192.             var thread = threadsAuthors[i].parentNode;
  193.             while (thread.tagName !== "LI") {
  194.                 thread = thread.parentNode;
  195.             }
  196.             thread.style.display = "table-row";
  197.             //thread.style.cssText = "display: cell";
  198.             thread.className = thread.className.replace("hiddenbytotalblacklist", "").replace("shownbytotalblacklist", "");
  199.             nbMsgsShown++;
  200.         }
  201.     }
  202.     var bar = document.querySelector("#totalblacklistbar");
  203.     var numberofhiddenmessages = bar.querySelector("#numberofhiddenmessages");
  204.     var prevNbMsgs = parseInt(numberofhiddenmessages.innerHTML, 10);
  205.     var newNbMsgs = prevNbMsgs - nbMsgsShown;
  206.     numberofhiddenmessages.innerHTML = newNbMsgs;
  207.     var s = nickname + " a bien été retiré de la blacklist du script.\n\nAttention, il n'a pas été retiré de votre blacklist sur JVC.";
  208.     var numberofblacklistedusers = bar.querySelector("#numberofblacklistedusers");
  209.     var prevNbAuthors = parseInt(numberofblacklistedusers.innerHTML, 10);
  210.     if (prevNbAuthors === 1) {
  211.         s += "\n\nPlus aucun pseudo n'est blacklisté, la barre d'informations a donc été supprimée.";
  212.         bar.remove();
  213.     } else {
  214.         numberofblacklistedusers.innerHTML = (prevNbAuthors - 1);
  215.         this.remove();
  216.     }
  217.     alert(s);
  218. }
  219.  
  220. function callMe() {
  221.     var attr = document.body.getAttribute("data-totalblacklist");
  222.     if (attr === null || attr === "") {
  223.         document.body.setAttribute("data-totalblacklist", "true");
  224.     } else {
  225.         return;
  226.     }
  227.  
  228.     var nbHidden = 0;
  229.  
  230.     //Hide some threads on the forum main page
  231.     var nbHiddenThreads = 0;
  232.     var topicIDs = [];
  233.     var table = document.querySelector(".topic-list");
  234.     if (table !== null) {
  235.         var TRs = table.querySelectorAll("li[data-id]");
  236.         for (var i = 0; i < TRs.length; i++) {
  237.             var topicID = TRs[i].getAttribute("data-id");
  238.             topicIDs.push(topicID);
  239.         }
  240.  
  241.         var blacklisted = localStorage.getItem("blacklisted");
  242.         //console.log("blacklisted: " + blacklisted);
  243.         if (blacklisted !== null && blacklisted !== "") {
  244.             blacklisted = JSON.parse(blacklisted);
  245.             if (blacklisted.length > 0) {
  246.                 var topicAuthors = table.querySelectorAll(".topic-author");
  247.                 for (var i = 0; i < topicAuthors.length; i++) {
  248.                     var author = topicAuthors[i].textContent.replace(/[\s\n]/g, "").toLowerCase();
  249.                     //console.log("author: '"+author+"'");
  250.                     if (blacklisted.indexOf(author) >= 0) {
  251.                         topicAuthors[i].parentNode.style.display = "none";
  252.                         topicAuthors[i].parentNode.className += " hiddenbytotalblacklist";
  253.                         nbHidden++;
  254.                         nbHiddenThreads++;
  255.                     }
  256.                 }
  257.             }
  258.         }
  259.     }
  260.  
  261.     //Unregister every user that was in the localStorage but who isn't blacklisted anymore
  262.     //Commented out so that you can blacklist moderators and administrators if they send a message as a regular user ;)
  263.     /*var messages = document.querySelectorAll(".bloc-message-forum");
  264.      for (var i = 0; i < messages.length; i++) {
  265.      if (messages[i].style.display !== "none") {
  266.      var nickname = messages[i].querySelector(".bloc-pseudo-msg").textContent.replace(/[\s\n]/g, "").toLowerCase();
  267.      removeFromBlacklist(nickname);
  268.      }
  269.      }*/
  270.  
  271.     //Unregister every user we unblacklist
  272.     //Also register every blacklisted user that isn't in the localStorage yet
  273.     var unblacklistButtons = document.querySelectorAll(".btn-blacklist-cancel");
  274.     for (var i = 0; i < unblacklistButtons.length; i++) {
  275.         unblacklistButtons[i].addEventListener("click", handleUnblacklist, true);
  276.         var nickname = unblacklistButtons[i].parentNode.querySelectorAll("a")[0];
  277.         var href = nickname.getAttribute("href");
  278.         nickname = href.substring(1, href.substring(1).indexOf("/") + 1).replace(/[\s\n]/g, "").toLowerCase();
  279.         addToBlacklist(nickname);
  280.     }
  281.  
  282.     //Register every user we blacklist
  283.     var blacklistButtons = document.querySelectorAll(".picto-msg-tronche");
  284.     for (var i = 0; i < blacklistButtons.length; i++) {
  285.         blacklistButtons[i].addEventListener("click", handleBlacklist, true);
  286.     }
  287.  
  288.     //Hide some messages in a thread
  289.     var hiddenMessages = document.querySelectorAll(".msg-pseudo-blacklist");
  290.     for (var i = 0; i < hiddenMessages.length; i++) {
  291.         hiddenMessages[i].style.display = "none";
  292.         hiddenMessages[i].className += " hiddenbytotalblacklist";
  293.     }
  294.  
  295.     var blacklisted = localStorage.getItem("blacklisted");
  296.     if (blacklisted !== null && blacklisted !== "" && blacklisted !== "[]") {
  297.         blacklisted = JSON.parse(blacklisted);
  298.         var messages = document.querySelectorAll(".bloc-message-forum");
  299.         for (var i = 0; i < messages.length; i++) {
  300.             var messageAuthorDiv = messages[i].querySelector("a.bloc-pseudo-msg");
  301.             if (messageAuthorDiv !== null) {
  302.                 var messageAuthor = messageAuthorDiv.innerHTML.replace(/[\s\n]/g, "").toLowerCase();
  303.                 if (blacklisted.indexOf(messageAuthor) >= 0) {
  304.                     messages[i].style.display = "none";
  305.                     messages[i].className += " hiddenbytotalblacklist";
  306.                     nbHidden++;
  307.                 }
  308.             }
  309.         }
  310.     }
  311.  
  312.     //Load the next threads to compensate the "holes"
  313.     if (nbHiddenThreads > 0) {
  314.         var nbHiddenThreadsBase = nbHiddenThreads;
  315.         var nextPageButton = document.querySelector(".pagi-suivant-actif");
  316.         if (nextPageButton !== null) {
  317.             var curNbOfCalls = 0;
  318.             var nextUrl = "http://" + window.location.hostname + nextPageButton.getAttribute("href");
  319.             (function loop(nextUrl, curNbOfCalls, nbHiddenThreadsBase) {
  320.                 var xmlhttp = new XMLHttpRequest();
  321.                 xmlhttp.onreadystatechange = function () {
  322.                     if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
  323.                         curNbOfCalls++;
  324.  
  325.                         var nextPageContent = document.createElement('div');
  326.                         nextPageContent.innerHTML = xmlhttp.responseText;
  327.  
  328.                         var stop = false;
  329.                         var remoteTable = nextPageContent.querySelector(".topic-list");
  330.                         if (remoteTable !== null) {
  331.                             var remoteTRs = remoteTable.querySelectorAll("li[data-id]");
  332.                             for (var i = 0; i < remoteTRs.length; i++) {
  333.                                 var remoteTopicID = remoteTRs[i].getAttribute("data-id");
  334.                                 if (topicIDs.indexOf(remoteTopicID) < 0) {
  335.                                     var topicAuthorDiv = remoteTRs[i].querySelector(".topic-author");
  336.                                     if (topicAuthorDiv !== null) {
  337.                                         var topicAuthor = topicAuthorDiv.textContent.replace(/[\s\n]/g, "").toLowerCase();
  338.                                         if (blacklisted.indexOf(topicAuthor) < 0) {
  339.                                             table.appendChild(remoteTRs[i]);
  340.                                             nbHiddenThreadsBase--;
  341.                                             if (nbHiddenThreadsBase === 0) {
  342.                                                 stop = true;
  343.                                                 break;
  344.                                             }
  345.                                         }
  346.                                     }
  347.                                 }
  348.                             }
  349.                         }
  350.                         if (stop === true || curNbOfCalls > 2) {
  351.                             return;
  352.                         }
  353.                         var nextPageButton = nextPageContent.querySelector(".pagi-suivant-actif");
  354.                         if (nextPageButton !== null) {
  355.                             var nextUrl = "http://" + window.location.hostname + nextPageButton.getAttribute("href");
  356.                             loop(nextUrl, curNbOfCalls, nbHiddenThreadsBase);
  357.                         }
  358.                     }
  359.                 };
  360.                 xmlhttp.open("GET", nextUrl, true);
  361.                 xmlhttp.send();
  362.             })(nextUrl, curNbOfCalls, nbHiddenThreadsBase);
  363.         }
  364.     }
  365.  
  366.     //Show an info bar about the users blacklisted by this script
  367.     if (showInfoBar === true) {
  368.         var div = document.createElement("div");
  369.         div.id = "totalblacklistbar";
  370.         div.innerHTML = "<span id='numberofhiddenmessages'></span> messages/topics cachés (<span id='showhiddenmessages'>voir</span>) | " +
  371.             "<span id='numberofblacklistedusers'></span> pseudos blacklistés en tout (<span id='showallblacklistedusers'>voir</span>) " +
  372.             "<span id='listofblacklistedusers' style='display: none;'></span> | "
  373.             + "<span id='unblacklistallusers'>Déblacklister tout le monde</span><br /><br />";
  374.         //Uncomment if dark theme
  375.         //div.style.color = "white";
  376.         var nextElement = document.querySelector(".bloc-modo-fofo");
  377.         /*var nextElement = document.querySelector(".bloc-message-forum");
  378.         if (nextElement === null) {
  379.             nextElement = document.querySelector(".topic-list");
  380.         }*/
  381.         nextElement.parentNode.insertBefore(div, nextElement);
  382.  
  383.         var numberofhiddenmessages = div.querySelector("#numberofhiddenmessages");
  384.         numberofhiddenmessages.innerHTML = nbHidden;
  385.  
  386.         var showhiddenmessages = div.querySelector("#showhiddenmessages");
  387.         showhiddenmessages.style.cursor = "pointer";
  388.         showhiddenmessages.style.textDecoration = "underline";
  389.         showhiddenmessages.addEventListener("click", handleShowHiddenMessages, true);
  390.  
  391.         var numberofblacklistedusers = div.querySelector("#numberofblacklistedusers");
  392.         var totalNb = 0;
  393.         var blacklisted = localStorage.getItem("blacklisted");
  394.         if (blacklisted !== null && blacklisted !== "" && blacklisted !== "[]") {
  395.             blacklisted = JSON.parse(blacklisted);
  396.             totalNb = blacklisted.length;
  397.         }
  398.         //No need to show this bar if no one is blacklisted
  399.         if (totalNb === 0) {
  400.             div.remove();
  401.             return;
  402.         }
  403.         numberofblacklistedusers.innerHTML = totalNb;
  404.  
  405.         var listofblacklistedusers = div.querySelector("#listofblacklistedusers");
  406.         for (var i = 0; i < blacklisted.length; i++) {
  407.             var span = document.createElement("span");
  408.             span.style.cursor = "pointer";
  409.             span.innerHTML = " " + blacklisted[i];
  410.             span.title = "Retirer " + blacklisted[i] + " de la blacklist";
  411.             listofblacklistedusers.appendChild(span);
  412.             span.addEventListener("click", handleUnblacklistSingleUser, true);
  413.         }
  414.  
  415.         var showallblacklistedusers = div.querySelector("#showallblacklistedusers");
  416.         showallblacklistedusers.style.cursor = "pointer";
  417.         showallblacklistedusers.style.textDecoration = "underline";
  418.         showallblacklistedusers.addEventListener("click", handleShowBlacklistedUsers, true);
  419.  
  420.         var unblacklistallusers = div.querySelector("#unblacklistallusers");
  421.         unblacklistallusers.style.cursor = "pointer";
  422.         unblacklistallusers.style.textDecoration = "underline";
  423.         unblacklistallusers.addEventListener("click", handleUnblacklistAllUsers, true);
  424.     }
  425. }
  426. callMe();
  427.  
  428. //Respeed
  429. addEventListener('instantclick:newpage', callMe);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement