- /**
- * The FileFlash class provides a wrapper for a file pointer stored in Flash. The File wrapper
- * also implements the mechanics for uploading a file and tracking its progress.
- * @module file-flash
- */
- /**
- * The class provides a wrapper for a file pointer in Flash.
- * @class FileFlash
- * @extends Base
- * @constructor
- * @param {Object} config Configuration object.
- */
- var FileFlash = function(o) {
- FileFlash.superclass.constructor.apply(this, arguments);
- };
- Y.extend(FileFlash, Y.Base, {
- /**
- * Construction logic executed during FileFlash instantiation.
- *
- * @method initializer
- * @protected
- */
- initializer : function (cfg) {
- if (!this.get("id")) {
- this._set("id", Y.guid("file"));
- }
- },
- /**
- * Handler of events dispatched by the Flash player.
- *
- * @method _swfEventHandler
- * @param {Event} event The event object received from the Flash player.
- * @protected
- */
- _swfEventHandler: function (event) {
- if (event.id === this.get("id")) {
- switch (event.type) {
- /**
- * Signals that this file's upload has started.
- *
- * @event uploadstart
- * @param event {Event} The event object for the `uploadstart` with the
- * following payload:
- * <dl>
- * <dt>uploader</dt>
- * <dd>The Y.SWF instance of Flash uploader that's handling the upload.</dd>
- * </dl>
- */
- case "uploadstart":
- this.fire("uploadstart", {uploader: this.get("uploader")});
- break;
- case "uploadprogress":
- /**
- * Signals that progress has been made on the upload of this file.
- *
- * @event uploadprogress
- * @param event {Event} The event object for the `uploadprogress` with the
- * following payload:
- * <dl>
- * <dt>originEvent</dt>
- * <dd>The original event fired by the Flash uploader instance.</dd>
- * <dt>bytesLoaded</dt>
- * <dd>The number of bytes of the file that has been uploaded.</dd>
- * <dt>bytesTotal</dt>
- * <dd>The total number of bytes in the file (the file size)</dd>
- * <dt>percentLoaded</dt>
- * <dd>The fraction of the file that has been uploaded, out of 100.</dd>
- * </dl>
- */
- this.fire("uploadprogress", {originEvent: event,
- bytesLoaded: event.bytesLoaded,
- bytesTotal: event.bytesTotal,
- percentLoaded: Math.min(100, Math.round(10000*event.bytesLoaded/event.bytesTotal)/100)
- });
- this._set("bytesUploaded", event.bytesLoaded);
- break;
- case "uploadcomplete":
- /**
- * Signals that this file's upload has completed, but data has not yet been received from the server.
- *
- * @event uploadfinished
- * @param event {Event} The event object for the `uploadfinished` with the
- * following payload:
- * <dl>
- * <dt>originEvent</dt>
- * <dd>The original event fired by the Flash player instance.</dd>
- * </dl>
- */
- this.fire("uploadfinished", {originEvent: event});
- break;
- case "uploadcompletedata":
- /**
- * Signals that this file's upload has completed and data has been received from the server.
- *
- * @event uploadcomplete
- * @param event {Event} The event object for the `uploadcomplete` with the
- * following payload:
- * <dl>
- * <dt>originEvent</dt>
- * <dd>The original event fired by the Flash player instance.</dd>
- * <dt>data</dt>
- * <dd>The data returned by the server.</dd>
- * </dl>
- */
- this.fire("uploadcomplete", {originEvent: event,
- data: event.data});
- break;
- case "uploadcancel":
- /**
- * Signals that this file's upload has been cancelled.
- *
- * @event uploadcancel
- * @param event {Event} The event object for the `uploadcancel` with the
- * following payload:
- * <dl>
- * <dt>originEvent</dt>
- * <dd>The original event fired by the Flash player instance.</dd>
- * </dl>
- */
- this.fire("uploadcancel", {originEvent: event});
- break;
- case "uploaderror":
- /**
- * Signals that this file's upload has encountered an error.
- *
- * @event uploaderror
- * @param event {Event} The event object for the `uploaderror` with the
- * following payload:
- * <dl>
- * <dt>originEvent</dt>
- * <dd>The original event fired by the Flash player instance.</dd>
- * <dt>status</dt>
- * <dd>The status code reported by the Flash Player. If it's an HTTP error,
- * then this corresponds to the HTTP status code received by the uploader.</dd>
- * <dt>statusText</dt>
- * <dd>The text of the error event reported by the Flash Player.</dd>
- * <dt>source</dt>
- * <dd>Either "http" (if it's an HTTP error), or "io" (if it's a network transmission
- * error.)</dd>
- * </dl>
- */
- this.fire("uploaderror", {originEvent: event, status: event.status, statusText: event.message, source: event.source});
- }
- }
- },
- /**
- * Starts the upload of a specific file.
- *
- * @method startUpload
- * @param url {String} The URL to upload the file to.
- * @param parameters {Object} (optional) A set of key-value pairs to send as variables along with the file upload HTTP request.
- * @param fileFieldName {String} (optional) The name of the POST variable that should contain the uploaded file ('Filedata' by default)
- */
- startUpload: function(url, parameters, fileFieldName) {
-
- if (this.get("uploader")) {
- var myUploader = this.get("uploader"),
- fileField = fileFieldName || "Filedata",
- id = this.get("id"),
- params = parameters || null;
- this._set("bytesUploaded", 0);
-
- myUploader.on("uploadstart", this._swfEventHandler, this);
- myUploader.on("uploadprogress", this._swfEventHandler, this);
- myUploader.on("uploadcomplete", this._swfEventHandler, this);
- myUploader.on("uploadcompletedata", this._swfEventHandler, this);
- myUploader.on("uploaderror", this._swfEventHandler, this);
- myUploader.callSWF("upload", [id, url, params, fileField]);
- }
- },
- /**
- * Cancels the upload of a specific file, if currently in progress.
- *
- * @method cancelUpload
- */
- cancelUpload: function () {
- if (this.get("uploader")) {
- this.get("uploader").callSWF("cancel", [this.get("id")]);
- this.fire("uploadcancel");
- }
- }
- }, {
- /**
- * The identity of the class.
- *
- * @property NAME
- * @type String
- * @default 'file'
- * @readOnly
- * @protected
- * @static
- */
- NAME: 'file',
- /**
- * The type of transport.
- *
- * @property TYPE
- * @type String
- * @default 'flash'
- * @readOnly
- * @protected
- * @static
- */
- TYPE: "flash",
- /**
- * Static property used to define the default attribute configuration of
- * the File.
- *
- * @property ATTRS
- * @type {Object}
- * @protected
- * @static
- */
- ATTRS: {
- /**
- * A String containing the unique id of the file wrapped by the FileFlash instance.
- * The id is supplied by the Flash player uploader.
- *
- * @attribute id
- * @type {String}
- * @initOnly
- */
- id: {
- writeOnce: "initOnly",
- value: null
- },
- /**
- * The size of the file wrapped by FileFlash. This value is supplied by the Flash player uploader.
- *
- * @attribute size
- * @type {Number}
- * @initOnly
- */
- size: {
- writeOnce: "initOnly",
- value: 0
- },
- /**
- * The name of the file wrapped by FileFlash. This value is supplied by the Flash player uploader.
- *
- * @attribute name
- * @type {String}
- * @initOnly
- */
- name: {
- writeOnce: "initOnly",
- value: null
- },
- /**
- * The date that the file wrapped by FileFlash was created on. This value is supplied by the Flash player uploader.
- *
- * @attribute dateCreated
- * @type {Date}
- * @initOnly
- */
- dateCreated: {
- writeOnce: "initOnly",
- value: null
- },
- /**
- * The date that the file wrapped by FileFlash was last modified on. This value is supplied by the Flash player uploader.
- *
- * @attribute dateModified
- * @type {Date}
- * @initOnly
- */
- dateModified: {
- writeOnce: "initOnly",
- value: null
- },
- /**
- * The number of bytes of the file that has been uploaded to the server. This value is
- * non-zero only while a file is being uploaded.
- *
- * @attribute bytesUploaded
- * @type {Date}
- * @readOnly
- */
- bytesUploaded: {
- readOnly: true,
- value: 0
- },
- /**
- * The type of the file wrapped by FileFlash. This value is provided by the Flash player
- * uploader.
- *
- * @attribute type
- * @type {String}
- * @initOnly
- */
- type: {
- writeOnce: "initOnly",
- value: null
- },
- /**
- * The instance of Y.SWF wrapping the Flash player uploader associated with this file.
- *
- * @attribute uploder
- * @type {SWF}
- * @initOnly
- */
- uploader: {
- writeOnce: "initOnly",
- value: null
- }
- }
- });
- Y.FileFlash = FileFlash;
-