CrazyJeux

Untitled

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