Greasy Fork is available in English.

Greasyfork monaco editor

monaco editor greasyfork

// ==UserScript==
// @name               Greasyfork monaco editor
// @namespace          https://greasyfork.org/users/821661
// @match              https://greasyfork.org/*/scripts/*/code*
// @grant              none
// @require            https://unpkg.com/monaco-editor@latest/min/vs/loader.js
// @version            1.1
// @author             hdyzen
// @description        monaco editor greasyfork
// @license            GPL-3.0
// ==/UserScript==
'use strict';

async function init() {
    const code = await waitElement('ol.linenums');
    let value = [...code.children].map(item => item.textContent).join('\n');

    document.querySelector('.code-container').outerHTML = '<div id="container" style="height: 600px"></div>';

    require.config({ paths: { 'vs': 'https://unpkg.com/monaco-editor@latest/min/vs' } });
    window.MonacoEnvironment = { getWorkerUrl: () => proxy };

    let proxy = URL.createObjectURL(
        new Blob(
            [
                `
        self.MonacoEnvironment = {
            baseUrl: 'https://unpkg.com/monaco-editor@latest/min/'
        };
        importScripts('https://unpkg.com/monaco-editor@latest/min/vs/base/worker/workerMain.js');
    `,
            ],
            { type: 'text/javascript' },
        ),
    );

    require(['vs/editor/editor.main'], function () {
        let editor = monaco.editor.create(document.getElementById('container'), {
            value: value,
            language: 'javascript',
            // theme: theme,
            automaticLayout: true,
            alwaysConsumeMouseWheel: false,
            minimap: { enabled: false },
            unicodeHighlight: { invisibleCharacters: false },
        });
        monaco.editor.defineTheme('default', themeData);
        monaco.editor.setTheme('default');
    });
}

init();

async function waitElement(selector) {
    return new Promise(resolve => {
        const observer = new MutationObserver(() => {
            const target = document.querySelector(selector);
            if (target) {
                observer.disconnect();
                resolve(target);
            }
        });

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

const themeData = {
    'base': 'vs-dark',
    'inherit': true,
    'rules': [
        {
            'background': '282a36',
            'token': '',
        },
        {
            'foreground': '6272a4',
            'token': 'comment',
        },
        {
            'foreground': 'f1fa8c',
            'token': 'string',
        },
        {
            'foreground': 'bd93f9',
            'token': 'constant.numeric',
        },
        {
            'foreground': 'bd93f9',
            'token': 'constant.language',
        },
        {
            'foreground': 'bd93f9',
            'token': 'constant.character',
        },
        {
            'foreground': 'bd93f9',
            'token': 'constant.other',
        },
        {
            'foreground': 'ffb86c',
            'token': 'variable.other.readwrite.instance',
        },
        {
            'foreground': 'ff79c6',
            'token': 'constant.character.escaped',
        },
        {
            'foreground': 'ff79c6',
            'token': 'constant.character.escape',
        },
        {
            'foreground': 'ff79c6',
            'token': 'string source',
        },
        {
            'foreground': 'ff79c6',
            'token': 'string source.ruby',
        },
        {
            'foreground': 'ff79c6',
            'token': 'keyword',
        },
        {
            'foreground': 'ff79c6',
            'token': 'storage',
        },
        {
            'foreground': '8be9fd',
            'fontStyle': 'italic',
            'token': 'storage.type',
        },
        {
            'foreground': '50fa7b',
            'fontStyle': 'underline',
            'token': 'entity.name.class',
        },
        {
            'foreground': '50fa7b',
            'fontStyle': 'italic underline',
            'token': 'entity.other.inherited-class',
        },
        {
            'foreground': '50fa7b',
            'token': 'entity.name.function',
        },
        {
            'foreground': 'ffb86c',
            'fontStyle': 'italic',
            'token': 'variable.parameter',
        },
        {
            'foreground': 'ff79c6',
            'token': 'entity.name.tag',
        },
        {
            'foreground': '50fa7b',
            'token': 'entity.other.attribute-name',
        },
        {
            'foreground': '8be9fd',
            'token': 'support.function',
        },
        {
            'foreground': '6be5fd',
            'token': 'support.constant',
        },
        {
            'foreground': '66d9ef',
            'fontStyle': ' italic',
            'token': 'support.type',
        },
        {
            'foreground': '66d9ef',
            'fontStyle': ' italic',
            'token': 'support.class',
        },
        {
            'foreground': 'f8f8f0',
            'background': 'ff79c6',
            'token': 'invalid',
        },
        {
            'foreground': 'f8f8f0',
            'background': 'bd93f9',
            'token': 'invalid.deprecated',
        },
        {
            'foreground': 'cfcfc2',
            'token': 'meta.structure.dictionary.json string.quoted.double.json',
        },
        {
            'foreground': '6272a4',
            'token': 'meta.diff',
        },
        {
            'foreground': '6272a4',
            'token': 'meta.diff.header',
        },
        {
            'foreground': 'ff79c6',
            'token': 'markup.deleted',
        },
        {
            'foreground': '50fa7b',
            'token': 'markup.inserted',
        },
        {
            'foreground': 'e6db74',
            'token': 'markup.changed',
        },
        {
            'foreground': 'bd93f9',
            'token': 'constant.numeric.line-number.find-in-files - match',
        },
        {
            'foreground': 'e6db74',
            'token': 'entity.name.filename',
        },
        {
            'foreground': 'f83333',
            'token': 'message.error',
        },
        {
            'foreground': 'eeeeee',
            'token': 'punctuation.definition.string.begin.json - meta.structure.dictionary.value.json',
        },
        {
            'foreground': 'eeeeee',
            'token': 'punctuation.definition.string.end.json - meta.structure.dictionary.value.json',
        },
        {
            'foreground': '8be9fd',
            'token': 'meta.structure.dictionary.json string.quoted.double.json',
        },
        {
            'foreground': 'f1fa8c',
            'token': 'meta.structure.dictionary.value.json string.quoted.double.json',
        },
        {
            'foreground': '50fa7b',
            'token': 'meta meta meta meta meta meta meta.structure.dictionary.value string',
        },
        {
            'foreground': 'ffb86c',
            'token': 'meta meta meta meta meta meta.structure.dictionary.value string',
        },
        {
            'foreground': 'ff79c6',
            'token': 'meta meta meta meta meta.structure.dictionary.value string',
        },
        {
            'foreground': 'bd93f9',
            'token': 'meta meta meta meta.structure.dictionary.value string',
        },
        {
            'foreground': '50fa7b',
            'token': 'meta meta meta.structure.dictionary.value string',
        },
        {
            'foreground': 'ffb86c',
            'token': 'meta meta.structure.dictionary.value string',
        },
    ],
    'colors': {
        'editor.foreground': '#f8f8f2',
        'editor.background': '#282a36',
        'editor.selectionBackground': '#44475a',
        'editor.lineHighlightBackground': '#44475a',
        'editorCursor.foreground': '#f8f8f0',
        'editorWhitespace.foreground': '#3B3A32',
        'editorIndentGuide.activeBackground': '#9D550FB0',
        'editor.selectionHighlightBorder': '#222218',
    },
};