// ==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 // @downloadURL https://update.greasyfork.icu/scripts/3183/Drop%20Images%20into%20Tieba%20Editor%203.user.js // @updateURL https://update.greasyfork.icu/scripts/3183/Drop%20Images%20into%20Tieba%20Editor%203.meta.js // ==/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', ''); //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);