FIXER TAILLE BOÎTE TEXTE + VOIR AUTEUR MSG BL

--- Script pour fixer la hauteur de la boîte de texte en bas de page, et pour afficher le pseudo à côté de "Auteur Blacklisté" ---
 avatar
unknown
javascript
a month ago
6.5 kB
6
No Index
// ==UserScript==
// @name         FIXER HAUTEUR BOÎTE TEXTE + VOIR AUTEUR MESSAGE BL
// @namespace    http://tampermonkey.net/
// @namespace    https://www.jeuxvideo.com/
// @version      16-Avril-2026
// @author       captain_cid31 + Gemini
// @description  --- Script pour fixer la hauteur de la boîte de texte en bas de page, et pour afficher le pseudo à côté de "Auteur Blacklisté" ---
// @match        https://www.jeuxvideo.com/forums/*
// @match        https://www.jeuxvideo.com/recherche/forums/*
// @match        https://www.jeuxvideo.com/messages-prives/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=jeuxvideo.com
// @license      MIT
// @grant        none
// @run-at       document-idle
// ==/UserScript==



(function() {
    'use strict' ;

    /* BONUS 1 - POUR FIXER LA HAUTEUR DE LA FENÊTRE DE TEXTE (HORS JVCHAT) */
    const ID_CIBLE = "message_reponse" ;
    const STYLE_NORMAL = "max-height: 225px !important; overflow-y: auto !important; resize: none !important;" ;
    const PLACEHOLDER_JVCHAT = "Hop hop hop, le message ne va pas s'écrire tout seul !" ;

    function isJVChatOff() {
        const textarea = document.getElementById(ID_CIBLE) ;
        if (!textarea) return false ;

        const placeholder = textarea.getAttribute('placeholder') || '' ;
        return placeholder !== PLACEHOLDER_JVCHAT ;
    }
    function appliquerStyleNormal(el) {
        if (!el) return ;

        const currentStyle = el.getAttribute('style') || "" ;
        if (!currentStyle.includes("max-height: 225px")) el.setAttribute("style", currentStyle + " " + STYLE_NORMAL) ;
    }
    function retirerStyleNormal(el) {
        if (!el) return ;

        let style = el.getAttribute('style') || "" ;
        STYLE_NORMAL.split(";").forEach(rule => {
            rule = rule.trim() ;
            if (rule) {
                const regex = new RegExp(rule.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + "\\s*;?", "gi") ;
                style = style.replace(regex, "") ;
            }
        }) ;
        style = style.trim() ;
        if (style.endsWith(";")) style = style.slice(0, -1) ;

        if (style) el.setAttribute("style", style) ;
        else el.removeAttribute("style") ;
    }
    function miseAJourStyle() {
        const textarea = document.getElementById(ID_CIBLE) ;
        if (!textarea) return ;

        if (isJVChatOff()) appliquerStyleNormal(textarea) ;
        else retirerStyleNormal(textarea) ;
    }
    const observer = new MutationObserver(() => {
        miseAJourStyle() ;
    }) ;
    // Observe la présence et les changements du textarea
    observer.observe(document.body, {
        childList: true,
        subtree: true,
        attributes: true,
        attributeFilter: ['placeholder'],
    }) ;
    // Mise à jour immédiate au chargement
    miseAJourStyle() ;
    /* FIN BONUS 1 */



    /* BONUS 2 - POUR VOIR DIRECTEMENT QUI EST L'AUTEUR D'UN MESSAGE BLACKLISTÉ */
    let fetchPagePromise = null ;
    async function revelerPseudoBlacklist(un_message) {
        const label = un_message.querySelector(".messageUser__label") ;
        if (!label || label.dataset.revealed === "yes" || label.textContent.trim() !== "Auteur blacklisté") return ;

        label.dataset.revealed = "yes" ;
        const idMsg = un_message.id.replace("message-", "") ;

        try {
            if (!fetchPagePromise) {
                fetchPagePromise = (async () => {
                    // On fetch la page ACTUELLE (www.jeuxvideo.com) pour lire le HTML brut : 'omit' pour simuler un invité
                    const response = await fetch(window.location.href, { credentials: 'omit' }) ;
                    if (!response.ok) throw new Error("Fetch KO") ;
                    const html = await response.text() ;
                    return new DOMParser().parseFromString(html, "text/html") ;
                })() ;
            }

            // Tous les messages (le premier comme les suivants) attendent le résultat du fetch unique
            const doc = await fetchPagePromise ;
            // ----------------------------------------------

            // On cherche le message par son ID dans le document récupéré
            const messageDistant = doc.querySelector(`#message-${idMsg}`) ;

            // On essaie de choper le pseudo soit dans le label, soit dans le lien du profil
            let vraiPseudo = messageDistant?.querySelector(".messageUser__label")?.textContent.trim() ;

            // Sécurité : si le texte est encore "Auteur blacklisté", on regarde l'URL du profil
            if (!vraiPseudo || vraiPseudo === "Auteur blacklisté") {
                const link = messageDistant?.querySelector(".messageUser__label") ;
                if (link && link.href) vraiPseudo = link.href.split("/profil/")[1]?.split(".html")[0] ;
            }

            if (vraiPseudo && vraiPseudo !== "Auteur blacklisté") {
                vraiPseudo = decodeURIComponent(vraiPseudo) ;
                label.textContent = `Auteur blacklisté (${vraiPseudo})` ;
                label.style.color = "#ff4500" ;
            } else {
                // Si on ne trouve pas le pseudo (ex: message supprimé), on reset pour permettre un retry futur
                console.warn(`Impossible de trouver le pseudo pour ${idMsg}`) ;
                label.dataset.revealed = "no" ;
            }
        } catch (e) {
            console.error("Erreur démasquage :", e) ;
            label.dataset.revealed = "no" ;
            // En cas d'erreur réseau, on permet de retenter au prochain passage
            fetchPagePromise = null ;
        }
    }

    // OBSERVATEUR ET INITIALISATION
    const obs = new MutationObserver((mutations) => {
        const hasAddedNodes = mutations.some(m => m.addedNodes.length > 0) ;
        if (!hasAddedNodes) return ;

        document.querySelectorAll('.messageUser--blacklisted').forEach(msg => {
            const parent = msg.closest('div[id^="message-"]') ;
            if (parent) revelerPseudoBlacklist(parent) ;
        }) ;
    }) ;
    document.querySelectorAll('.messageUser--blacklisted').forEach(msg => {
        const parent = msg.closest('div[id^="message-"]') ;
        if (parent) revelerPseudoBlacklist(parent) ;
    }) ;
    obs.observe(document.body, { childList: true, subtree: true }) ;
    /* FIN BONUS 2 */

})() ;
Editor is loading...
Leave a Comment