NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Custom RainbowDDB // @namespace CrazyJeux/Daring-Do - Modifié par EmyJV // @author CrazyJeux/Daring-Do - Modifié par EmyJV // @match *://www.jeuxvideo.com/* // @match *://m.jeuxvideo.com/* // @match *://www.forumjv.com/* // @description Modif' du script RainbowDDB - Discrétion assurée. // @license MIT // @version 0.1 // @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": "#c11515", "byme": "chocolate", "ishandledbymod": "forestgreen", "ishandledbyadmin": "#3b70ba", "isadmin": "royalblue" }; var borderWidthMessage = "1px"; var borderWidthTopic = "1px"; var topicsToo = true; var isMobileIframe = false; var srcSave = null; var originSave = null; var DEBUG = false; function log(str) { if (DEBUG) { if (isMobileIframe == true) { srcSave.postMessage({'log': str}, originSave); } else { 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é. En cas de problème, vous pouvez contacter un administrateur à moderation@jeuxvideo.com") >= 0) { styleElement(element, "ishandledbymod", width, type); return; } if (generic.innerHTML.indexOf("Ce contenu a déjà été modéré par un administrateur") >= 0) { styleElement(element, "ishandledbyadmin", 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-header .bloc-date-msg"); msg.append(" - "); 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 = reason.charAt(0).toLowerCase() + reason.slice(1); info.style.color = "#d81c1c"; info.style.top = "12px"; msg.appendChild(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é. En cas de problème, vous pouvez contacter un administrateur à moderation@jeuxvideo.com") >= 0) { callback('ishandledbymod'); return; } if (errorDiv.innerHTML.indexOf("Ce contenu a déjà été modéré par un administrateur") >= 0) { callback('ishandledbyadmin'); 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-author"); prevStyle = el.getAttribute("style"); if (typeof prevStyle === "undefined" || prevStyle === null) { prevStyle = ""; } } switch (info) { case "ishandledbymod": if (elementType === "topic") { el.setAttribute("style", prevStyle + ";color: " + colors.ishandledbymod + " !important;"); } else { element.style.cssText += ";box-shadow: 0 0 " + 0 + " " + borderWidth + " " + colors.ishandledbymod + " !important;"; } break; case "ishandledbyadmin": if (elementType === "topic") { el.setAttribute("style", prevStyle + ";color: " + colors.ishandledbyadmin + " !important;"); } else { element.style.cssText += ";box-shadow: 0 0 " + 0 + " " + borderWidth + " " + colors.ishandledbyadmin + " !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 " + 0 + " " + 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 " + 0 + " " + borderWidth + " " + colors.byother + " !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"); log("deleteButtons.length: "+deleteButtons.length); if (deleteButtons.length > 0) { var requestsForMyMessages = function(origin) { var i = 0; (function loop(i) { log("my message #"+i+"/"+deleteButtons.length); 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"); log("before send message to iframe; message id: " + message.getAttribute("data-id")); 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("log")) { log("[Mobile iframe] " + e.data.log); return; } if (e.data.hasOwnProperty("started")) { if (e.data.started === true) { log("mobile iframe is ready, start checking my messages"); requestsForMyMessages(origin); } return; } log("got a response from mobile JVC, e.data:\n" + JSON.stringify(e.data, null, 4)); if (e.data.hasOwnProperty("messageid")) { var message = document.querySelector("[data-id='" + e.data.messageid + "']"); log("e.data.messageid: " + e.data.messageid + ", message found ? " + (message !== null)); if (message !== null) { if (e.data.hasOwnProperty("isnotreported")) { return; } if (e.data.hasOwnProperty("ishandledbymod")) { styleElement(message, "ishandledbymod", borderWidthMessage, "message"); return; } if (e.data.hasOwnProperty("ishandledbyadmin")) { styleElement(message, "ishandledbyadmin", 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()) { isMobileIframe = true; var handleResponseFromDesktopJVC = function (e) { var origin = e.origin || e.originalEvent.origin; if (origin !== 'http://www.jeuxvideo.com') { return; } srcSave = e.source; originSave = origin; log("e.data in iframe: "+JSON.stringify(e.data, null, 4), srcSave, originSave); //Message if (e.data.hasOwnProperty("messageid")) { var realId = "#post_" + e.data.messageid; var message = document.querySelector(realId); if (message === null) { log("message " + e.data.messageid + " not found...", srcSave, originSave); return; } var alertButton = message.querySelector(".picto-msg-exclam"); if (alertButton === null) { log("alertButton is null", srcSave, originSave); return; } var href = alertButton.parentNode.getAttribute("href"); checkMessage(href, function (ret) { var result = {'messageid': e.data.messageid}; result[ret] = true; log("message " + e.data.messageid + " checked: " + ret, srcSave, originSave); 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; log2("result in iframe: "+JSON.stringify(result, null, 4)); e.source.postMessage(result, origin); }); } else { log2("alertButton is null, message html:\n"+message.outerHTML); } } else { log2("message is null"); } } }; window.addEventListener("message", handleResponseFromDesktopJVC, false); window.parent.postMessage({"started": true, "url": window.location.href}, "*"); } }