io-upload-iframe.js revision 660dff9afbc1d7ccf08d01da7eb04bc291f3abf0
/**
* Extends the IO to enable file uploads, with HTML forms
* using an iframe as the transport medium.
* @module io-base
* @submodule io-upload-iframe
* @for IO
*/
/**
* @description Creates the iframe transported used in file upload
* transactions, and binds the response event handler.
*
* @method _create
* @private
* @static
* @param {object} o Transaction object generated by _create().
* @param {object} c Configuration object passed to YUI.io().
* @return {void}
*/
// Bind the onload handler to the iframe to detect the file upload response.
}
/**
* @description Parses the POST data object and creates hidden form elements
* for each key-value, and appends them to the HTML form object.
* @method appendData
* @private
* @static
* @param {object} f HTML form object.
* @param {string} s The key-value POST data.
* @return {array} e Array of created fields.
*/
_addData: function(f, s) {
var o = [],
m = s.split('='),
i, l;
o[i] = d.createElement('input');
o[i].type = 'hidden';
f.appendChild(o[i]);
}
return o;
},
/**
* @description Removes the custom fields created to pass additional POST
* data, along with the HTML form fields.
* @method f
* @private
* @static
* @param {object} f HTML form object.
* @param {object} o HTML form fields created from configuration.data.
* @return {void}
*/
_removeData: function(f, o) {
var i, l;
for (i = 0, l = o.length; i < l; i++) {
f.removeChild(o[i]);
}
},
/**
* @description Sets the appropriate attributes and values to the HTML
* form, in preparation of a file upload transaction.
* @method _setAttrs
* @private
* @static
* @param {object} f HTML form object.
* @param {object} id The Transaction ID.
* @param {object} uri Qualified path to transaction resource.
* @return {void}
*/
},
/**
* @description Reset the HTML form attributes to their original values.
* @method _resetAttrs
* @private
* @static
* @param {object} f HTML form object.
* @param {object} a Object of original attributes.
* @return {void}
*/
_resetAttrs: function(f, a) {
Y.Object.each(a, function(v, p) {
if (v) {
f.setAttribute(p, v);
}
else {
f.removeAttribute(p);
}
});
},
/**
* @description Starts timeout count if the configuration object
* has a defined timeout property.
*
* @method _startTimeout
* @private
* @static
* @param {object} o Transaction object generated by _create().
* @param {object} c Configuration object passed to YUI.io().
* @return {void}
*/
_startTimeout: function(o, c) {
var io = this;
function() {
o.status = 0;
o.statusText = 'timeout';
}, c.timeout);
},
/**
* @description Clears the timeout interval started by _startTimeout().
* @method _clearTimeout
* @private
* @static
* @param {number} id - Transaction ID.
* @return {void}
*/
_clearTimeout: function(id) {
var io = this;
},
/**
* @description
* @method _destroy
* @private
* @static
* @param {o} o The transaction object
* @param {object} uri Qualified path to transaction resource.
* @param {object} c Configuration object for the transaction.
* @return {void}
*/
},
/**
* @description Bound to the iframe's Load event and processes
* the response data.
* @method _uploadComplete
* @private
* @static
* @param {o} o The transaction object
* @param {object} c Configuration object for the transaction.
* @return {void}
*/
_uploadComplete: function(o, c) {
var io = this,
b = d.one('body'),
p;
if (c.timeout) {
}
if (b) {
// will wrap the response string with <pre></pre>.
p = b.one('pre:first-child');
}
else {
o.c.responseXML = d._node;
}
// The transaction is complete, so call _destroy to remove
// the event listener bound to the iframe transport, and then
// destroy the iframe.
},
/**
* @description Uploads HTML form data, inclusive of files/attachments,
* using the iframe created in _create to facilitate the transaction.
* @method _upload
* @private
* @static
* @param {o} o The transaction object
* @param {object} uri Qualified path to transaction resource.
* @param {object} c Configuration object for the transaction.
* @return {void}
*/
var io = this,
// Track original HTML form attribute values.
attr = {
},
// Initialize the HTML form properties in case they are
// not defined in the HTML form.
if (c.data) {
}
// Start polling if a callback is present and the timeout
// property has been defined.
if (c.timeout) {
io._startTimeout(o, c);
}
// Start file upload.
f.submit();
if (c.data) {
}
// Restore HTML form attributes to their original values.
return {
abort: function() {
o.status = 0;
o.statusText = 'abort';
}
else {
return false;
}
},
isInProgress: function() {
},
};
},
_iframe(o, c, this);
}
});