470 lines
17 KiB
JavaScript
470 lines
17 KiB
JavaScript
/*
|
|
[Discuz!] (C)2001-2099 Comsenz Inc.
|
|
This is NOT a freeware, use is subject to license terms
|
|
|
|
$Id: handlers.js 31952 2012-10-25 09:20:40Z zhengqingpeng $
|
|
*/
|
|
|
|
var sdCloseTime = 2;
|
|
function preLoad() {
|
|
if(!this.support.loading) {
|
|
disableMultiUpload(this.customSettings);
|
|
return false;
|
|
}
|
|
}
|
|
function loadFailed() {
|
|
disableMultiUpload(this.customSettings);
|
|
}
|
|
function disableMultiUpload(obj) {
|
|
if(obj.uploadSource == 'forum' && obj.uploadFrom != 'fastpost') {
|
|
try{
|
|
obj.singleUpload.style.display = '';
|
|
var dIdStr = obj.singleUpload.getAttribute("did");
|
|
if(dIdStr != null) {
|
|
if(typeof forum_post_inited == 'undefined') {
|
|
appendscript(JSPATH + 'forum_post.js?' + VERHASH);
|
|
}
|
|
var idArr = dIdStr.split("|");
|
|
$(idArr[0]).style.display = 'none';
|
|
if(idArr[1] == 'local') {
|
|
switchImagebutton('local');
|
|
} else if(idArr[1] == 'upload') {
|
|
switchAttachbutton('upload');
|
|
}
|
|
}
|
|
} catch (e) {
|
|
}
|
|
}
|
|
}
|
|
function fileDialogStart() {
|
|
if(this.customSettings.uploadSource == 'forum') {
|
|
this.customSettings.alertType = 0;
|
|
if(this.customSettings.uploadFrom == 'fastpost') {
|
|
if(typeof forum_post_inited == 'undefined') {
|
|
appendscript(JSPATH + 'forum_post.js?' + VERHASH);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function fileQueued(file) {
|
|
try {
|
|
var createQueue = true;
|
|
if(this.customSettings.uploadSource == 'forum' && this.customSettings.uploadType == 'poll') {
|
|
var inputObj = $(this.customSettings.progressTarget+'_aid');
|
|
if(inputObj && parseInt(inputObj.value)) {
|
|
this.addPostParam('aid', inputObj.value);
|
|
}
|
|
} else if(this.customSettings.uploadSource == 'portal') {
|
|
var inputObj = $('catid');
|
|
if(inputObj && parseInt(inputObj.value)) {
|
|
this.addPostParam('catid', inputObj.value);
|
|
}
|
|
}
|
|
var progress = new FileProgress(file, this.customSettings.progressTarget);
|
|
if(this.customSettings.uploadSource == 'forum') {
|
|
if(this.customSettings.maxAttachNum != undefined) {
|
|
if(this.customSettings.maxAttachNum > 0) {
|
|
this.customSettings.maxAttachNum--;
|
|
} else {
|
|
this.customSettings.alertType = 6;
|
|
createQueue = false;
|
|
}
|
|
}
|
|
|
|
if(createQueue && this.customSettings.maxSizePerDay != undefined) {
|
|
if(this.customSettings.maxSizePerDay - file.size > 0) {
|
|
this.customSettings.maxSizePerDay = this.customSettings.maxSizePerDay - file.size
|
|
} else {
|
|
this.customSettings.alertType = 11;
|
|
createQueue = false;
|
|
}
|
|
}
|
|
if(createQueue && this.customSettings.filterType != undefined) {
|
|
var fileSize = this.customSettings.filterType[file.type.substr(1).toLowerCase()];
|
|
if(fileSize != undefined && fileSize && file.size > fileSize) {
|
|
this.customSettings.alertType = 5;
|
|
createQueue = false;
|
|
}
|
|
}
|
|
|
|
}
|
|
if(createQueue) {
|
|
progress.setStatus("等待上传...");
|
|
} else {
|
|
this.cancelUpload(file.id);
|
|
progress.setCancelled();
|
|
}
|
|
progress.toggleCancel(true, this);
|
|
|
|
|
|
} catch (ex) {
|
|
this.debug(ex);
|
|
}
|
|
|
|
}
|
|
|
|
function fileQueueError(file, errorCode, message) {
|
|
try {
|
|
if (errorCode === SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED) {
|
|
message = parseInt(message);
|
|
showDialog("您选择的文件个数超过限制。\n"+(message === 0 ? "您已达到上传文件的上限了。" : "您还可以选择 " + message + " 个文件"), 'notice', null, null, 0, null, null, null, null, sdCloseTime);
|
|
return;
|
|
}
|
|
|
|
var progress = new FileProgress(file, this.customSettings.progressTarget);
|
|
progress.setError();
|
|
progress.toggleCancel(false);
|
|
|
|
switch (errorCode) {
|
|
case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
|
|
progress.setStatus("文件太大.");
|
|
this.debug("Error Code: File too big, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
|
|
break;
|
|
case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
|
|
progress.setStatus("不能上传零字节文件.");
|
|
this.debug("Error Code: Zero byte file, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
|
|
break;
|
|
case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
|
|
progress.setStatus("禁止上传该类型的文件.");
|
|
this.debug("Error Code: Invalid File Type, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
|
|
break;
|
|
case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:
|
|
alert("You have selected too many files. " + (message > 1 ? "You may only add " + message + " more files" : "You cannot add any more files."));
|
|
break;
|
|
default:
|
|
if (file !== null) {
|
|
progress.setStatus("Unhandled Error");
|
|
}
|
|
this.debug("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
|
|
break;
|
|
}
|
|
} catch (ex) {
|
|
this.debug(ex);
|
|
}
|
|
}
|
|
|
|
function fileDialogComplete(numFilesSelected, numFilesQueued) {
|
|
try {
|
|
if(this.customSettings.uploadSource == 'forum') {
|
|
if(this.customSettings.uploadType == 'attach') {
|
|
if(typeof switchAttachbutton == "function") {
|
|
switchAttachbutton('attachlist');
|
|
}
|
|
try {
|
|
if(this.getStats().files_queued) {
|
|
$('attach_tblheader').style.display = '';
|
|
$('attach_notice').style.display = '';
|
|
}
|
|
} catch (ex) {}
|
|
} else if(this.customSettings.uploadType == 'image') {
|
|
if(typeof switchImagebutton == "function") {
|
|
switchImagebutton('imgattachlist');
|
|
}
|
|
try {
|
|
$('imgattach_notice').style.display = '';
|
|
} catch (ex) {}
|
|
}
|
|
var objId = this.customSettings.uploadType == 'attach' ? 'attachlist' : 'imgattachlist';
|
|
var listObj = $(objId);
|
|
var tableObj = listObj.getElementsByTagName("table");
|
|
if(!tableObj.length) {
|
|
listObj.innerHTML = "";
|
|
}
|
|
} else if(this.customSettings.uploadType == 'blog') {
|
|
if(typeof switchImagebutton == "function") {
|
|
switchImagebutton('imgattachlist');
|
|
}
|
|
}
|
|
this.startUpload();
|
|
} catch (ex) {
|
|
this.debug(ex);
|
|
}
|
|
}
|
|
|
|
function uploadStart(file) {
|
|
try {
|
|
this.addPostParam('filetype', file.type);
|
|
if(this.customSettings.uploadSource == 'forum' && this.customSettings.uploadType == 'poll') {
|
|
var preObj = $(this.customSettings.progressTarget);
|
|
preObj.style.display = 'none';
|
|
preObj.innerHTML = '';
|
|
}
|
|
var progress = new FileProgress(file, this.customSettings.progressTarget);
|
|
progress.setStatus("上传中...");
|
|
progress.toggleCancel(true, this);
|
|
if(this.customSettings.uploadSource == 'forum') {
|
|
var objId = this.customSettings.uploadType == 'attach' ? 'attachlist' : 'imgattachlist';
|
|
var attachlistObj = $(objId).parentNode;
|
|
attachlistObj.scrollTop = $(file.id).offsetTop - attachlistObj.clientHeight;
|
|
}
|
|
} catch (ex) {
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function uploadProgress(file, bytesLoaded, bytesTotal) {
|
|
|
|
try {
|
|
var percent = Math.ceil((bytesLoaded / bytesTotal) * 100);
|
|
|
|
var progress = new FileProgress(file, this.customSettings.progressTarget);
|
|
progress.setStatus("正在上传("+percent+"%)...");
|
|
|
|
} catch (ex) {
|
|
this.debug(ex);
|
|
}
|
|
}
|
|
|
|
function uploadSuccess(file, serverData) {
|
|
try {
|
|
var progress = new FileProgress(file, this.customSettings.progressTarget);
|
|
if(this.customSettings.uploadSource == 'forum') {
|
|
if(this.customSettings.uploadType == 'poll') {
|
|
var data = eval('('+serverData+')');
|
|
if(parseInt(data.aid)) {
|
|
var preObj = $(this.customSettings.progressTarget);
|
|
preObj.innerHTML = "";
|
|
preObj.style.display = '';
|
|
var img = new Image();
|
|
img.src = IMGDIR + '/attachimg_2.png';//data.smallimg;
|
|
var imgObj = document.createElement("img");
|
|
imgObj.src = img.src;
|
|
imgObj.className = "cur1";
|
|
imgObj.onmouseout = function(){hideMenu('poll_img_preview_'+data.aid+'_menu');};//"hideMenu('poll_img_preview_"+data.aid+"_menu');";
|
|
imgObj.onmouseover = function(){showMenu({'menuid':'poll_img_preview_'+data.aid+'_menu','ctrlclass':'a','duration':2,'timeout':0,'pos':'34'});};//"showMenu({'menuid':'poll_img_preview_"+data.aid+"_menu','ctrlclass':'a','duration':2,'timeout':0,'pos':'34'});";
|
|
preObj.appendChild(imgObj);
|
|
var inputObj = document.createElement("input");
|
|
inputObj.type = 'hidden';
|
|
inputObj.name = 'pollimage[]';
|
|
inputObj.id = this.customSettings.progressTarget+'_aid';
|
|
inputObj.value= data.aid;
|
|
preObj.appendChild(inputObj);
|
|
var preImgObj = document.createElement("span");
|
|
preImgObj.style.display = 'none';
|
|
preImgObj.id = 'poll_img_preview_'+data.aid+'_menu';
|
|
img = new Image();
|
|
img.src = data.smallimg;
|
|
imgObj = document.createElement("img");
|
|
imgObj.src = img.src;
|
|
preImgObj.appendChild(imgObj);
|
|
preObj.appendChild(preImgObj);
|
|
}
|
|
} else {
|
|
aid = parseInt(serverData);
|
|
if(aid > 0) {
|
|
if(this.customSettings.uploadType == 'attach') {
|
|
ajaxget('forum.php?mod=ajax&action=attachlist&aids=' + aid + (!fid ? '' : '&fid=' + fid)+(typeof resulttype == 'undefined' ? '' : '&result=simple'), file.id);
|
|
} else if(this.customSettings.uploadType == 'image') {
|
|
var tdObj = getInsertTdId(this.customSettings.imgBoxObj, 'image_td_'+aid);
|
|
ajaxget('forum.php?mod=ajax&action=imagelist&type=single&pid=' + pid + '&aids=' + aid + (!fid ? '' : '&fid=' + fid), tdObj.id);
|
|
$(file.id).style.display = 'none';
|
|
}
|
|
} else {
|
|
aid = aid < -1 ? Math.abs(aid) : aid;
|
|
if(typeof STATUSMSG[aid] == "string") {
|
|
progress.setStatus(STATUSMSG[aid]);
|
|
showDialog(STATUSMSG[aid], 'notice', null, null, 0, null, null, null, null, sdCloseTime);
|
|
} else {
|
|
progress.setStatus("取消上传");
|
|
}
|
|
this.cancelUpload(file.id);
|
|
progress.setCancelled();
|
|
progress.toggleCancel(true, this);
|
|
var stats = this.getStats();
|
|
var obj = {'successful_uploads':--stats.successful_uploads, 'upload_cancelled':++stats.upload_cancelled};
|
|
this.setStats(obj);
|
|
}
|
|
}
|
|
} else if(this.customSettings.uploadType == 'album') {
|
|
var data = eval('('+serverData+')');
|
|
if(parseInt(data.picid)) {
|
|
var newTr = document.createElement("TR");
|
|
var newTd = document.createElement("TD");
|
|
var img = new Image();
|
|
img.src = data.url;
|
|
var imgObj = document.createElement("img");
|
|
imgObj.src = img.src;
|
|
newTd.className = 'c';
|
|
newTd.appendChild(imgObj);
|
|
newTr.appendChild(newTd);
|
|
newTd = document.createElement("TD");
|
|
newTd.innerHTML = '<strong>'+file.name+'</strong>';
|
|
newTr.appendChild(newTd);
|
|
newTd = document.createElement("TD");
|
|
newTd.className = 'd';
|
|
newTd.innerHTML = '图片描述<br/><textarea name="title['+data.picid+']" cols="40" rows="2" class="pt"></textarea>';
|
|
newTr.appendChild(newTd);
|
|
this.customSettings.imgBoxObj.appendChild(newTr);
|
|
} else {
|
|
showDialog('图片上传失败', 'notice', null, null, 0, null, null, null, null, sdCloseTime);
|
|
}
|
|
$(file.id).style.display = 'none';
|
|
} else if(this.customSettings.uploadType == 'blog') {
|
|
var data = eval('('+serverData+')');
|
|
if(parseInt(data.picid)) {
|
|
var tdObj = getInsertTdId(this.customSettings.imgBoxObj, 'image_td_'+data.picid);
|
|
var img = new Image();
|
|
img.src = data.url;
|
|
var imgObj = document.createElement("img");
|
|
imgObj.src = img.src;
|
|
imgObj.className = "cur1";
|
|
imgObj.onclick = function() {insertImage(data.bigimg);};
|
|
tdObj.appendChild(imgObj);
|
|
var inputObj = document.createElement("input");
|
|
inputObj.type = 'hidden';
|
|
inputObj.name = 'picids['+data.picid+']';
|
|
inputObj.value= data.picid;
|
|
tdObj.appendChild(inputObj);
|
|
} else {
|
|
showDialog('图片上传失败', 'notice', null, null, 0, null, null, null, null, sdCloseTime);
|
|
}
|
|
$(file.id).style.display = 'none';
|
|
} else if(this.customSettings.uploadSource == 'portal') {
|
|
var data = eval('('+serverData+')');
|
|
if(data.aid) {
|
|
if(this.customSettings.uploadType == 'attach') {
|
|
ajaxget('portal.php?mod=attachment&op=getattach&type=attach&id=' + data.aid, file.id);
|
|
if($('attach_tblheader')) {
|
|
$('attach_tblheader').style.display = '';
|
|
}
|
|
} else {
|
|
var tdObj = getInsertTdId(this.customSettings.imgBoxObj, 'attach_list_'+data.aid);
|
|
ajaxget('portal.php?mod=attachment&op=getattach&id=' + data.aid, tdObj.id);
|
|
$(file.id).style.display = 'none';
|
|
}
|
|
} else {
|
|
showDialog('上传失败', 'notice', null, null, 0, null, null, null, null, sdCloseTime);
|
|
progress.setStatus("Cancelled");
|
|
this.cancelUpload(file.id);
|
|
progress.setCancelled();
|
|
progress.toggleCancel(true, this);
|
|
}
|
|
} else {
|
|
progress.setComplete();
|
|
progress.setStatus("上传完成.");
|
|
progress.toggleCancel(false);
|
|
}
|
|
} catch (ex) {
|
|
this.debug(ex);
|
|
}
|
|
}
|
|
|
|
function getInsertTdId(boxObj, tdId) {
|
|
var tableObj = boxObj.getElementsByTagName("table");
|
|
var tbodyObj, trObj, tdObj;
|
|
if(!tableObj.length) {
|
|
tableObj = document.createElement("table");
|
|
tableObj.className = "imgl";
|
|
tbodyObj = document.createElement("TBODY");
|
|
tableObj.appendChild(tbodyObj);
|
|
boxObj.appendChild(tableObj);
|
|
|
|
} else if(!tableObj[0].getElementsByTagName("tbody").length) {
|
|
tbodyObj = document.createElement("TBODY");
|
|
tableObj.appendChild(tbodyObj);
|
|
} else {
|
|
tableObj = tableObj[0];
|
|
tbodyObj = tableObj.getElementsByTagName("tbody")[0];
|
|
}
|
|
|
|
var createTr = true;
|
|
var inserID = 0;
|
|
if(tbodyObj.childNodes.length) {
|
|
trObj = tbodyObj.childNodes[tbodyObj.childNodes.length -1];
|
|
var findObj = trObj.getElementsByTagName("TD");
|
|
for(var j=0; j < findObj.length; j++) {
|
|
if(findObj[j].id == "") {
|
|
inserID = j;
|
|
tdObj = findObj[j];
|
|
break;
|
|
}
|
|
}
|
|
if(inserID) {
|
|
createTr = false;
|
|
}
|
|
}
|
|
if(createTr) {
|
|
trObj = document.createElement("TR");
|
|
for(var i=0; i < 4; i++) {
|
|
var newTd = document.createElement("TD");
|
|
newTd.width = "25%";
|
|
newTd.vAlign = "bottom";
|
|
newTd.appendChild(document.createTextNode(" "));
|
|
trObj.appendChild(newTd);
|
|
}
|
|
tdObj = trObj.childNodes[0];
|
|
tbodyObj.appendChild(trObj);
|
|
}
|
|
tdObj.id = tdId;
|
|
return tdObj;
|
|
}
|
|
function uploadComplete(file) {
|
|
try {
|
|
if (this.getStats().files_queued === 0) {
|
|
} else {
|
|
this.startUpload();
|
|
}
|
|
} catch (ex) {
|
|
this.debug(ex);
|
|
}
|
|
|
|
}
|
|
|
|
function uploadError(file, errorCode, message) {
|
|
try {
|
|
var progress = new FileProgress(file, this.customSettings.progressTarget);
|
|
progress.setError();
|
|
progress.toggleCancel(false);
|
|
|
|
switch (errorCode) {
|
|
case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
|
|
progress.setStatus("Upload Error: " + message);
|
|
this.debug("Error Code: HTTP Error, File name: " + file.name + ", Message: " + message);
|
|
break;
|
|
case SWFUpload.UPLOAD_ERROR.MISSING_UPLOAD_URL:
|
|
progress.setStatus("Configuration Error");
|
|
this.debug("Error Code: No backend file, File name: " + file.name + ", Message: " + message);
|
|
break;
|
|
case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:
|
|
progress.setStatus("Upload Failed.");
|
|
this.debug("Error Code: Upload Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
|
|
break;
|
|
case SWFUpload.UPLOAD_ERROR.IO_ERROR:
|
|
progress.setStatus("Server (IO) Error");
|
|
this.debug("Error Code: IO Error, File name: " + file.name + ", Message: " + message);
|
|
break;
|
|
case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:
|
|
progress.setStatus("Security Error");
|
|
this.debug("Error Code: Security Error, File name: " + file.name + ", Message: " + message);
|
|
break;
|
|
case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
|
|
progress.setStatus("Upload limit exceeded.");
|
|
this.debug("Error Code: Upload Limit Exceeded, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
|
|
break;
|
|
case SWFUpload.UPLOAD_ERROR.SPECIFIED_FILE_ID_NOT_FOUND:
|
|
progress.setStatus("File not found.");
|
|
this.debug("Error Code: The file was not found, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
|
|
break;
|
|
case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED:
|
|
progress.setStatus("Failed Validation. Upload skipped.");
|
|
this.debug("Error Code: File Validation Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
|
|
break;
|
|
case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
|
|
if (this.getStats().files_queued === 0) {
|
|
}
|
|
progress.setStatus(this.customSettings.alertType ? STATUSMSG[this.customSettings.alertType] : "Cancelled");
|
|
progress.setCancelled();
|
|
break;
|
|
case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
|
|
progress.setStatus("Stopped");
|
|
break;
|
|
default:
|
|
progress.setStatus("Unhandled Error: " + error_code);
|
|
this.debug("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
|
|
break;
|
|
}
|
|
} catch (ex) {
|
|
this.debug(ex);
|
|
}
|
|
} |