Greasy Fork

GGn PTPImg Enforcer

Disable submit unless images use ptpimg.me (cover and screenshots).

目前为 2025-04-19 提交的版本。查看 最新版本

// ==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
// ==/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);
})();