Greasy Fork

GGn PTPImg Enforcer

Disable submit unless the image URL contains ptpimg.me, with a force check button (in case auto-polling fails)

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

// ==UserScript==
// @name         GGn PTPImg Enforcer
// @namespace    https://greasyfork.org/users/1395131
// @version      1.0
// @description  Disable submit unless the image URL contains ptpimg.me, with a force check button (in case auto-polling fails)
// @match        https://gazellegames.net/upload.php
// @author       SleepingGiant
// @grant        none
// ==/UserScript==


(function () {
    'use strict';

    let initialized = false;
    let imageInput = null;
    let submitButton = null;
    let originalButtonText = '';

    function isValidImageURL(url) {
        return url.includes('ptpimg.me');
    }

    function setButtonState() {
        if (!submitButton || !imageInput) return;

        const valid = isValidImageURL(imageInput.value);

        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 : 'Image not PTPImg';

        // Prevent rogue clicks
        submitButton.onclick = function (e) {
            if (!isValidImageURL(imageInput.value)) {
                e.preventDefault();
                e.stopImmediatePropagation();
                alert('Image URL must contain ptpimg.me before uploading.');
                return false;
            }
        };
    }

    function attachLogic() {
        imageInput = document.querySelector('#image');
        submitButton = document.querySelector('#post');

        if (!imageInput || !submitButton) return false;

        if (initialized) return true;

        originalButtonText = submitButton.value;
        setButtonState();

        imageInput.addEventListener('input', setButtonState);
        imageInput.addEventListener('change', setButtonState);

        const inputObserver = new MutationObserver(setButtonState);
        inputObserver.observe(imageInput, { attributes: true, attributeFilter: ['value'] });

        const forceBtn = document.createElement('button');
        forceBtn.innerText = 'Force Check Image URL';
        forceBtn.type = 'button';
        forceBtn.style.marginLeft = '10px';
        forceBtn.classList.add('button');

        forceBtn.addEventListener('click', setButtonState);
        submitButton.parentNode.insertBefore(forceBtn, submitButton.nextSibling);

        initialized = true;
        return true;
    }

    setInterval(() => {
        if (!initialized) {
            attachLogic();
        }
        if (imageInput && submitButton) {
            setButtonState();
        }
    }, 250);
})();