Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name RainbowDDB
- // @namespace CrazyJeux/Daring-Do
- // @author CrazyJeux/Daring-Do
- // @match *://www.jeuxvideo.com/*
- // @match *://m.jeuxvideo.com/*
- // @match *://www.forumjv.com/*
- // @description Ajoute un contour autour des messages signalés. La couleur change selon qui a effectué l'alerte ou si l'alerte a été traitée.
- // @version 20
- // @grant none
- // ==/UserScript==
- //Topic dédié : http://www.jeuxvideo.com/forums/42-1000021-39882332-1-0-1-0-rainbowddb-reperez-tous-les-messages-signales-meme-les-votres.htm
- //Explications : http://image.noelshack.com/fichiers/2015/25/1434754809-explications-final.png
- //Ajoutez ou retirez ici les motifs de ban complets qui doivent conduire au masquage automatique du message.
- var reasonsToHide = [];
- //Enlevez les "//" des trois lignes ci-dessous pour cacher tous les messages signalés dont la raison a pu être déterminée.
- //reasonsToHide = reasonsToHide.concat("Pédopornographie", "Incitation à la haine, discrimination", "Mise en danger des personnes", "Diffamation, menaces", "Piratage, non respect des droits d'auteurs", "Apologie de comportements illégaux", "Données personnelles");
- //reasonsToHide = reasonsToHide.concat("Pornographie", "Insultes", "Flood de masse", "Raids, mass-dislikes et attaques de sites", "Spoilers");
- //reasonsToHide = reasonsToHide.concat("Message inopportun", "Doublons", "Publicité", "Règles spécifiques à chaque forum");
- var colors = {"byother": "orange",
- "byme": "red",
- "ishandled": "lightgreen",
- "isadmin": "#9393f5"};
- var borderWidthMessage = "5px";
- var borderWidthTopic = "2px";
- var topicsToo = true;
- var DEBUG = true;
- function log(str) {
- if (DEBUG) {
- console.log(str);
- }
- }
- function ajaxReport(link, element, width, type) {
- var xmlhttp = new XMLHttpRequest();
- xmlhttp.onreadystatechange = function () {
- if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
- var reportDiv = document.createElement('div');
- reportDiv.innerHTML = xmlhttp.responseText;
- reportDiv.style.display = "none";
- document.body.appendChild(reportDiv);
- var reportTextarea = reportDiv.querySelector("#signalement_commentaire");
- if (reportTextarea === null) {
- log("reportTextarea is null");
- var generic = reportDiv.querySelector(".modal-generic-content");
- if (reportDiv.querySelector(".g-recaptcha") === null &&
- //The condition below is for moderators (who don't have a captcha)
- generic.innerHTML.indexOf("Ce contenu a déjà été signalé par un utilisateur") < 0) {
- log("this message wasn't reported by someone else");
- if (generic === null) {
- log("generic is null");
- return;
- }
- if (generic.innerHTML.indexOf("Vous avez déjà signalé ce contenu") >= 0) {
- styleElement(element, "byme", width, type);
- return;
- }
- if (generic.innerHTML.indexOf("Cet utilisateur ne peut pas être signalé") >= 0) {
- styleElement(element, "isadmin", width, type);
- return;
- }
- if (generic.innerHTML.indexOf("Ce contenu a déjà été modéré") >= 0) {
- styleElement(element, "ishandled", width, type);
- return;
- }
- } else {
- log("this message was reported by someone else");
- styleElement(element, "byother", width, type);
- if (type === "message") {
- var reason = reportDiv.querySelector(".col-md-10");
- if (reason !== null) {
- reason = reason.innerHTML;
- log("reason is not null: '"+reason+"'");
- var options = element.querySelector(".bloc-options-msg");
- /*
- var info = document.createElement("div");
- info.innerHTML = reason;
- info.style.float = "left";
- info.style.color = "red";
- info.style.fontWeight = "bold";
- info.style.top = "12px";
- info.style.marginLeft = "15px";
- info.style.position = "relative";
- options.parentNode.insertBefore(info, options);
- */
- var msg = element.querySelector(".bloc-contenu .txt-msg");
- var p = Array.prototype.slice.call(msg.querySelectorAll("p"));
- p.forEach(function(el) {
- var klass = el.getAttribute("class");
- if (klass === null) {
- klass = "";
- }
- klass += " maybeToHide";
- el.setAttribute("class", klass);
- });
- var toHide = Array.prototype.slice.call(element.querySelectorAll(".maybeToHide"));
- var wrapper = document.createElement("p");
- var info = document.createElement("span");
- info.innerHTML = "Message signalé pour " + reason.charAt(0).toLowerCase() + reason.slice(1);
- info.style.color = "red";
- info.style.fontWeight = "bold";
- info.style.top = "12px";
- wrapper.appendChild(info);
- var shouldHide = false;
- var hideShowMsg = document.createElement("p");
- if (reasonsToHide.indexOf(reason) >= 0) {
- shouldHide = true;
- toHide.forEach(function(el) {
- el.style.display = "none";
- });
- wrapper.appendChild(document.createElement("br"));
- hideShowMsg.innerHTML = "Afficher le contenu du message";
- hideShowMsg.style.marginTop = "15px";
- hideShowMsg.style.cursor = "pointer";
- hideShowMsg.style.textDecoration = "underline";
- hideShowMsg.style.marginBottom = "0px";
- wrapper.appendChild(hideShowMsg);
- wrapper.style.marginBottom = "0px";
- }
- msg.insertBefore(wrapper, msg.firstChild);
- if (shouldHide === true) {
- var isShown = false;
- hideShowMsg.onclick = function() {
- if (!isShown) {
- var r = confirm("Voulez-vous vraiment afficher ce message ?\n\n" +
- "Vous pouvez changer les motifs de signalement conduisant au masquage du message.\n\n" +
- "Pour cela, il faut modifier la variable reasonsToHide au début du code du script.");
- if (r === false) {
- return;
- }
- toHide.forEach(function(el) {
- el.style.display = "initial";
- });
- hideShowMsg.innerHTML = "Cacher le contenu du message";
- wrapper.style.marginBottom = "";
- isShown = true;
- } else {
- toHide.forEach(function(el) {
- el.style.display = "none";
- });
- hideShowMsg.innerHTML = "Afficher le contenu du message";
- wrapper.style.marginBottom = "0px";
- isShown = false;
- }
- };
- }
- }
- }
- }
- }
- reportDiv.remove();
- }
- };
- xmlhttp.open("GET", link, true);
- xmlhttp.send();
- }
- function checkMessage(href, callback) {
- var xmlhttp = new XMLHttpRequest();
- xmlhttp.onreadystatechange = function () {
- if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
- var reportDiv = document.createElement('div');
- reportDiv.innerHTML = xmlhttp.responseText;
- reportDiv.style.display = "none";
- document.body.appendChild(reportDiv);
- var textarea = reportDiv.querySelector("#signalement_commentaire");
- if (textarea !== null) {
- log("textarea is not null");
- callback('isnotreported');
- return;
- }
- var errorDiv = reportDiv.querySelector(".alert.alert-danger");
- if (errorDiv !== null) {
- log("errorDiv is not null, errorDiv.innerHTML:\n"+errorDiv.innerHTML);
- if (errorDiv.innerHTML.indexOf("Ce contenu a déjà été modéré") >= 0) {
- callback('ishandled');
- return;
- }
- if (errorDiv.innerHTML.indexOf("Ce contenu a déjà été signalé") >= 0) {
- callback('isreported');
- return;
- }
- if (errorDiv.innerHTML.indexOf("Cet utilisateur ne peut pas être signalé") >= 0) {
- callback('isadmin');
- return;
- }
- }
- }
- };
- xmlhttp.open("GET", href, true);
- xmlhttp.send();
- }
- function inIframe() {
- try {
- return window.self !== window.top;
- } catch (e) {
- return true;
- }
- }
- function styleElement(element, info, borderWidth, elementType) {
- //element.style.borderWidth = borderWidth + "!important";
- var el = null;
- var prevStyle = "";
- if (elementType === "topic") {
- el = element.querySelector("a.topic-title");
- prevStyle = el.getAttribute("style");
- if (typeof prevStyle === "undefined" || prevStyle === null) {
- prevStyle = "";
- }
- }
- switch (info) {
- case "ishandled":
- if (elementType === "topic") {
- el.setAttribute("style", prevStyle + ";color: " + colors.ishandled + " !important;");
- } else {
- element.style.cssText += ";box-shadow: 0 0 " + borderWidth + " " + borderWidth + " " + colors.ishandled + " !important;";
- }
- break;
- case "byme":
- if (elementType === "topic") {
- //element.style.cssText += ";border: " + borderWidth + " solid " + colors.byme + " !important;";
- el.setAttribute("style", prevStyle + ";color: " + colors.byme + " !important;");
- } else {
- element.style.cssText += ";box-shadow: 0 0 " + borderWidth + " " + borderWidth + " " + colors.byme + " !important;";
- }
- break;
- case "byother":
- if (elementType === "topic") {
- //element.style.cssText += ";border: " + borderWidth + " solid " + colors.byother + " !important;";
- el.setAttribute("style", prevStyle + ";color: " + colors.byother + " !important;");
- } else {
- element.style.cssText += ";box-shadow: 0 0 " + borderWidth + " " + borderWidth + " " + colors.byother + " !important;";
- }
- break;
- case "isadmin":
- if (elementType === "topic") {
- //element.style.cssText += ";border: " + borderWidth + " solid " + colors.isadmin + " !important;";
- //el.setAttribute("style", prevStyle + ";color: " + colors.isadmin + " !important;");
- } else {
- //element.style.cssText += ";box-shadow: 0 0 " + borderWidth + " " + borderWidth + " " + colors.isadmin + " !important;";
- }
- break;
- default:
- var err = "Erreur fonction styleElement : info='" + info + "'";
- alert(err);
- throw new Error(err);
- }
- }
- function toCall() {
- //Our own messages
- if (window.location.hostname === "www.jeuxvideo.com") {
- var deleteButtons = document.querySelectorAll(".picto-msg-croix");
- if (deleteButtons.length > 0) {
- var requestsForMyMessages = function(origin) {
- var i = 0;
- (function loop(i) {
- if (i >= deleteButtons.length) {
- return;
- }
- var message = deleteButtons[i].parentNode;
- while (message.getAttribute("class").indexOf("bloc-message-forum") < 0) {
- message = message.parentNode;
- }
- var messAttr = message.getAttribute("data-handledbyrainbowddb");
- var isHandled = (messAttr !== null && messAttr === "true");
- if (!isHandled) {
- message.setAttribute("data-handledbyrainbowddb", "true");
- iframeMessages.contentWindow.postMessage({'messageid': message.getAttribute("data-id")}, origin);
- }
- setTimeout(function () {
- loop(i + 1);
- }, 5);
- })(i);
- };
- var handleResponseFromMobileJVCForMessages = function (e) {
- var origin = e.origin || e.originalEvent.origin;
- if (origin !== 'http://m.jeuxvideo.com') {
- return;
- }
- if (e.data.hasOwnProperty("started")) {
- if (e.data.started === true) {
- requestsForMyMessages(origin);
- }
- return;
- }
- if (e.data.hasOwnProperty("messageid")) {
- var message = document.querySelector("[data-id='" + e.data.messageid + "']");
- if (e.data.hasOwnProperty("isnotreported")) {
- return;
- }
- if (e.data.hasOwnProperty("ishandled")) {
- styleElement(message, "ishandled", borderWidthMessage, "message");
- return;
- }
- if (e.data.hasOwnProperty("isreported")) {
- styleElement(message, "byother", borderWidthMessage, "message");
- return;
- }
- if (e.data.hasOwnProperty("isadmin")) {
- styleElement(message, "isadmin", borderWidthMessage, "message");
- return;
- }
- }
- };
- window.addEventListener("message", handleResponseFromMobileJVCForMessages, false);
- var mobileURL;
- var index = window.location.pathname.substring(1).indexOf("/");
- var firstDirectory = window.location.pathname.substring(1, index + 1);
- //Direct message
- if (firstDirectory !== "forums") {
- mobileURL = document.querySelector(".btn.btn-actu-new-list-forum").parentNode.href.replace("www.jeuxvideo.com", "m.jeuxvideo.com");
- } else { //Message in a topic
- var desktopURL = document.location.href;
- mobileURL = desktopURL.replace("www.jeuxvideo.com", "m.jeuxvideo.com");
- }
- var iframeMessages = document.createElement("iframe");
- iframeMessages.style.display = "none";
- document.body.appendChild(iframeMessages);
- iframeMessages.src = mobileURL;
- }
- }
- //Other people's messages
- var reportButtons = document.getElementsByClassName("picto-msg-exclam");
- var i = 0;
- (function loop(i) {
- log("reportButton #"+i+"/"+reportButtons.length);
- if (i >= reportButtons.length) {
- return;
- }
- var link = reportButtons[i].getAttribute("data-selector");
- var message = reportButtons[i].parentNode;
- while (message.className.indexOf("bloc-message-forum") < 0) {
- message = message.parentNode;
- }
- var messAttr = message.getAttribute("data-handledbyrainbowddb");
- var isHandled = (messAttr !== null && messAttr === "true");
- log("is link ("+link+") already handled? "+isHandled);
- if (!isHandled) {
- message.setAttribute("data-handledbyrainbowddb", "true");
- log("before ajaxReport for link '"+link+"'");
- ajaxReport(link, message, borderWidthMessage, "message");
- }
- setTimeout(function () {
- loop(i + 1);
- }, 5);
- })(i);
- //Topics
- if (topicsToo === true) {
- var table = document.querySelector(".topic-list");
- if (table !== null) {
- var topicRows = table.querySelectorAll("li[data-id]");
- var topicRequests = [];
- var handleResponseFromMobileJVCForTopics = function (e) {
- var origin = e.origin || e.originalEvent.origin;
- if (origin !== 'http://m.jeuxvideo.com') {
- return;
- }
- log("result in listener: "+JSON.stringify(e.data, null, 4));
- if (e.data.hasOwnProperty("started")) {
- if (e.data.started === true) {
- var resFilter = topicRequests.filter(function(obj) {
- return obj.url === e.data.url;
- });
- if (resFilter.length > 0) {
- resFilter[0].func(origin);
- }
- }
- return;
- }
- if (e.data.hasOwnProperty("topicid")) {
- var row = null;
- for (var j = 0; j < topicRows.length; j++) {
- var curDataId = topicRows[j].getAttribute("data-id");
- if (curDataId === e.data.topicid) {
- row = topicRows[j];
- break;
- }
- }
- if (row !== null) {
- if (e.data.hasOwnProperty("isnotreported")) {
- return;
- }
- if (e.data.hasOwnProperty("ishandled")) {
- styleElement(row, "ishandled", borderWidthTopic, "topic");
- return;
- }
- if (e.data.hasOwnProperty("isreported")) {
- styleElement(row, "byother", borderWidthTopic, "topic");
- return;
- }
- if (e.data.hasOwnProperty("isadmin")) {
- styleElement(row, "isadmin", borderWidthTopic, "topic");
- return;
- }
- }
- }
- };
- window.addEventListener("message", handleResponseFromMobileJVCForTopics, false);
- for (var i = 0; i < topicRows.length; i++) {
- var link = topicRows[i].querySelector("a");
- if (link === null) {
- continue;
- }
- var href = link.href;
- var topicAuthorNickname = null;
- var topicAuthorArea = topicRows[i].querySelector(".topic-author");
- if (topicAuthorArea !== null) {
- topicAuthorNickname = topicAuthorArea.textContent.trim();
- }
- var currentAuthorNickname = null;
- var currentAuthorArea = document.querySelector(".account-pseudo");
- if (currentAuthorArea !== null) {
- currentAuthorNickname = currentAuthorArea.textContent.trim();
- }
- var myTopic = false;
- if (topicAuthorNickname !== null && currentAuthorNickname !== null) {
- if (topicAuthorNickname.toLowerCase() === currentAuthorNickname.toLowerCase()) {
- myTopic = true;
- }
- }
- if (myTopic === false) {
- (function(href, topic) {
- var xmlhttp = new XMLHttpRequest();
- xmlhttp.onreadystatechange = function () {
- if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
- var topicDiv = document.createElement('div');
- topicDiv.innerHTML = xmlhttp.responseText;
- var mess = topicDiv.querySelector(".bloc-message-forum");
- if (mess !== null) {
- topicDiv.innerHTML = mess.outerHTML;
- var reportBtn = topicDiv.querySelector(".picto-msg-exclam");
- if (reportBtn !== null) {
- var link = reportBtn.getAttribute("data-selector");
- ajaxReport(link, topic, borderWidthTopic, "topic");
- }
- }
- }
- };
- xmlhttp.open("GET", href, true);
- xmlhttp.send();
- })(href, topicRows[i]);
- } else { //One of my topics
- var topicID = topicRows[i].getAttribute("data-id");
- var iframeTopic = document.createElement("iframe");
- (function (iframeTopic, topicID, href, link) {
- var mobileURL = href.replace("www", "m");
- log("my topic: '"+mobileURL+"', topicID='"+topicID+"'");
- var requestForATopic = function (origin) {
- log("requestForATopic for my topic: '"+mobileURL+"', topicID='"+topicID+"'");
- iframeTopic.contentWindow.postMessage({'topicid': topicID, 'topicname': link.textContent.trim()}, origin);
- };
- topicRequests.push({"url": mobileURL, "func": requestForATopic});
- iframeTopic.style.display = "none";
- document.body.appendChild(iframeTopic);
- iframeTopic.src = mobileURL;
- })(iframeTopic, topicID, href, link);
- }
- }
- }
- }
- }
- if (window.location.hostname.indexOf("forumjv") < 0) {
- document.domain = "jeuxvideo.com";
- }
- if (window.location.hostname !== "m.jeuxvideo.com") {
- toCall();
- addEventListener('instantclick:newpage', toCall);
- (function btnLoop() {
- var moreCommentsButtons = document.querySelectorAll(".link-plus-de-comm");
- for (var i=0; i<moreCommentsButtons.length; i++) {
- var btnAttr = moreCommentsButtons[i].getAttribute("data-handledbyrainbowddb");
- var isHandled = (btnAttr !== null && btnAttr === "true");
- if (!isHandled) {
- moreCommentsButtons[i].setAttribute("data-handledbyrainbowddb", "true");
- moreCommentsButtons[i].onclick = function() {
- (function loop() {
- var newElements = document.querySelectorAll(".bloc-message-forum:not([data-handledbyrainbowddb])");
- if (newElements.length === 0) {
- setTimeout(loop, 50);
- } else {
- btnLoop();
- toCall();
- }
- })();
- };
- }
- }
- })();
- } else {
- if (inIframe()) {
- var handleResponseFromDesktopJVC = function (e) {
- var origin = e.origin || e.originalEvent.origin;
- if (origin !== 'http://www.jeuxvideo.com') {
- return;
- }
- log("e.data in iframe: "+JSON.stringify(e.data, null, 4));
- //Message
- if (e.data.hasOwnProperty("messageid")) {
- var realId = "#post_" + e.data.messageid;
- var message = document.querySelector(realId);
- if (message === null) {
- return;
- }
- var alertButton = message.querySelector(".picto-msg-exclam");
- if (alertButton === null) {
- log("alertButton is null");
- return;
- }
- var href = alertButton.parentNode.getAttribute("href");
- checkMessage(href, function (ret) {
- var result = {'messageid': e.data.messageid};
- result[ret] = true;
- e.source.postMessage(result, origin);
- });
- }
- //Topic
- if (e.data.hasOwnProperty("topicid")) {
- var message = document.querySelector(".post");
- if (message !== null) {
- var alertButton = message.querySelector(".picto-msg-exclam");
- if (alertButton !== null) {
- var href = alertButton.parentNode.getAttribute("href");
- checkMessage(href, function (ret) {
- var result = {'topicid': e.data.topicid, 'topicname': e.data.topicname};
- result[ret] = true;
- log("result in iframe: "+JSON.stringify(result, null, 4));
- e.source.postMessage(result, origin);
- });
- } else {
- log("alert btn is null, message html:\n"+message.outerHTML);
- }
- } else {
- log("message is null");
- }
- }
- };
- window.addEventListener("message", handleResponseFromDesktopJVC, false);
- window.parent.postMessage({"started": true, "url": window.location.href}, "*");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment