Greasy Fork is available in English.

喵传链接

生成、转存秒传链接喵

// ==UserScript==
// @name         喵传链接
// @namespace    https://t.me/KyokuSai
// @version      0.1.3
// @description  生成、转存秒传链接喵
// @author       HanaCream
// @match        *://pan.baidu.com/disk/home*
// @match        *://pan.baidu.com/disk/main*
// @match        *://yun.baidu.com/disk/home*
// @match        *://yun.baidu.com/disk/main*
// @match        *://wangpan.baidu.com/disk/home*
// @match        *://wangpan.baidu.com/disk/main*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_deleteValue
// @grant        GM_setClipboard
// @grant        GM_xmlhttpRequest
// @grant        unsafeWindow
// @require      http://libs.baidu.com/jquery/2.0.0/jquery.min.js
// @require      https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js
// @connect      baidu.com
// @connect      baidupcs.com
// @connect      *
// ==/UserScript==

this.$ = this.jQuery = jQuery.noConflict(true);

(function () {
    'use strict';

    if (GM_getValue('savepath') === undefined) GM_setValue('savepath', '');
    if (GM_getValue('ua') === undefined) GM_setValue('ua', 'nekoupload');
    if (GM_getValue('debug') === undefined) GM_setValue('debug', false);
    if (GM_getValue('purify') === undefined) GM_setValue('purify', false);
    if (GM_getValue('drag') === undefined) GM_setValue('drag', true);
    if (GM_getValue('dlinkapi') === undefined) GM_setValue('dlinkapi', false);
    let $_savepath = GM_getValue('savepath');
    let $_ua = GM_getValue('ua');
    let $_debug = GM_getValue('debug');
    let $_purify = GM_getValue('purify');
    let $_drag = GM_getValue('drag');
    let $_dlinkapi = GM_getValue('dlinkapi');

    var styleElement = document.createElement('style');
    styleElement.innerHTML = `
.nekoupload-switch{position:relative;display:inline-block;width:64px;height:26px;transition:all .3s ease}.nekoupload-switch>div{position:absolute;top:0;right:0;bottom:0;left:0;cursor:pointer;border:1px solid #626262;border-radius:32px;background:0 0}.nekoupload-switch>div:before{position:absolute;bottom:2px;left:3px;width:20px;height:20px;content:"";transition:all .3s cubic-bezier(.55,-.36,.59,1.46);border-radius:50%;background-color:#9c9c9c}.checked.nekoupload-switch>div{border-color:#fa4276}.checked.nekoupload-switch>div:before{transform:translateX(36px);background-color:#fa4276}#nekoupload_dialog *{box-sizing:border-box}#nekoupload_dialog{position:fixed;top:0;left:0;right:0;bottom:0;width:100%;height:100%;display:none;z-index:10000}#nekoupload_dialog_filter{position:fixed;top:0;left:0;right:0;bottom:0;width:100%;height:100%;z-index:10001;display:block;transition:opacity .3s ease;background:rgba(0,0,0,.2);opacity:0}#nekoupload_dialog_container{display:flex;position:absolute;top:50%;left:50%;transform:translate(-50%,calc(-50% + 4rem));width:min(600px,98%);background:#fff;align-items:center;border-radius:8px;overflow:hidden;flex-direction:column;z-index:10002;transition:all .3s ease;box-shadow:-1px 0 4px rgba(0,0,0,.04),0 1px 7px rgba(0,0,0,.07),3px 1px 12px rgba(0,0,0,.09)}.nekoupload-dialog-opened #nekoupload_dialog_filter{opacity:1}.nekoupload-dialog-opened #nekoupload_dialog_container{transform:translate(-50%,-50%)}body.nekoupload-dialog-opened{overflow:hidden}#nekoupload_dialog_title{font-size:1.2rem;font-weight:700;line-height:1;padding:.8rem;width:100%;text-align:center;background:#ffcad9}#nekoupload_dialog_content{font-size:1rem;font-weight:600;line-height:1.4;padding:1rem;color:#333;max-height:60vh;overflow:auto;width:100%;word-wrap:break-word}#nekoupload_dialog_btn{padding:.4rem}#nekoupload_dialog_btn button{background:#ff8ad2;padding:.4rem 1.2rem;border-radius:16px;margin:0 1rem;box-shadow:-1px 0 4px rgba(0,0,0,.04),0 1px 7px rgba(0,0,0,.07),3px 1px 12px rgba(0,0,0,.09);transition:all .3s ease;border:0;font-size:1.2rem;line-height:1;font-weight:700;color:#fff}#nekoupload_dialog_btn button:hover{background:#ff69f2;border:0}#nekoupload_btn{position:fixed;bottom:1.6rem;right:2rem;height:-moz-max-content;height:max-content;z-index:9999;transition:all .3s ease;display:flex;flex-direction:column}#nekoupload_btn button{width:2.8rem;height:2.8rem;background:#fff;border-radius:8px;color:#ff4276;font-size:1.2rem;font-weight:700;box-shadow:-1px 0 4px rgba(0,0,0,.04),0 1px 7px rgba(0,0,0,.07),3px 1px 12px rgba(0,0,0,.09);transition:all .3s ease;border:0;margin:4px}#nekoupload_btn button:hover{color:#fff;background:rgba(255,66,118,.64);border:0}#nekoupload_btn_settings svg{width:100%;height:100%;padding:.5rem}#nekoupload_btn button:hover .nekoupload-setting{fill:#fff}#nekoupload_nekocode{width:100%;min-height:5rem;text-align:left;margin:1rem 0;padding:.4rem .6rem;border-radius:8px;box-shadow:-1px 0 4px rgba(0,0,0,.04),0 1px 7px rgba(0,0,0,.07),3px 1px 12px rgba(0,0,0,.09);border:0;outline:0}.nekoupload-input{width:100%;min-height:1rem;text-align:left;margin:0 0 1rem;padding:.4rem .6rem;border-radius:8px;box-shadow:-1px 0 4px rgba(0,0,0,.04),0 1px 7px rgba(0,0,0,.07),3px 1px 12px rgba(0,0,0,.09);border:0;outline:0}#nekoupload_nekocode::-moz-placeholder,.nekoupload-input::-moz-placeholder{color:#999;font-size:1rem;font-weight:400}#nekoupload_nekocode::placeholder,.nekoupload-input::placeholder{color:#999;font-size:1rem;font-weight:400}#nekoupload_nekocode_savepath{margin:0}#nekoupload_filedrop{position:fixed;width:100%;height:50%;top:50%;left:0;z-index:1000001;pointer-events:none}#nekoupload_filedrop>div{position:fixed;top:0;left:0;width:100%;height:100%;z-index:10000;pointer-events:inherit;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:rgba(0,0,0,.05);transition:all .3s ease;color:#fff;text-shadow:-1px 0 4px rgba(0,0,0,.04),0 1px 7px rgba(0,0,0,.07),3px 1px 12px rgba(0,0,0,.09);letter-spacing:4px;text-indent:4px;font-size:2.4rem;font-weight:700;text-align:center;display:flex;flex-direction:column;justify-content:center;opacity:0}#nekoupload_filedrop.nekoupload-filedroping>div{opacity:1}
`;
    document.head.appendChild(styleElement);

    let dialogPara = {
        duration: 300,
        opened: false,
    };
    function dialog_show($title = '', $content = '', $args = {}) {
        return new Promise((resolve) => {
            $('#nekoupload_dialog_filter').off('click');
            if ($args === {} || $args.force === null || $args.force === undefined || $args.force !== true) {
                $('#nekoupload_dialog_filter').on('click', function () {
                    dialog_reset();
                    resolve(null);
                })
            }

            function dialog_open() {
                $('#nekoupload_dialog').fadeIn(dialogPara.duration);
                $('#nekoupload_dialog').addClass('nekoupload-dialog-opened');
                $('body').addClass('nekoupload-dialog-opened');
                $('#nekoupload_dialog_title').html($title);
                $('#nekoupload_dialog_content').html($content);
                if ($args !== {}) {
                    if ($args.confirmText !== null && $args.confirmText !== undefined && $args.confirmText !== '') {
                        $('#nekoupload_dialog_btn_confirm').html($args.confirmText).show().on('click', function () {
                            resolve(true);
                        });
                    } else {
                        $('#nekoupload_dialog_btn_confirm').html($args.confirmText).hide();
                    }
                    if ($args.cancelText !== null && $args.cancelText !== undefined && $args.cancelText !== '') {
                        $('#nekoupload_dialog_btn_cancel').html($args.cancelText).show().on('click', function () {
                            resolve(false);
                        });
                    } else {
                        $('#nekoupload_dialog_btn_cancel').html($args.confirmText).hide();
                    }
                }
            }

            function dialog_reset() {
                $('#nekoupload_dialog').fadeOut(dialogPara.duration);
                $('#nekoupload_dialog').removeClass('nekoupload-dialog-opened');
                $('body').removeClass('nekoupload-dialog-opened');
                setTimeout(() => {
                    $('#nekoupload_dialog_title').html('');
                    $('#nekoupload_dialog_content').html('');
                    $('#nekoupload_dialog_btn_confirm').html('').hide().off('click');
                    $('#nekoupload_dialog_btn_cancel').html('').hide().off('click');
                }, dialogPara.duration);
            }

            let dialog_is_opened = $('#nekoupload_dialog').hasClass('nekoupload-dialog-opened');
            if (dialog_is_opened && $title !== '') {
                dialog_reset();
                setTimeout(() => {
                    dialog_open();
                }, dialogPara.duration);
            } else {
                if (dialog_is_opened || $title === '') {
                    dialog_reset();
                } else {
                    dialog_open();
                }
            }
        });
    }
    function dialog_update($title = '', $content = '') {
        if ($('#nekoupload_dialog').hasClass('nekoupload-dialog-opened')) {
            if ($title !== '') $('#nekoupload_dialog_title').html($title);
            if ($content !== '') $('#nekoupload_dialog_content').html($content);
        }
    }


    function decryptMd5(md5) {
        if (!((parseInt(md5[9]) >= 0 && parseInt(md5[9]) <= 9) ||
            (md5[9] >= "a" && md5[9] <= "f")))
            return decrypt(md5);
        else
            return md5;
        function decrypt(encryptMd5) {
            var key = (encryptMd5[9].charCodeAt(0) - "g".charCodeAt(0)).toString(16);
            var key2 = encryptMd5.substr(0, 9) + key + encryptMd5.substr(10);
            var key3 = "";
            for (var a = 0; a < key2.length; a++)
                key3 += (parseInt(key2[a], 16) ^ (15 & a)).toString(16);
            var md5 = key3.substr(8, 8) +
                key3.substr(0, 8) +
                key3.substr(24, 8) +
                key3.substr(16, 8);
            return md5;
        }
    }
    function getSelectedFileList() {
        if (location.href.includes('baidu.com/disk/main')) {
            return document.querySelector(".nd-main-list, .nd-new-main-list").__vue__.selectedList;
        } else {
            return unsafeWindow.require("system-core:context/context.js").instanceForSystem.list.getSelected();
        }
    }
    function getBdstoken() {
        if (location.href.includes('baidu.com/disk/main')) {
            return document.querySelector(".nd-main-list, .nd-new-main-list").__vue__.yunData.bdstoken;
        } else {
            return unsafeWindow.locals.get("bdstoken");
        }
    }
    function refreshList() {
        if (location.href.includes('baidu.com/disk/main')) {
            return document.querySelector(".nd-main-list, .nd-new-main-list").__vue__.reloadList();
        } else {
            return unsafeWindow.require("system-core:system/baseService/message/message.js").trigger("system-refresh");
        }
    }
    function convertData(data) {
        var query = "";
        for (var key in data)
            query += "&" + key + "=" + encodeURIComponent(data[key]);
        return query;
    }
    var ajax_assign = (undefined && undefined.__assign) || function () {
        ajax_assign = Object.assign || function (t) {
            for (var s, i = 1, n = arguments.length; i < n; i++) {
                s = arguments[i];
                for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
                    t[p] = s[p];
            }
            return t;
        };
        return ajax_assign.apply(this, arguments);
    };

    function ajax(config) {
        return new Promise(function (resolve, reject) {
            GM_xmlhttpRequest(ajax_assign(ajax_assign({
                headers: {
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36",
                }
            }, config), {
                onload: function (res) {
                    resolve(res);
                }, onerror: function () {
                    reject();
                }
            }))
        });
    }

    function get_slice_md5(file, dlink) {
        return new Promise(async function (resolve, reject) {
            var data = await ajax({
                url: dlink,
                method: "GET",
                responseType: "arraybuffer",
                headers: {
                    "Range": "bytes=0-" + (file.size < 262144 ? 1 : 262143),
                    "User-Agent": $_ua,
                },
            });
            if (data.status !== 206) {
                if ($_debug) console.dir(data);
                resolve([]);
            }
            var _md5 = data.responseHeaders.match(/content-md5:[ ]([\da-f]{32})/i)[1];
            var _slice_md5 = _md5;
            if (!(file.size < 262144)) {
                _slice_md5 = CryptoJS.MD5(CryptoJS.lib.WordArray.create(data.response)).toString(CryptoJS.enc.Hex).toUpperCase();
            }
            resolve([_md5, _slice_md5]);
        });
    }
    function download_single(panfiles, i, dlink) {
        return new Promise(async function (resolve, reject) {
            var data = await ajax({
                url: dlink,
                method: "GET",
                headers: {
                    "Range": "bytes=0-1",
                    "User-Agent": $_ua,
                },
            });
            if (data.status !== 206) {
                if ($_debug) console.dir(data);
                resolve(false);
            }
            dlink = data.finalUrl;
            if ($_debug) console.dir(dlink);
            var _command = await dialog_show('\u89E3\u6790\u6210\u529F', `
            \u6587\u4EF6\u540D\u79F0\uFF1A${panfiles[i].server_filename}<br>
            \u4E0B\u8F7DUA: ${$_ua}<br>
            \u6587\u4EF6\u76F4\u94FE\uFF1A${dlink}<br>
            <br>
            \u8FDB\u5EA6\uFF1A${i} / ${panfiles.length}<br>
            `, {
                confirmText: '\u590D\u5236\u76F4\u94FE',
                cancelText: '\u76F4\u63A5\u4E0B\u8F7D',
            });
            if (_command === true) {
                GM_setClipboard(dlink);
            } else if (_command === false) {
                dialog_show('\u4E0B\u8F7D\u4E2D\u2026', `
                \u6587\u4EF6\u540D\u79F0\uFF1A${panfiles[i].server_filename}<br>
                \u4E0B\u8F7D\u8FDB\u5EA6\uFF1A0%<br>
                <br>
                \u8FDB\u5EA6\uFF1A${i} / ${panfiles.length}<br>
                `, {
                    force: true,
                });
                data = await ajax({
                    url: dlink,
                    method: "GET",
                    responseType: "arraybuffer",
                    headers: {
                        "Range": "bytes=0-" + (panfiles[i].size - 1),
                        "User-Agent": $_ua,
                    },
                    onprogress: function (event) {
                        try {
                            if (!event) return;
                            var _percent = ((event.loaded / event.total) * 100).toFixed() + "%";
                            if ($_debug) console.dir(_percent);
                            dialog_update('', `
                            \u6587\u4EF6\u540D\u79F0\uFF1A${panfiles[i].server_filename}<br>
                            \u4E0B\u8F7D\u8FDB\u5EA6\uFF1A${_percent}<br>
                            <br>
                            \u8FDB\u5EA6\uFF1A${i} / ${panfiles.length}<br>
                            `);
                        } catch (_) { }
                    },
                });
                if (data.response.byteLength !== panfiles[i].size) {
                    if ($_debug) console.dir(data);
                    // resolve(false);
                }
                var url = URL.createObjectURL(new Blob([data.response]));
                var link = document.createElement('a');
                link.href = url;
                link.download = panfiles[i].server_filename;
                link.click();
                URL.revokeObjectURL(url);
                resolve(true);
            }
        });
    }


    function sleep(time) {
        return new Promise(function (resolve) {
            setTimeout(resolve, time);
        });
    }
    function get_md5s(file) {
        if ($_debug) console.dir(file);
        return new Promise(function (resolve, reject) {
            var reader = new FileReader();
            reader.onloadend = function (e) {
                var md5 = CryptoJS.MD5(CryptoJS.enc.Latin1.parse(e.target.result)).toString(CryptoJS.enc.Hex).toUpperCase();
                var slice_md5 = md5;
                if (file.size > 262144) {
                    slice_md5 = CryptoJS.MD5(CryptoJS.enc.Latin1.parse(e.target.result.slice(0, 262144))).toString(CryptoJS.enc.Hex).toUpperCase();
                }
                if ($_debug) console.dir(md5);
                if ($_debug) console.dir(slice_md5);
                resolve(md5 + '#' + slice_md5);
            };
            reader.readAsBinaryString(file);
        });
    }
    async function get_nekoupload_offline($files) {
        if ($_debug) console.dir($files);
        var _filearray = Array.from($files).filter(file => !(file.size > 21474836480));
        var command = await dialog_show('\u751F\u6210\u79BB\u7EBF\u79D2\u4F20', `
        \u203B\u6B64\u529F\u80FD\u4E3A\u79BB\u7EBF\u529F\u80FD\uFF0C\u4E0D\u7ECF\u8FC7\u767E\u5EA6\u7F51\u76D8\u3002<br>
        \u203B\u751F\u6210\u7684\u79D2\u4F20\u4EC5\u5728\u4E91\u7AEF\u5DF2\u6709\u8BE5\u6587\u4EF6\u65F6\u53EF\u4EE5\u8F6C\u5B58\u3002<br>
        \u7531\u4E8E\u79D2\u4F20\u4EC5\u652F\u6301\u4E0D\u8D85\u8FC720G\u7684\u6587\u4EF6\uFF0C\u6545\u6B64\u5904\u4E5F\u4F1A\u6821\u9A8C\u6587\u4EF6\u5927\u5C0F\u3002<br>
        \u8BF7\u52A1\u5FC5\u7406\u89E3\u6B64\u9879\u64CD\u4F5C\u7684\u610F\u4E49\u3002<br>
        <br>
        \u4E0D\u652F\u6301\u6587\u4EF6\u5217\u8868\uFF1A<br>
        ${Array.from($files).filter(file => file.size > 21474836480).map(file => file.name).join('<br>')}
        <br>
        \u6240\u9009\u6587\u4EF6\u5217\u8868\uFF1A<br>
        ${_filearray.map(file => file.name).join('<br>')}
        `, {
            confirmText: '\u751F\u6210',
        });
        if (command === true) {
            dialog_show('\u8BF7\u7B49\u5F85', `
            \u79BB\u7EBF\u79D2\u4F20\u751F\u6210\u4E2D\u3002<br>
            <br>
            \u8FDB\u5EA6\uFF1A0 / ${_filearray.length}
            `, {
                force: true,
            });
            await sleep(500);
            var res = [];
            for (var i = 0; i < $files.length; i++) {
                var file = $files[i];
                if ($_debug) console.dir(file.name);
                var md5s = await get_md5s(file);
                res.push(md5s + '#' + file.size + '#' + file.name);
                if ($_debug) console.dir(res[i]);
                dialog_update('', `
                \u79BB\u7EBF\u79D2\u4F20\u751F\u6210\u4E2D\u3002<br>
                <br>
                \u8FDB\u5EA6\uFF1A${i + 1} / ${_filearray.length}
                `);
            }
            var _command = await dialog_show('\u79BB\u7EBF\u79D2\u4F20\u751F\u6210\u5B8C\u6210', `
            \u6587\u4EF6\u603B\u6570\uFF1A${_filearray.length}<br>
            <br>
            \u79D2\u4F20\u94FE\u63A5\uFF1A<br>
            ${res.join("<br>")}
            `, {
                confirmText: '\u590D\u5236\u79D2\u4F20\u94FE\u63A5',
                // cancelText: '复制跳转链接',
            });
            if (_command === true) {
                GM_setClipboard(res.join("\n"));
                dialog_show();
            }
        }
    }

    function nekoupload_init() {

        if (!$('#nekoupload_dialog').length) {
            $('body').append(`
                <div id="nekoupload_dialog">
                    <div id="nekoupload_dialog_filter">
                    </div>
                    <div id="nekoupload_dialog_container">
                        <div id="nekoupload_dialog_title">
                        </div>
                        <div id="nekoupload_dialog_content">
                        </div>
                        <div id="nekoupload_dialog_btn">
                            <button id="nekoupload_dialog_btn_cancel">
                            </button>
                            <button id="nekoupload_dialog_btn_confirm">
                            </button>
                        </div>
                    </div>
                </div>
            `);
        }

        var version = '0.1.3';
        if (!GM_getValue('version_check') || GM_getValue('version_check') !== version) {
            dialog_show('\u55B5\u4F20\u94FE\u63A5', `
            \u811A\u672C\u4EC5\u4F9B\u4EA4\u6D41\u5B66\u4E60\u4F7F\u7528\u3002<br>
            \u90E8\u5206\u529F\u80FD\u53C2\u8003 mengzonefire \u5236\u4F5C\u7684\u811A\u672C\u3002<br>
            \u203B\u6309\u94AE\u5728\u53F3\u4E0B\u89D2\uFF01<br>
            \u203B\u8BF7\u5C3D\u91CF\u5728pan.baidu.com\u8FD9\u4E2A\u57DF\u540D\uFF0C\u5E76\u4E14\u4F7F\u7528\u65B0\u7248\u754C\u9762\u3002<br>
            <br>
            \u5173\u4E8E\u6B64\u811A\u672C\uFF1A<br>
            \u7531\u4E0D\u77E5\u540D\u7F51\u53CB\u5236\u4F5C\uFF0C\u56E0\u4E3A\u6CA1\u5199\u8FC7\u6CB9\u7334\u811A\u672C\u6240\u4EE5\u975E\u5E38\u4E0D\u5B8C\u5584\u3002<br>
            \u6216\u8BB8\u4F1A\u968F\u7740\u767E\u5EA6\u7F51\u76D8\u63A5\u53E3\u66F4\u65B0\u800C\u5931\u6548\uFF0C\u4F46\u662F\u811A\u672C\u4E0D\u4F1A\u81EA\u52A8\u66F4\u65B0\u3002<br>
            <br>
            \u811A\u672C\u4F7F\u7528\u8BF4\u660E\uFF1A<br>
            \u203B\u8F6C\u5B58\u53EA\u652F\u6301\u6807\u51C6\u957F\u94FE\u63A5\uFF01<br>
            \u203B\u8F6C\u5B58\u53EA\u652F\u6301\u6807\u51C6\u957F\u94FE\u63A5\uFF01<br>
            \u203B\u8F6C\u5B58\u53EA\u652F\u6301\u6807\u51C6\u957F\u94FE\u63A5\uFF01<br>
            \u203B\u9ED8\u8BA4\u63A5\u53E3\u751F\u6210\u79D2\u4F20\u4F1A\u4E3A\u6BCF\u4E2A\u6587\u4EF6\u521B\u5EFA\u4E00\u6B211\u5929\u7684\u5206\u4EAB\u94FE\u63A5\uFF01<br>
            <br>
            \u66F4\u65B0\u65E5\u5FD7\uFF1A<br>
            0.1.2\uFF1A\u4FEE\u590D\u4E2D\u6587\u4E71\u7801\uFF0C\u6DFB\u52A0\u4E86\u914D\u7F6E\u8BBE\u7F6E\uFF0C\u6DFB\u52A0\u83B7\u53D6\u76F4\u94FE\u529F\u80FD\uFF0C\u4FEE\u590D\u4E00\u4E9B\u9519\u8BEF\u3002<br>
            0.1.3\uFF1A\u589E\u52A0\u4E86\u79BB\u7EBF\u79D2\u4F20\u529F\u80FD\uFF0C\u5141\u8BB8\u66F4\u6362\u4E0D\u9700\u8981\u521B\u5EFA\u5206\u4EAB\u7684\u63A5\u53E3\uFF0C\u4FEE\u590D\u4E86\u5DF2\u77E5\u7684\u51E0\u4E2A\u751F\u6210\u79D2\u4F20\u548C\u8F6C\u5B58\u9519\u8BEF\uFF0C\u589E\u52A0\u4E86\u4E00\u4E9B\u989D\u5916\u7684\u914D\u7F6E\u548C\u529F\u80FD\u3002
            `);
            GM_setValue('version_check', version);
        }

        $(document).on('click', '.nekoupload-switch', function () {
            $(this).toggleClass('checked');
        });

        if ($_purify) {

            var styleElement = document.createElement('style');
            styleElement.innerHTML = `
.nd-chat-ai-btn{display:none!important}.wp-s-header-user__create-team-title{display:none!important}.u-button u-svip-button{display:none!important}.u-svip-button--mini{display:none!important}.web-header-ad-item{display:none!important}.wp-s-aside-nav__main-bottom{display:none!important}
            `;
            document.head.appendChild(styleElement);
            // $('.wp-s-aside-nav__sub').hide();
        }

        if (!$('#nekoupload_btn').length) {
            $('body').append(`
                <div id="nekoupload_btn">
                    <button id="nekoupload_btn_settings">
                        <svg t="1685720104649" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5535" width="200" height="200"><path class="nekoupload-setting" d="M512.3 709.1c-108.7 0-197.2-88.4-197.2-197.2s88.4-197.2 197.2-197.2S709.4 403.3 709.4 512c0 44.8-15.4 88.6-43.4 123.4L638.1 613c23.2-28.9 35.5-63.8 35.5-101 0-89-72.4-161.3-161.3-161.3S351 423 351 512s72.4 161.3 161.3 161.3c25.3 0 49.5-5.7 71.9-16.9l16 32.1c-27.4 13.7-57 20.6-87.9 20.6z" fill="#FF7878" p-id="5536"></path><path class="nekoupload-setting" d="M347.1 924c-11.1 0-22.3-2.9-32.2-8.6l-52.4-30.2c-19.8-11.4-31.8-32.5-31.3-55l1.6-83.9c0.3-16.6-3.9-33-12.3-47.6l-13.1-22.6c-8.3-14.3-20.4-26.3-34.9-34.7l-76.9-44.3c-19.3-11.1-31.4-31.7-31.4-53.7l-0.1-62.1c0-22.6 12.4-43.5 32.6-54.5l74.2-40.6c15.5-8.5 28.2-20.9 36.8-35.9l12.3-21.4c8.3-14.5 12.6-30.9 12.2-47.5l-1.9-87.9c-0.5-22.5 11.5-43.6 31.2-55l51.7-30c20.1-11.6 44.9-11.6 65 0.2l74.3 43.6c15.1 8.9 32.4 13.5 50 13.5h22c18.3 0 36.1-5 51.5-14.5l68.8-42.1c20.2-12.4 45.4-12.7 65.9-0.9l52.1 30.1c19 11 31.1 31.3 31.3 52.9l1.2 90.7c0.2 15.6 4.5 31 12.3 44.5l13.8 23.9c8.4 14.5 20.7 26.7 35.5 35.1l71.4 40.4c19.6 11.1 31.8 31.8 31.8 54l0.1 63c0 21.6-11.6 42-30.3 53.2L856 640.6c-13.9 8.4-25.5 20.1-33.4 34l-14.5 25.2c-7.8 13.6-12 29-12.2 44.6l-1 86.8c-0.2 21.7-12.2 42-31.2 53L711 914.8c-19.9 11.5-44.6 11.5-64.5 0.1l-70-40.4c-14.9-8.6-32-13.2-49.4-13.2H502.2c-16.9 0-33.5 4.3-48.1 12.5l-75.5 42.1c-9.8 5.4-20.6 8.1-31.5 8.1z m-1.4-788.3c-5 0-9.9 1.3-14.3 3.9l-51.7 30c-8.5 4.9-13.6 13.8-13.4 23.2l1.9 87.9c0.5 23.1-5.4 46-17 66.2l-12.3 21.4c-11.9 20.8-29.5 37.9-50.7 49.5L114 458.4c-8.6 4.7-14 13.6-14 23.1l0.1 62.1c0 9.2 5.1 17.9 13.4 22.7l76.9 44.3c20 11.5 36.6 28.1 48 47.8l13.1 22.6c11.7 20.2 17.6 43.1 17.1 66.2L267 831c-0.2 9.5 5 18.3 13.4 23.2l52.4 30.2c8.7 5 19.5 5.1 28.2 0.2l75.5-42.1c19.9-11.1 42.6-17 65.5-17H526.9c23.7 0 47 6.2 67.4 18l70 40.4c8.8 5.1 19.8 5.1 28.6 0l52.7-30.6c8.2-4.8 13.2-13.2 13.3-22.4l1-86.8c0.3-21.7 6.1-43.2 17-62l14.5-25.2c11-19.1 26.9-35.3 46-46.8l73.9-44.5c8.1-4.9 13-13.3 13-22.5l-0.1-63c0-9.3-5.2-18.1-13.6-22.8l-71.4-40.4c-20.4-11.5-37.4-28.3-49-48.3l-13.8-23.9c-10.9-18.9-16.8-40.3-17.1-62l-1.2-90.7c-0.1-9.1-5.3-17.7-13.4-22.4l-52.1-30.1c-9.1-5.3-20.3-5.1-29.2 0.4L594.8 182c-21 12.9-45.3 19.7-70.2 19.8h-22c-24 0-47.5-6.4-68.1-18.5l-74.3-43.6c-4.5-2.7-9.5-4-14.5-4z" fill="#FF7878" p-id="5537"></path></svg>
                    </button>
                    <button id="nekoupload_btn_trigger">
                        <span>\u55B5</span>
                    </button>
                </div>
            `);

            $('#nekoupload_btn_trigger').on('click', async function () {
                // var generatebdlinkTask = new GeneratebdlinkTask();
                var panfiles = getSelectedFileList().filter((_item) => _item.isdir !== 1);
                if (panfiles.length > 0) {
                    var errmsg = [];
                    var command = await dialog_show('\u8BF7\u9009\u62E9\u64CD\u4F5C', `
                    \u751F\u6210\u79D2\u4F20\u548C\u76F4\u63A5\u4E0B\u8F7D\u90FD\u4F1A\u4E3A\u6BCF\u4E2A\u6587\u4EF6\u521B\u5EFA\u4E00\u4E2A1\u5929\u7684\u5206\u4EAB\u94FE\u63A5\uFF01<br>
                    \u6682\u4E0D\u652F\u6301\u52FE\u9009\u7684\u6587\u4EF6\u5939<br>
                    \u8BF7\u5728\u4E86\u89E3\u4E4B\u540E\u4F7F\u7528\u3002<br>
                    <br>
                    \u5DF2\u9009\u4E2D\u6587\u4EF6\uFF08${panfiles.length}\u4E2A\uFF09\uFF1A<br>
                    ` + panfiles.map((_item) => _item.server_filename).join("<br>"), {
                        confirmText: '\u751F\u6210\u79D2\u4F20',
                        cancelText: '\u76F4\u63A5\u4E0B\u8F7D',
                    });
                    if (command !== null) {
                        if (command === true) {
                            dialog_show('\u8BF7\u7B49\u5F85', `
                            \u79D2\u4F20\u94FE\u63A5\u751F\u6210\u4E2D\u2026\u2026<br>
                            <br>
                            \u8FDB\u5EA6\uFF1A0 / ${panfiles.length}<br>
                            \u51FA\u9519\uFF1A0 / ${panfiles.length}
                            `, {
                                force: true,
                            });
                        }
                        var res = [];
                        for (var i = 0; i < panfiles.length; i++) {
                            var file = panfiles[i];
                            var $md5 = decryptMd5(file['md5']), $size = file['size'], $fs_id = file['fs_id'], $shareid, $randsk, $uk, $sign, $timestamp, $slice_md5;
                            var $surl = '', $spwd = 1234;

                            if (command === false) {
                                dialog_show('\u8BF7\u7B49\u5F85', `
                                    \u83B7\u53D6\u6587\u4EF6\uFF1A${file.server_filename}<br>
                                    <br>
                                    \u8FDB\u5EA6\uFF1A${i} / ${panfiles.length}<br>
                                    \u51FA\u9519\uFF1A${errmsg.length} / ${panfiles.length}
                                    `, {
                                    force: true,
                                });
                            }

                            var $dlink;
                            if ($_dlinkapi) {
                                var data = await ajax({
                                    url: "https://pan.baidu.com/api/filemetas?dlink=1&fsids=" + JSON.stringify([String($fs_id)]),
                                    responseType: "json",
                                    method: "GET",
                                    headers: {
                                        "User-Agent": $_ua,
                                    }
                                });
                                if (data.status !== 200 || data.response.errno > 0) {
                                    errmsg.push('\u83B7\u53D6dlink\u5931\u8D25\uFF1A' + file.server_filename);
                                    if ($_debug) console.dir(data);
                                    if ($_debug) console.dir(errmsg);
                                    continue;
                                }
                                data = data.response;
                                $dlink = data.info[0].dlink;
                            } else {
                                var data = await ajax({
                                    url: "https://pan.baidu.com/share/set?channel=chunlei&web=1&app_id=250528&logid=MTU4MTk0MzY0MTQwNzAuNDA0MzQxOTM0MzE2MzM4Ng==&clienttype=0",
                                    responseType: "json",
                                    method: "POST",
                                    data: convertData({
                                        'schannel': 4,
                                        'channel_list': '[]',
                                        'period': 1,
                                        'pwd': $spwd,
                                        'fid_list': JSON.stringify([file.fs_id]),
                                    })
                                });
                                if (data.status !== 200 || data.response.errno > 0) {
                                    errmsg.push('\u521B\u5EFA\u5206\u4EAB\u94FE\u63A5\u5931\u8D25\uFF1A' + file.server_filename);
                                    if ($_debug) console.dir(data);
                                    if ($_debug) console.dir(errmsg);
                                    continue;
                                }
                                data = data.response;
                                $shareid = data.shareid;

                                $surl = /https\:\/\/pan.baidu.com\/s\/(.*)/.exec(data.link)[1];
                                data = await ajax({
                                    url: 'https://pan.baidu.com/s/' + $surl,
                                });
                                if (data.status !== 200 || data.response.errno > 0) {
                                    errmsg.push('\u83B7\u53D6BDCLND\u51FA\u9519\uFF1A' + file.server_filename);
                                    if ($_debug) console.dir(data);
                                    if ($_debug) console.dir(errmsg);
                                    continue;
                                }
                                if (data.responseHeaders.indexOf('BDCLND=') === -1) {
                                    errmsg.push('\u83B7\u53D6BDCLND\u5931\u8D25\uFF1A' + file.server_filename);
                                    if ($_debug) console.dir(data);
                                    if ($_debug) console.dir(errmsg);
                                    continue;
                                }
                                $randsk = data.responseHeaders.match(/BDCLND=(.+?);/)[1];
                                data = data.response;
                                $uk = JSON.parse(data.match(/locals.mset\((\{.*?\})\);/)[1]).share_uk;

                                data = await ajax({
                                    url: 'https://pan.baidu.com/share/tplconfig?shareid=' + $shareid + '&uk=' + $uk + '&fields=sign,timestamp&channel=chunlei&web=1&app_id=250528&clienttype=0',
                                    responseType: "json",
                                });
                                if (data.status !== 200 || data.response.errno > 0) {
                                    errmsg.push('\u83B7\u53D6\u989D\u5916\u4FE1\u606F\u5931\u8D25\uFF1A' + file.server_filename);
                                    if ($_debug) console.dir(data);
                                    if ($_debug) console.dir(errmsg);
                                    continue;
                                }
                                data = data.response;
                                $sign = data['data'].sign;
                                $timestamp = data['data'].timestamp;
                                data = await ajax({
                                    url: 'https://pan.baidu.com/api/sharedownload?channel=chunlei&clienttype=12&web=1&app_id=250528&sign=' + $sign + '&timestamp=' + $timestamp,
                                    method: "POST",
                                    headers: {
                                        "Referer": "https://pan.baidu.com/disk/home",
                                    },
                                    responseType: "json",
                                    data: convertData({
                                        encrypt: 0,
                                        extra: '{"sekey":"' + decodeURIComponent($randsk) + '"}',
                                        fid_list: "[" + $fs_id + "]",
                                        primaryid: $shareid,
                                        uk: $uk,
                                        product: 'share',
                                        type: 'nolimit',
                                    }),
                                });
                                if (data.status !== 200 || data.response.errno > 0) {
                                    errmsg.push('\u83B7\u53D6dlink\u5931\u8D25\uFF1A' + file.server_filename);
                                    if ($_debug) console.dir(data);
                                    if ($_debug) console.dir(errmsg);
                                    continue;
                                }
                                data = data.response;
                                $dlink = data.list[0].dlink
                            }

                            if (command === true) {
                                $slice_md5 = await get_slice_md5(file, $dlink);
                                if ($slice_md5 === []) {
                                    errmsg.push('\u4E0B\u8F7D\u5206\u7247\u5931\u8D25\uFF1A' + file.server_filename);
                                    if ($_debug) console.dir(data);
                                    if ($_debug) console.dir(errmsg);
                                    continue;
                                }
                                $md5 = $slice_md5[0].toUpperCase(); //修正md5
                                $slice_md5 = $slice_md5[1].toUpperCase();
                                res.push($md5 + '#' + $slice_md5 + '#' + $size + '#' + file.server_filename);

                                dialog_update('', `
                                \u79D2\u4F20\u94FE\u63A5\u751F\u6210\u4E2D\u2026\u2026<br>
                                <br>
                                \u8FDB\u5EA6\uFF1A${i + 1} / ${panfiles.length}<br>
                                \u51FA\u9519\uFF1A${errmsg.length} / ${panfiles.length}
                                `);
                            } else {
                                var _tmp = await download_single(panfiles, i, $dlink);
                                if (_tmp === false) {
                                    errmsg.push('\u4E0B\u8F7D\u5931\u8D25\uFF1A' + file.server_filename);
                                }
                            }
                        }
                        if (command === true) {
                            if ($_debug) console.log(res);
                            var _command = await dialog_show('\u751F\u6210\u7ED3\u679C', `
                            \u6587\u4EF6\u603B\u6570\uFF1A${panfiles.length}<br>
                            \u51FA\u9519\u603B\u6570\uFF1A${errmsg.length}<br>
                            <br>
                            \u51FA\u9519\u4FE1\u606F\uFF1A<br>
                            ${errmsg.join("<br>")}<br>
                            <br>
                            \u79D2\u4F20\u94FE\u63A5\uFF1A<br>
                            ${res.join("<br>")}
                            `, {
                                confirmText: '\u590D\u5236\u79D2\u4F20\u94FE\u63A5',
                                // cancelText: '复制跳转链接',
                            });
                            if (_command === true) {
                                GM_setClipboard(res.join("\n"));
                                dialog_show();
                            }
                        } else {
                            dialog_show();
                        }
                    }
                } else {

















                    var _command = await dialog_show('\u79D2\u4F20\u8F6C\u5B58&\u79BB\u7EBF\u79D2\u4F20', `
                    <p>\u203B\u53EA\u652F\u6301\u6807\u51C6\u957F\u94FE\u63A5\uFF01</p>
                    <p>\u203B\u6587\u4EF6\u5927\u5C0F\u4E0D\u80FD\u8D85\u8FC720G\uFF01</p>
                    <p>\u203B\u5982\u679C\u76EE\u5F55\u4E2D\u5DF2\u6709\u8BE5\u6587\u4EF6\uFF0C\u4F1A\u8FDB\u884C\u8986\u76D6</p>
                    <p>\u8BF7\u8F93\u5165\u79D2\u4F20\u4EE3\u7801\uFF1A</p>
                    <textarea id="nekoupload_nekocode" placeholder="\u8F93\u5165\u79D2\u4F20\u94FE\u63A5\u3002\n\u203B\u4EC5\u80FD\u8F6C\u5B58\u6807\u51C6\u957F\u94FE\u63A5\uFF01"></textarea>
                    <input class="nekoupload-input" id="nekoupload_nekocode_savepath" placeholder="\u8F93\u5165\u4FDD\u5B58\u8DEF\u5F84\uFF0C\u9ED8\u8BA4\u5F53\u524D\u6587\u4EF6\u5939" value="${$_savepath}"></input>
                    `, {
                        confirmText: '\u8F6C\u5B58',
                        cancelText: '\u751F\u6210\u79BB\u7EBF\u79D2\u4F20',
                    });
                    var _reg = /([\d+a-fA-F]{32})#([\d+a-fA-F]{32})#(\d+)#(.*)(\n|$)/;
                    if (_command === true) {
                        var $nekocode_original = $('#nekoupload_nekocode').val().split('\n');
                        var $savepath = $('#nekoupload_nekocode_savepath').val();
                        if ($savepath === '') {
                            var $savepath, nowPath = location.href.match(/path=(.+?)(?:&|$)/);
                            if (nowPath)
                                $savepath = decodeURIComponent(nowPath[1]);
                            else
                                $savepath = "/";
                            if ($savepath.charAt($savepath.length - 1) !== "/")
                                $savepath += "/";
                        } else {
                            $savepath = ('/' + $savepath + '/').replace(/\/\//g, '/');
                        }
                        var $bdstoken = getBdstoken();
                        var unsupport = $nekocode_original.filter((_item) => !(_item.match(_reg) && _item.match(_reg)[3] <= 21474836480));
                        var $nekocode = $nekocode_original.filter((_item) => _item.match(_reg) && _item.match(_reg)[3] <= 21474836480);
                        if (unsupport.length > 0) {
                            if (!$nekocode.length) {
                                dialog_show('\u79D2\u4F20\u4EE3\u7801\u4E0D\u652F\u6301', `
                                \u8F93\u5165\u7684\u79D2\u4F20\u4EE3\u7801\u5747\u4E0D\u652F\u6301\u3002<br>
                                \u53EA\u652F\u6301\u6807\u51C6\u957F\u94FE\u63A5\uFF0C\u4E14\u6587\u4EF6\u5927\u5C0F\u4E0D\u8D85\u8FC720G\uFF0C\u683C\u5F0F\u4E3A\uFF1A<br>
                                32\u4F4Dmd5 # 32\u4F4Dslice-md5 # \u6587\u4EF6\u5B57\u8282\u6570 # \u6587\u4EF6\u540D
                                `)
                                return;
                            } else {
                                var _confirm = await dialog_show('\u79D2\u4F20\u4EE3\u7801\u542B\u6709\u4E0D\u652F\u6301\u7684\u90E8\u5206', `
                                \u4EE5\u4E0B\u4EE3\u7801\u4E0D\u652F\u6301\uFF08${unsupport.length}\u4E2A\uFF09\uFF1A<br>
                                ${unsupport.join("<br>")}
                                `, {
                                    confirmText: `\u8F6C\u5B58\u652F\u6301\u90E8\u5206\uFF08${$nekocode.length}\u4E2A\uFF09`,
                                });
                                if (_confirm !== true) return;
                            }
                        }
                        dialog_show('\u8BF7\u7B49\u5F85', `
                            \u79D2\u4F20\u94FE\u63A5\u8F6C\u5B58\u4E2D\u2026\u2026<br>
                            <br>
                            \u8FDB\u5EA6\uFF1A0 / ${$nekocode.length}<br>
                            \u51FA\u9519\uFF1A0 / ${$nekocode.length}
                            `, {
                            force: true,
                        });
                        var res = [];
                        var errmsg = [];
                        for (var i = 0; i < $nekocode.length; i++) {
                            var $neko = $nekocode[i];
                            if ($_debug) console.dir($neko);
                            var _matches = $neko.match(_reg);
                            var $md5, $slice_md5, $size, $filepath;
                            $md5 = _matches[1].toUpperCase();
                            $slice_md5 = _matches[2].toLowerCase();
                            $size = _matches[3];
                            $filepath = _matches[4];

                            var data = await ajax({
                                url: 'https://pan.baidu.com/api/rapidupload?bdstoken=' + $bdstoken,
                                responseType: "json",
                                method: "POST",
                                data: convertData({
                                    'rtype': 0,
                                    'path': $savepath + $filepath,
                                    'content-md5': $md5.toUpperCase(),
                                    'slice-md5': $slice_md5,
                                    'content-length': $size,
                                }),
                                headers: {
                                    "User-Agent": "netdisk;2.2.51.6;netdisk;10.0.63;PC;android-android;QTP/1.0.32.2",
                                }
                            });
                            if (data.response.errno > 0) {
                                var _data = await ajax({
                                    url: 'https://pan.baidu.com/api/rapidupload?bdstoken=' + $bdstoken,
                                    responseType: "json",
                                    method: "POST",
                                    data: convertData({
                                        'rtype': 0,
                                        'path': $savepath + $filepath,
                                        'content-md5': $md5.toLowerCase(),
                                        'slice-md5': $slice_md5,
                                        'content-length': $size,
                                    }),
                                    headers: {
                                        "User-Agent": "netdisk;2.2.51.6;netdisk;10.0.63;PC;android-android;QTP/1.0.32.2",
                                    }
                                });
                                if (_data.response.errno > 0) {
                                    errmsg.push('\u8F6C\u5B58\u5931\u8D25\uFF1A' + $filepath);
                                    if ($_debug) console.dir(data);
                                    if ($_debug) console.dir(errmsg);
                                    continue;
                                }
                            }
                            res.push($filepath);
                            dialog_update('', `
                            \u79D2\u4F20\u94FE\u63A5\u8F6C\u5B58\u4E2D\u2026\u2026<br>
                            <br>
                            \u8FDB\u5EA6\uFF1A${i + 1} / ${$nekocode.length}<br>
                            \u51FA\u9519\uFF1A${errmsg.length} / ${$nekocode.length}
                            `);
                        }
                        if ($_debug) console.log(res);
                        var _command = await dialog_show('\u8F6C\u5B58\u7ED3\u679C', `
                        \u6587\u4EF6\u603B\u6570\uFF1A${$nekocode_original.length}<br>
                        \u4E0D\u652F\u6301\u6570\uFF1A${$nekocode_original.length - $nekocode.length}<br>
                        \u51FA\u9519\u603B\u6570\uFF1A${errmsg.length}<br>
                        <br>
                        \u8F6C\u5B58\u6210\u529F\uFF1A<br>
                        ${res.join("<br>")}
                        <br>
                        \u51FA\u9519\u4FE1\u606F\uFF1A<br>
                        ${errmsg.join("<br>")}
                        `, {
                            confirmText: '\u5237\u65B0\u9875\u9762',
                        });
                        if (_command === true) {
                            refreshList();
                            dialog_show();
                        }
                    } else if (_command === false) {
                        var selects = await dialog_show('\u751F\u6210\u79BB\u7EBF\u79D2\u4F20', `
                        \u203B\u6B64\u529F\u80FD\u4E3A\u79BB\u7EBF\u529F\u80FD\uFF0C\u4E0D\u7ECF\u8FC7\u767E\u5EA6\u7F51\u76D8\u3002<br>
                        \u203B\u751F\u6210\u7684\u79D2\u4F20\u4EC5\u5728\u4E91\u7AEF\u5DF2\u6709\u8BE5\u6587\u4EF6\u65F6\u53EF\u4EE5\u8F6C\u5B58\u3002<br>
                        \u7531\u4E8E\u79D2\u4F20\u4EC5\u652F\u6301\u4E0D\u8D85\u8FC720G\u7684\u6587\u4EF6\uFF0C\u6545\u6B64\u5904\u4E5F\u4F1A\u6821\u9A8C\u6587\u4EF6\u5927\u5C0F\u3002<br>
                        \u8BF7\u52A1\u5FC5\u7406\u89E3\u6B64\u9879\u64CD\u4F5C\u7684\u610F\u4E49\u3002<br>
                        <input id="nekoupload_offline" type="file" multiple>
                        `, {
                            confirmText: '\u751F\u6210',
                        });
                        if (selects === true) {
                            get_nekoupload_offline($('#nekoupload_offline').prop('files'));
                        }
                    }
                }
            });









            $('#nekoupload_btn_settings').on('click', async function () {
                var command = await dialog_show('\u8BBE\u7F6E&\u8BF4\u660E', `
                \u5173\u4E8E\u79D2\u4F20\uFF1A<br>
                \u203B\u9ED8\u8BA4\u63A5\u53E3\u751F\u6210\u65F6\u4F1A\u521B\u5EFA\u5206\u4EAB\u94FE\u63A5\uFF0C\u5927\u91CF\u521B\u5EFA\u4F1A\u88AB\u767E\u5EA6\u7981\u6B62\u5206\u4EAB\u4E00\u6BB5\u65F6\u95F4\u3002<br>
                \u203B\u8F6C\u5B58\u63A5\u53E3\u5F00\u59CB\u9700\u8981\u989D\u5916\u53C2\u6570\uFF0C\u6545\u811A\u672C\u4E0D\u4F1A\u652F\u6301\u65E7\u7684\u77ED\u79D2\u4F20\u94FE\u63A5\u3002<br>
                <br>
                \u5173\u4E8E\u4E0B\u8F7D\uFF1A<br>
                \u5982\u679C\u8D26\u53F7\u662F\u666E\u901A\u8D26\u53F7\uFF0C\u76F4\u63A5\u4E0B\u8F7D\u4E0D\u4F1A\u52A0\u901F\u4E14\u4E0D\u7A33\u5B9A\uFF0C\u4F46\u53EF\u81EA\u884C\u5BFC\u5165\u591A\u7EBF\u7A0B\u4E0B\u8F7D\u5668\u3002<br>
                \u5982\u679C\u8D26\u53F7\u662F\u4F1A\u5458\u8D26\u53F7\uFF0C\u4E0B\u8F7D\u901F\u5EA6\u4F1A\u5F88\u9AD8\u4F46\u4E0D\u5EFA\u8BAE\u4E0B\u8F7D\u5927\u6587\u4EF6\u3002<br>
                \u5982\u679C\u7528\u5176\u5B83\u4E0B\u8F7D\u5DE5\u5177\u4E0B\u8F7D\u76F4\u94FE\uFF0C\u9700\u8981\u914D\u7F6E User-Agent \u4E3A\u63D0\u793A/\u8BBE\u7F6E\u7684\u503C\u3002<br>
                <br>
                \u9ED8\u8BA4\u8F6C\u5B58\u8DEF\u5F84\uFF1A<br>
                <input class="nekoupload-input" id="nekoupload_btn_settings_savepath" placeholder="\u9ED8\u8BA4\u7A7A\u3002\u8BE5\u9879\u8BBE\u7F6E\u4E3A\u7A7A\u65F6\uFF0C\u8F6C\u5B58\u4F1A\u81EA\u52A8\u9009\u62E9\u6253\u5F00\u7684\u6587\u4EF6\u5939\u3002" value="${$_savepath}"></input>
                \u4E0B\u8F7DUA\uFF1A<br>
                <input class="nekoupload-input" id="nekoupload_btn_settings_ua" placeholder="\u9ED8\u8BA4nekoupload\u3002\u8BE5\u9879\u8BBE\u7F6E\u4E0D\u53EF\u4E3A\u7A7A\u3002" value="${$_ua}"></input>
                \u66F4\u6362\u63A5\u53E3\uFF1A
                <label class="nekoupload-switch${$_dlinkapi ? ' checked' : ''}" id="nekoupload_btn_settings_dlinkapi"><div></div></label><br>
                <span style="color: #999">
                \u9ED8\u8BA4\u5173\u95ED\uFF0C\u751F\u6210\u79D2\u4F20/\u76F4\u63A5\u4E0B\u8F7D\u4F1A\u9700\u8981\u5BF9\u6587\u4EF6\u521B\u5EFA\u5206\u4EAB\u3002\u5982\u679C\u5F00\u542F\uFF0C\u4F1A\u7F29\u77ED\u8BF7\u6C42\u65F6\u95F4\u5E76\u4E0D\u9700\u8981\u521B\u5EFA\u5206\u4EAB\u3002
                </span><br>
                \u6587\u4EF6\u62D6\u62FD\uFF1A
                <label class="nekoupload-switch${$_drag ? ' checked' : ''}" id="nekoupload_btn_settings_drag"><div></div></label><br>
                <span style="color: #999">
                \u5F00\u542F\u5219\u5141\u8BB8\u62D6\u62FD\u6587\u4EF6\u5230\u7F51\u9875\u4E0B\u534A\u533A\u57DF\u8FDB\u884C\u79BB\u7EBF\u79D2\u4F20\u7684\u751F\u6210\uFF0C\u5173\u95ED\u53EF\u4EE5\u907F\u514D\u4E00\u4E9B\u9875\u9762\u95EE\u9898\u3002
                </span><br>
                \u7B80\u6D01\u6A21\u5F0F\uFF1A
                <label class="nekoupload-switch${$_purify ? ' checked' : ''}" id="nekoupload_btn_settings_purify"><div></div></label><br>
                <span style="color: #999">
                \u5F00\u542F\u4F1A\u5C06\u7F51\u9875\u7684\u4E00\u4E9B\u5143\u7D20\u9690\u85CF\u3002
                </span><br>
                \u8C03\u8BD5\u6A21\u5F0F\uFF1A
                <label class="nekoupload-switch${$_debug ? ' checked' : ''}" id="nekoupload_btn_settings_debug"><div></div></label><br>
                <span style="color: #999">
                \u5F00\u542F\u4F1A\u5728\u63A7\u5236\u53F0\u8F93\u51FA\u4FE1\u606F\u3002
                </span><br>
                `, {
                    confirmText: '\u4FDD\u5B58\u8BBE\u7F6E\u5E76\u5237\u65B0',
                });
                if (command === true) {
                    GM_setValue('savepath', $('#nekoupload_btn_settings_savepath').val());
                    if ($('#nekoupload_btn_settings_ua').val() !== '') GM_setValue('ua', $('#nekoupload_btn_settings_ua').val());
                    GM_setValue('debug', $('#nekoupload_btn_settings_debug').hasClass('checked'));
                    GM_setValue('purify', $('#nekoupload_btn_settings_purify').hasClass('checked'));
                    GM_setValue('drag', $('#nekoupload_btn_settings_drag').hasClass('checked'));
                    GM_setValue('dlinkapi', $('#nekoupload_btn_settings_dlinkapi').hasClass('checked'));
                    // dialog_show();
                    location.reload();
                }
            })
        }








        if (!$('#nekoupload_filedrop').length && $_drag) {
            $('body').append(`
            <div id="nekoupload_filedrop"><div>\u751F\u6210\u79BB\u7EBF\u79D2\u4F20</div></div>
            `);
            $(document).on('mouseleave', function () {
                $('#nekoupload_filedrop').css('pointer-events', 'auto');
            });
            $(document).on('mouseenter', function () {
                $('#nekoupload_filedrop').css('pointer-events', 'none');
            });
            var filedrop = $('#nekoupload_filedrop');
            filedrop.on('dragenter', function (event) {
                event.stopPropagation();
                event.preventDefault();
                $(this).addClass('nekoupload-filedroping');
            });
            filedrop.on('dragover', function (event) {
                event.stopPropagation();
                event.preventDefault();
                $(this).addClass('nekoupload-filedroping');
            });
            filedrop.on('dragleave', function (event) {
                event.stopPropagation();
                event.preventDefault();
                $(this).removeClass('nekoupload-filedroping');
            });
            filedrop.on('drop', function (event) {
                event.stopPropagation();
                event.preventDefault();
                $(this).removeClass('nekoupload-filedroping');

                var files = event.originalEvent.dataTransfer.files;
                if ($_debug) console.dir(files)
                get_nekoupload_offline(files);
            });
        }
    }
    nekoupload_init();
})();