NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Renickname // @namespace CrazyJeux/Daring-Do // @author CrazyJeux/Daring-Do // @match *://www.jeuxvideo.com/* // @match *://*.jvforum.fr/* // @description Permet de surnommer les forumeurs que l'on veut en utilisant le menu contextuel (clic droit sur un pseudo). // @version 10 // @resource jQueryJS https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.0/jquery.min.js // @grant GM_getResourceText // @grant unsafeWindow // ==/UserScript== function unique() { function renicknameScript() { function getAuthors() { return $(".bloc-pseudo-msg, .topic-author, " //JVC + ".message__byline-author-pseudo, .topic__author"); //JVForum } function onContextMenu() { $authors.filter(function() { return !$(this).is("[data-contextmenu-is-done-for-renickname]"); }).on("contextmenu", function (event) { if (event.ctrlKey || event.shiftKey || event.altKey) { return true; } event.preventDefault(); var realNickname = $(this).attr("data-real-nickname"); $realNickname.html("Vrai pseudo : " + realNickname).attr("data-real-nickname", realNickname); var resultArray = nicknames.filter(function(el) { return el.author.toLowerCase() === realNickname.toLowerCase(); }); if (resultArray.length === 1) { $changeNickname.text("Changer le surnom"); $removeNickname.show(); } else { $changeNickname.text("Ajouter un surnom"); $removeNickname.hide(); } if (nicknames.length > 0) { $removeAllNicknames.text("Supprimer tous les surnoms ("+nicknames.length+" surnom"+((nicknames.length>1) ? "s" : "")+" au total)").show(); $showAllNicknames.show(); } else { $removeAllNicknames.hide(); $showAllNicknames.hide(); } $customMenu.finish().toggle(100). //At the mouse position css({ top: event.pageY + "px", left: event.pageX + "px" }); }).attr("data-contextmenu-is-done-for-renickname", "true"); } function updateNicknames(update) { //console.log("update="+update); if (typeof update !== "undefined" && update === true) { $authors = getAuthors(); onContextMenu(); } $authors.each(function() { if ($(this).is("[data-real-nickname]")) { $(this).text($(this).attr("data-real-nickname")); } $(this).removeAttr("title"); var realNickname = $(this).text().trim(); if (!$(this).is("[data-real-nickname]")) { $(this).attr("data-real-nickname", realNickname); } var resultArray = nicknames.filter(function(el) { return el.author.toLowerCase() === realNickname.toLowerCase(); }); if (resultArray.length === 1) { $(this).text(resultArray[0].nickname); $(this).attr("title", "Vrai pseudo : " + realNickname); } }); } var $authors = getAuthors(); //console.log("$authors.length: "+$authors.length); if ($authors.length === 0) { return; } var nicknames = localStorage.getItem("script-renickname-nicknamesarray"); if (nicknames === "" || nicknames === null) { nicknames = []; } else { nicknames = JSON.parse(nicknames); } if (!$("body").is("[data-eventlisteners-for-renickname]")) { //console.log("init only called once"); $("body").attr("data-eventlisteners-for-renickname", "true"); var style = document.createElement("style"); style.type = "text/css"; style.setAttribute("data-script-renickname", "true"); style.innerHTML = "#custom-menu {" + "display: none;" + "z-index: 1000;" + "position: absolute;" + "overflow: hidden;" + "border: 1px solid #CCC;" + "white-space: nowrap;" + "font-family: sans-serif;" + "background: #FFF;" + "color: #333;" + "border-radius: 5px;" + "list-style-type: none;" + "-webkit-padding-start: 10px;" + "}" + "#custom-menu li {" + "padding-right: 0px;" + "margin-right: 10px;" + "margin-bottom: 2px;" + "}" + "#custom-menu li:not(#realNickname) {" + "cursor: pointer;" + "}" + "#custom-menu li:not(#realNickname):hover {" + "background-color: #DEF;" + "}"; document.head.appendChild(style); $("body").get(0).appendChild($('<ul id="custom-menu">' + '<li id="realNickname"></li>' + '<li id="changeNickname"></li>' + '<li id="removeNickname">Supprimer le surnom</li>' + '<li id="removeAllNicknames"></li>' + '<li id="showAllNicknames">Afficher tous les surnoms</li>' + '</ul>').get(0)); var $customMenu = $("#custom-menu"); var $realNickname = $customMenu.find("#realNickname"); var $changeNickname = $customMenu.find("#changeNickname"); var $removeNickname = $customMenu.find("#removeNickname"); var $removeAllNicknames = $customMenu.find("#removeAllNicknames"); var $showAllNicknames = $customMenu.find("#showAllNicknames"); onContextMenu(); $(document).on("mousedown", function (e) { if (!$(e.target).parents("#custom-menu").length > 0) { $customMenu.hide(100); } }); $customMenu.find("li:not(#realNickname)").click(function(){ switch (this) { case $changeNickname.get(0): var realNickname = $realNickname.attr("data-real-nickname"); var index = null; var element = null; nicknames.filter(function(el, i) { var isEq = (el.author.toLowerCase() === realNickname.toLowerCase()); if (isEq) { index = i; } return isEq; }); var isNew = false; if (index !== null) { element = nicknames[index]; } else { nicknames.push({ author: realNickname }); element = nicknames[nicknames.length - 1]; isNew = true; } var newNickname = window.prompt("Nouveau surnom pour " + realNickname + " ?"); if (newNickname === null) { if (isNew === true) { nicknames.pop(); } break; } while (newNickname.trim() === "") { newNickname = window.prompt("Merci d'entrer au moins un caractère qui ne soit pas un espace.\n\nNouveau surnom pour " + realNickname + " ?"); if (newNickname === null) { break; } } if (newNickname === null) { if (isNew === true) { nicknames.pop(); } break; } element.nickname = newNickname; localStorage.setItem("script-renickname-nicknamesarray", JSON.stringify(nicknames)); updateNicknames(); break; case $removeNickname.get(0): var realNickname = $realNickname.attr("data-real-nickname"); var index = null; nicknames.filter(function(el, i) { var isEq = (el.author.toLowerCase() === realNickname.toLowerCase()); if (isEq) { index = i; } return isEq; }); if (index !== null) { nicknames.splice(index, 1); localStorage.setItem("script-renickname-nicknamesarray", JSON.stringify(nicknames)); updateNicknames(); } break; case $removeAllNicknames.get(0): var r = confirm("Êtes-vous vraiment sûr de vouloir supprimer tous les surnoms de tous les pseudos ?"); if (r === true) { nicknames = []; localStorage.setItem("script-renickname-nicknamesarray", JSON.stringify(nicknames)); updateNicknames(); } break; case $showAllNicknames.get(0): var s = ""; for (var i=0; i<nicknames.length; i++) { s += 'Le surnom de ' + nicknames[i].author + ' est : "' + nicknames[i].nickname + '"'; if (i !== nicknames.length - 1) { s += "\n"; } } $customMenu.hide(); alert(s); return; default: alert("Erreur dans le script Nicknames : l'auteur de ce script a oublié un cas à gérer dans le switch."); } $customMenu.hide(100); }); //TopicLive addEventListener('topiclive:newmessage', function() { setTimeout(function() { //console.log("new message in topiclive"); updateNicknames(true); }, 10); }); } updateNicknames(); if (window.location.hostname.indexOf("jvforum.fr")>=0 && !$("body").is("[data-setinterval-for-renickname]")) { $("body").attr("data-setinterval-for-renickname", "true"); //var prevLength = $(".message").length; //console.log("setting setinterval for jvforum..."); setInterval(function() { //console.log("in setInterval 0"); //if ($(".message").length !== prevLength) { //console.log("new message (jvforum)"); //prevLength = $(".message").length; updateNicknames(true); //} //console.log("in setInterval 1"); }, 1000); } } function callMe() { /*var prevScript = document.querySelector("script[data-script-renickname]"); if (prevScript !== null) { prevScript.remove(); }*/ if (called == true) { return; } called = true; var script = document.createElement("script"); script.type = "text/javascript"; script.setAttribute("data-script-renickname", "true"); script.innerHTML = "(function(){ " + renicknameScript.toString() + " renicknameScript();})();"; document.body.appendChild(script); } if (typeof unsafeWindow.jQuery === "undefined") { var jQueryEl = document.createElement("script"); jQueryEl.type = "text/javascript"; var content = GM_getResourceText("jQueryJS"); jQueryEl.innerHTML = content; jQueryEl.setAttribute("data-info", "jQueryJS"); document.head.appendChild(jQueryEl); } callMe(); //Respeed //addEventListener('instantclick:newpage', callMe); if (typeof InstantClick !== "undefined") { InstantClick.on('change', function() { //console.log("new page in jvforum"); callMe(); }); } } called = false; unique(); /*document.addEventListener('DOMContentLoaded', unique, false); window.addEventListener('load', unique, false); window.onload = unique;*/