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