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