DeepFloodbeta

改了一下图床上传插件

现在能在这个站用了

// ==UserScript==
// @name         NodeSeek 编辑器增强
// @namespace    https://www.nodeseek.com/
// @version      0.0.12
// @description  为 NodeSeek 编辑器增加图片上传功能
// @author       TomyJan
// @match        *://www.nodeseek.com/*
// @match        *://www.deepflood.com/*
// @icon         https://www.nodeseek.com/static/image/favicon/android-chrome-192x192.png
// @grant        GM_xmlhttpRequest
// @license      MPL-2.0 License
// @supportURL   https://www.nodeseek.com/post-74493-1
// @homepageURL  https://www.nodeseek.com/post-74493-1
// @downloadURL https://update.greasyfork.org/scripts/487553/NodeSeek%20%E7%BC%96%E8%BE%91%E5%99%A8%E5%A2%9E%E5%BC%BA.user.js
// @updateURL https://update.greasyfork.org/scripts/487553/NodeSeek%20%E7%BC%96%E8%BE%91%E5%99%A8%E5%A2%9E%E5%BC%BA.meta.js
// ==/UserScript==


(function () {
    'use strict';

    const imgHost = {
        url: "https://i.111666.best",
        token: "填api"
    };

    const submitByKey = true;

    window.addEventListener('load', initEditorEnhancer, false);

    function initEditorEnhancer() {
        document.addEventListener('paste', handlePasteEvt);

        const dropZone = document.getElementById('code-mirror-editor');
        dropZone.addEventListener('dragover', e => {
            e.preventDefault();
            e.stopPropagation();
            e.dataTransfer.dropEffect = 'copy';
        });
        dropZone.addEventListener('drop', e => {
            e.preventDefault();
            e.stopPropagation();
            let files = Array.from(e.dataTransfer.files).filter(f => f.type.startsWith('image/'));
            if (files.length) uploadImage(files);
            else log('未检测到图片文件', 'red');
        });

        // 图片按钮
        let checkExist = setInterval(() => {
            const oldBtn = document.querySelector('.toolbar-item.i-icon-pic[title="图片"]');
            if (oldBtn) {
                clearInterval(checkExist);
                const newBtn = oldBtn.cloneNode(true);
                oldBtn.parentNode.replaceChild(newBtn, oldBtn);
                newBtn.addEventListener('click', handleImgBtnClick);
            }
        }, 200);

        if (submitByKey) {
            document.addEventListener('keydown', e => {
                if (e.ctrlKey && e.key === 'Enter') {
                    document.querySelector('.submit.btn').click();
                }
            });
        }
    }

    function handlePasteEvt(event) {
        const items = (event.clipboardData || event.originalEvent.clipboardData).files;
        const images = Array.from(items).filter(f => f.type.startsWith('image/'));
        if (images.length) uploadImage(images);
        else log('粘贴内容中未包含图片', 'red');
    }

    function handleImgBtnClick() {
        const input = document.createElement('input');
        input.type = 'file';
        input.multiple = true;
        input.accept = 'image/*';
        input.onchange = e => {
            const files = Array.from(e.target.files).filter(f => f.type.startsWith('image/'));
            if (files.length) uploadImage(files);
        };
        input.click();
    }

    async function uploadImage(files) {
        for (let i = 0; i < files.length; i++) {
            log(`上传第 ${i + 1}/${files.length} 张...`);
            await uploadTo111666(files[i]);
        }
    }

    function uploadTo111666(file) {
        return new Promise((resolve, reject) => {
            const formData = new FormData();
            formData.append('image', file);
            const headers = imgHost.token ? { 'Auth-Token': imgHost.token } : {};

            GM_xmlhttpRequest({
                method: 'POST',
                url: `${imgHost.url}/image`,
                headers,
                data: formData,
                onload: rsp => {
                    if (rsp.status !== 200) {
                        log(`上传失败: ${rsp.status}`, 'red');
                        return reject();
                    }
                    let json;
                    try { json = JSON.parse(rsp.responseText); } catch { json = null; }
                    if (json && json.ok && json.src) {
                        const url = imgHost.url + json.src;
                        insertToEditor(`![](${url})`);
                        log('上传完成');
                        resolve();
                    } else {
                        log('上传接口返回异常', 'red');
                        reject();
                    }
                },
                onerror: () => { log('网络错误', 'red'); reject(); }
            });
        });
    }




    function insertToEditor(md) {
        const cmEl = document.querySelector('.CodeMirror');
        if (cmEl && cmEl.CodeMirror) {
            const cm = cmEl.CodeMirror;
            cm.replaceRange(`\n${md}\n`, cm.getCursor());
        }
    }

    function log(msg, color='') {
        if (!document.getElementById('editor-enhance-logs')) initLogDiv();
        const div = document.getElementById('editor-enhance-logs');
        div.innerHTML = `<div${color?` style="color:${color}"`:''}>  ${msg}</div>`;
        console.log(`[NodeSeek] ${msg}`);
    }

    function initLogDiv() {
        const logDiv = document.createElement('div'); logDiv.id='editor-enhance-logs';
        document.body.appendChild(logDiv);
        const toolbar = document.querySelector('.mde-toolbar');
        toolbar && toolbar.appendChild(logDiv);
    }
})();

  • 好用

  • 网络错误 xhj027

  • 怎么使用呢

  • .

  • 为啥酒神不直接集成了呀!

  • 支持下,可惜我的是TG图床,没法使用

  • 我用的这个,直接加上一行就行了。

    image

  • 好用爱用,感谢分享。