Torn Custom Plane Image

Sets a custom plane image on the Torn Travel page.

// ==UserScript==
// @name         Torn Custom Plane Image
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Sets a custom plane image on the Torn Travel page.
// @author       TR0LL [2561502]
// @match        https://www.torn.com/page.php?sid=travel
// @match        https://www.torn.com/preferences.php
// @grant        GM_setValue
// @grant        GM_getValue
// @license      Proprietary
// ==/UserScript==

(function() {
    'use strict';

    const defaultImage = "https://i.pinimg.com/originals/98/5e/ad/985ead90bd841958d2bb4b09ca60d123.gif";

    function replacePlaneImage() {
        const planeImage = document.querySelector('.planeImage___Kbn3b');
        if (!planeImage) return;

        const customImage = GM_getValue('permanentPlaneImage') || defaultImage;
        planeImage.src = customImage;

        // Center the image
        planeImage.style.position = 'absolute';
        planeImage.style.top = '50%';
        planeImage.style.left = '50%';
        planeImage.style.transform = 'translate(-50%, -50%)';
        planeImage.style.maxWidth = '778px';
        planeImage.style.maxHeight = '300px';
        planeImage.style.width = 'auto';
        planeImage.style.height = 'auto';
    }

    function addImageButton() {
        if (!window.location.href.startsWith("https://www.torn.com/preferences.php")) return;

        const imageButton = document.createElement('button');
        imageButton.textContent = 'Set Plane Image';
        imageButton.style.padding = '8px 12px';
        imageButton.style.margin = '5px';
        imageButton.style.cursor = 'pointer';
        imageButton.style.backgroundColor = '#3498db';
        imageButton.style.color = 'white';
        imageButton.style.border = 'none';
        imageButton.style.borderRadius = '3px';
        imageButton.style.fontSize = '14px';

        // Position the button on the right side of the screen
        imageButton.style.position = 'fixed';
        imageButton.style.top = '50%';
        imageButton.style.right = '20px'; // Adjust this value to change the distance from the right
        imageButton.style.transform = 'translateY(-50%)';
        imageButton.style.zIndex = '9999'; // Ensure it's above other elements

        imageButton.addEventListener('click', () => {
            const imageUrl = prompt("Please enter the image URL");
            if (imageUrl){
                GM_setValue('permanentPlaneImage', imageUrl);
                replacePlaneImage();
            }
        });

        document.body.appendChild(imageButton);
    }

    replacePlaneImage();
    addImageButton();

    const observer = new MutationObserver(mutations => {
        replacePlaneImage();
    });

    observer.observe(document.body, {
        childList: true,
        subtree: true
    });
})();