您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Добавляет кнопки для копирования текста, позволяет создавать/удалять пользовательские кнопки и сохраняет их после перезагрузки.
// ==UserScript== // @name Buttons for quick copying of text. Zelenka.guru. // @namespace http://tampermonkey.net/ // @license https://zelenka.guru/rukia/ // @version 1.0 // @description Добавляет кнопки для копирования текста, позволяет создавать/удалять пользовательские кнопки и сохраняет их после перезагрузки. // @author Rukia // @match https://lolz.live/* // @match https://zelenka.guru/* // @match https://lolz.guru/* // @icon https://i.imgur.com/IOOaCrP.png // @grant GM_setClipboard // ==/UserScript== (function() { 'use strict'; let buttonData = JSON.parse(localStorage.getItem('customButtons')) || []; let buttonCount = buttonData.length; const maxButtonCount = 11; const maxButtonTextLength = 28; function createButton(buttonText, copyText, isNew = false) { let button = document.createElement("button"); button.textContent = buttonText; button.style.position = "fixed"; button.style.right = "20px"; button.style.width = "110px"; button.style.height = "40px"; button.style.backgroundColor = "#228e5d"; button.style.color = "#fff"; button.style.border = "none"; button.style.borderRadius = "5px"; button.style.cursor = "pointer"; button.style.zIndex = "1000"; button.style.top = `${calcButtonPosition()}px`; button.onclick = function() { GM_setClipboard(copyText); button.style.backgroundColor = "#303030"; setTimeout(function() { button.style.backgroundColor = "#228e5d"; }, 500); }; button.classList.add('custom-button'); document.body.appendChild(button); buttonCount++; updateButtonPositions(); if (isNew) { buttonData.push({text: buttonText, copyText: copyText}); localStorage.setItem('customButtons', JSON.stringify(buttonData)); } } // Создание кнопки + function createAddButton() { let addButton = document.createElement("button"); addButton.textContent = "+"; addButton.style.position = "fixed"; addButton.style.right = "85px"; addButton.style.width = "20px"; addButton.style.height = "20px"; addButton.style.backgroundColor = "#32CD32"; addButton.style.color = "#fff"; addButton.style.border = "none"; addButton.style.borderRadius = "5px"; addButton.style.cursor = "pointer"; addButton.style.zIndex = "1000"; addButton.style.top = "95%"; addButton.onclick = function() { if (buttonCount >= maxButtonCount) { alert('Нельзя создать больше 11 кнопок.'); return; } let buttonText = prompt("Введите текст для кнопки (макс. 28 символов):"); let copyText = prompt("Введите текст, который будет копироваться:"); if (buttonText && buttonText.length > maxButtonTextLength) { alert(`Текст кнопки слишком длинный! Максимум ${maxButtonTextLength} символов.`); return; } if (buttonText && copyText) { createButton(buttonText, copyText, true); } }; document.body.appendChild(addButton); } function createRemoveButton() { let removeButton = document.createElement("button"); removeButton.textContent = "-"; removeButton.style.position = "fixed"; removeButton.style.right = "110px"; removeButton.style.width = "20px"; removeButton.style.height = "20px"; removeButton.style.backgroundColor = "#FF6347"; removeButton.style.color = "#fff"; removeButton.style.border = "none"; removeButton.style.borderRadius = "5px"; removeButton.style.cursor = "pointer"; removeButton.style.zIndex = "1000"; removeButton.style.top = "95%"; removeButton.onclick = function() { if (buttonData.length === 0) { alert("Нет кнопок для удаления."); return; } let buttonNames = buttonData.map((btn, index) => `${index + 1}: ${btn.text}`).join("\n"); let choice = prompt(`Введите номер кнопки для удаления или напишите "all" для удаления всех кнопок:\n${buttonNames}`); if (choice && choice.toLowerCase() === "all") { if (confirm("Вы уверены, что хотите удалить все кнопки?")) { buttonData = []; localStorage.setItem('customButtons', JSON.stringify(buttonData)); reloadButtons(); alert("Все кнопки удалены."); } } else { let indexToRemove = parseInt(choice) - 1; if (indexToRemove >= 0 && indexToRemove < buttonData.length) { buttonData.splice(indexToRemove, 1); localStorage.setItem('customButtons', JSON.stringify(buttonData)); reloadButtons(); } else { alert('Неверный выбор!'); } } }; document.body.appendChild(removeButton); } function calcButtonPosition() { const screenHeight = window.innerHeight; const buttonSpacing = 60; const totalButtonHeight = buttonCount * buttonSpacing; return (screenHeight / 2) - (totalButtonHeight / 2) + (buttonCount * buttonSpacing); } function updateButtonPositions() { let buttons = document.querySelectorAll('.custom-button'); buttons.forEach((button, index) => { button.style.top = `${calcButtonPositionForIndex(index)}px`; }); } function calcButtonPositionForIndex(index) { const screenHeight = window.innerHeight; const buttonSpacing = 45; const totalButtonHeight = buttonCount * buttonSpacing; return (screenHeight / 2) - (totalButtonHeight / 2) + (index * buttonSpacing); } function reloadButtons() { document.querySelectorAll('.custom-button').forEach(btn => btn.remove()); buttonCount = 0; buttonData.forEach(btn => { createButton(btn.text, btn.copyText); }); } createAddButton(); createRemoveButton(); reloadButtons(); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址