您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Сохранение картинок в всплывающем окне, для быстрой вставки.
// ==UserScript== // @name ImagePasteSaver // @namespace https://wi33y.ru/ // @version 1.1.0 // @description Сохранение картинок в всплывающем окне, для быстрой вставки. // @author Wi33y // @match https://zelenka.guru/* // @grant GM_addStyle // @license MIT // ==/UserScript== (function() { 'use strict'; // Стили для окна GM_addStyle(` #myPopup { display: none; position: fixed; top: 15%; left: 50%; transform: translateX(-50%); width: 470px; /* Фиксированная ширина */ background-color: #222; border: 1px solid #ccc; max-height: 450px; overflow: auto; padding: 20px; z-index: 9999; } #myPopup .close-button { position: absolute; top: 10px; right: 10px; color: white; font-size: 20px; cursor: pointer; } .image-container { display: flex; flex-wrap: wrap; align-items: center; margin-bottom: 10px; } .image-container img { max-width: 100px; max-height: 100px; margin-right: 10px; } .btn-container { display: flex; flex-direction: column; } .insert-button, .upload-button, .delete-button { margin-top: 10px; background-color: #007bff; color: white; border: none; padding: 7px 14px; cursor: pointer; } .insert-button:hover, .upload-button:hover, .delete-button:hover { background-color: #0056b3; } .open-popup-button { position: fixed; top: 20%; right: 20px; background-color: #007BFF; color: #fff; border: none; padding: 10px 20px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; border-radius: 5px; cursor: pointer; } .open-popup-button:hover { background-color: #0056b3; } `); // Создание попита const popup = document.createElement('div'); popup.id = 'myPopup'; // Кнопка "Закрыть" (крестик) const closeButton = document.createElement('span'); closeButton.innerHTML = '×'; closeButton.className = 'close-button'; closeButton.addEventListener('click', () => { popup.style.display = 'none'; }); // В попит крестик вставляем popup.appendChild(closeButton); // Сохраняем URL изображений let imageUrls = JSON.parse(localStorage.getItem('imageUrls')) || []; // Создаем контейер для изображения const imageContainer = document.createElement('div'); imageContainer.className = 'image-container'; // Кнопки "Вставить" и "Удалить" const insertButton = document.createElement('button'); insertButton.textContent = 'Вставить'; insertButton.className = 'insert-button'; insertButton.style.display = 'none'; insertButton.addEventListener('click', () => { const imageUrl = imgElement.src; if (imageUrl) { insertImageLink(imageUrl); } }); // Элементы в попите imageContainer.appendChild(insertButton); const btnContainer = document.createElement('div'); btnContainer.className = 'btn-container'; // url поле const urlInput = document.createElement('input'); urlInput.type = 'text'; urlInput.placeholder = 'URL изображения'; // Кнопка "Загрузить" const uploadButton = document.createElement('button'); uploadButton.textContent = 'Загрузить'; uploadButton.className = 'upload-button'; uploadButton.addEventListener('click', () => { const imageUrl = urlInput.value; if (imageUrl) { imageUrls.push(imageUrl); localStorage.setItem('imageUrls', JSON.stringify(imageUrls)); // Сохраняем в localStorage displayImages(); urlInput.value = ''; } }); btnContainer.appendChild(urlInput); btnContainer.appendChild(uploadButton); popup.appendChild(btnContainer); popup.appendChild(imageContainer); let isPopupOpen = false; // Флаг для отслеживания состояния окна // Создаем кнопку "Открыть/Закрыть окно" с классом "open-popup-button" const openPopupButton = document.createElement('button'); openPopupButton.textContent = 'Открыть'; openPopupButton.className = 'open-popup-button'; openPopupButton.addEventListener('click', () => { if (!isPopupOpen) { displayImages(); // Отображаем изображения при открытии pop-up окна popup.style.display = 'block'; openPopupButton.textContent = 'Закрыть'; } else { popup.style.display = 'none'; openPopupButton.textContent = 'Открыть'; } isPopupOpen = !isPopupOpen; }); document.body.appendChild(openPopupButton); // Отображаем изображения при открытии pop-up окна displayImages(); document.body.appendChild(popup); function displayImages() { const imageUrlList = document.createElement('ul'); for (let i = 0; i < imageUrls.length; i++) { const imageUrl = imageUrls[i]; const listItem = document.createElement('li'); listItem.innerHTML = ` <img src="${imageUrl}" alt="Изображение" class="hover-zoom-image" data-index="${i}"> <button class="insert-button" data-index="${i}">Вставить</button> <button class="delete-button" data-index="${i}">Удалить</button> `; imageUrlList.appendChild(listItem); } insertButton.style.display = imageUrls.length > 0 ? 'block' : 'none'; imageContainer.innerHTML = ''; imageContainer.appendChild(imageUrlList); const deleteButtons = imageUrlList.querySelectorAll('.delete-button'); deleteButtons.forEach((button) => { button.addEventListener('click', (e) => { const index = e.target.getAttribute('data-index'); if (index !== null) { imageUrls.splice(index, 1); localStorage.setItem('imageUrls', JSON.stringify(imageUrls)); // Обновляем localStorage displayImages(); } }); }); const insertButtons = imageUrlList.querySelectorAll('.insert-button'); insertButtons.forEach((button) => { button.addEventListener('click', (e) => { const index = e.target.getAttribute('data-index'); if (index !== null) { const imageUrl = imageUrls[index]; if (imageUrl) { insertImageLink(imageUrl); } } }); }); const hoverZoomImages = imageUrlList.querySelectorAll('.hover-zoom-image'); hoverZoomImages.forEach((image) => { image.addEventListener('mouseenter', () => { toggleImageSize(image, true); // Увеличить размер изображения }); image.addEventListener('mouseleave', () => { toggleImageSize(image, false); // Вернуть размер изображения к обычному }); }); } function toggleImageSize(image, zoomIn) { if (zoomIn) { image.style.maxWidth = '420px'; image.style.maxHeight = '180px'; } else { image.style.maxWidth = '100px'; // Вернуть обычный размер image.style.maxHeight = '100px'; } } // Функция для вставки изображения как ссылки в текстовое поле function insertImageLink(link) { const textField = document.querySelector('div.fr-element'); if (textField) { const formattedLink = `[img]${link}[/img]`; // Убираем пробелы перед и после ссылки textField.innerHTML += formattedLink; } } })();