Salut,
Tout est dans le titre.
Merci Claude, j'ai consommé une tonne d'eau* pour bricoler un moyen de masquer les messages de certains pseudos directement dans le navigateur. Ça ne modifie rien sur le forum lui-même, ça tourne uniquement chez vous, dans votre navigateur, personne d'autre n'est affecté.
En survolant le pseudo d'un membre (là où apparaît le petit encart avec "s'abonner"), un bouton "ignorer" apparaît en dessous. Un clic dessus, et tous ses messages sont masqués sur les pages que vous visitez.
Un message masqué s'affiche comme un simple bandeau grisé ("Message de X masqué — cliquer pour afficher"). Un clic dessus le déplie si besoin, et un bouton "Ne plus ignorer" permet de retirer quelqu'un de la liste.
Je n'ai testé que 3 minutes, avec Firefox sur Windows. Aucune garantie, SAV très limité, il y a certainement plein d'endroits où ça ne focntionnera pas.
Installation (2 minutes)
- Installez l'extension Tampermonkey dans votre navigateur (Chrome, Firefox, Edge) : tampermonkey.net
- Cliquez sur l'icône Tampermonkey dans la barre d'outils, puis sur "Créer un script" (ou "Create a new script").
- Effacez le contenu par défaut et collez le script ci-dessous à la place.
- Sauvegardez (Ctrl+S ou menu Fichier > Enregistrer).
- Rechargez une page du forum — c'est prêt.
Le script:
Claude disait:
// ==UserScript==
// @name Skipass - Liste d'ignorés
// @namespace skipass-ignore-list
// @version 1.0
// @description Masque les messages des pseudos ignorés sur les forums skipass.com, avec bouton ignorer/dé-ignorer au survol du pseudo.
// @match https://www.skipass.com/forums/*
// @grant none
// ==/UserScript==
(function () {
'use strict';
const STORAGE_KEY = 'skipass_ignore_list';
// --- Stockage ---
function getIgnored() {
try {
return JSON.parse(localStorage.getItem(STORAGE_KEY) || '[]');
} catch (e) {
return [];
}
}
function setIgnored(list) {
localStorage.setItem(STORAGE_KEY, JSON.stringify([...new Set(list)]));
}
function isIgnored(pseudo) {
return getIgnored().includes(pseudo.toLowerCase());
}
function addIgnored(pseudo) {
const list = getIgnored();
list.push(pseudo.toLowerCase());
setIgnored(list);
}
function removeIgnored(pseudo) {
setIgnored(getIgnored().filter((p) => p !== pseudo.toLowerCase()));
}
// --- Récupération du pseudo d'un post ---
// Ce bloc existe dans TOUS les posts, y compris ceux groupés (forum_post_same_user),
// même s'il n'est affiché qu'en mobile en CSS - il reste présent dans le DOM.
function getPseudoFromPost(post) {
const el = post.querySelector(
'.forum_post_user_avatar_smallscreen [itemprop="name"]'
);
return el ? el.getAttribute('content') : null;
}
// --- Masquage / démasquage d'un post ---
function maskPost(content, pseudo) {
if (content.dataset.ignoreMasked) return;
content.dataset.ignoreMasked = '1';
const originalChildren = Array.from(content.childNodes);
content.innerHTML = '';
const banner = document.createElement('div');
banner.className = 'ignore-banner';
banner.style.cssText =
'padding:8px 12px;margin:4px 0;background:#f2f2f2;border:1px dashed #ccc;' +
'color:#888;cursor:pointer;font-style:italic;border-radius:4px;';
banner.textContent = `Message de ${pseudo} masqué — cliquer pour afficher`;
const revealWrap = document.createElement('div');
revealWrap.style.display = 'none';
originalChildren.forEach((n) => revealWrap.appendChild(n));
const removeBtn = document.createElement('button');
removeBtn.textContent = `Ne plus ignorer ${pseudo}`;
removeBtn.style.cssText =
'display:block;margin:6px 0;padding:4px 10px;cursor:pointer;' +
'background:#fff;border:1px solid #ccc;border-radius:4px;';
removeBtn.addEventListener('click', (e) => {
e.stopPropagation();
removeIgnored(pseudo);
// restauration complète du post
content.innerHTML = '';
originalChildren.forEach((n) => content.appendChild(n));
delete content.dataset.ignoreMasked;
refreshAllToggleButtons();
});
banner.addEventListener('click', () => {
revealWrap.style.display =
revealWrap.style.display === 'none' ? '' : 'none';
});
revealWrap.insertBefore(removeBtn, revealWrap.firstChild);
content.appendChild(banner);
content.appendChild(revealWrap);
}
function applyIgnoreToPage() {
document.querySelectorAll('.forum_post').forEach((post) => {
const pseudo = getPseudoFromPost(post);
if (!pseudo) return;
const content = post.querySelector('.forum_post_content');
if (!content) return;
if (isIgnored(pseudo) && !content.dataset.ignoreMasked) {
maskPost(content, pseudo);
}
});
}
// --- Bouton ignorer/dé-ignorer dans la popup au survol du pseudo ---
// La popup contient .comment-user-data (bouton "s'abonner" etc.), sibling de
// .comment-username dans le même .comment-info.
const toggleButtons = [];
function injectToggleButtons() {
document.querySelectorAll('.comment-info').forEach((commentInfo) => {
const userData = commentInfo.querySelector('.comment-user-data');
const usernameLink = commentInfo.querySelector('.comment-username');
if (!userData || !usernameLink) return;
if (userData.querySelector('.ignore-toggle-btn')) return;
const pseudo = usernameLink.textContent.trim();
if (!pseudo) return;
const btn = document.createElement('a');
btn.href = '#';
btn.className =
'btn follow btn-mini btn-ghost ignore-toggle-btn';
btn.style.cssText = 'display:block;margin-top:4px;text-align:center;';
const refresh = () => {
btn.textContent = isIgnored(pseudo) ? 'dé-ignorer' : 'ignorer';
};
refresh();
toggleButtons.push({ pseudo, refresh });
btn.addEventListener('click', (e) => {
e.preventDefault();
e.stopPropagation();
if (isIgnored(pseudo)) {
removeIgnored(pseudo);
} else {
addIgnored(pseudo);
}
refresh();
applyIgnoreToPage();
});
userData.appendChild(btn);
});
}
function refreshAllToggleButtons() {
toggleButtons.forEach((t) => t.refresh());
}
// --- Lancement + veille sur le DOM (au cas où du contenu se charge après coup) ---
function run() {
applyIgnoreToPage();
injectToggleButtons();
}
run();
const observer = new MutationObserver(() => run());
observer.observe(document.body, { childList: true, subtree: true });
})();
* en vrai, 2 prompts, ça a pris 1 minute, moins que de générer une image

inscrit le 8/12/13
3948 messages