Leboncoin Annonce Filter

Interface pour filtrer les annonces sur Leboncoin, avec bouton de réinitialisation

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Leboncoin Annonce Filter
// @namespace    http://tampermonkey.net/
// @version      01.0
// @description  Interface pour filtrer les annonces sur Leboncoin, avec bouton de réinitialisation
// @author       IAceI
// @match        https://www.leboncoin.fr/*recherche*
// @grant        none
// ==/UserScript==
// @license MIT
(function() {
    'use strict';

    // Créer l'interface utilisateur
    function creerInterface() {
        const container = document.createElement('div');
        container.innerHTML = `
            <div style="position: fixed; top: 50%; right: 10px; transform: translateY(-50%); background: white; padding: 10px; border: 1px solid black; z-index: 1000;">
                <div>
                    <input type="radio" id="masquerVenduEtAchat" name="filtreAnnonce" value="masquer">
                    <label for="masquerVenduEtAchat">Masquer 'Vendu' et 'Achat en cours'</label>
                </div>
                <div>
                    <input type="radio" id="afficherLivraison" name="filtreAnnonce" value="livraison">
                    <label for="afficherLivraison">Afficher uniquement 'Livraison possible'</label>
                </div>
                <div>
                    <input type="radio" id="afficherTout" name="filtreAnnonce" value="tout" checked>
                    <label for="afficherTout">Afficher toutes les annonces</label>
                </div>
            </div>
        `;
        document.body.appendChild(container);

        // Ajouter des écouteurs d'événements
        document.getElementById('masquerVenduEtAchat').addEventListener('change', filtrerAnnonces);
        document.getElementById('afficherLivraison').addEventListener('change', filtrerAnnonces);
        document.getElementById('afficherTout').addEventListener('change', filtrerAnnonces);
    }

    // Fonction pour masquer une annonce
    function masquerAnnonce(annonce) {
        annonce.style.display = 'none';
    }

    // Fonction pour réinitialiser l'affichage des annonces
    function reinitialiserAnnonces() {
        const annonces = document.querySelectorAll('a[data-qa-id="aditem_container"]');
        annonces.forEach(annonce => {
            annonce.style.display = ''; // Réinitialiser l'affichage
        });
    }

    // Fonction pour filtrer les annonces
    function filtrerAnnonces() {
        const masquerVenduEtAchat = document.getElementById('masquerVenduEtAchat').checked;
        const afficherLivraison = document.getElementById('afficherLivraison').checked;

        reinitialiserAnnonces(); // Réinitialiser d'abord toutes les annonces

        if (masquerVenduEtAchat || afficherLivraison) {
            const annonces = document.querySelectorAll('a[data-qa-id="aditem_container"]');
            annonces.forEach(annonce => {
                const statutElement = annonce.querySelector('span[data-spark-component="tag"]');
                if (statutElement) {
                    const statut = statutElement.innerText;
                    if (masquerVenduEtAchat && (statut === 'Vendu' || statut === 'Achat en cours')) {
                        masquerAnnonce(annonce);
                    } else if (afficherLivraison && statut !== 'Livraison possible') {
                        masquerAnnonce(annonce);
                    }
                } else if (afficherLivraison) {
                    masquerAnnonce(annonce); // Masquer les annonces sans étiquette de statut
                }
            });
        }
    }

    // Initialiser l'interface et le filtrage au chargement
    window.addEventListener('load', () => {
        creerInterface();
        filtrerAnnonces(); // Appliquer un filtre initial
    });
})();