src/cm/media/js/lib/yui/yui3-3.15.0/build/io-upload-iframe/io-upload-iframe-debug.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 602 e16a97fb364a
permissions -rw-r--r--
add link to "privacy policy" in the header test
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
	Y.log('The iframe transport for transaction ' + id + ' has been destroyed.', 'info', 'io');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
Y.mix(Y.IO.prototype, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
   /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
    * Parses the POST data object and creates hidden form elements
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
    * for each key-value, and appends them to the HTML form object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
    * @method _addData
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
    * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
    * @param {Object} f HTML form object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
    * @param {String} s The key-value POST data.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
    * @return {Array} o Array of created fields.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
    _addData: function(f, s) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
        // Serialize an object into a key-value string using
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
        // querystring-stringify-simple.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
        if (Y.Lang.isObject(s)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
            s = Y.QueryString.stringify(s);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
        var o = [],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
            m = s.split('='),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
            i, l;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
        for (i = 0, l = m.length - 1; i < l; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
            o[i] = d.createElement('input');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
            o[i].type = 'hidden';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
            o[i].name = _d(m[i].substring(m[i].lastIndexOf('&') + 1));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
            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
    78
            f.appendChild(o[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
            Y.log('key: ' +  o[i].name + ' and value: ' + o[i].value + ' added as form data.', 'info', 'io');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
        return o;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
   /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
    * Removes the custom fields created to pass additional POST
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
    * data, along with the HTML form fields.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
    * @method _removeData
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
    * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
    * @param {Object} f HTML form object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
    * @param {Object} o HTML form fields created from configuration.data.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
    _removeData: function(f, o) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
        var i, l;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
        for (i = 0, l = o.length; i < l; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
            f.removeChild(o[i]);
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
   /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
    * Sets the appropriate attributes and values to the HTML
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
    * form, in preparation of a file upload transaction.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
    * @method _setAttrs
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
    * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
    * @param {Object} f HTML form object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
    * @param {Object} id The Transaction ID.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   110
    * @param {Object} uri Qualified path to transaction resource.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   111
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   112
    _setAttrs: function(f, id, uri) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
        // Track original HTML form attribute values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   114
        this._originalFormAttrs = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   115
            action: f.getAttribute('action'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   116
            target: f.getAttribute('target')
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
        };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
        f.setAttribute('action', uri);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
        f.setAttribute('method', 'POST');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
        f.setAttribute('target', 'io_iframe' + id );
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
        f.setAttribute(Y.UA.ie && !_std ? 'encoding' : 'enctype', 'multipart/form-data');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
   /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
    * Reset the HTML form attributes to their original values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
    * @method _resetAttrs
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   128
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   129
    * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   130
    * @param {Object} f HTML form object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   131
    * @param {Object} a Object of original attributes.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   132
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   133
    _resetAttrs: function(f, a) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   134
        Y.Object.each(a, function(v, p) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   135
            if (v) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   136
                f.setAttribute(p, v);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   137
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   138
            else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   139
                f.removeAttribute(p);
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   144
   /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   145
    * Starts timeout count if the configuration object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   146
    * has a defined timeout property.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   147
    *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   148
    * @method _startUploadTimeout
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   149
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   150
    * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   151
    * @param {Object} o Transaction object generated by _create().
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   152
    * @param {Object} c Configuration object passed to YUI.io().
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   153
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   154
    _startUploadTimeout: function(o, c) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   155
        var io = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   156
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   157
        io._timeout[o.id] = w.setTimeout(
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   158
            function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   159
                o.status = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   160
                o.statusText = 'timeout';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   161
                io.complete(o, c);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   162
                io.end(o, c);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   163
                Y.log('Transaction ' + o.id + ' timeout.', 'info', 'io');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   164
            }, c.timeout);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   165
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   166
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   167
   /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   168
    * Clears the timeout interval started by _startUploadTimeout().
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   169
    * @method _clearUploadTimeout
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   170
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   171
    * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   172
    * @param {Number} id - Transaction ID.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   173
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   174
    _clearUploadTimeout: function(id) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   175
        var io = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   176
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   177
        w.clearTimeout(io._timeout[id]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   178
        delete io._timeout[id];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   179
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   180
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   181
   /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   182
    * Bound to the iframe's Load event and processes
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   183
    * the response data.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   184
    * @method _uploadComplete
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   185
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   186
    * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   187
    * @param {Object} o The transaction object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   188
    * @param {Object} c Configuration object for the transaction.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   189
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   190
    _uploadComplete: function(o, c) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   191
        var io = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   192
            d = Y.one('#io_iframe' + o.id).get('contentWindow.document'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   193
            b = d.one('body'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   194
            p;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   195
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   196
        if (c.timeout) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   197
            io._clearUploadTimeout(o.id);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   198
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   199
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   200
		try {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   201
			if (b) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   202
				// When a response Content-Type of "text/plain" is used, Firefox and Safari
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   203
				// will wrap the response string with <pre></pre>.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   204
				p = b.one('pre:first-child');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   205
				o.c.responseText = p ? p.get('text') : b.get('text');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   206
				Y.log('The responseText value for transaction ' + o.id + ' is: ' + o.c.responseText + '.', 'info', 'io');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   207
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   208
			else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   209
				o.c.responseXML = d._node;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   210
				Y.log('The response for transaction ' + o.id + ' is an XML document.', 'info', 'io');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   211
			}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   212
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   213
		catch (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   214
			o.e = "upload failure";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   215
		}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   216
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   217
        io.complete(o, c);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   218
        io.end(o, c);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   219
        // The transaction is complete, so call _dFrame to remove
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   220
        // the event listener bound to the iframe transport, and then
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   221
        // destroy the iframe.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   222
        w.setTimeout( function() { _dFrame(o.id); }, 0);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   223
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   224
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   225
   /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   226
    * Uploads HTML form data, inclusive of files/attachments,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   227
    * using the iframe created in _create to facilitate the transaction.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   228
    * @method _upload
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   229
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   230
    * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   231
    * @param {Object} o The transaction object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   232
    * @param {Object} uri Qualified path to transaction resource.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   233
    * @param {Object} c Configuration object for the transaction.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   234
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   235
    _upload: function(o, uri, c) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   236
        var io = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   237
            f = (typeof c.form.id === 'string') ? d.getElementById(c.form.id) : c.form.id,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   238
            fields;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   239
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   240
        // Initialize the HTML form properties in case they are
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   241
        // not defined in the HTML form.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   242
        io._setAttrs(f, o.id, uri);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   243
        if (c.data) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   244
            fields = io._addData(f, c.data);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   245
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   246
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   247
        // Start polling if a callback is present and the timeout
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   248
        // property has been defined.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   249
        if (c.timeout) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   250
            io._startUploadTimeout(o, c);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   251
            Y.log('Transaction timeout started for transaction ' + o.id + '.', 'info', 'io');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   252
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   253
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   254
        // Start file upload.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   255
        f.submit();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   256
        io.start(o, c);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   257
        if (c.data) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   258
            io._removeData(f, fields);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   259
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   260
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   261
        return {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   262
            id: o.id,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   263
            abort: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   264
                o.status = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   265
                o.statusText = 'abort';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   266
                if (Y.one('#io_iframe' + o.id)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   267
                    _dFrame(o.id);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   268
                    io.complete(o, c);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   269
                    io.end(o, c);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   270
                    Y.log('Transaction ' + o.id + ' aborted.', 'info', 'io');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   271
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   272
                else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   273
                    Y.log('Attempted to abort transaction ' + o.id + ' but transaction has completed.', 'warn', 'io');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   274
                    return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   275
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   276
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   277
            isInProgress: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   278
                return Y.one('#io_iframe' + o.id) ? true : false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   279
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   280
            io: io
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   281
        };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   282
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   283
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   284
    upload: function(o, uri, c) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   285
        _cFrame(o, c, this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   286
        return this._upload(o, uri, c);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   287
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   288
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   289
    end: function(transaction, config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   290
        var form, io;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   291
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   292
        if (config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   293
            form = config.form;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   294
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   295
            if (form && form.upload) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   296
                io = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   297
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   298
                // Restore HTML form attributes to their original values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   299
                form = (typeof form.id === 'string') ? d.getElementById(form.id) : form.id;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   300
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   301
                // Check whether the form still exists before resetting it.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   302
                if (form) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   303
                    io._resetAttrs(form, this._originalFormAttrs);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   304
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   305
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   306
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   307
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   308
        return _end.call(this, transaction, config);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   309
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   310
}, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   311
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   312
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   313
}, '@VERSION@', {"requires": ["io-base", "node-base"]});