您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Batch process PTPImg URLs with option to preserve existing screenshots (edit + upload pages)
// ==UserScript== // @name GazelleGames Batch Screenshot Processor // @namespace http://tampermonkey.net/ // @version 1.2 // @description Batch process PTPImg URLs with option to preserve existing screenshots (edit + upload pages) // @author stormlight // @match https://gazellegames.net/torrents.php?action=editgroup&groupid=* // @match https://gazellegames.net/upload.php // @grant none // @run-at document-end // ==/UserScript== (function() { 'use strict'; function createBatchProcessor() { const container = document.createElement('div'); container.style.margin = '10px 0'; const textarea = document.createElement('textarea'); textarea.id = 'gg-batch-urls'; textarea.rows = 8; textarea.style.cssText = 'width:90%; padding:5px; border:1px solid #ccc; font-family:inherit; font-size:13px;'; textarea.placeholder = 'Paste PTPImg URLs here, one per line'; const checkboxLabel = document.createElement('label'); checkboxLabel.style.fontSize = '13px'; checkboxLabel.style.display = 'block'; const checkbox = document.createElement('input'); checkbox.type = 'checkbox'; checkbox.id = 'gg-keep-existing'; checkboxLabel.appendChild(checkbox); checkboxLabel.append(' Keep existing screenshots'); const button = document.createElement('input'); button.type = 'button'; button.id = 'gg-process-btn'; button.value = 'Fill Screenshot Fields'; container.appendChild(textarea); container.appendChild(checkboxLabel); container.appendChild(button); return container; } function processURLs(e) { e.preventDefault(); const urls = document.getElementById('gg-batch-urls').value .split('\n') .map(u => u.trim()) .filter(u => u); if (!urls.length) return alert('Please enter at least one URL'); const keep = document.getElementById('gg-keep-existing').checked; let existingValues = []; if (keep) { existingValues = Array.from(document.querySelectorAll('#image_block input[name="screens[]"]')) .map(i => i.value.trim()) .filter(v => v); } const all = keep ? existingValues.concat(urls) : urls; const container = document.getElementById('image_block'); let inputs = Array.from(container.querySelectorAll('input[name="screens[]"]')); const totalFields = inputs.length; const targetFields = all.length; // Add missing fields if (targetFields > totalFields) { const toAdd = targetFields - totalFields; for (let i = 0; i < toAdd; i++) { if (typeof AddScreenField === 'function') { AddScreenField(true); } else { const span = document.createElement('span'); span.innerHTML = `\n <br><input type="text" name="screens[]" style="width:90%;"> \ <input type="button" value="PTPImg It" onclick="imageUpload(this.previousElementSibling.value,this.previousElementSibling)">`; container.appendChild(span); } } } // Remove extra empty fields if not keeping else if (targetFields < totalFields && !keep) { const toRemove = totalFields - targetFields; for (let i = 0; i < toRemove; i++) { if (typeof RemoveScreenField === 'function') { RemoveScreenField(); } else { inputs = Array.from(container.querySelectorAll('input[name="screens[]"]')); const last = inputs[inputs.length - 1]; if (last) { const parent = last.closest('span') || last.parentNode; parent.remove(); } } } } // Refresh inputs and populate inputs = Array.from(document.querySelectorAll('#image_block input[name="screens[]"]')); inputs.forEach((input, idx) => { input.value = all[idx] || ''; }); } function init() { const imageBlock = document.getElementById('image_block'); if (!imageBlock) return; const batchUI = createBatchProcessor(); batchUI.querySelector('#gg-process-btn').addEventListener('click', processURLs); if (location.pathname.endsWith('upload.php')) { const tr = imageBlock.closest('tr'); const newTr = document.createElement('tr'); const tdLabel = document.createElement('td'); tdLabel.className = 'label'; const tdUI = document.createElement('td'); tdUI.appendChild(batchUI); newTr.appendChild(tdLabel); newTr.appendChild(tdUI); tr.parentNode.insertBefore(newTr, tr.nextSibling); } else { const wrapper = document.createElement('div'); wrapper.style.display = 'flex'; wrapper.style.gap = '20px'; wrapper.style.marginTop = '5px'; const left = document.createElement('div'); left.style.flex = '1.2'; left.appendChild(imageBlock); const right = document.createElement('div'); right.style.flex = '1'; right.appendChild(batchUI); wrapper.appendChild(left); wrapper.appendChild(right); const hdr = [...document.querySelectorAll('h3')].find(h => /Screenshots/.test(h.textContent)); if (hdr) hdr.parentNode.insertBefore(wrapper, hdr.nextSibling); else imageBlock.parentNode.insertBefore(wrapper, imageBlock); } } setTimeout(init, 500); })();