src/cm/media/js/lib/yui/yui3-3.15.0/build/io-upload-iframe/io-upload-iframe.js
author gibus
Mon, 10 Mar 2014 15:19:48 +0100
changeset 602 e16a97fb364a
permissions -rw-r--r--
Use YUI 3.15
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
602
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     1
YUI.add('io-upload-iframe', function (Y, NAME) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     2
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     3
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     4
Extends the IO  to enable file uploads, with HTML forms
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
using an iframe as the transport medium.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
@module io
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
@submodule io-upload-iframe
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
@for IO
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
var w = Y.config.win,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
    d = Y.config.doc,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
    _std = (d.documentMode && d.documentMode >= 8),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
    _d = decodeURIComponent,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
    _end = Y.IO.prototype.end;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
 * Creates the iframe transported used in file upload
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
 * transactions, and binds the response event handler.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
 * @method _cFrame
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
 * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
 * @param {Object} o Transaction object generated by _create().
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
 * @param {Object} c Configuration object passed to YUI.io().
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
 * @param {Object} io
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
function _cFrame(o, c, io) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
    var i = Y.Node.create('<iframe src="#" id="io_iframe' + o.id + '" name="io_iframe' + o.id + '" />');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
        i._node.style.position = 'absolute';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
        i._node.style.top = '-1000px';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
        i._node.style.left = '-1000px';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
        Y.one('body').appendChild(i);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
    // Bind the onload handler to the iframe to detect the file upload response.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
    Y.on("load", function() { io._uploadComplete(o, c); }, '#io_iframe' + o.id);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
 * Removes the iframe transport used in the file upload
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
 * transaction.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
 * @method _dFrame
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
 * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
 * @param {Number} id The transaction ID used in the iframe's creation.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
function _dFrame(id) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
	Y.Event.purgeElement('#io_iframe' + id, false);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
	Y.one('body').removeChild(Y.one('#io_iframe' + id));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
Y.mix(Y.IO.prototype, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
   /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
    * Parses the POST data object and creates hidden form elements
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
    * for each key-value, and appends them to the HTML form object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
    * @method _addData
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
    * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
    * @param {Object} f HTML form object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
    * @param {String} s The key-value POST data.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
    * @return {Array} o Array of created fields.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
    _addData: function(f, s) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
        // Serialize an object into a key-value string using
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
        // querystring-stringify-simple.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
        if (Y.Lang.isObject(s)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
            s = Y.QueryString.stringify(s);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
        var o = [],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
            m = s.split('='),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
            i, l;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
        for (i = 0, l = m.length - 1; i < l; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
            o[i] = d.createElement('input');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
            o[i].type = 'hidden';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
            o[i].name = _d(m[i].substring(m[i].lastIndexOf('&') + 1));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
            o[i].value = (i + 1 === l) ? _d(m[i + 1]) : _d(m[i + 1].substring(0, (m[i + 1].lastIndexOf('&'))));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
            f.appendChild(o[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
        return o;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
   /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
    * Removes the custom fields created to pass additional POST
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
    * data, along with the HTML form fields.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
    * @method _removeData
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
    * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
    * @param {Object} f HTML form object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
    * @param {Object} o HTML form fields created from configuration.data.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
    _removeData: function(f, o) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
        var i, l;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
        for (i = 0, l = o.length; i < l; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
            f.removeChild(o[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
   /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
    * Sets the appropriate attributes and values to the HTML
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
    * form, in preparation of a file upload transaction.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
    * @method _setAttrs
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
    * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
    * @param {Object} f HTML form object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
    * @param {Object} id The Transaction ID.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
    * @param {Object} uri Qualified path to transaction resource.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   110
    _setAttrs: function(f, id, uri) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   111
        // Track original HTML form attribute values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   112
        this._originalFormAttrs = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
            action: f.getAttribute('action'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   114
            target: f.getAttribute('target')
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   115
        };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   116
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
        f.setAttribute('action', uri);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
        f.setAttribute('method', 'POST');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
        f.setAttribute('target', 'io_iframe' + id );
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
        f.setAttribute(Y.UA.ie && !_std ? 'encoding' : 'enctype', 'multipart/form-data');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
   /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
    * Reset the HTML form attributes to their original values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
    * @method _resetAttrs
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
    * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   128
    * @param {Object} f HTML form object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   129
    * @param {Object} a Object of original attributes.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   130
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   131
    _resetAttrs: function(f, a) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   132
        Y.Object.each(a, function(v, p) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   133
            if (v) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   134
                f.setAttribute(p, v);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   135
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   136
            else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   137
                f.removeAttribute(p);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   138
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   139
        });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   140
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   141
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   142
   /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   143
    * Starts timeout count if the configuration object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   144
    * has a defined timeout property.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   145
    *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   146
    * @method _startUploadTimeout
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   147
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   148
    * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   149
    * @param {Object} o Transaction object generated by _create().
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   150
    * @param {Object} c Configuration object passed to YUI.io().
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   151
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   152
    _startUploadTimeout: function(o, c) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   153
        var io = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   154
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   155
        io._timeout[o.id] = w.setTimeout(
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   156
            function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   157
                o.status = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   158
                o.statusText = 'timeout';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   159
                io.complete(o, c);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   160
                io.end(o, c);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   161
            }, c.timeout);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   162
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   163
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   164
   /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   165
    * Clears the timeout interval started by _startUploadTimeout().
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   166
    * @method _clearUploadTimeout
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   167
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   168
    * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   169
    * @param {Number} id - Transaction ID.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   170
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   171
    _clearUploadTimeout: function(id) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   172
        var io = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   173
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   174
        w.clearTimeout(io._timeout[id]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   175
        delete io._timeout[id];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   176
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   177
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   178
   /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   179
    * Bound to the iframe's Load event and processes
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   180
    * the response data.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   181
    * @method _uploadComplete
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   182
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   183
    * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   184
    * @param {Object} o The transaction object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   185
    * @param {Object} c Configuration object for the transaction.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   186
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   187
    _uploadComplete: function(o, c) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   188
        var io = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   189
            d = Y.one('#io_iframe' + o.id).get('contentWindow.document'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   190
            b = d.one('body'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   191
            p;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   192
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   193
        if (c.timeout) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   194
            io._clearUploadTimeout(o.id);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   195
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   196
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   197
		try {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   198
			if (b) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   199
				// When a response Content-Type of "text/plain" is used, Firefox and Safari
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   200
				// will wrap the response string with <pre></pre>.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   201
				p = b.one('pre:first-child');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   202
				o.c.responseText = p ? p.get('text') : b.get('text');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   203
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   204
			else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   205
				o.c.responseXML = d._node;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   206
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   207
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   208
		catch (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   209
			o.e = "upload failure";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   210
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   211
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   212
        io.complete(o, c);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   213
        io.end(o, c);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   214
        // The transaction is complete, so call _dFrame to remove
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   215
        // the event listener bound to the iframe transport, and then
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   216
        // destroy the iframe.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   217
        w.setTimeout( function() { _dFrame(o.id); }, 0);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   218
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   219
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   220
   /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   221
    * Uploads HTML form data, inclusive of files/attachments,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   222
    * using the iframe created in _create to facilitate the transaction.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   223
    * @method _upload
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   224
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   225
    * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   226
    * @param {Object} o The transaction object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   227
    * @param {Object} uri Qualified path to transaction resource.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   228
    * @param {Object} c Configuration object for the transaction.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   229
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   230
    _upload: function(o, uri, c) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   231
        var io = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   232
            f = (typeof c.form.id === 'string') ? d.getElementById(c.form.id) : c.form.id,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   233
            fields;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   234
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   235
        // Initialize the HTML form properties in case they are
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   236
        // not defined in the HTML form.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   237
        io._setAttrs(f, o.id, uri);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   238
        if (c.data) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   239
            fields = io._addData(f, c.data);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   240
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   241
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   242
        // Start polling if a callback is present and the timeout
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   243
        // property has been defined.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   244
        if (c.timeout) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   245
            io._startUploadTimeout(o, c);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   246
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   247
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   248
        // Start file upload.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   249
        f.submit();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   250
        io.start(o, c);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   251
        if (c.data) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   252
            io._removeData(f, fields);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   253
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   254
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   255
        return {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   256
            id: o.id,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   257
            abort: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   258
                o.status = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   259
                o.statusText = 'abort';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   260
                if (Y.one('#io_iframe' + o.id)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   261
                    _dFrame(o.id);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   262
                    io.complete(o, c);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   263
                    io.end(o, c);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   264
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   265
                else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   266
                    return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   267
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   268
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   269
            isInProgress: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   270
                return Y.one('#io_iframe' + o.id) ? true : false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   271
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   272
            io: io
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   273
        };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   274
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   275
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   276
    upload: function(o, uri, c) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   277
        _cFrame(o, c, this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   278
        return this._upload(o, uri, c);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   279
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   280
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   281
    end: function(transaction, config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   282
        var form, io;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   283
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   284
        if (config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   285
            form = config.form;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   286
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   287
            if (form && form.upload) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   288
                io = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   289
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   290
                // Restore HTML form attributes to their original values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   291
                form = (typeof form.id === 'string') ? d.getElementById(form.id) : form.id;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   292
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   293
                // Check whether the form still exists before resetting it.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   294
                if (form) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   295
                    io._resetAttrs(form, this._originalFormAttrs);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   296
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   297
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   298
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   299
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   300
        return _end.call(this, transaction, config);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   301
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   302
}, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   303
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   304
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   305
}, '@VERSION@', {"requires": ["io-base", "node-base"]});