src/cm/media/js/lib/yui/yui3-3.15.0/build/file-html5/file-html5-debug.js
changeset 602 e16a97fb364a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/cm/media/js/lib/yui/yui3-3.15.0/build/file-html5/file-html5-debug.js	Mon Mar 10 15:19:48 2014 +0100
@@ -0,0 +1,503 @@
+YUI.add('file-html5', function (Y, NAME) {
+
+    /**
+     * The FileHTML5 class provides a wrapper for a file pointer in an HTML5 The File wrapper
+     * also implements the mechanics for uploading a file and tracking its progress.
+     * @module file-html5
+     */
+
+    /**
+     * The class provides a wrapper for a file pointer.
+     * @class FileHTML5
+     * @extends Base
+     * @constructor
+     * @param {Object} config Configuration object.
+     */
+    var Lang = Y.Lang,
+        Bind = Y.bind,
+        Win = Y.config.win;
+
+    var FileHTML5 = function(o) {
+
+        var file = null;
+
+        if (FileHTML5.isValidFile(o)) {
+            file = o;
+        }
+        else if (FileHTML5.isValidFile(o.file)) {
+            file = o.file;
+        }
+        else {
+            file = false;
+        }
+
+        FileHTML5.superclass.constructor.apply(this, arguments);
+
+        if (file && FileHTML5.canUpload()) {
+           if (!this.get("file")) {
+               this._set("file", file);
+           }
+
+           if (!this.get("name")) {
+           this._set("name", file.name || file.fileName);
+           }
+
+           if (this.get("size") != (file.size || file.fileSize)) {
+           this._set("size", file.size || file.fileSize);
+           }
+
+           if (!this.get("type")) {
+           this._set("type", file.type);
+           }
+
+           if (file.hasOwnProperty("lastModifiedDate") && !this.get("dateModified")) {
+               this._set("dateModified", file.lastModifiedDate);
+           }
+        }
+    };
+
+
+    Y.extend(FileHTML5, Y.Base, {
+
+       /**
+        * Construction logic executed during FileHTML5 instantiation.
+        *
+        * @method initializer
+        * @protected
+        */
+        initializer : function (cfg) {
+            if (!this.get("id")) {
+                this._set("id", Y.guid("file"));
+            }
+        },
+
+       /**
+        * Handler of events dispatched by the XMLHTTPRequest.
+        *
+        * @method _uploadEventHandler
+        * @param {Event} event The event object received from the XMLHTTPRequest.
+        * @protected
+        */
+        _uploadEventHandler: function (event) {
+            var xhr = this.get("xhr");
+
+            switch (event.type) {
+                case "progress":
+                  /**
+                   * 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 XMLHttpRequest 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.loaded,
+                                               bytesTotal: this.get("size"),
+                                               percentLoaded: Math.min(100, Math.round(10000*event.loaded/this.get("size"))/100)
+                                               });
+                   this._set("bytesUploaded", event.loaded);
+                   break;
+
+                case "load":
+                  /**
+                   * 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 XMLHttpRequest instance.</dd>
+                   *      <dt>data</dt>
+                   *          <dd>The data returned by the server.</dd>
+                   *  </dl>
+                   */
+
+                   if (xhr.status >= 200 && xhr.status <= 299) {
+                        this.fire("uploadcomplete", {originEvent: event,
+                                                     data: event.target.responseText});
+                        var xhrupload = xhr.upload,
+                            boundEventHandler = this.get("boundEventHandler");
+
+                        xhrupload.removeEventListener ("progress", boundEventHandler);
+                        xhrupload.removeEventListener ("error", boundEventHandler);
+                        xhrupload.removeEventListener ("abort", boundEventHandler);
+                        xhr.removeEventListener ("load", boundEventHandler);
+                        xhr.removeEventListener ("error", boundEventHandler);
+                        xhr.removeEventListener ("readystatechange", boundEventHandler);
+
+                        this._set("xhr", null);
+                   }
+                   else {
+                        this.fire("uploaderror", {originEvent: event,
+                                                  data: xhr.responseText,
+                                                  status: xhr.status,
+                                                  statusText: xhr.statusText,
+                                                  source: "http"});
+                   }
+                   break;
+
+                case "error":
+                  /**
+                   * 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 XMLHttpRequest instance.</dd>
+                   *      <dt>data</dt>
+                   *          <dd>The data returned by the server.</dd>
+                   *      <dt>status</dt>
+                   *          <dd>The status code reported by the XMLHttpRequest. 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 XMLHttpRequest instance</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,
+                                                  data: xhr.responseText,
+                                                  status: xhr.status,
+                                                  statusText: xhr.statusText,
+                                                  source: "io"});
+                   break;
+
+                case "abort":
+
+                  /**
+                   * 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 XMLHttpRequest instance.</dd>
+                   *  </dl>
+                   */
+                   this.fire("uploadcancel", {originEvent: event});
+                   break;
+
+                case "readystatechange":
+
+                  /**
+                   * Signals that XMLHttpRequest has fired a readystatechange event.
+                   *
+                   * @event readystatechange
+                   * @param event {Event} The event object for the `readystatechange` with the
+                   *                      following payload:
+                   *  <dl>
+                   *      <dt>readyState</dt>
+                   *          <dd>The readyState code reported by the XMLHttpRequest instance.</dd>
+                   *      <dt>originEvent</dt>
+                   *          <dd>The original event fired by the XMLHttpRequest instance.</dd>
+                   *  </dl>
+                   */
+                   this.fire("readystatechange", {readyState: event.target.readyState,
+                                                  originEvent: event});
+                   break;
+            }
+        },
+
+       /**
+        * 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) {
+
+            this._set("bytesUploaded", 0);
+
+            this._set("xhr", new XMLHttpRequest());
+            this._set("boundEventHandler", Bind(this._uploadEventHandler, this));
+
+            var uploadData = new FormData(),
+                fileField = fileFieldName || "Filedata",
+                xhr = this.get("xhr"),
+                xhrupload = this.get("xhr").upload,
+                boundEventHandler = this.get("boundEventHandler");
+
+            Y.each(parameters, function (value, key) {uploadData.append(key, value);});
+            uploadData.append(fileField, this.get("file"));
+
+
+
+
+            xhr.addEventListener ("loadstart", boundEventHandler, false);
+            xhrupload.addEventListener ("progress", boundEventHandler, false);
+            xhr.addEventListener ("load", boundEventHandler, false);
+            xhr.addEventListener ("error", boundEventHandler, false);
+            xhrupload.addEventListener ("error", boundEventHandler, false);
+            xhrupload.addEventListener ("abort", boundEventHandler, false);
+            xhr.addEventListener ("abort", boundEventHandler, false);
+            xhr.addEventListener ("loadend", boundEventHandler, false);
+            xhr.addEventListener ("readystatechange", boundEventHandler, false);
+
+            xhr.open("POST", url, true);
+
+            xhr.withCredentials = this.get("xhrWithCredentials");
+
+            Y.each(this.get("xhrHeaders"), function (value, key) {
+                 xhr.setRequestHeader(key, value);
+            });
+
+            xhr.send(uploadData);
+
+            /**
+             * 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>xhr</dt>
+             *          <dd>The XMLHttpRequest instance handling the file upload.</dd>
+             *  </dl>
+             */
+             this.fire("uploadstart", {xhr: xhr});
+
+        },
+
+       /**
+        * Cancels the upload of a specific file, if currently in progress.
+        *
+        * @method cancelUpload
+        */
+        cancelUpload: function () {
+            var xhr = this.get('xhr');
+            if (xhr) {
+                xhr.abort();
+            }
+        }
+
+
+    }, {
+
+       /**
+        * 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 'html5'
+        * @readOnly
+        * @protected
+        * @static
+        */
+        TYPE: 'html5',
+
+       /**
+        * 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 FileHTML5. This value is supplied by the instance of File().
+        *
+        * @attribute size
+        * @type {Number}
+        * @initOnly
+        */
+        size: {
+            writeOnce: "initOnly",
+            value: 0
+        },
+
+       /**
+        * The name of the file wrapped by FileHTML5. This value is supplied by the instance of File().
+        *
+        * @attribute name
+        * @type {String}
+        * @initOnly
+        */
+        name: {
+            writeOnce: "initOnly",
+            value: null
+        },
+
+       /**
+        * The date that the file wrapped by FileHTML5 was created on. This value is supplied by the instance of File().
+        *
+        * @attribute dateCreated
+        * @type {Date}
+        * @initOnly
+        * @default null
+        */
+        dateCreated: {
+            writeOnce: "initOnly",
+            value: null
+        },
+
+       /**
+        * The date that the file wrapped by FileHTML5 was last modified on. This value is supplied by the instance of File().
+        *
+        * @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 FileHTML. This value is provided by the instance of File()
+        *
+        * @attribute type
+        * @type {String}
+        * @initOnly
+        */
+        type: {
+            writeOnce: "initOnly",
+            value: null
+        },
+
+       /**
+        * The pointer to the instance of File() wrapped by FileHTML5.
+        *
+        * @attribute file
+        * @type {File}
+        * @initOnly
+        */
+        file: {
+            writeOnce: "initOnly",
+            value: null
+        },
+
+       /**
+        * The pointer to the instance of XMLHttpRequest used by FileHTML5 to upload the file.
+        *
+        * @attribute xhr
+        * @type {XMLHttpRequest}
+        * @initOnly
+        */
+        xhr: {
+            readOnly: true,
+            value: null
+        },
+
+       /**
+        * The dictionary of headers that should be set on the XMLHttpRequest object before
+        * sending it.
+        *
+        * @attribute xhrHeaders
+        * @type {Object}
+        * @initOnly
+        */
+        xhrHeaders: {
+            value: {}
+        },
+
+       /**
+        * A Boolean indicating whether the XMLHttpRequest should be sent with user credentials.
+        * This does not affect same-site requests.
+        *
+        * @attribute xhrWithCredentials
+        * @type {Boolean}
+        * @initOnly
+        */
+        xhrWithCredentials: {
+            value: true
+        },
+
+       /**
+        * The bound event handler used to handle events from XMLHttpRequest.
+        *
+        * @attribute boundEventHandler
+        * @type {Function}
+        * @initOnly
+        */
+        boundEventHandler: {
+            readOnly: true,
+            value: null
+        }
+        },
+
+       /**
+        * Checks whether a specific native file instance is valid
+        *
+        * @method isValidFile
+        * @param file {File} A native File() instance.
+        * @static
+        */
+        isValidFile: function (file) {
+            return (Win && Win.File && file instanceof File);
+        },
+
+       /**
+        * Checks whether the browser has a native upload capability
+        * via XMLHttpRequest Level 2.
+        *
+        * @method canUpload
+        * @static
+        */
+        canUpload: function () {
+            return (Win && Win.FormData && Win.XMLHttpRequest);
+        }
+    });
+
+    Y.FileHTML5 = FileHTML5;
+
+
+}, '@VERSION@', {"requires": ["base"]});