🏠 返回首頁 

Greasy Fork is available in English.

TotalBlacklist

Cache les messages et les topics des forumeurs blacklistés depuis l'installation du script.


Installer ce script?
// ==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);