Greasy Fork is available in English.

Wallapop Filtrar articulos de un vendedor por palabras

Añade un campo de texto siempre visible en la parte lateral inferior de la página de perfil de usuario de Wallapop y filtra artículos según el texto ingresado.

// ==UserScript==
// @name         Wallapop Filtrar articulos de un vendedor por palabras
// @namespace    http://tampermonkey.net/
// @author       Sergi0
// @version      1.1
// @description  Añade un campo de texto siempre visible en la parte lateral inferior de la página de perfil de usuario de Wallapop y filtra artículos según el texto ingresado.
// @match        https://es.wallapop.com/*
// @grant        none
// @icon         https://es.wallapop.com/favicon.ico
// @language     es
// @grant        none
// @license MIT
// @homepageURL  https://greasyfork.org/es/scripts/500126-wallapop-filtrar-articulos-de-un-vendedor-por-palabras
// @supportURL   https://greasyfork.org/es/scripts/500126-wallapop-filtrar-articulos-de-un-vendedor-por-palabras/feedback
// ==/UserScript==

(function() {
    'use strict';

    window.addEventListener('load', function() {
        let currentURL = window.location.href;
        let cargarProductosInterval = null;

        console.log("Página cargada:", currentURL);

        function crearCampoDeTexto() {
            console.log("Creando campo de texto...");

            if (document.getElementById('customNoteContainer')) {
                console.log("El campo de texto ya existe. Saliendo de la función.");
                return;
            }

            const container = document.createElement('div');
            container.id = 'customNoteContainer';
            container.style.position = 'fixed';
            container.style.bottom = '10px';
            container.style.right = '-310px';
            container.style.width = '300px';
            container.style.backgroundColor = '#1abc9c';
            container.style.opacity = '0';
            container.style.color = 'white';
            container.style.padding = '10px';
            container.style.textAlign = 'left';
            container.style.zIndex = '9999';
            container.style.fontWeight = 'bold';
            container.style.transition = 'opacity 2s ease, right 2s ease';
            container.style.borderRadius = '10px';
            container.style.boxShadow = '0 0 10px rgba(0,0,0,0.5)';

            const textArea = document.createElement('textarea');
            textArea.style.width = '100%';
            textArea.style.height = '100%';
            textArea.style.backgroundColor = 'inherit';
            textArea.style.color = 'inherit';
            textArea.style.border = 'none';
            textArea.style.outline = 'none';
            textArea.style.fontFamily = 'inherit';
            textArea.style.fontSize = 'inherit';
            textArea.style.resize = 'none';
            textArea.style.fontWeight = 'bold';
            textArea.style.color = '#ffffff';
            textArea.placeholder = 'Escribe aquí para filtrar artículos...';

            const style = document.createElement('style');
            style.textContent = `
                #customNoteContainer textarea::placeholder {
                    color: #ffffff;
                    font-weight: bold;
                }
            `;
            document.head.appendChild(style);

            textArea.addEventListener('input', function() {
                const searchText = textArea.value.toLowerCase();
                console.log("Filtrando artículos por texto:", searchText);
                const items = document.querySelectorAll('.public-profile-published-items_PublicProfileItems__card__E2D5a');
                console.log("Número de artículos encontrados:", items.length);

                items.forEach((item, index) => {
                    const titleElement = item.querySelector('.item-card_ItemCard__title__8eq2b');
                    if (titleElement) {
                        const titleText = titleElement.textContent.toLowerCase();
                        console.log(`Artículo ${index + 1}: ${titleText}, Visible: ${titleText.includes(searchText)}`);

                        item.style.display = titleText.includes(searchText) ? '' : 'none';
                    } else {
                        console.log(`Artículo ${index + 1} no tiene título.`);
                    }
                });
            });

            container.appendChild(textArea);
            document.body.appendChild(container);

            setTimeout(() => {
                container.style.opacity = '0.7';
                container.style.right = '10px';
                console.log("Campo de texto visible.");
            }, 100);
        }

        function ocultarCampoDeTexto() {
            const container = document.getElementById('customNoteContainer');
            if (container) {
                console.log("Ocultando campo de texto...");
                container.style.opacity = '0';
                container.style.right = '-310px';
                setTimeout(() => {
                    if (container.parentNode) {
                        container.parentNode.removeChild(container);
                        console.log("Campo de texto eliminado.");
                    }
                }, 2000);
            }
        }

        function checkURLChange() {
            if (currentURL !== window.location.href) {
                console.log("Cambio de URL detectado:", currentURL, " -> ", window.location.href);
                currentURL = window.location.href;
                if (currentURL.startsWith('https://es.wallapop.com/app/user/') || currentURL.startsWith('https://es.wallapop.com/user/')) {
                    crearCampoDeTexto();
                    iniciarCargaProductos();
                } else {
                    ocultarCampoDeTexto();
                    detenerCargaProductos();
                }
            }
        }

        function iniciarCargaProductos() {
            cargarProductosInterval = setInterval(() => {
                const botonVerMas = document.querySelector('walla-button[text="Ver más productos"]');

                if (botonVerMas) {
                    console.log("Botón 'Ver más productos' encontrado.");

                    if (!botonVerMas.hasAttribute('disabled')) {
                        console.log("Botón 'Ver más productos' habilitado y listo para clic.");

                        botonVerMas.click(); // Intenta hacer clic directamente
                        console.log("Clic ejecutado.");
                    } else {
                        console.log("Botón 'Ver más productos' está deshabilitado.");
                    }
                } else {
                    console.log("Botón 'Ver más productos' no encontrado.");
                }
            }, 1000);
        }

        function detenerCargaProductos() {
            clearInterval(cargarProductosInterval);
            console.log("Carga de productos detenida.");
        }

        function isVisible(element) {
            return element.offsetWidth > 0 || element.offsetHeight > 0;
        }

        const observer = new MutationObserver(checkURLChange);
        observer.observe(document.body, { childList: true, subtree: true });

        setInterval(checkURLChange, 1000);

        if (currentURL.startsWith('https://es.wallapop.com/app/user/') || currentURL.startsWith('https://es.wallapop.com/user/')) {
            crearCampoDeTexto();
            iniciarCargaProductos();
        }
    });
})();