// ==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);