NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name NiceMPNotifs // @namespace CrazyJeux/Daring-Do // @author CrazyJeux/Daring-Do // @match *://www.jeuxvideo.com/* // @description Les icônes des MP et des notifications sont toujours visibles, les nombres indiqués sont régulièrement mis à jour et cliquer sur l'icône des MP amène directement à ceux-ci. // @version 7 // @resource jQueryJS https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.0/jquery.min.js // @grant GM_getResourceText // @grant unsafeWindow // @run-at document-start // ==/UserScript== 'use strict'; function wrapper() { 'use strict'; var NiceMPNotifs = { // Temps entre deux mises à jour du nombre de MP. MP_UPDATE_DELAY_MS: 5000, // URL de la page à charger pour récupérer le nombre de MP. // Cette URL a été choisie parce qu'elle est rapide à charger. MP_UPDATE_URL: "/sso/add_pseudo.php", init: function () { NiceMPNotifs.addStyle(); NiceMPNotifs.onDomReady(function () { NiceMPNotifs.startMPCountUpdateLoop(); NiceMPNotifs.addMessageBoxLinkOnMPCount(); NiceMPNotifs.removeHasNotifClassOnScroll(); }); }, /** * Injecte le CSS nécessaire dans la page. */ addStyle: function () { var style = document.createElement("style"); style.type = "text/css"; style.setAttribute("data-nicempnotifs-style", "true"); style.innerHTML = ".account-number-mp:hover, .account-number-notif:hover { transform: scale(1.4); }"; style.innerHTML += " .account-number { overflow: visible !important; }"; style.innerHTML += " .account-number-mp+.account-number-notif { margin-left: 0.25rem !important; }"; style.innerHTML += " .account-avatar-box { margin: 0px 0.375rem 0px 0px !important; }"; style.innerHTML += " .account-pseudo, .account-number-mp, .account-number-notif { display: inline-block !important; }"; style.innerHTML += " .header-sticky.header-affix .nav-platform { margin-left: 9rem }"; style.innerHTML += " .header-top .logo.header-affix .logo-link { margin-top: 3px; width: 8rem; }"; document.head.appendChild(style); }, /** * Appelle `callback` quand le dom est prêt. */ onDomReady: function (callback) { // document.ready ne fonctionne pas sur GM avec @run-at document-start. var checkDomReady = setInterval(function () { // Pour vérifier que le DOM est chargé, on vérifie la présence du footer. if (document.querySelector(".stats") !== null) { clearInterval(checkDomReady); callback(); } }, 50); }, /** * Lance la boucle de mise à jour du nombre de MP. */ startMPCountUpdateLoop: function () { setInterval(NiceMPNotifs.updateMPCount, NiceMPNotifs.MP_UPDATE_DELAY_MS); }, /** * Récupère le nouveau nombre de MP et le met à jour si besoin. */ updateMPCount: function () { NiceMPNotifs.getMPCount(function (newCount) { $('.account-number-mp:first').attr('data-val', newCount); }); }, /** * Récupère le nouveau nombre de MP. Appelle `callback` quand le nombre est * disponible. */ getMPCount: function (callback) { $.get(NiceMPNotifs.MP_UPDATE_URL, function (htmlPage) { callback(NiceMPNotifs.parseMPCount(htmlPage)); }); }, /** * Parse et retourne le nombre de MP dans la page HTML passé en paramètre. */ parseMPCount: function (htmlPage) { // On récupère le premier `data-count` trouvé dans la page : c'est le nombre de MP. var regexMP = /data-count="(\d+)"/; var matchMP = htmlPage.match(regexMP); var mpCount = (matchMP && matchMP[1] !== undefined) ? matchMP[1] : 0; return parseInt(mpCount, 10); }, /** * Ajoute un lien vers la boîte de réception sur le nombre de MP. */ addMessageBoxLinkOnMPCount: function () { var mpIcon = document.querySelector(".account-number-mp"); if (mpIcon !== null) { mpIcon.addEventListener("click", function (e) { e.stopImmediatePropagation(); e.stopPropagation(); NiceMPNotifs.openInNewTab("/messages-prives/boite-reception.php"); }); } }, /** * Ouvre un lien dans un nouvel onglet en simulant le clic sur un lien * en target="_blank". */ openInNewTab: function (url) { var newLink = document.createElement("a"); newLink.target = "_blank"; newLink.href = url; document.body.appendChild(newLink); newLink.click(); newLink.remove(); console.log("open in new tab done"); }, removeHasNotifClassOnScroll: function () { function removeHasNotifClass() { if (MPspan.classList.contains("has-notif")) { MPspan.classList.remove("has-notif"); } } var MPspan = document.querySelector(".account-number-mp"); if (MPspan === null) { return; } $(window).scroll(removeHasNotifClass); removeHasNotifClass(); } }; // Let's go :) NiceMPNotifs.init(); } var inIframe = (window.top !== window.self); if (!inIframe) { if (typeof unsafeWindow.jQuery !== "undefined") { window.$ = unsafeWindow.jQuery; } else { 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); } var scriptEl = document.createElement("script"); scriptEl.type = "text/javascript"; var content = "(function(){ " + wrapper.toString() + " wrapper();})();"; scriptEl.innerHTML = content; scriptEl.setAttribute("data-info", "NiceMPNotifs"); document.head.appendChild(scriptEl); }