Marmennz / ЗАВОД ПО КЛОНИРОВАНИЮ МУСОРОК

// ==UserScript==
// @name         ЗАВОД ПО КЛОНИРОВАНИЮ МУСОРОК
// @namespace    http://tampermonkey.net/
// @version      14.88
// @description  Постоянное отслеживание динамических кнопок и их идентификаторов, с учетом удаления и добавления элементов, с клонированием кнопок на экран и индивидуальной окраской.
// @author       You
// @match        https://aio-delta.com/modules/raydium/terminal/*
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    const seenIdentifiers = new Set();
    let clonedButtons = [];
    let offsetX = 0; // Начальная горизонтальная позиция для первого клона

    const uniqueColors = ['#A8E4A0', '#FFE4C4', '#FFDB58', '#9966CC'];
    let colorIndex = 0;

    let isTransparent = false; // Переменная для отслеживания состояния кнопок (прозрачные или нет)
    let isUntouchable = false; // Переменная для отслеживания состояния осязаемости кнопок

    // Функция для обработки найденных кнопок
    function processButtons() {
        console.log("Поиск кнопок...");

        const buttons = document.querySelectorAll('button.btn.btn-sm i.bi-trash-fill');

        buttons.forEach(button => {
            const parentButton = button.closest('button');
            if (parentButton && parentButton.onclick) {
                const matches = parentButton.onclick.toString().match(/deleteTask\('([^']+)'/);
                if (matches && matches[1]) {
                    const identifier = matches[1];

                    if (!seenIdentifiers.has(identifier)) {
                        console.log('Найден идентификатор:', identifier);
                        seenIdentifiers.add(identifier);
                        cloneButton(parentButton, identifier);
                    }
                }
            }
        });
    }

    // Функция для клонирования кнопки
    function cloneButton(button, identifier) {
        const color = uniqueColors[colorIndex];
        colorIndex = (colorIndex + 1) % uniqueColors.length;

        const clonedButton = button.cloneNode(true);
        clonedButton.style.position = 'fixed';
        clonedButton.style.bottom = '30%';
        clonedButton.style.left = `${50 + offsetX}%`;
        clonedButton.style.transform = 'translateX(-50%)';
        clonedButton.style.zIndex = '9999';
        clonedButton.style.transform = 'translateX(-50%) scale(4)';
        clonedButton.style.backgroundColor = color;
        clonedButton.style.borderColor = color;

        button.style.backgroundColor = color;
        button.style.borderColor = color;

        const screenWidth = window.innerWidth;
        const maxButtons = 4;
        const spaceBetweenButtons = 10;

        const maxOffset = (screenWidth / 100) * (100 - (maxButtons * 10) - (spaceBetweenButtons * (maxButtons - 1)));

        if (offsetX > maxOffset) {
            offsetX = 0;
        }

        document.body.appendChild(clonedButton);
        clonedButtons.push({ identifier: identifier, clonedButton: clonedButton, color: color });

        clonedButton.addEventListener('click', () => {
            console.log("Нажата клонированная кнопка с идентификатором:", identifier);
        });

        offsetX += 10;
    }

    // Функция для удаления клонированных кнопок
    function removeClonedButtons(identifier) {
        clonedButtons = clonedButtons.filter(({ identifier: storedIdentifier, clonedButton }) => {
            if (storedIdentifier === identifier) {
                if (clonedButton.parentElement) {
                    clonedButton.parentElement.removeChild(clonedButton);
                }
                return false;
            }
            return true;
        });

        seenIdentifiers.delete(identifier);

        if (clonedButtons.length === 0) {
            offsetX = 0;
        }
    }

    // Функция для проверки, перекрывает ли кнопка другие элементы
    function isOverlapping(button) {
        const buttonRect = button.getBoundingClientRect();
        const elements = document.elementsFromPoint(buttonRect.left + buttonRect.width / 2, buttonRect.top + buttonRect.height / 2);

        // Если помимо самой кнопки, есть другие элементы в этом месте
        return elements.length > 1;
    }

    // Создаем MutationObserver для отслеживания изменений на странице
    const observer = new MutationObserver((mutationsList) => {
        mutationsList.forEach(mutation => {
            if (mutation.type === 'childList') {
                mutation.addedNodes.forEach(node => {
                    if (node.nodeType === Node.ELEMENT_NODE) {
                        const button = node.querySelector('button.btn.btn-sm i.bi-trash-fill');
                        if (button) {
                            console.log("Найден новый элемент на странице.");
                            processButtons();
                        }
                    }
                });
            }

            if (mutation.type === 'childList') {
                mutation.removedNodes.forEach(node => {
                    if (node.nodeType === Node.ELEMENT_NODE) {
                        const button = node.querySelector('button.btn.btn-sm i.bi-trash-fill');
                        if (button) {
                            console.log("Удален элемент с кнопкой.");
                            const parentButton = button.closest('button');
                            const matches = parentButton.onclick.toString().match(/deleteTask\('([^']+)'/);
                            if (matches && matches[1]) {
                                const identifier = matches[1];
                                removeClonedButtons(identifier);
                            }
                        }
                    }
                });
            }
        });
    });

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

    processButtons();

    // Обработчик события для клавиши 1
    window.addEventListener('keydown', (event) => {
        if (event.key === '1' && clonedButtons.length > 0) {
            clonedButtons[0].clonedButton.click();
        }
    });

    // Обработчик события для клавиши 2
    window.addEventListener('keydown', (event) => {
        if (event.key === '2') {
            isTransparent = !isTransparent; // Переключаем состояние прозрачности
            isUntouchable = !isUntouchable; // Переключаем состояние осязаемости

            clonedButtons.forEach(({ clonedButton }) => {
                if (isTransparent) {
                    clonedButton.style.opacity = '0'; // Делает кнопку полностью прозрачной
                } else {
                    clonedButton.style.opacity = '1'; // Делает кнопку видимой
                }

                if (isUntouchable) {
                    clonedButton.style.pointerEvents = 'none'; // Делает кнопку не осязаемой
                } else {
                    clonedButton.style.pointerEvents = 'auto'; // Делает кнопку осязаемой
                }
            });
        }
    });

})();