// ==UserScript==
// @name Filtre topic
// @namespace https://www.jeuxvideo.com/
// @version 1.02
// @description Fitre les topics sur jvc par pseudo
// @include https://www.jeuxvideo.com/forums/*
// @grant none
// @downloadURL https://update.greasyfork.cloud/scripts/433468/Filtre%20topic.user.js
// @updateURL https://update.greasyfork.cloud/scripts/433468/Filtre%20topic.meta.js
// ==/UserScript==
let html = `
`;
let regex = /(?<=forums\/)(\d+)(-\d+-\d+-)(\d+)/;
// ajoute l'html pour rechercher un pseudo
if (regex.exec(window.location.href)[1] != '0') {
document.querySelector('.group-two').style.marginBottom = '.3125rem';
document.querySelector('.bloc-pre-left').insertAdjacentHTML('afterend', html);
if (regex.exec(window.location.href)[3] == 1) {
document.querySelector('.txt-search').setAttribute('value', document.querySelector('.bloc-header').firstElementChild.innerText);
}
document.querySelector('.btn-lancer-rech').onclick = rechercheAuteur;
}
async function rechercheAuteur() {
let pageCount = 1;
// liste des pages
document.querySelectorAll('div:nth-child(1) > div.bloc-liste-num-page > span').forEach((element) => {
// test si c'est un nombre pour éviter d'avoir un »
if (/^-?\d+$/.test(element.textContent))
pageCount = element.textContent;
});
let auteur = document.querySelector('.txt-search').value.toLowerCase();
// supprime tous les messages de la page actuelle
document.querySelectorAll('.bloc-message-forum').forEach(e => e.remove());
for (let pageIndex = 0; pageIndex < pageCount; pageIndex++) {
let response = await fetch(window.location.href.replace(regex, '$1$2' + (pageIndex + 1)));
let data = new DOMParser().parseFromString(await response.text(), "text/html");
let messages = data.getElementsByClassName('bloc-message-forum');
for (let i = messages.length - 1; i >= 0; i--) {
let pseudo = messages[i].querySelector('.bloc-header > span');
// supprime le message si il ne correspond pas au pseudo recherché ou si le pseudo a été supprimé
if (pseudo == null || pseudo.innerText.replace(/\s+/g, '').toLowerCase() !== auteur) {
messages[i].parentNode.removeChild(messages[i]);
} else {
// supprime JvCare
messages[i].querySelectorAll('.JvCare').forEach(e => {
let classes = e.getAttribute('class');
let href = jvCake(classes);
classes = classes.split(' ');
let index = classes.indexOf('JvCare');
classes.splice(index, index + 2);
classes.unshift('xXx');
classes = classes.join(' ');
e.outerHTML = '' + e.innerHTML + '';
});
// corrige les citations
messages[i].querySelectorAll('.blockquote-jv .blockquote-jv').forEach(blockquote => {
// ajoute le bouton "Voir la citation"
blockquote.insertAdjacentHTML('afterbegin', '');
blockquote.querySelector('.nested-quote-toggle-box').onclick = () => {
if (blockquote.getAttribute('data-visible') !== '1') {
blockquote.setAttribute('data-visible', '1')
} else {
blockquote.setAttribute('data-visible', '0')
}
};
});
}
}
// ajoute tous les messages avant la liste des pages
document.querySelectorAll('.bloc-pagi-default')[1].before(...messages);
}
}
function jvCake(cls) {
let base16 = '0A12B34C56D78E9F',
lien = '',
s = cls.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;
}