Codeshare Auto Paste

Automatically paste clipboard content into codeshare.io/new on load.

Per 23-02-2026. Zie de nieuwste versie.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==UserScript==
// @name         Codeshare Auto Paste
// @namespace    fiverr.com/web_coder_nsd
// @version      1.0
// @description  Automatically paste clipboard content into codeshare.io/new on load.
// @author       NoushadBug
// @match        https://codeshare.io/*
// @icon         https://codeshare.io/favicon.ico
// @grant        none
// @license      MIT
// ==/UserScript==

(async function () {
    'use strict';

    function getCodeMirrorInstance() {
        // CodeMirror attaches itself to the wrapper div
        const cmEl = document.querySelector('.CodeMirror');
        return cmEl && cmEl.CodeMirror ? cmEl.CodeMirror : null;
    }

    function waitForCodeMirror(timeout = 10000) {
        return new Promise((resolve, reject) => {
            const start = Date.now();
            const interval = setInterval(() => {
                const cm = getCodeMirrorInstance();
                if (cm) {
                    clearInterval(interval);
                    resolve(cm);
                } else if (Date.now() - start > timeout) {
                    clearInterval(interval);
                    reject(new Error('CodeMirror instance not found within timeout.'));
                }
            }, 200);
        });
    }

    async function handleClipboard() {
        try {
            const permissionStatus = await navigator.permissions.query({ name: 'clipboard-read' });
            if (permissionStatus.state === 'denied') {
                alert('Clipboard read access is required. Please allow it in your browser settings.');
                return;
            }

            const clipboardText = await navigator.clipboard.readText();
            console.log('Clipboard content retrieved:', clipboardText);

            const cm = await waitForCodeMirror();

            // Use CodeMirror API to set value — this integrates properly with Firepad
            cm.setValue(clipboardText);

            // Move cursor to end
            cm.setCursor(cm.lineCount(), 0);

            console.log('Pasted clipboard content into CodeMirror/Firepad editor.');
        } catch (error) {
            console.error('Error handling clipboard or interacting with the editor:', error);
        }
    }

    window.addEventListener('load', async () => {
        // Give Firepad extra time to initialize after page load
        setTimeout(async () => {
            try {
                await handleClipboard();
            } catch (error) {
                console.error('An error occurred while attempting to process the clipboard:', error);
            }
        }, 2000);
    });
})();