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é" ---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