Advertisement
CrazyJeux

SpawnBadges v10

Jan 14th, 2018
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name         SpawnBadges
  3. // @namespace    CrazyJeux/Daring-Do
  4. // @version      10
  5. // @description  Affiche les badges dans les profils selon le nombre de messages actuel
  6. // @author       CrazyJeux/Daring-Do
  7. // @match        *://*.jeuxvideo.com/*
  8. // @grant        none
  9. // ==/UserScript==
  10.  
  11. var isCalled = false;
  12.  
  13. function unique() {
  14.     function updateBadgesScript() {
  15.         function getBadgesBaseURL() {
  16.             var badges_base_url = "//static.jvc.gg/1.60.0/img/profils/badges/64px/badge-";
  17.             var substringForBadges = "/badge-";
  18.             var profileToCheck = "http://www.jeuxvideo.com/profil/bofh?mode=infos";
  19.  
  20.             var xmlhttp = new XMLHttpRequest();
  21.             xmlhttp.onreadystatechange = function () {
  22.                 if (xmlhttp.readyState === 4) {
  23.                     log("xmlhttp.status='" + xmlhttp.status + "'");
  24.                     if (xmlhttp.status === 200) {
  25.                         log("xmlhttp for BOFH returned");
  26.                         var profileDiv = document.createElement('div');
  27.                         profileDiv.innerHTML = xmlhttp.responseText;
  28.                         profileDiv.style.display = "none";
  29.                         var listeHautsFaits = profileDiv.querySelector(".liste-hauts-faits");
  30.                         if (listeHautsFaits !== null) {
  31.                             log("listeHautsFaits exists");
  32.                             var img = listeHautsFaits.querySelector("img");
  33.                             if (img !== null) {
  34.                                 log("img (badge) exists");
  35.                                 badges_base_url = img.getAttribute("src");
  36.                                 var index = badges_base_url.indexOf(substringForBadges);
  37.                                 badges_base_url = badges_base_url.substring(0, index + substringForBadges.length);
  38.                                 log("badges_base_url: '" + badges_base_url + "'");
  39.                             }
  40.                         }
  41.                     }
  42.                     setBadges(badges_base_url);
  43.                 }
  44.             };
  45.             xmlhttp.open("GET", profileToCheck, true);
  46.             xmlhttp.send();
  47.         }
  48.  
  49.         function setBadges(badges_base_url) {
  50.             var badges = [
  51.                 {
  52.                     name: "carton",
  53.                     points: 0
  54.                 },
  55.                 {
  56.                     name: "bronze",
  57.                     points: 50
  58.                 },
  59.                 {
  60.                     name: "argent",
  61.                     points: 200
  62.                 },
  63.                 {
  64.                     name: "or",
  65.                     points: 1000
  66.                 },
  67.                 {
  68.                     name: "rubis",
  69.                     points: 10000
  70.                 },
  71.                 {
  72.                     name: "saphir",
  73.                     points: 30000
  74.                 },
  75.                 {
  76.                     name: "emeraude",
  77.                     displayedName: "Émeraude",
  78.                     points: 75000
  79.                 },
  80.                 {
  81.                     name: "diamant",
  82.                     points: 150000
  83.                 }
  84.             ];
  85.  
  86.             var currentUserNicknameArea = null;
  87.             if (isDesktopVersionAndOnProfilePage) {
  88.                 currentUserNicknameArea = document.querySelector(".account-pseudo");
  89.             } else {
  90.                 currentUserNicknameArea = document.querySelector(".pseudo");
  91.             }
  92.             if (currentUserNicknameArea !== null) {
  93.                 var currentUserNickname = currentUserNicknameArea.textContent.trim().toLowerCase();
  94.  
  95.                 var profileNicknameArea = null;
  96.                 if (isDesktopVersionAndOnProfilePage) {
  97.                     profileNicknameArea = document.querySelector(".infos-pseudo h1");
  98.                 } else {
  99.                     profileNicknameArea = document.querySelector(".titre-pseudo .titre");
  100.                 }
  101.                 if (profileNicknameArea !== null) {
  102.                     var profileNickname = profileNicknameArea.textContent.trim().toLowerCase();
  103.  
  104.                     if (currentUserNickname === profileNickname) {
  105.                         var el = document.querySelector("ul.dropdown-menu.menu-compte-head a[href*='alerte.php']");
  106.                         if (el !== null) {
  107.                             var modoBadge = document.createElement("img");
  108.                             modoBadge.setAttribute("src", badges_base_url + "moderateur.png");
  109.                             modoBadge.setAttribute("alt", "Modérateur");
  110.                             modoBadge.setAttribute("title", "Modérateur");
  111.                             listeHautsFaits.insertBefore(modoBadge, listeHautsFaits.firstChild);
  112.                         }
  113.                     }
  114.                 }
  115.             }
  116.  
  117.             var nbMsgsArea = null;
  118.             if (isDesktopVersionAndOnProfilePage) {
  119.                 var msgsForumText = document.querySelectorAll(".info-lib");
  120.                 msgsForumText = [].slice.call(msgsForumText, 0);
  121.                 msgsForumText = msgsForumText.filter(function(el) {
  122.                     return el.textContent.indexOf("Messages Forums :") >= 0;
  123.                 });
  124.                 if (msgsForumText.length !== 0) {
  125.                     msgsForumText = msgsForumText[0];
  126.  
  127.                     nbMsgsArea = msgsForumText.nextSibling;
  128.                 }
  129.             } else {
  130.                 nbMsgsArea = document.querySelector(".cdv-nbpost span");
  131.             }
  132.             if (nbMsgsArea === null) {
  133.                 return;
  134.             }
  135.  
  136.             var nbMsgs = nbMsgsArea.textContent.replace(/( messages?)|\./g, "");
  137.             nbMsgs = parseInt(nbMsgs, 10);
  138.             //console.log("nbMsgs=" + nbMsgs);
  139.  
  140.             var listeHautsFaits = null;
  141.             if (isDesktopVersionAndOnProfilePage) {
  142.                 listeHautsFaits = document.querySelector(".liste-hauts-faits");
  143.                 if (listeHautsFaits === null) {
  144.                     var parent = document.querySelector("#page-profil > div.container.container-content > div.row:nth-child(2) > div.col-md-6:nth-child(1)");
  145.                     if (parent !== null) {
  146.                         var blocDefaultProfil = document.createElement("div");
  147.                         blocDefaultProfil.className = "bloc-default-profil";
  148.                         blocDefaultProfil.innerHTML = '<div class="header">'+
  149.                             '<h2>Badges JeuxVideo.com</h2>'+
  150.                             '</div>'+
  151.                             '<div class="body hauts-faits">'+
  152.                             '<div class="liste-hauts-faits"></div>'+
  153.                             '</div>';
  154.                         parent.appendChild(blocDefaultProfil);
  155.                         listeHautsFaits = document.querySelector(".liste-hauts-faits");
  156.                     }
  157.                 }
  158.             } else {
  159.                 var newListHighFeats = document.createElement("div");
  160.                 newListHighFeats.className = "bloc-cdv cdv-nbpost";
  161.                 newListHighFeats.innerHTML = '<h2 class="titre">Badges JeuxVideo.com :'+
  162.                     '<div class="liste-hauts-faits"></div>'+
  163.                     '</h2>';
  164.  
  165.                 var nbMsgsBlock = nbMsgsArea.parentNode.parentNode;
  166.                 nbMsgsBlock.parentNode.insertBefore(newListHighFeats, nbMsgsBlock.nextSibling);
  167.                 listeHautsFaits = document.querySelector(".liste-hauts-faits");
  168.             }
  169.  
  170.             //Remove all the already displayed badges from the "badges" array
  171.             var imgs = listeHautsFaits.querySelectorAll("img");
  172.             for (var i=0; i<imgs.length; i++) {
  173.                 var img = imgs[i];
  174.                 var src = img.getAttribute("src");
  175.                 //console.log("src='"+src+"'");
  176.                 if (src.indexOf("badge-rang") >= 0) {
  177.                     var rang = src.replace(badges_base_url + "rang-", "").replace(".png", "");
  178.                     var index = null;
  179.                     badges.every(function(el, i) {
  180.                         if (el.name === rang) {
  181.                             index = i;
  182.                             return false;
  183.                         }
  184.                         return true;
  185.                     });
  186.                     if (index !== null) {
  187.                         badges.splice(index, 1);
  188.                     }
  189.                 }
  190.             }
  191.  
  192.             for (var j=0; j<badges.length; j++) {
  193.                 var b = badges[j];
  194.                 if (nbMsgs >= b.points) {
  195.                     var displayedName;
  196.                     if (b.hasOwnProperty("displayedName")) {
  197.                         displayedName = b.displayedName;
  198.                     } else {
  199.                         displayedName = b.name.charAt(0).toUpperCase() + b.name.slice(1);
  200.                     }
  201.                     var newBadge = document.createElement("img");
  202.                     newBadge.src = badges_base_url + 'rang-'+b.name+'.png';
  203.                     newBadge.setAttribute("alt", "Rang "+displayedName);
  204.                     newBadge.setAttribute("title", "Rang "+displayedName);
  205.                     newBadge.setAttribute("style", "margin: 15px 0 0 10px;");
  206.                     if (displayedName === "Carton") {
  207.                         var bronze = listeHautsFaits.querySelector("img[alt='Rang Bronze']");
  208.                         if (bronze !== null) {
  209.                             bronze.parentNode.insertBefore(newBadge, bronze);
  210.                         } else {
  211.                             listeHautsFaits.appendChild(newBadge);
  212.                         }
  213.                         continue;
  214.                     }
  215.                     listeHautsFaits.appendChild(newBadge);
  216.                 }
  217.             }
  218.         }
  219.  
  220.         var url = document.location.href;
  221.         var isDesktopVersionAndOnProfilePage = (url.indexOf("www.jeuxvideo.com/profil/") >= 0 && url.indexOf("?mode=infos") > 0);
  222.         var isMobileVersionAndOnProfilePage = (url.indexOf("m.jeuxvideo.com/profil/") >= 0 && url.indexOf(".html") > 0);
  223.         if (!isDesktopVersionAndOnProfilePage && !isMobileVersionAndOnProfilePage) {
  224.             return;
  225.         }
  226.  
  227.         getBadgesBaseURL();
  228.  
  229.         function log() {
  230.             function getRealType(obj) {
  231.                 return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1];
  232.             }
  233.  
  234.             var args = Array.prototype.slice.call(arguments), str = "", type;
  235.             for (var i = 0; i < args.length; i++) {
  236.                 type = getRealType(args[i]);
  237.                 str += (i > 0 ? "\n" : "") + "(" + type + ") ";
  238.                 type = type.toLowerCase();
  239.                 switch (type) {
  240.                     case "arguments":
  241.                     case "array":
  242.                     case "object":
  243.                         var cache = [];
  244.                         str += JSON.stringify(args[i], function (key, value) {
  245.                             if (typeof value === 'object' && value !== null) {
  246.                                 if (cache.indexOf(value) >= 0) {
  247.                                     return "(Already shown here)";
  248.                                 }
  249.                                 cache.push(value);
  250.                             }
  251.                             return value;
  252.                         }, 4);
  253.                         break;
  254.                     case "undefined":
  255.                         str += "undefined";
  256.                         break;
  257.                     default:
  258.                         str += args[i];
  259.                 }
  260.             }
  261.             //window.console.log(str);
  262.         }
  263.     }
  264.  
  265.     function callMe() {
  266.         var script = document.createElement("script");
  267.         script.type = "text/javascript";
  268.         script.innerHTML = "(function(){ " + updateBadgesScript.toString() + " updateBadgesScript();})();";
  269.         document.body.appendChild(script);
  270.     }
  271.  
  272.     if (isCalled) {
  273.         return;
  274.     }
  275.     isCalled = true;
  276.  
  277.     callMe();
  278.  
  279.     //Respeed
  280.     addEventListener('instantclick:newpage', callMe);
  281. }
  282.  
  283. document.addEventListener('DOMContentLoaded', unique, false);
  284. window.addEventListener('load', unique, false);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement