Sinject

Upload code into sites >:)

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         Sinject
// @version      1.0
// @namespace https://ironswordx-dev.repl.co
// @license MIT
// @description  Upload code into sites >:)
// @author       ironswordX
// @match        *://*/*
// @icon         data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBVcGxvYWRlZCB0bzogU1ZHIFJlcG8sIHd3dy5zdmdyZXBvLmNvbSwgR2VuZXJhdG9yOiBTVkcgUmVwbyBNaXhlciBUb29scyAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIGZpbGw9IiMwMDAwMDAiIHZlcnNpb249IjEuMSIgaWQ9IkNhcGFfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgDQoJIHdpZHRoPSI4MDBweCIgaGVpZ2h0PSI4MDBweCIgdmlld0JveD0iMCAwIDkyLjE3OSA5Mi4xOCINCgkgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8cGF0aCBkPSJNNzMuNDM3LDM2LjU0di05LjE5MkM3My40MzcsMTIuMjY4LDYxLjE2OSwwLDQ2LjA5LDBTMTguNzQ0LDEyLjI2OCwxOC43NDQsMjcuMzQ4aDExLjM1NQ0KCQljMC04LjgxOCw3LjE3My0xNS45OTIsMTUuOTkxLTE1Ljk5MmM4LjgxNywwLDE1Ljk5MSw3LjE3NCwxNS45OTEsMTUuOTkydjkuMTkySDkuODg0djU1LjY0aDcyLjQxMVYzNi41NEg3My40Mzd6IE01MC42MDksNzEuMTE1DQoJCVY4My4zM2gtOS4wMzdWNzEuMTE1Yy0yLjEwMi0xLjQ0MS0zLjQ4Mi0zLjg1OC0zLjQ4Mi02LjZjMC00LjQxOCwzLjU4Mi04LDgtOHM4LDMuNTgyLDgsOA0KCQlDNTQuMDksNjcuMjU3LDUyLjcxLDY5LjY3NCw1MC42MDksNzEuMTE1eiIvPg0KPC9nPg0KPC9zdmc+
// @grant        GM_info
// ==/UserScript==

'use strict';
const Meta = GM_info.script
const disabled_urls = ['about:blank', 'about:blank#blocked']
const css = "body {\nbackground-color:#A9A9A9\n}\nh1 {\nfont-family: Verdana, Tahoma, sans-serif;\n}"
if (disabled_urls.includes(window.location.href)) return;
function openNewWin() {
    let win = window.open('', '', 'height=400,width=200');
    return win;
}
function createElm(doc, headOrBody = "body", type, args=[]) {
    let el = doc.createElement(type);
    if (args.length > 0) {
        for (let i = 0; i < args.length; i++) {
            let inf = args[i]
            el.setAttribute(inf.key, inf.value)
        }
    }
    if (headOrBody === "head") {
        doc.head.appendChild(el)
    } else if (headOrBody === "body") {
        doc.body.appendChild(el)
    }
    void 0;
}
function setInner(doc, id, type, string) {
    let element = doc.getElementById(id);
    if (type === 'text') {
        element.innerText = string;
    } else if (type === 'html') {
        element.innerHTML = string;
    } else {
        element.innerText = string;
    }
    void 0;
}
function createBreak(docu) {
    createElm(docu, "body", "br")
    createElm(docu, "body", "hr")
    createElm(docu, "body", "br")
}
function erudaLoaderFunc() {
    let script = document.createElement('script');
    script.src="https://cdn.jsdelivr.net/npm/eruda";
    document.body.append(script);
    script.onload = function () {
        eruda.init();
    }
    void 0;
}


let sinjectWinOn = false
document.addEventListener('keyup', function(event) {
    if (sinjectWinOn) return;
    if (event.key.toLowerCase() === 'alt') {
        let sinjectWinOn = true;
        const editor = openNewWin();
        const editDoc = editor.document;

        editDoc.writeln(`<head><title>${Meta.name}</title></head><body><h1>${Meta.name} v${Meta.version}</h1></body>`);
        createElm(editDoc, "head", 'style', [{key: 'id', value: 'cssLoader'}]);
        setInner(editDoc, 'cssLoader', 'text', css)
        createBreak(editDoc)

        createElm(editDoc, "body", 'textarea', [{key:'id',value:'textInput'}, {key: 'style', value:'resize:vertical;min-height:60px'}]);
        createElm(editDoc, "body", 'button', [{key: 'id', value:'submitButton'}, {key: 'style', value: 'data-inline=true'}]);
        createElm(editDoc, "body", 'button', [{key: 'id', value:'erudaBtn'}, {key: 'style', value: 'data-inline=true'}]);

        setInner(editDoc, 'submitButton', 'text', 'Inject!')
        editDoc.getElementById('submitButton').onclick = function() {
            let code = editDoc.getElementById('textInput').value;
            createElm(document, "body", 'script', [{key: 'id', value: 'scriptInjector'}]);
            document.getElementById('scriptInjector').innerText = code;
            sinjectWinOn = false;
            editor.window.close();
        }

        setInner(editDoc, 'erudaBtn', 'text', 'Eruda console');
        editDoc.getElementById('erudaBtn').onclick = function() {
            erudaLoaderFunc();
            sinjectWinOn = false;
            editor.window.close();
        };
    }
}, false)