Загрузка данных


(() => {
    if (window.__ozonSvgFilter) {
        window.__ozonSvgFilter.stop();
    }

    const TARGET = 'http://www.w3.org/2000/svg';

    let queue = [];
    let processed = 0;

    function processRows(rows) {
        let kept = 0;
        let removed = 0;

        rows.forEach((row, index) => {
            const cells = row.querySelectorAll(':scope > td');

            if (cells.length < 7) {
                console.log(
                    `[SVG FILTER] Строка: меньше 7 столбцов → пропуск`
                );
                return;
            }

            // 7-й столбец
            const seventhCell = cells[6];

            // Ищем SVG именно в 7-м столбце
            const hasSvg = seventhCell.querySelector(
                `svg[xmlns="${TARGET}"]`
            );

            if (hasSvg) {
                kept++;

                console.log(
                    `%c[SVG FILTER] SVG найден в 7-м столбце → ОСТАВЛЯЕМ`,
                    'color: lime'
                );
            } else {
                removed++;

                console.log(
                    `%c[SVG FILTER] SVG НЕ найден в 7-м столбце → УДАЛЯЕМ`,
                    'color: red'
                );

                row.remove();
            }
        });

        processed += rows.length;

        console.log(
            `%c[SVG FILTER] Пачка обработана: ${rows.length} строк | ` +
            `оставлено: ${kept} | удалено: ${removed} | ` +
            `всего обработано: ${processed}`,
            'color: cyan'
        );
    }

    function tryProcess() {
        // Обрабатываем только пачками по 50
        while (queue.length >= 50) {
            const batch = queue.splice(0, 50);

            console.log(
                `%c[SVG FILTER] Набралось 50 новых строк → начинаю проверку`,
                'color: yellow'
            );

            processRows(batch);
        }
    }

    // Следим за появлением новых строк
    const observer = new MutationObserver(mutations => {
        mutations.forEach(mutation => {
            mutation.addedNodes.forEach(node => {
                if (node.nodeType !== Node.ELEMENT_NODE) return;

                // Если добавили сам <tr>
                if (node.matches && node.matches('tr')) {
                    queue.push(node);
                }

                // Если <tr> находится внутри добавленного элемента
                if (node.querySelectorAll) {
                    node.querySelectorAll('tr').forEach(row => {
                        queue.push(row);
                    });
                }
            });
        });

        tryProcess();
    });

    observer.observe(document.body, {
        childList: true,
        subtree: true
    });

    // Добавляем уже существующие строки в очередь
    document.querySelectorAll('tr').forEach(row => {
        queue.push(row);
    });

    // Проверяем, если уже есть 50 строк
    tryProcess();

    window.__ozonSvgFilter = {
        stop() {
            observer.disconnect();
            queue = [];

            delete window.__ozonSvgFilter;

            console.log(
                '%c[SVG FILTER] ОСТАНОВЛЕН',
                'color: orange'
            );
        }
    };

    console.log(
        '%c[SVG FILTER] ЗАПУЩЕН',
        'color: cyan'
    );

    console.log(
        '[SVG FILTER] Проверка происходит каждые 50 новых строк.'
    );

    console.log(
        '[SVG FILTER] Остановка: __ozonSvgFilter.stop()'
    );
})();