LuaFork Injector

Best Web Editing Injector for tampermonkey Join dc For Updates

// ==UserScript==
// @name         LuaFork Injector
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Best Web Editing Injector for tampermonkey Join dc For Updates
// @author       absayno
// @license MIT
// @match        *://*/*
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_deleteValue
// @grant        GM_listValues
// ==/UserScript==

(function() {
    'use strict';

    // stored scripts do not touch buddy
    let scripts = GM_getValue('scripts', {});
    if (Object.keys(scripts).length === 0) {
        scripts = {
            'Default Script': {
                name: 'Default Script',
                code: '// Sample JavaScript\nconsole.log("Hello from Lua Studios!");\n',
                type: 'javascript'
            }
        };
        GM_setValue('scripts', scripts);
    }

    // draggable
    const menu = document.createElement('div');
    menu.style.position = 'fixed';
    menu.style.top = '10px';
    menu.style.right = '10px';
    menu.style.backgroundColor = '#1a1a1a';
    menu.style.color = '#fff';
    menu.style.padding = '10px';
    menu.style.border = '2px solid #ff4500';
    menu.style.borderRadius = '5px';
    menu.style.zIndex = '9999';
    menu.style.fontFamily = 'Arial, sans-serif';
    menu.style.boxShadow = '0 0 10px rgba(0,0,0,0.5)';
    menu.style.maxWidth = '300px';
    menu.style.cursor = 'move'; // Indicate dragability
    menu.style.userSelect = 'none'; // Prevent text selection during drag

    // Menu HTML structure Dont fiddle with this
    menu.innerHTML = `
        <h3 style="margin: 0 0 10px; font-size: 16px;">Luafork Injector</h3>
        <h3 style="margin: 0 0 5px; font-size: 11px;">Made By absayno</h3>
        <select id="scriptSelect" style="width: 100%; margin-bottom: 10px; padding: 5px;">
            ${Object.keys(scripts).map(name => `<option value="${name}">${name}</option>`).join('')}
        </select>
        <textarea id="codeInput" rows="5" style="width: 100%; background: #333; color: #fff; border: 1px solid #ff4500; margin-bottom: 10px;"></textarea>
        <div style="margin-bottom: 10px;">
            <label>Type: </label>
            <select id="scriptType" style="padding: 5px;">
                <option value="javascript">JavaScript</option>
                <option value="html">HTML</option>
            </select>
        </div>
        <div style="display: flex; flex-wrap: wrap; gap: 5px;">
            <button id="runBtn" style="padding: 5px; background: #ff4500; border: none; color: #fff; cursor: pointer;">Run</button>
            <button id="saveBtn" style="padding: 5px; background: #1e90ff; border: none; color: #fff; cursor: pointer;">Save</button>
            <button id="newBtn" style="padding: 5px; background: #32cd32; border: none; color: #fff; cursor: pointer;">New</button>
            <button id="renameBtn" style="padding: 5px; background: #ffa500; border: none; color: #fff; cursor: pointer;">Rename</button>
            <button id="deleteBtn" style="padding: 5px; background: #dc143c; border: none; color: #fff; cursor: pointer;">Delete</button>
            <button id="deleteBtn" style="padding: 5px; background: #dc247c; border: none; color: #fff; cursor: pointer;">.gg/cYy7KaRxwF</button>
        </div>
    `;

    document.body.appendChild(menu);

    // DOM elements do not touch this eather
    const scriptSelect = document.getElementById('scriptSelect');
    const codeInput = document.getElementById('codeInput');
    const scriptType = document.getElementById('scriptType');
    const runBtn = document.getElementById('runBtn');
    const saveBtn = document.getElementById('saveBtn');
    const newBtn = document.getElementById('newBtn');
    const renameBtn = document.getElementById('renameBtn');
    const deleteBtn = document.getElementById('deleteBtn');

    // drag function new
    let isDragging = false;
    let currentX = 0;
    let currentY = 0;
    let initialX, initialY;

    menu.addEventListener('mousedown', (e) => {
        // Only start dragging if the target is not an input or button
        if (e.target.tagName !== 'BUTTON' && e.target.tagName !== 'TEXTAREA' && e.target.tagName !== 'SELECT') {
            initialX = e.clientX - currentX;
            initialY = e.clientY - currentY;
            isDragging = true;
            menu.style.cursor = 'grabbing'; // Change cursor during drag
        }
    });

    document.addEventListener('mousemove', (e) => {
        if (isDragging) {
            e.preventDefault();
            currentX = e.clientX - initialX;
            currentY = e.clientY - initialY;

            //
            const menuRect = menu.getBoundingClientRect();
            const maxX = window.innerWidth - menuRect.width;
            const maxY = window.innerHeight - menuRect.height;

            currentX = Math.max(0, Math.min(currentX, maxX));
            currentY = Math.max(0, Math.min(currentY, maxY));

            menu.style.left = currentX + 'px';
            menu.style.top = currentY + 'px';
        }
    });

    document.addEventListener('mouseup', () => {
        isDragging = false;
        menu.style.cursor = 'move'; // Reset cursor
    });

    //
    function loadScript() {
        const selectedName = scriptSelect.value;
        codeInput.value = scripts[selectedName].code;
        scriptType.value = scripts[selectedName].type;
    }
    loadScript();
    scriptSelect.addEventListener('change', loadScript);

    // BtnRun
    runBtn.addEventListener('click', () => {
        const code = codeInput.value;
        const type = scriptType.value;

        if (type === 'javascript') {
            try {
                eval(code); // JavaXecute
                console.log('Script executed successfully');
            } catch (e) {
                alert('Error executing JavaScript: ' + e.message);
            }
        } else if (type === 'html') {
            const container = document.createElement('div');
            container.innerHTML = code;
            document.body.appendChild(container);
            console.log('HTML injected successfully');
        }
    });

    // SaveIt
    saveBtn.addEventListener('click', () => {
        const selectedName = scriptSelect.value;
        scripts[selectedName] = {
            name: selectedName,
            code: codeInput.value,
            type: scriptType.value
        };
        GM_setValue('scripts', scripts);
        alert('Script saved!');
    });

    // Create
    newBtn.addEventListener('click', () => {
        const newName = prompt('Enter new script name:');
        if (newName && !scripts[newName]) {
            scripts[newName] = {
                name: newName,
                code: '// New script\nconsole.log("New script ready!");',
                type: 'javascript'
            };
            GM_setValue('scripts', scripts);
            const option = document.createElement('option');
            option.value = newName;
            option.textContent = newName;
            scriptSelect.appendChild(option);
            scriptSelect.value = newName;
            loadScript();
            alert('New script created!');
        } else if (scripts[newName]) {
            alert('Script name already exists!');
        }
    });

    // RenameIt
    renameBtn.addEventListener('click', () => {
        const oldName = scriptSelect.value;
        const newName = prompt('Enter new name for script:', oldName);
        if (newName && newName !== oldName && !scripts[newName]) {
            scripts[newName] = scripts[oldName];
            scripts[newName].name = newName;
            delete scripts[oldName];
            GM_setValue('scripts', scripts);
            scriptSelect.innerHTML = Object.keys(scripts).map(name => `<option value="${name}">${name}</option>`).join('');
            scriptSelect.value = newName;
            loadScript();
            alert('Script renamed!');
        } else if (scripts[newName]) {
            alert('Name already exists!');
        }
    });

    // DeleteIt
    deleteBtn.addEventListener('click', () => {
        const selectedName = scriptSelect.value;
        if (confirm(`Delete script "${selectedName}"?`)) {
            delete scripts[selectedName];
            GM_setValue('scripts', scripts);
            scriptSelect.innerHTML = Object.keys(scripts).map(name => `<option value="${name}">${name}</option>`).join('');
            if (Object.keys(scripts).length > 0) {
                scriptSelect.value = Object.keys(scripts)[0];
                loadScript();
            } else {
                scripts['Default Script'] = {
                    name: 'Default Script',
                    code: '// Sample JavaScript\nconsole.log("Hello from Rebel Injector!");\n',
                    type: 'javascript'
                };
                GM_setValue('scripts', scripts);
                scriptSelect.innerHTML = '<option value="Default Script">Default Script</option>';
                loadScript();
            }
            alert('Script deleted!');
        }
    });
})();