source: [view]
dojo.provide("dojox.form.uploader.plugins.Flash");
dojo.require("dojox.form.uploader.plugins.HTML5");
dojo.require("dojox.embed.flashVars");
dojo.require("dojox.embed.Flash");
dojo.declare("dojox.form.uploader.plugins.Flash", [], {
//
// Version: 1.6
//
// summary:
// A plugin for dojox.form.Uploader that utilizes a Flash SWF for handling to upload in IE.
// All other browsers will use the HTML5 plugin, unless force="flash" is used, then Flash
// will be used in all browsers. force="flash" is provided because Flash has some features
// that HTML5 does not yet have. But it is still not recommended because of the many problems
// that Firefox and Webkit have with the Flash plugin.
//
// description:
// Inherits all properties from dojox.form.Uploader and dojox.form.uploader.plugins.HTML5.
// All properties and methods listed here are specific to the Flash plugin only.
//
// swfPath:String
// Path to SWF. Can be overwritten or provided in djConfig.
swfPath:dojo.config.uploaderPath || dojo.moduleUrl("dojox.form", "resources/uploader.swf"),
//
// skipServerCheck: Boolean
// If true, will not verify that the server was sent the correct format.
// This can be safely set to true. The purpose of the server side check
// is mainly to show the dev if they've implemented the different returns
// correctly.
skipServerCheck:true,
//
// serverTimeout:Number (milliseconds)
// The amount of time given to the uploaded file
// to wait for a server response. After this amount
// of time, the onComplete is fired but with a 'server timeout'
// error in the returned item.
serverTimeout: 2000,
//
// isDebug: Boolean
// If true, outputs traces from the SWF to console. What exactly gets passed
// is very relative, and depends upon what traces have been left in the DEFT SWF.
isDebug:false,
//
// devMode: Boolean.
// Re-implemented. devMode increases the logging, adding style tracing from the SWF.
devMode:false,
//
// deferredUploading: Number (1 - X)
// (Flash only) throttles the upload to a certain amount of files at a time.
// By default, Flash uploads file one at a time to the server, but in parallel.
// Firefox will try to queue all files at once, leading to problems. Set this
// to the amount to upload in parallel at a time.
// Generally, 1 should work fine, but you can experiment with queuing more than
// one at a time.
// This is of course ignored if selectMultipleFiles equals false.
deferredUploading:0,
//
// force: String
// Use "flash" to always use Flash (and hopefully force the user to download the plugin
// if they don't have it).
force:"",
postMixInProperties: function(){
if(!this.supports("multiple")){
// Flash will only be used in IE6-8 unless force="flash"
this.uploadType = "flash";
this._files = [];
this._fileMap = {};
this._createInput = this._createFlashUploader;
this.getFileList = this.getFlashFileList;
this.reset = this.flashReset;
this.upload = this.uploadFlash;
this.submit = this.submitFlash;
this.fieldname = "flashUploadFiles"; ///////////////////// this.name
}
this.inherited(arguments);
},
/*************************
* Public Events *
*************************/
onReady: function(/* dojox.form.FileUploader */ uploader){
// summary:
// Stub - Fired when dojox.embed.Flash has created the
// Flash object, but it has not necessarilly finished
// downloading, and is ready to be communicated with.
},
onLoad: function(/* dojox.form.FileUploader */ uploader){
// summary:
// Stub - SWF has been downloaded 100%.
},
onFileChange: function(fileArray){
// summary:
// Stub - Flash-specific event. Fires on each selection of files
// and only provides the files selected on that event - not all files
// selected, as with HTML5
},
onFileProgress: function(fileArray){
// summary:
// Stub - Flash-specific event. Fires on progress of upload
// and only provides a file-specific event
},
/*************************
* Public Methods *
*************************/
getFlashFileList: function(){
// summary:
// Returns list of currently selected files
return this._files; // Array
},
flashReset: function(){
this.flashMovie.reset();
this._files = [];
},
/*************************
* Private Methods *
*************************/
uploadFlash: function(){
// summary:
// Uploads selected files. Alias "upload()" should be used instead.
// tags:
// private
this.onBegin(this.getFileList());
this.flashMovie.doUpload();
},
submitFlash: function(/* Object */formParams){
// summary:
// Uploads selected files with form data. Alias "submit()" should be used instead.
// tags:
// private
this.onBegin(this.getFileList());
this.flashMovie.doUpload(formParams);
},
_change: function(fileArray){
this._files = this._files.concat(fileArray);
dojo.forEach(fileArray, function(f){
f.bytesLoaded = 0;
f.bytesTotal = f.size;
this._fileMap[f.name+"_"+f.size] = f;
}, this);
this.onChange(this._files);
this.onFileChange(fileArray);
},
_complete: function(fileArray){
var o = this._getCustomEvent();
o.type = "load";
this.onComplete(fileArray);
},
_progress: function(f){
this._fileMap[f.name+"_"+f.bytesTotal].bytesLoaded = f.bytesLoaded;
var o = this._getCustomEvent();
this.onFileProgress(f);
this.onProgress(o);
},
_error: function(err){
this.onError(err);
},
_onFlashBlur: function(fileArray){
//console.log("UploaderFlash._onFlashBlur");