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