// ==UserScript== // @name GGn PTPImg Enforcer // @namespace https://greasyfork.org/users/1395131 // @version 1.2 // @description Disable submit unless images use ptpimg.me (cover and screenshots). // @include https://gazellegames.net/upload.php* // @match https://gazellegames.net/torrents.php?action=editgroup* // @author SleepingGiant // @grant none // @downloadURL none // ==/UserScript== (function () { 'use strict'; let initialized = false; let imageInput, submitButton; let originalButtonText = ''; function isValidImageURL(url) { return url.includes('ptpimg.me'); } function checkAllURLsValid() { const mainURL = document.querySelector('input[name="image"]')?.value.trim(); if (!isValidImageURL(mainURL)) return false; const screenInputs = document.querySelectorAll('#image_block input[name="screens[]"]'); for (let input of screenInputs) { if (!isValidImageURL(input.value.trim())) { return false; } } return true; } function setButtonState() { const valid = checkAllURLsValid(); if (!submitButton) return; submitButton.disabled = !valid; submitButton.style.pointerEvents = valid ? 'auto' : 'none'; submitButton.style.opacity = valid ? '1' : '0.5'; submitButton.style.cursor = valid ? 'pointer' : 'not-allowed'; submitButton.value = valid ? originalButtonText : 'All images must be PTPImg'; } function attachLogic() { if (initialized) return; imageInput = document.querySelector('input[name="image"]'); // Find submit button for both new upload and edit pages submitButton = document.querySelector('#post') || document.querySelector('input[type="submit"][value="Submit"]'); if (!imageInput || !submitButton) return; originalButtonText = submitButton.value; // We rely on polling mainly (because these event listeners won't find non user based changes, e.g. using PTPImg button to auto-change it for you). But this is nice to be "instant" if user pastes it. imageInput.addEventListener('input', setButtonState); imageInput.addEventListener('change', setButtonState); // Add force-check button (optional, remove if not needed on edit page) const forceBtn = document.createElement('button'); forceBtn.innerText = 'Force Check All Image URLs'; forceBtn.type = 'button'; forceBtn.className = 'button'; forceBtn.style.marginLeft = '10px'; forceBtn.addEventListener('click', setButtonState); submitButton.parentNode.insertBefore(forceBtn, submitButton.nextSibling); initialized = true; setButtonState(); } setInterval(() => { if (!initialized) attachLogic(); else setButtonState(); }, 500); })();