Drop Images into Tieba Editor 3

贴吧拖放粘贴上传图片 huhu修改

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name        Drop Images into Tieba Editor 3
// @description 贴吧拖放粘贴上传图片 huhu修改
// @version     3.1.1
// @grant       none
// @include     http://tieba.baidu.com/f*
// @include     http://tieba.baidu.com/p/*
// @include     http://tieba.baidu.com.cn/f*
// @include     http://tieba.baidu.com.cn/p/*
// @include     http://tieba.baidu.cn/f*
// @include     http://tieba.baidu.cn/p/*
// @run-at      document-end
// @copyright 5B4B huhu修改
// @icon	http://imgsrc.baidu.com/forum/pic/item/911e12087bf40ad13d03ebde552c11dfa8ecce89.jpeg
// @namespace 5B4B
// ==/UserScript==


'use strict';


function init() {
    'use strict';
//////
//// Basic Functions
//
    function failedCallback() {
        if ( gFilesNumSum > 0 ) {
            --gFilesNumSum;
        }
    }

    function progressCallback(e) {
        if ( !e.lengthComputable ) {
            progress.hide();
            return;
        }
        progress.show();
        progress.update(e.loaded / e.total / gFilesNumSum, gFilesNum, gFilesNumSum);
    }

    function upload(blob, type, name) {
        var xhr = new XMLHttpRequest(),
            size = blob.size;

        gUploading = true;
        xhr.open('GET', 'http://tieba.baidu.com/dc/common/imgtbs?t=' + new Date().getTime(), true);
        xhr.onload = function () {
            var res = $.json.decode(this.responseText);

            if ( res.no !== 0 ) {
                failedCallback();
            }

            var tbs = res.data.tbs,
                formData = new FormData();

            xhr.abort();
            xhr.open('POST', 'http://upload.tieba.baidu.com/upload/pic?is_wm=1&tbs=' + tbs, true);
            xhr.withCredentials = true;
            xhr.upload.onprogress = progressCallback;
            xhr.onload = function () {
                var res = $.json.decode(this.responseText);

                ++gFilesNum;
                if ( res.error_code !== 0 ) {
                    showMsg(name + ' \u56FE\u7247\u4E0A\u4F20\u5931\u8D25\uFF01');
                } else {
                    var pic_url = 'http://imgsrc.baidu.com/forum/pic/item/' + res.info.pic_id_encode + '.' + type;
                    test_editor.execCommand('inserthtml', '<img class="BDE_Image" type="2" src="http://imgsrc.baidu.com/forum/pic/item/' + res.info.pic_id_encode + '.jpg">');
                    //editor.execCommand('insertimage', [ pic_url ], '2');
                }
                if ( gFilesNum === gFilesNumSum ) {
                    gUploading = false;
                    progress.hide();
                }
            };
            formData.append('fid', PageData.forum.id);
            formData.append('Filename', name);
            formData.append('file', blob);
            xhr.send(formData);
        };
        xhr.onerror = failedCallback;
        xhr.send();
    }

    function uploadImages(files) {
        Array.prototype.forEach.call(files, function (file) {
            if ( /^image\/(png|jpe?g|gif)$/i.test(file.type) ) {
                var type = RegExp.$1,
                    r = new FileReader();

                r.onload = function () {
                    var blob = new Blob([ new Uint8Array(r.result) ], {
                        type: file.type
                    });

                    if ( !gUploading ) {
                        gFilesNum = 0;
                    }
                    upload(blob, type, file.name);
                };
                r.readAsArrayBuffer(file);
            }
        });
    }

    function createProgressBar(id) {
        var div = document.createElement('div'),
            label = document.createElement('label'),
            p = document.createElement('progress');

        div.id = id;
        div.style.display = 'none';
        p.max = 1;
        p.value = 0;
        p.style.width = '200px';
        p.style.marginRight = '5px';
        div.appendChild(p);
        div.appendChild(label);
        div.update = function (percent, num, sum) {
            p.value = percent;
            label.textContent = '\u5DF2\u4E0A\u4F20 ' + num + '/' + sum + '\u7684\u56FE\u7247';
        };
        div.hide = function () {
            this.style.display = 'none';
        };
        div.show = function () {
            this.style.display = '';
        };
        return div;
    }


//////
//// Initialization
//
    try {
        var isTarget = /^http:\/\/tieba\.baidu\.com\/(?:f\?.*?\b(?:kw|kz|z)=[^&]|p\/)/i;

        if ( !isTarget.test(location.href) ) {
            return;
        }

        var gFilesNumSum = 0,
            gFilesNum = 0,
            gUploading = false,
            intprogress = true;
        var usWin = window,
            $ = usWin.$,
            PageData = usWin.PageData,
            editor = usWin.test_editor,
            textarea = document.querySelector('#ueditor_replace'),
            ttp=document.querySelector('.tb_rich_poster_container'),pt='#ueditor_replace',
            progress = createProgressBar('DITE2_progress'),
            showMsg = function (msg) {
                var dialog = usWin.$.dialog.open(msg, {
                    showTitle: false,
                    modal: false,
                    top: textarea.getClientRects().item(0).top + window.scrollY,
                    left: textarea.getClientRects().item(0).left + window.scrollX,
                    fixed: false
                });
                setTimeout(function (){
                    dialog.element.fadeOut(400, function () {
                        dialog.close();
                    });
                }, 1000);
            };

        //textarea.parentNode.insertBefore(progress, textarea.nextElementSibling);

        window.addEventListener('dragover', function (e) {
            e.preventDefault();
        }, true);

        ttp.addEventListener('dragover', function (e) {
            e.preventDefault();
        }, true);
        ttp.addEventListener('drop', function (e) {
            if(intprogress){textarea = document.querySelector('#ueditor_replace');textarea.parentNode.insertBefore(progress, textarea.nextElementSibling);intprogress=false;}
            var files = e.dataTransfer.files;

            if ( files.length === 0 ) {
                return;
            }

            e.preventDefault();
            if ( gUploading ) {
                gFilesNumSum += files.length;
                showMsg('\u51C6\u5907\u518D\u4E0A\u4F20 ' + files.length + ' \u5E45\u56FE\u7247\u2026\u2026');
            } else {
                gFilesNum = 0;
                gFilesNumSum = files.length;
                showMsg('\u51C6\u5907\u4E0A\u4F20 ' + files.length + ' \u5E45\u56FE\u7247\u2026\u2026');
            }
            uploadImages(files);
        },false);
        ttp.addEventListener('paste', function (e) {
            if(intprogress){textarea = document.querySelector('#ueditor_replace');textarea.parentNode.insertBefore(progress, textarea.nextElementSibling);intprogress=false;}
            if ( !e.clipboardData ) {
                showMsg('\u4F60\u7684\u706B\u72D0\u6D4F\u89C8\u5668\u6682\u65F6\u4E0D\u652F\u6301\u526A\u8D34\u677F\u7C98\u8D34\u4E0A\u4F20\u529F\u80FD\u3002');
                throw 'DITE2: e.clipboardData, Firefox not supported.';
                return;
            }
            var clipboard = e.clipboardData,
                items = clipboard.items;

            Array.prototype.forEach.call(items, function (item, i) {
                if ( item.kind === 'file' ) {
                    e.preventDefault();
                    if ( gUploading ) {
                        ++gFilesNumSum;
                        showMsg('\u51C6\u5907\u518D\u4E0A\u4F20 1 \u5E45\u56FE\u7247\u2026\u2026');
                    } else {
                        gFilesNumSum = 1;
                        showMsg('\u51C6\u5907\u4E0A\u4F20 1 \u5E45\u56FE\u7247\u2026\u2026');
                    }
                    uploadImages([ item.getAsFile() ]);
                }
            });
        });
    } catch (err) {
        throw new Error('DITE3: ' + err.message);
    }
}


var script = document.createElement('script');
script.id = '__5B4B_DITE3__';
script.charset = 'utf-8';
script.type = 'text/javascript';
script.innerHTML = 'try{(' + init.toString() + ')()}catch(e){}';
document.body.appendChild(script);