DiscuzX/upload/static/js/mobile/ajaxfileupload.js

151 lines
4.6 KiB
JavaScript

jQuery.extend({
createuploadiframe: function(id, url) {
var iframeid = 'uploadiframe' + id;
var iframe = '<iframe id="' + iframeid + '" name="' + iframeid + '"';
if(window.ActiveXObject) {
if(typeof url == 'boolean') {
iframe += ' src="' + 'javascript:false' + '"';
} else if(typeof url == 'string') {
iframe += ' src="' + url + '"';
}
}
iframe += ' />';
jQuery(iframe).css({'position':'absolute', 'top':'-1200px', 'left':'-1200px'}).appendTo(document.body);
return jQuery('#' + iframeid).get(0);
},
createuploadform: function(id, fileobjid, data) {
var formid = 'uploadform' + id;
var fileid = 'uploadfile' + id;
var form = jQuery('<form method="post" name="' + formid + '" id="' + formid + '" enctype="multipart/form-data"></form>');
if(data) {
for(var i in data) {
jQuery('<input type="hidden" name="' + i + '" value="' + data[i] + '" />').appendTo(form);
}
}
var oldobj = jQuery('#' + fileobjid);
var newobj = jQuery(oldobj).clone();
jQuery(oldobj).attr('id', fileid).before(newobj).appendTo(form);
jQuery(form).css({'position':'absolute', 'top':'-1200px', 'left':'-1200px'}).appendTo(document.body);
return form;
},
ajaxfileupload: function(s) {
s = jQuery.extend({}, jQuery.ajaxSettings, s);
var id = new Date().getTime();
var form = jQuery.createuploadform(id, s.fileElementId, (typeof(s.data)=='undefined'?false:s.data));
var io = jQuery.createuploadiframe(id, s.secureuri);
var iframeid = 'uploadiframe' + id;
var formid = 'uploadform' + id;
if(s.global && ! jQuery.active++) {
jQuery.event.trigger("ajaxStart");
}
var requestDone = false;
var xml = {};
if(s.global) {
jQuery.event.trigger("ajaxSend", [xml, s]);
}
var uploadcallback = function(istimeout) {
var io = document.getElementById(iframeid);
try {
if(io.contentWindow) {
xml.responseText = io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:null;
xml.responseXML = io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;
} else if(io.contentDocument) {
xml.responseText = io.contentDocument.document.body?io.contentDocument.document.body.innerHTML:null;
xml.responseXML = io.contentDocument.document.XMLDocument?io.contentDocument.document.XMLDocument:io.contentDocument.document;
}
} catch(e) {
jQuery.handleerror(s, xml, null, e);
}
if(xml||istimeout == 'timeout') {
requestdone = true;
var status;
try {
status = istimeout != 'timeout' ? 'success' : 'error';
if(status != 'error') {
var data = jQuery.uploadhttpdata(xml, s.dataType);
if(s.success) {
s.success( data, status );
}
if(s.global) {
jQuery.event.trigger("ajaxSuccess", [xml, s]);
}
} else {
jQuery.handleerror(s, xml, status);
}
} catch(e) {
status = 'error';
jQuery.handleerror(s, xml, status, e);
}
if(s.global) {
jQuery.event.trigger("ajaxComplete", [xml, s]);
}
if(s.global && ! --jQuery.active) {
jQuery.event.trigger("ajaxStop");
}
if (s.complete) {
s.complete(xml, status);
}
jQuery(io).off();
setTimeout(function() {
try {
jQuery(io).remove();
jQuery(form).remove();
} catch(e) {
jQuery.handleerror(s, xml, null, e);
}
}, 100);
xml = null;
}
}
if(s.timeout > 0) {
setTimeout(function() {
if(!requestdone) {
uploadcallback('timeout');
}
}, s.timeout);
}
try {
var form = jQuery('#' + formid);
jQuery(form).attr('action', s.url).attr('method', 'post').attr('target', iframeid);
if(form.encoding) {
jQuery(form).attr('encoding', 'multipart/form-data');
} else {
jQuery(form).attr('enctype', 'multipart/form-data');
}
jQuery(form).submit();
} catch(e) {
jQuery.handleerror(s, xml, null, e);
}
jQuery('#' + iframeid).load(uploadcallback);
return {abort: function () {}};
},
uploadhttpdata: function(r, type) {
var data = !type;
data = type == 'xml' || data ? r.responseXML : r.responseText;
if(type == 'script') {
jQuery.globalEval(data);
}
if(type == "json") {
eval("data = " + data);
}
if(type == "html") {
jQuery("<div>").html(data);
}
return data;
},
handleerror: function(s, xhr, status, e) {
if(s.error) {
s.error.call(s.context || s, xhr, status, e);
}
if(s.global) {
(s.context ? jQuery(s.context) : jQuery.event).trigger("ajaxError", [xhr, s, e]);
}
}
});