Afficher_Nombres_dabonnes

Afficher directement le nombre d'abonnés sur la page abonné d'un profil.

// ==UserScript==
// @name         Afficher_Nombres_dabonnes
// @namespace    Afficher_Nombres_dabonnes
// @version      0.9.6
// @description  Afficher directement le nombre d'abonnés sur la page abonné d'un profil.
// @author       Atlantis
// @icon         https://images.emojiterra.com/google/noto-emoji/unicode-15.1/color/512px/1f4af.png
// @match        *://www.jeuxvideo.com/profil/*
// @license      MIT
// @grant        GM_xmlhttpRequest
// ==/UserScript==

(function() {
    'use strict';
        window.addEventListener('load', function() {
        // Fonction pour extraire le numéro de page à partir de l'URL
        function getPageNumberFromUrl(url) {
            var pageNumberMatch = url.match(/&page=(\d+)/);
            if (pageNumberMatch) {
                return parseInt(pageNumberMatch[1]);
            } else {
                // Si le numéro de page n'existe pas dans l'URL, retourner 1 par défaut
                return 1;
            }
        }


        // Fonction pour traiter et utiliser paginationElement
        function handlePaginationElement(doc) {
            const paginationElement = doc.querySelector('.pagi-fin-actif, .pagi-fin-actif-proxy');
            if (paginationElement) {
                // Récupérer l'URL de la dernière page
                var lastPageUrl = paginationElement.getAttribute('href');
                // Effectuer une requête HTTP en arrière-plan pour charger la dernière page
                GM_xmlhttpRequest({
                    method: "GET",
                    url: lastPageUrl,
                    onload: function(response) {
                        var tempDiv = document.createElement('div');
                        tempDiv.innerHTML = response.responseText;
                        var numberOfFicheAbonneElementsOnLastPage = tempDiv.querySelectorAll('.fiche-abonne').length;
                        var resultAboAllPage = ((getPageNumberFromUrl(lastPageUrl) - 1) * 51) + numberOfFicheAbonneElementsOnLastPage;
                        ShowOnJVC(resultAboAllPage);
                    }
                });
            } else {
                // Si vous êtes déjà sur la dernière page, récupérer les informations depuis la page actuelle
                var numberOfFicheAbonneElements = doc.querySelectorAll('.fiche-abonne').length;
                //si_la_dernière_page_0_abo_retour_page_1
                if (numberOfFicheAbonneElements === 0) {
                    var currentURL = window.location.href;
                    if (currentURL.match(/&page=(\d+)/)) {
                        var newURL = currentURL.replace(/&page=(\d+)/, '');
                        window.location.href = newURL;
                    }
                }
                var currentPageUrl = window.location.href;
                var currentPageNumber = getPageNumberFromUrl(currentPageUrl);
                var resultAboAllPage = ((currentPageNumber - 1) * 51) + numberOfFicheAbonneElements;
                ShowOnJVC(resultAboAllPage);
            }
        }

        function jvCake(classe) {
            const base16 = '0A12B34C56D78E9F';
            let lien = '';
            const s = classe.split(' ')[1];
            for (let i = 0; i < s.length; i += 2) {
                lien += String.fromCharCode(base16.indexOf(s.charAt(i)) * 16 + base16.indexOf(s.charAt(i + 1)));
        }
            return lien;
        }



        function decodeElements(doc) {
            // Sélectionnez tous les éléments avec la classe cryptée
            const cryptElements = doc.querySelectorAll('.JvCare.pagi-fin-actif');

            // Parcourez chaque élément crypté
            cryptElements.forEach(element => {
                // Créez un nouvel élément "a"
                const decodedClass = jvCake(element.className);
                const newAnchor = document.createElement('a');
                const hrefValue = element.getAttribute('href');
                newAnchor.setAttribute('href', decodedClass);
                newAnchor.classList.add('pagi-fin-actif-proxy');
                element.parentNode.replaceChild(newAnchor, element);
            });
        }




        if (window.location.search.match(/(\?|\&)mode=abonne(&|$)/)) {
            ShowOnJVC('Load');
            handlePaginationElement(document);
            console.log(document)

        } else {
            var userAgent = navigator.userAgent.toLowerCase();
            var profilpersoooo = document.querySelector('.lien-profil.icon-report-problem');
            //evite_la_recherche_sur_mobile_hors_abo
            if (!userAgent.includes('mobile')) {
                ShowOnJVC('Load');
                //affiche_le_nombre_que_sur_la_page_abo_profil_ou_membre_ext
                if (!profilpersoooo || window.location.href.indexOf('?mode=infos') !== -1 || window.location.href.indexOf('?mode=page_perso') !== -1) {
                    const iconPeopleElement = document.querySelector('a.lien-profil[href$="?mode=abonne"], a.lien-profil[href*="?mode=abonne&"]');
                    if (iconPeopleElement) {
                        const fallbackUrl = iconPeopleElement.href;
                        GM_xmlhttpRequest({
                            method: 'GET',
                            url: fallbackUrl,
                            onload: function(response) {
                                const tempDiv2 = document.createElement('div');
                                tempDiv2.innerHTML = response.responseText;
                                decodeElements(tempDiv2);
                                handlePaginationElement(tempDiv2);
                            }
                        });
                    }
                } else {
                    ShowOnJVC('👆');
                }
            }
        }

        function ShowOnJVC(result) {
            var aboLink = document.querySelector('a.lien-profil[href$="?mode=abonne"], a.lien-profil[href*="?mode=abonne&"]');
            aboLink.textContent = 'Abo (' + result + ')';
            aboLink.classList.remove('icon-people');

            var menuTitle = document.querySelector('.menu-profil-title');
            if (menuTitle.querySelector('.icon-people')) {
                menuTitle.innerHTML = '<i class="icon-people"></i> Abo (' + result + ')';
            }
        }
    });
})();