NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name TotalBlacklist // @namespace CrazyJeux/Daring-Do // @author CrazyJeux/Daring-Do // @match *://www.jeuxvideo.com/* // @description Cache les messages et les topics des forumeurs blacklistés depuis l'installation du script. // @version 6 // @grant none // ==/UserScript== var showInfoBar = true; function handleBlacklist() { var nickname = this.parentNode.parentNode.querySelector("a.bloc-pseudo-msg"); if (nickname === null) { alert("Erreur : le script TotalBlacklist n'a pas pu enregistrer cet utilisateur."); return; } nickname = nickname.textContent.replace(/[\s\n]/g, "").toLowerCase(); //Don't register users that cannot be blacklisted (admins, ...) /*var timer = setInterval(function () { var element = document.querySelector(".modal-generic-content"); if (element !== null) { clearInterval(timer); if (element.textContent.indexOf("Cet utilisateur a bien été ajouté à la blacklist de votre compte") >= 0) {*/ addToBlacklist(nickname); /*} } }, 25);*/ //Useful for administrator/moderator messages var msgs = document.querySelectorAll(".bloc-message-forum"); for (var i = 0; i < msgs.length; i++) { var messageAuthor = msgs[i].querySelector("a.bloc-pseudo-msg"); if (messageAuthor !== null) { messageAuthor = messageAuthor.innerHTML.replace(/[\s\n]/g, "").toLowerCase(); if (messageAuthor === nickname) { msgs[i].style.display = "none"; msgs[i].className += " hiddenbytotalblacklist"; } } } } function handleUnblacklist() { var nickname = this.parentNode.querySelector("a"); if (nickname === null) { alert("Erreur : le script TotalBlacklist n'a pas pu désenregistrer cet utilisateur."); return; } var href = nickname.getAttribute("href"); nickname = href.substring(1, href.substring(1).indexOf("/") + 1).replace(/[\s\n]/g, "").toLowerCase(); removeFromBlacklist(nickname); } function addToBlacklist(nickname) { if (nickname === "auteurblacklisté" || nickname === "#") { return; } //console.log("nickname to blacklist: '" + nickname + "'"); var currentArray = localStorage.getItem("blacklisted"); //console.log("currentArray before: " + currentArray); if (currentArray === null || currentArray === "") { currentArray = []; } else { currentArray = JSON.parse(currentArray); } if (currentArray.indexOf(nickname) < 0) { currentArray.push(nickname); //console.log("currentArray after: " + JSON.stringify(currentArray, null, 4)); localStorage.setItem("blacklisted", JSON.stringify(currentArray)); } } function removeFromBlacklist(nickname) { if (nickname === "auteurblacklisté" || nickname === "#") { return; } //console.log("nickname to unregister: '" + nickname + "'"); var blacklisted = localStorage.getItem("blacklisted"); //console.log("blacklisted before: " + blacklisted); if (blacklisted === null || blacklisted === "") { return; } blacklisted = JSON.parse(blacklisted); var index = blacklisted.indexOf(nickname); if (index >= 0) { blacklisted.splice(index, 1); //console.log("blacklisted after: " + JSON.stringify(blacklisted, null, 4)); localStorage.setItem("blacklisted", JSON.stringify(blacklisted)); } } function handleShowHiddenMessages() { var hiddenElements = document.querySelectorAll(".hiddenbytotalblacklist"); if (hiddenElements.length > 0) { this.innerHTML = "cacher"; for (var i = 0; i < hiddenElements.length; i++) { var el = hiddenElements[i]; //If message if (el.tagName !== "LI") { el.style.display = "block"; } else { //If thread //Doesn't work? //el.style.display = "cell"; //el.style.cssText = "display: cell;"; el.style.display = "table-row"; } el.className = el.className.replace("hiddenbytotalblacklist", "shownbytotalblacklist"); } return; } var shownElements = document.querySelectorAll(".shownbytotalblacklist"); if (shownElements.length > 0) { this.innerHTML = "voir"; for (var i = 0; i < shownElements.length; i++) { var el = shownElements[i]; el.style.display = "none"; el.className = el.className.replace("shownbytotalblacklist", "hiddenbytotalblacklist"); } } } function handleShowBlacklistedUsers() { var listofblacklistedusers = this.parentNode.querySelector("#listofblacklistedusers"); var d = listofblacklistedusers.style.display; listofblacklistedusers.style.display = ((d === "inline") ? "none" : "inline"); this.innerHTML = ((d === "inline") ? "voir" : "cacher"); } function handleUnblacklistAllUsers() { localStorage.setItem("blacklisted", "[]"); //Show all the hidden messages/threads on this page //Messages var hidden = document.querySelectorAll(".msg-pseudo-blacklist, .hiddenbytotalblacklist"); for (var i = 0; i < hidden.length; i++) { var message = hidden[i]; if (message.tagName !== "LI") { message.style.display = "block"; message.className = message.className.replace("hiddenbytotalblacklist", "").replace("shownbytotalblacklist", ""); } } //Threads var threadsAuthors = document.querySelectorAll("li.hiddenbytotalblacklist, li.shownbytotalblacklist"); for (var i = 0; i < threadsAuthors.length; i++) { threadsAuthors[i].style.display = "table-row"; //threadsAuthors[i].style.cssText = "display: cell"; threadsAuthors[i].className = threadsAuthors[i].className.replace("hiddenbytotalblacklist", "").replace("shownbytotalblacklist", ""); } 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" + "Plus aucun pseudo n'est blacklisté, la barre d'informations va donc être supprimée."); document.querySelector("#totalblacklistbar").remove(); } function handleUnblacklistSingleUser() { var nickname = this.innerHTML.trim(); removeFromBlacklist(nickname); //Show all their hidden messages/threads on this page var nbMsgsShown = 0; //Messages var hidden = document.querySelectorAll(".msg-pseudo-blacklist"); for (var i = 0; i < hidden.length; i++) { var messageAuthor = hidden[i].querySelector(".liens-blacklist a"); var href = messageAuthor.getAttribute("href"); messageAuthor = href.substring(1, href.substring(1).indexOf("/") + 1).replace(/[\s\n]/g, "").toLowerCase(); if (messageAuthor === nickname) { hidden[i].style.display = "block"; hidden[i].className = hidden[i].className.replace("hiddenbytotalblacklist", "").replace("shownbytotalblacklist", ""); nbMsgsShown++; } } //Useful for administrator/moderator messages var msgs = document.querySelectorAll(".bloc-message-forum"); for (var i = 0; i < msgs.length; i++) { if (msgs[i].style.display === "none") { var messageAuthor = msgs[i].querySelector("a.bloc-pseudo-msg"); if (messageAuthor !== null) { messageAuthor = messageAuthor.innerHTML.replace(/[\s\n]/g, "").toLowerCase(); if (messageAuthor === nickname) { msgs[i].style.display = "block"; msgs[i].className = msgs[i].className.replace("hiddenbytotalblacklist", "").replace("shownbytotalblacklist", ""); nbMsgsShown++; } } } } //Threads var threadsAuthors = document.querySelectorAll(".topic-author"); for (var i = 0; i < threadsAuthors.length; i++) { var threadAuthor = threadsAuthors[i].textContent.replace(/[\s\n]/g, "").toLowerCase(); if (threadAuthor === nickname) { var thread = threadsAuthors[i].parentNode; while (thread.tagName !== "LI") { thread = thread.parentNode; } thread.style.display = "table-row"; //thread.style.cssText = "display: cell"; thread.className = thread.className.replace("hiddenbytotalblacklist", "").replace("shownbytotalblacklist", ""); nbMsgsShown++; } } var bar = document.querySelector("#totalblacklistbar"); var numberofhiddenmessages = bar.querySelector("#numberofhiddenmessages"); var prevNbMsgs = parseInt(numberofhiddenmessages.innerHTML, 10); var newNbMsgs = prevNbMsgs - nbMsgsShown; numberofhiddenmessages.innerHTML = newNbMsgs; 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."; var numberofblacklistedusers = bar.querySelector("#numberofblacklistedusers"); var prevNbAuthors = parseInt(numberofblacklistedusers.innerHTML, 10); if (prevNbAuthors === 1) { s += "\n\nPlus aucun pseudo n'est blacklisté, la barre d'informations a donc été supprimée."; bar.remove(); } else { numberofblacklistedusers.innerHTML = (prevNbAuthors - 1); this.remove(); } alert(s); } function callMe() { var attr = document.body.getAttribute("data-totalblacklist"); if (attr === null || attr === "") { document.body.setAttribute("data-totalblacklist", "true"); } else { return; } var nbHidden = 0; //Hide some threads on the forum main page var nbHiddenThreads = 0; var topicIDs = []; var table = document.querySelector(".topic-list"); if (table !== null) { var TRs = table.querySelectorAll("li[data-id]"); for (var i = 0; i < TRs.length; i++) { var topicID = TRs[i].getAttribute("data-id"); topicIDs.push(topicID); } var blacklisted = localStorage.getItem("blacklisted"); //console.log("blacklisted: " + blacklisted); if (blacklisted !== null && blacklisted !== "") { blacklisted = JSON.parse(blacklisted); if (blacklisted.length > 0) { var topicAuthors = table.querySelectorAll(".topic-author"); for (var i = 0; i < topicAuthors.length; i++) { var author = topicAuthors[i].textContent.replace(/[\s\n]/g, "").toLowerCase(); //console.log("author: '"+author+"'"); if (blacklisted.indexOf(author) >= 0) { topicAuthors[i].parentNode.style.display = "none"; topicAuthors[i].parentNode.className += " hiddenbytotalblacklist"; nbHidden++; nbHiddenThreads++; } } } } } //Unregister every user that was in the localStorage but who isn't blacklisted anymore //Commented out so that you can blacklist moderators and administrators if they send a message as a regular user ;) /*var messages = document.querySelectorAll(".bloc-message-forum"); for (var i = 0; i < messages.length; i++) { if (messages[i].style.display !== "none") { var nickname = messages[i].querySelector(".bloc-pseudo-msg").textContent.replace(/[\s\n]/g, "").toLowerCase(); removeFromBlacklist(nickname); } }*/ //Unregister every user we unblacklist //Also register every blacklisted user that isn't in the localStorage yet var unblacklistButtons = document.querySelectorAll(".btn-blacklist-cancel"); for (var i = 0; i < unblacklistButtons.length; i++) { unblacklistButtons[i].addEventListener("click", handleUnblacklist, true); var nickname = unblacklistButtons[i].parentNode.querySelectorAll("a")[0]; var href = nickname.getAttribute("href"); nickname = href.substring(1, href.substring(1).indexOf("/") + 1).replace(/[\s\n]/g, "").toLowerCase(); addToBlacklist(nickname); } //Register every user we blacklist var blacklistButtons = document.querySelectorAll(".picto-msg-tronche"); for (var i = 0; i < blacklistButtons.length; i++) { blacklistButtons[i].addEventListener("click", handleBlacklist, true); } //Hide some messages in a thread var hiddenMessages = document.querySelectorAll(".msg-pseudo-blacklist"); for (var i = 0; i < hiddenMessages.length; i++) { hiddenMessages[i].style.display = "none"; hiddenMessages[i].className += " hiddenbytotalblacklist"; } var blacklisted = localStorage.getItem("blacklisted"); if (blacklisted !== null && blacklisted !== "" && blacklisted !== "[]") { blacklisted = JSON.parse(blacklisted); var messages = document.querySelectorAll(".bloc-message-forum"); for (var i = 0; i < messages.length; i++) { var messageAuthorDiv = messages[i].querySelector("a.bloc-pseudo-msg"); if (messageAuthorDiv !== null) { var messageAuthor = messageAuthorDiv.innerHTML.replace(/[\s\n]/g, "").toLowerCase(); if (blacklisted.indexOf(messageAuthor) >= 0) { messages[i].style.display = "none"; messages[i].className += " hiddenbytotalblacklist"; nbHidden++; } } } } //Load the next threads to compensate the "holes" if (nbHiddenThreads > 0) { var nbHiddenThreadsBase = nbHiddenThreads; var nextPageButton = document.querySelector(".pagi-suivant-actif"); if (nextPageButton !== null) { var curNbOfCalls = 0; var nextUrl = "http://" + window.location.hostname + nextPageButton.getAttribute("href"); (function loop(nextUrl, curNbOfCalls, nbHiddenThreadsBase) { var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState === 4 && xmlhttp.status === 200) { curNbOfCalls++; var nextPageContent = document.createElement('div'); nextPageContent.innerHTML = xmlhttp.responseText; var stop = false; var remoteTable = nextPageContent.querySelector(".topic-list"); if (remoteTable !== null) { var remoteTRs = remoteTable.querySelectorAll("li[data-id]"); for (var i = 0; i < remoteTRs.length; i++) { var remoteTopicID = remoteTRs[i].getAttribute("data-id"); if (topicIDs.indexOf(remoteTopicID) < 0) { var topicAuthorDiv = remoteTRs[i].querySelector(".topic-author"); if (topicAuthorDiv !== null) { var topicAuthor = topicAuthorDiv.textContent.replace(/[\s\n]/g, "").toLowerCase(); if (blacklisted.indexOf(topicAuthor) < 0) { table.appendChild(remoteTRs[i]); nbHiddenThreadsBase--; if (nbHiddenThreadsBase === 0) { stop = true; break; } } } } } } if (stop === true || curNbOfCalls > 2) { return; } var nextPageButton = nextPageContent.querySelector(".pagi-suivant-actif"); if (nextPageButton !== null) { var nextUrl = "http://" + window.location.hostname + nextPageButton.getAttribute("href"); loop(nextUrl, curNbOfCalls, nbHiddenThreadsBase); } } }; xmlhttp.open("GET", nextUrl, true); xmlhttp.send(); })(nextUrl, curNbOfCalls, nbHiddenThreadsBase); } } //Show an info bar about the users blacklisted by this script if (showInfoBar === true) { var div = document.createElement("div"); div.id = "totalblacklistbar"; div.innerHTML = "<span id='numberofhiddenmessages'></span> messages/topics cachés (<span id='showhiddenmessages'>voir</span>) | " + "<span id='numberofblacklistedusers'></span> pseudos blacklistés en tout (<span id='showallblacklistedusers'>voir</span>) " + "<span id='listofblacklistedusers' style='display: none;'></span> | " + "<span id='unblacklistallusers'>Déblacklister tout le monde</span><br /><br />"; //Uncomment if dark theme //div.style.color = "white"; var nextElement = document.querySelector(".bloc-message-forum"); if (nextElement === null) { nextElement = document.querySelector(".topic-list"); } nextElement.parentNode.insertBefore(div, nextElement); var numberofhiddenmessages = div.querySelector("#numberofhiddenmessages"); numberofhiddenmessages.innerHTML = nbHidden; var showhiddenmessages = div.querySelector("#showhiddenmessages"); showhiddenmessages.style.cursor = "pointer"; showhiddenmessages.style.textDecoration = "underline"; showhiddenmessages.addEventListener("click", handleShowHiddenMessages, true); var numberofblacklistedusers = div.querySelector("#numberofblacklistedusers"); var totalNb = 0; var blacklisted = localStorage.getItem("blacklisted"); if (blacklisted !== null && blacklisted !== "" && blacklisted !== "[]") { blacklisted = JSON.parse(blacklisted); totalNb = blacklisted.length; } //No need to show this bar if no one is blacklisted if (totalNb === 0) { div.remove(); return; } numberofblacklistedusers.innerHTML = totalNb; var listofblacklistedusers = div.querySelector("#listofblacklistedusers"); for (var i = 0; i < blacklisted.length; i++) { var span = document.createElement("span"); span.style.cursor = "pointer"; span.innerHTML = " " + blacklisted[i]; span.title = "Retirer " + blacklisted[i] + " de la blacklist"; listofblacklistedusers.appendChild(span); span.addEventListener("click", handleUnblacklistSingleUser, true); } var showallblacklistedusers = div.querySelector("#showallblacklistedusers"); showallblacklistedusers.style.cursor = "pointer"; showallblacklistedusers.style.textDecoration = "underline"; showallblacklistedusers.addEventListener("click", handleShowBlacklistedUsers, true); var unblacklistallusers = div.querySelector("#unblacklistallusers"); unblacklistallusers.style.cursor = "pointer"; unblacklistallusers.style.textDecoration = "underline"; unblacklistallusers.addEventListener("click", handleUnblacklistAllUsers, true); } } callMe(); //Respeed addEventListener('instantclick:newpage', callMe);