NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==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'; // Делает кнопку осязаемой } }); } }); })();