[pLog-svn] r6081 - plog/trunk/js/yui/connection
mark at devel.lifetype.net
mark at devel.lifetype.net
Tue Nov 27 06:49:27 EST 2007
Author: mark
Date: 2007-11-27 06:49:27 -0500 (Tue, 27 Nov 2007)
New Revision: 6081
Modified:
plog/trunk/js/yui/connection/connection-min.js
Log:
I decide to leave connection.js in version 2.3.0, it is very independent to other YUI scripts.
Modified: plog/trunk/js/yui/connection/connection-min.js
===================================================================
--- plog/trunk/js/yui/connection/connection-min.js 2007-11-27 10:17:15 UTC (rev 6080)
+++ plog/trunk/js/yui/connection/connection-min.js 2007-11-27 11:49:27 UTC (rev 6081)
@@ -2,1359 +2,129 @@
Copyright (c) 2007, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
-version: 2.3.1
+version: 2.3.0
*/
-/**
- * The Connection Manager provides a simplified interface to the XMLHttpRequest
- * object. It handles cross-browser instantiantion of XMLHttpRequest, negotiates the
- * interactive states and server response, returning the results to a pre-defined
- * callback you create.
- *
- * @namespace YAHOO.util
- * @module connection
- * @requires yahoo
- * @requires event
- */
-/**
- * The Connection Manager singleton provides methods for creating and managing
- * asynchronous transactions.
- *
- * @class Connect
- */
-
-YAHOO.util.Connect =
-{
- /**
- * @description Array of MSFT ActiveX ids for XMLHttpRequest.
- * @property _msxml_progid
- * @private
- * @static
- * @type array
- */
- _msxml_progid:[
- 'Microsoft.XMLHTTP',
- 'MSXML2.XMLHTTP.3.0',
- 'MSXML2.XMLHTTP'
- ],
-
- /**
- * @description Object literal of HTTP header(s)
- * @property _http_header
- * @private
- * @static
- * @type object
- */
- _http_headers:{},
-
- /**
- * @description Determines if HTTP headers are set.
- * @property _has_http_headers
- * @private
- * @static
- * @type boolean
- */
- _has_http_headers:false,
-
- /**
- * @description Determines if a default header of
- * Content-Type of 'application/x-www-form-urlencoded'
- * will be added to any client HTTP headers sent for POST
- * transactions.
- * @property _use_default_post_header
- * @private
- * @static
- * @type boolean
- */
- _use_default_post_header:true,
-
- /**
- * @description The default header used for POST transactions.
- * @property _default_post_header
- * @private
- * @static
- * @type boolean
- */
- _default_post_header:'application/x-www-form-urlencoded; charset=UTF-8',
-
- /**
- * @description The default header used for transactions involving the
- * use of HTML forms.
- * @property _default_form_header
- * @private
- * @static
- * @type boolean
- */
- _default_form_header:'application/x-www-form-urlencoded',
-
- /**
- * @description Determines if a default header of
- * 'X-Requested-With: XMLHttpRequest'
- * will be added to each transaction.
- * @property _use_default_xhr_header
- * @private
- * @static
- * @type boolean
- */
- _use_default_xhr_header:true,
-
- /**
- * @description The default header value for the label
- * "X-Requested-With". This is sent with each
- * transaction, by default, to identify the
- * request as being made by YUI Connection Manager.
- * @property _default_xhr_header
- * @private
- * @static
- * @type boolean
- */
- _default_xhr_header:'XMLHttpRequest',
-
- /**
- * @description Determines if custom, default headers
- * are set for each transaction.
- * @property _has_default_header
- * @private
- * @static
- * @type boolean
- */
- _has_default_headers:true,
-
- /**
- * @description Determines if custom, default headers
- * are set for each transaction.
- * @property _has_default_header
- * @private
- * @static
- * @type boolean
- */
- _default_headers:{},
-
- /**
- * @description Property modified by setForm() to determine if the data
- * should be submitted as an HTML form.
- * @property _isFormSubmit
- * @private
- * @static
- * @type boolean
- */
- _isFormSubmit:false,
-
- /**
- * @description Property modified by setForm() to determine if a file(s)
- * upload is expected.
- * @property _isFileUpload
- * @private
- * @static
- * @type boolean
- */
- _isFileUpload:false,
-
- /**
- * @description Property modified by setForm() to set a reference to the HTML
- * form node if the desired action is file upload.
- * @property _formNode
- * @private
- * @static
- * @type object
- */
- _formNode:null,
-
- /**
- * @description Property modified by setForm() to set the HTML form data
- * for each transaction.
- * @property _sFormData
- * @private
- * @static
- * @type string
- */
- _sFormData:null,
-
- /**
- * @description Collection of polling references to the polling mechanism in handleReadyState.
- * @property _poll
- * @private
- * @static
- * @type object
- */
- _poll:{},
-
- /**
- * @description Queue of timeout values for each transaction callback with a defined timeout value.
- * @property _timeOut
- * @private
- * @static
- * @type object
- */
- _timeOut:{},
-
- /**
- * @description The polling frequency, in milliseconds, for HandleReadyState.
- * when attempting to determine a transaction's XHR readyState.
- * The default is 50 milliseconds.
- * @property _polling_interval
- * @private
- * @static
- * @type int
- */
- _polling_interval:50,
-
- /**
- * @description A transaction counter that increments the transaction id for each transaction.
- * @property _transaction_id
- * @private
- * @static
- * @type int
- */
- _transaction_id:0,
-
- /**
- * @description Tracks the name-value pair of the "clicked" submit button if multiple submit
- * buttons are present in an HTML form; and, if YAHOO.util.Event is available.
- * @property _submitElementValue
- * @private
- * @static
- * @type string
- */
- _submitElementValue:null,
-
- /**
- * @description Determines whether YAHOO.util.Event is available and returns true or false.
- * If true, an event listener is bound at the document level to trap click events that
- * resolve to a target type of "Submit". This listener will enable setForm() to determine
- * the clicked "Submit" value in a multi-Submit button, HTML form.
- * @property _hasSubmitListener
- * @private
- * @static
- */
- _hasSubmitListener:(function()
- {
- if(YAHOO.util.Event){
- YAHOO.util.Event.addListener(
- document,
- 'click',
- function(e){
- try
- {
- var obj = YAHOO.util.Event.getTarget(e);
- if(obj.type.toLowerCase() == 'submit'){
- YAHOO.util.Connect._submitElementValue = encodeURIComponent(obj.name) + "=" + encodeURIComponent(obj.value);
- }
- }
- catch(e){}
- });
- return true;
- }
- return false;
- })(),
-
- /**
- * @description Custom event that fires at the start of a transaction
- * @property startEvent
- * @private
- * @static
- * @type CustomEvent
- */
- startEvent: new YAHOO.util.CustomEvent('start'),
-
- /**
- * @description Custom event that fires when a transaction response has completed.
- * @property completeEvent
- * @private
- * @static
- * @type CustomEvent
- */
- completeEvent: new YAHOO.util.CustomEvent('complete'),
-
- /**
- * @description Custom event that fires when handleTransactionResponse() determines a
- * response in the HTTP 2xx range.
- * @property successEvent
- * @private
- * @static
- * @type CustomEvent
- */
- successEvent: new YAHOO.util.CustomEvent('success'),
-
- /**
- * @description Custom event that fires when handleTransactionResponse() determines a
- * response in the HTTP 4xx/5xx range.
- * @property failureEvent
- * @private
- * @static
- * @type CustomEvent
- */
- failureEvent: new YAHOO.util.CustomEvent('failure'),
-
- /**
- * @description Custom event that fires when handleTransactionResponse() determines a
- * response in the HTTP 4xx/5xx range.
- * @property failureEvent
- * @private
- * @static
- * @type CustomEvent
- */
- uploadEvent: new YAHOO.util.CustomEvent('upload'),
-
- /**
- * @description Custom event that fires when a transaction is successfully aborted.
- * @property abortEvent
- * @private
- * @static
- * @type CustomEvent
- */
- abortEvent: new YAHOO.util.CustomEvent('abort'),
-
- /**
- * @description A reference table that maps callback custom events members to its specific
- * event name.
- * @property _customEvents
- * @private
- * @static
- * @type object
- */
- _customEvents:
- {
- onStart:['startEvent', 'start'],
- onComplete:['completeEvent', 'complete'],
- onSuccess:['successEvent', 'success'],
- onFailure:['failureEvent', 'failure'],
- onUpload:['uploadEvent', 'upload'],
- onAbort:['abortEvent', 'abort']
- },
-
- /**
- * @description Member to add an ActiveX id to the existing xml_progid array.
- * In the event(unlikely) a new ActiveX id is introduced, it can be added
- * without internal code modifications.
- * @method setProgId
- * @public
- * @static
- * @param {string} id The ActiveX id to be added to initialize the XHR object.
- * @return void
- */
- setProgId:function(id)
- {
- this._msxml_progid.unshift(id);
- },
-
- /**
- * @description Member to override the default POST header.
- * @method setDefaultPostHeader
- * @public
- * @static
- * @param {boolean} b Set and use default header - true or false .
- * @return void
- */
- setDefaultPostHeader:function(b)
- {
- if(typeof b == 'string'){
- this._default_post_header = b;
- }
- else if(typeof b == 'boolean'){
- this._use_default_post_header = b;
- }
- },
-
- /**
- * @description Member to override the default transaction header..
- * @method setDefaultXhrHeader
- * @public
- * @static
- * @param {boolean} b Set and use default header - true or false .
- * @return void
- */
- setDefaultXhrHeader:function(b)
- {
- if(typeof b == 'string'){
- this._default_xhr_header = b;
- }
- else{
- this._use_default_xhr_header = b;
- }
- },
-
- /**
- * @description Member to modify the default polling interval.
- * @method setPollingInterval
- * @public
- * @static
- * @param {int} i The polling interval in milliseconds.
- * @return void
- */
- setPollingInterval:function(i)
- {
- if(typeof i == 'number' && isFinite(i)){
- this._polling_interval = i;
- }
- },
-
- /**
- * @description Instantiates a XMLHttpRequest object and returns an object with two properties:
- * the XMLHttpRequest instance and the transaction id.
- * @method createXhrObject
- * @private
- * @static
- * @param {int} transactionId Property containing the transaction id for this transaction.
- * @return object
- */
- createXhrObject:function(transactionId)
- {
- var obj,http;
- try
- {
- // Instantiates XMLHttpRequest in non-IE browsers and assigns to http.
- http = new XMLHttpRequest();
- // Object literal with http and tId properties
- obj = { conn:http, tId:transactionId };
- }
- catch(e)
- {
- for(var i=0; i<this._msxml_progid.length; ++i){
- try
- {
- // Instantiates XMLHttpRequest for IE and assign to http
- http = new ActiveXObject(this._msxml_progid[i]);
- // Object literal with conn and tId properties
- obj = { conn:http, tId:transactionId };
- break;
- }
- catch(e){}
- }
- }
- finally
- {
- return obj;
- }
- },
-
- /**
- * @description This method is called by asyncRequest to create a
- * valid connection object for the transaction. It also passes a
- * transaction id and increments the transaction id counter.
- * @method getConnectionObject
- * @private
- * @static
- * @return {object}
- */
- getConnectionObject:function(isFileUpload)
- {
- var o;
- var tId = this._transaction_id;
-
- try
- {
- if(!isFileUpload){
- o = this.createXhrObject(tId);
- }
- else{
- o = {};
- o.tId = tId;
- o.isUpload = true;
- }
-
- if(o){
- this._transaction_id++;
- }
- }
- catch(e){}
- finally
- {
- return o;
- }
- },
-
- /**
- * @description Method for initiating an asynchronous request via the XHR object.
- * @method asyncRequest
- * @public
- * @static
- * @param {string} method HTTP transaction method
- * @param {string} uri Fully qualified path of resource
- * @param {callback} callback User-defined callback function or object
- * @param {string} postData POST body
- * @return {object} Returns the connection object
- */
- asyncRequest:function(method, uri, callback, postData)
- {
- var o = (this._isFileUpload)?this.getConnectionObject(true):this.getConnectionObject();
-
- if(!o){
- this.resetFormState();
- return null;
- }
- else{
-
- // Intialize any transaction-specific custom events, if provided.
- if(callback && callback.customevents){
- this.initCustomEvents(o, callback);
- }
-
- if(this._isFormSubmit){
- if(this._isFileUpload){
- this.uploadFile(o, callback, uri, postData);
- this.resetFormState();
- return o;
- }
-
- // If the specified HTTP method is GET, setForm() will return an
- // encoded string that is concatenated to the uri to
- // create a querystring.
- if(method.toUpperCase() == 'GET'){
- if(this._sFormData.length !== 0){
- // If the URI already contains a querystring, append an ampersand
- // and then concatenate _sFormData to the URI.
- uri += ((uri.indexOf('?') == -1)?'?':'&') + this._sFormData;
- }
- else{
- uri += "?" + this._sFormData;
- }
- }
- else if(method.toUpperCase() == 'POST'){
- // If POST data exist in addition to the HTML form data,
- // it will be concatenated to the form data.
- postData = postData?this._sFormData + "&" + postData:this._sFormData;
- }
- }
-
- o.conn.open(method, uri, true);
-
- // Each transaction will automatically include a custom header of
- // "X-Requested-With: XMLHttpRequest" to identify the request as
- // having originated from Connection Manager.
- if(this._use_default_xhr_header){
- if(!this._default_headers['X-Requested-With']){
- this.initHeader('X-Requested-With', this._default_xhr_header, true);
- }
- }
-
- if(this._isFormSubmit == false && this._use_default_post_header){
- this.initHeader('Content-Type', this._default_post_header);
- }
-
- if(this._has_default_headers || this._has_http_headers){
- this.setHeader(o);
- }
-
- this.handleReadyState(o, callback);
- o.conn.send(postData || null);
-
- // Fire global custom event -- startEvent
- this.startEvent.fire(o);
-
- if(o.startEvent){
- // Fire transaction custom event -- startEvent
- o.startEvent.fire(o);
- }
-
- this.resetFormState();
- return o;
- }
- },
-
- /**
- * @description This method creates and subscribes custom events,
- * specific to each transaction
- * @method initCustomEvents
- * @private
- * @static
- * @param {object} o The connection object
- * @param {callback} callback The user-defined callback object
- * @return {void}
- */
- initCustomEvents:function(o, callback)
- {
- // Enumerate through callback.customevents members and bind/subscribe
- // events that match in the _customEvents table.
- for(var prop in callback.customevents){
- if(this._customEvents[prop][0]){
- // Create the custom event
- o[this._customEvents[prop][0]] = new YAHOO.util.CustomEvent(this._customEvents[prop][1], (callback.scope)?callback.scope:null);
-
- // Subscribe the custom event
- o[this._customEvents[prop][0]].subscribe(callback.customevents[prop]);
- }
- }
- },
-
- /**
- * @description This method serves as a timer that polls the XHR object's readyState
- * property during a transaction, instead of binding a callback to the
- * onreadystatechange event. Upon readyState 4, handleTransactionResponse
- * will process the response, and the timer will be cleared.
- * @method handleReadyState
- * @private
- * @static
- * @param {object} o The connection object
- * @param {callback} callback The user-defined callback object
- * @return {void}
- */
-
- handleReadyState:function(o, callback)
-
- {
- var oConn = this;
-
- if(callback && callback.timeout){
- this._timeOut[o.tId] = window.setTimeout(function(){ oConn.abort(o, callback, true); }, callback.timeout);
- }
-
- this._poll[o.tId] = window.setInterval(
- function(){
- if(o.conn && o.conn.readyState === 4){
-
- // Clear the polling interval for the transaction
- // and remove the reference from _poll.
- window.clearInterval(oConn._poll[o.tId]);
- delete oConn._poll[o.tId];
-
- if(callback && callback.timeout){
- window.clearTimeout(oConn._timeOut[o.tId]);
- delete oConn._timeOut[o.tId];
- }
-
- // Fire global custom event -- completeEvent
- oConn.completeEvent.fire(o);
-
- if(o.completeEvent){
- // Fire transaction custom event -- completeEvent
- o.completeEvent.fire(o);
- }
-
- oConn.handleTransactionResponse(o, callback);
- }
- }
- ,this._polling_interval);
- },
-
- /**
- * @description This method attempts to interpret the server response and
- * determine whether the transaction was successful, or if an error or
- * exception was encountered.
- * @method handleTransactionResponse
- * @private
- * @static
- * @param {object} o The connection object
- * @param {object} callback The user-defined callback object
- * @param {boolean} isAbort Determines if the transaction was terminated via abort().
- * @return {void}
- */
- handleTransactionResponse:function(o, callback, isAbort)
- {
-
- var httpStatus, responseObject;
-
- try
- {
- if(o.conn.status !== undefined && o.conn.status !== 0){
- httpStatus = o.conn.status;
- }
- else{
- httpStatus = 13030;
- }
- }
- catch(e){
-
- // 13030 is a custom code to indicate the condition -- in Mozilla/FF --
- // when the XHR object's status and statusText properties are
- // unavailable, and a query attempt throws an exception.
- httpStatus = 13030;
- }
-
- if(httpStatus >= 200 && httpStatus < 300 || httpStatus === 1223){
- responseObject = this.createResponseObject(o, (callback && callback.argument)?callback.argument:undefined);
- if(callback){
- if(callback.success){
- if(!callback.scope){
- callback.success(responseObject);
- }
- else{
- // If a scope property is defined, the callback will be fired from
- // the context of the object.
- callback.success.apply(callback.scope, [responseObject]);
- }
- }
- }
-
- // Fire global custom event -- successEvent
- this.successEvent.fire(responseObject);
-
- if(o.successEvent){
- // Fire transaction custom event -- successEvent
- o.successEvent.fire(responseObject);
- }
- }
- else{
- switch(httpStatus){
- // The following cases are wininet.dll error codes that may be encountered.
- case 12002: // Server timeout
- case 12029: // 12029 to 12031 correspond to dropped connections.
- case 12030:
- case 12031:
- case 12152: // Connection closed by server.
- case 13030: // See above comments for variable status.
- responseObject = this.createExceptionObject(o.tId, (callback && callback.argument)?callback.argument:undefined, (isAbort?isAbort:false));
- if(callback){
- if(callback.failure){
- if(!callback.scope){
- callback.failure(responseObject);
- }
- else{
- callback.failure.apply(callback.scope, [responseObject]);
- }
- }
- }
-
- break;
- default:
- responseObject = this.createResponseObject(o, (callback && callback.argument)?callback.argument:undefined);
- if(callback){
- if(callback.failure){
- if(!callback.scope){
- callback.failure(responseObject);
- }
- else{
- callback.failure.apply(callback.scope, [responseObject]);
- }
- }
- }
- }
-
- // Fire global custom event -- failureEvent
- this.failureEvent.fire(responseObject);
-
- if(o.failureEvent){
- // Fire transaction custom event -- failureEvent
- o.failureEvent.fire(responseObject);
- }
-
- }
-
- this.releaseObject(o);
- responseObject = null;
- },
-
- /**
- * @description This method evaluates the server response, creates and returns the results via
- * its properties. Success and failure cases will differ in the response
- * object's property values.
- * @method createResponseObject
- * @private
- * @static
- * @param {object} o The connection object
- * @param {callbackArg} callbackArg The user-defined argument or arguments to be passed to the callback
- * @return {object}
- */
- createResponseObject:function(o, callbackArg)
- {
- var obj = {};
- var headerObj = {};
-
- try
- {
- var headerStr = o.conn.getAllResponseHeaders();
- var header = headerStr.split('\n');
- for(var i=0; i<header.length; i++){
- var delimitPos = header[i].indexOf(':');
- if(delimitPos != -1){
- headerObj[header[i].substring(0,delimitPos)] = header[i].substring(delimitPos+2);
- }
- }
- }
- catch(e){}
-
- obj.tId = o.tId;
- // Normalize IE's response to HTTP 204 when Win error 1223.
- obj.status = (o.conn.status == 1223)?204:o.conn.status;
- // Normalize IE's statusText to "No Content" instead of "Unknown".
- obj.statusText = (o.conn.status == 1223)?"No Content":o.conn.statusText;
- obj.getResponseHeader = headerObj;
- obj.getAllResponseHeaders = headerStr;
- obj.responseText = o.conn.responseText;
- obj.responseXML = o.conn.responseXML;
-
- if(typeof callbackArg !== undefined){
- obj.argument = callbackArg;
- }
-
- return obj;
- },
-
- /**
- * @description If a transaction cannot be completed due to dropped or closed connections,
- * there may be not be enough information to build a full response object.
- * The failure callback will be fired and this specific condition can be identified
- * by a status property value of 0.
- *
- * If an abort was successful, the status property will report a value of -1.
- *
- * @method createExceptionObject
- * @private
- * @static
- * @param {int} tId The Transaction Id
- * @param {callbackArg} callbackArg The user-defined argument or arguments to be passed to the callback
- * @param {boolean} isAbort Determines if the exception case is caused by a transaction abort
- * @return {object}
- */
- createExceptionObject:function(tId, callbackArg, isAbort)
- {
- var COMM_CODE = 0;
- var COMM_ERROR = 'communication failure';
- var ABORT_CODE = -1;
- var ABORT_ERROR = 'transaction aborted';
-
- var obj = {};
-
- obj.tId = tId;
- if(isAbort){
- obj.status = ABORT_CODE;
- obj.statusText = ABORT_ERROR;
- }
- else{
- obj.status = COMM_CODE;
- obj.statusText = COMM_ERROR;
- }
-
- if(callbackArg){
- obj.argument = callbackArg;
- }
-
- return obj;
- },
-
- /**
- * @description Method that initializes the custom HTTP headers for the each transaction.
- * @method initHeader
- * @public
- * @static
- * @param {string} label The HTTP header label
- * @param {string} value The HTTP header value
- * @param {string} isDefault Determines if the specific header is a default header
- * automatically sent with each transaction.
- * @return {void}
- */
- initHeader:function(label, value, isDefault)
- {
- var headerObj = (isDefault)?this._default_headers:this._http_headers;
- headerObj[label] = value;
-
- if(isDefault){
- this._has_default_headers = true;
- }
- else{
- this._has_http_headers = true;
- }
- },
-
-
- /**
- * @description Accessor that sets the HTTP headers for each transaction.
- * @method setHeader
- * @private
- * @static
- * @param {object} o The connection object for the transaction.
- * @return {void}
- */
- setHeader:function(o)
- {
- if(this._has_default_headers){
- for(var prop in this._default_headers){
- if(YAHOO.lang.hasOwnProperty(this._default_headers, prop)){
- o.conn.setRequestHeader(prop, this._default_headers[prop]);
- }
- }
- }
-
- if(this._has_http_headers){
- for(var prop in this._http_headers){
- if(YAHOO.lang.hasOwnProperty(this._http_headers, prop)){
- o.conn.setRequestHeader(prop, this._http_headers[prop]);
- }
- }
- delete this._http_headers;
-
- this._http_headers = {};
- this._has_http_headers = false;
- }
- },
-
- /**
- * @description Resets the default HTTP headers object
- * @method resetDefaultHeaders
- * @public
- * @static
- * @return {void}
- */
- resetDefaultHeaders:function(){
- delete this._default_headers;
- this._default_headers = {};
- this._has_default_headers = false;
- },
-
- /**
- * @description This method assembles the form label and value pairs and
- * constructs an encoded string.
- * asyncRequest() will automatically initialize the transaction with a
- * a HTTP header Content-Type of application/x-www-form-urlencoded.
- * @method setForm
- * @public
- * @static
- * @param {string || object} form id or name attribute, or form object.
- * @param {boolean} optional enable file upload.
- * @param {boolean} optional enable file upload over SSL in IE only.
- * @return {string} string of the HTML form field name and value pairs..
- */
- setForm:function(formId, isUpload, secureUri)
- {
- this.resetFormState();
-
- var oForm;
- if(typeof formId == 'string'){
- // Determine if the argument is a form id or a form name.
- // Note form name usage is deprecated by supported
- // here for legacy reasons.
- oForm = (document.getElementById(formId) || document.forms[formId]);
- }
- else if(typeof formId == 'object'){
- // Treat argument as an HTML form object.
- oForm = formId;
- }
- else{
- return;
- }
-
- // If the isUpload argument is true, setForm will call createFrame to initialize
- // an iframe as the form target.
- //
- // The argument secureURI is also required by IE in SSL environments
- // where the secureURI string is a fully qualified HTTP path, used to set the source
- // of the iframe, to a stub resource in the same domain.
- if(isUpload){
-
- // Create iframe in preparation for file upload.
- var io = this.createFrame(secureUri?secureUri:null);
- // Set form reference and file upload properties to true.
- this._isFormSubmit = true;
- this._isFileUpload = true;
- this._formNode = oForm;
-
- return;
-
- }
-
- var oElement, oName, oValue, oDisabled;
- var hasSubmit = false;
-
- // Iterate over the form elements collection to construct the
- // label-value pairs.
- for (var i=0; i<oForm.elements.length; i++){
- oElement = oForm.elements[i];
- oDisabled = oForm.elements[i].disabled;
- oName = oForm.elements[i].name;
- oValue = oForm.elements[i].value;
-
- // Do not submit fields that are disabled or
- // do not have a name attribute value.
- if(!oDisabled && oName)
- {
- switch(oElement.type)
- {
- case 'select-one':
- case 'select-multiple':
- for(var j=0; j<oElement.options.length; j++){
- if(oElement.options[j].selected){
- if(window.ActiveXObject){
- this._sFormData += encodeURIComponent(oName) + '=' + encodeURIComponent(oElement.options[j].attributes['value'].specified?oElement.options[j].value:oElement.options[j].text) + '&';
- }
- else{
- this._sFormData += encodeURIComponent(oName) + '=' + encodeURIComponent(oElement.options[j].hasAttribute('value')?oElement.options[j].value:oElement.options[j].text) + '&';
- }
- }
- }
- break;
- case 'radio':
- case 'checkbox':
- if(oElement.checked){
- this._sFormData += encodeURIComponent(oName) + '=' + encodeURIComponent(oValue) + '&';
- }
- break;
- case 'file':
- // stub case as XMLHttpRequest will only send the file path as a string.
- case undefined:
- // stub case for fieldset element which returns undefined.
- case 'reset':
- // stub case for input type reset button.
- case 'button':
- // stub case for input type button elements.
- break;
- case 'submit':
- if(hasSubmit === false){
- if(this._hasSubmitListener && this._submitElementValue){
- this._sFormData += this._submitElementValue + '&';
- }
- else{
- this._sFormData += encodeURIComponent(oName) + '=' + encodeURIComponent(oValue) + '&';
- }
-
- hasSubmit = true;
- }
- break;
- default:
- this._sFormData += encodeURIComponent(oName) + '=' + encodeURIComponent(oValue) + '&';
- }
- }
- }
-
- this._isFormSubmit = true;
- this._sFormData = this._sFormData.substr(0, this._sFormData.length - 1);
-
-
- this.initHeader('Content-Type', this._default_form_header);
-
- return this._sFormData;
- },
-
- /**
- * @description Resets HTML form properties when an HTML form or HTML form
- * with file upload transaction is sent.
- * @method resetFormState
- * @private
- * @static
- * @return {void}
- */
- resetFormState:function(){
- this._isFormSubmit = false;
- this._isFileUpload = false;
- this._formNode = null;
- this._sFormData = "";
- },
-
- /**
- * @description Creates an iframe to be used for form file uploads. It is remove from the
- * document upon completion of the upload transaction.
- * @method createFrame
- * @private
- * @static
- * @param {string} optional qualified path of iframe resource for SSL in IE.
- * @return {void}
- */
- createFrame:function(secureUri){
-
- // IE does not allow the setting of id and name attributes as object
- // properties via createElement(). A different iframe creation
- // pattern is required for IE.
- var frameId = 'yuiIO' + this._transaction_id;
- var io;
- if(window.ActiveXObject){
- io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />');
-
- // IE will throw a security exception in an SSL environment if the
- // iframe source is undefined.
- if(typeof secureUri == 'boolean'){
- io.src = 'javascript:false';
- }
- else if(typeof secureURI == 'string'){
- // Deprecated
- io.src = secureUri;
- }
- }
- else{
- io = document.createElement('iframe');
- io.id = frameId;
- io.name = frameId;
- }
-
- io.style.position = 'absolute';
- io.style.top = '-1000px';
- io.style.left = '-1000px';
-
- document.body.appendChild(io);
- },
-
- /**
- * @description Parses the POST data and creates hidden form elements
- * for each key-value, and appends them to the HTML form object.
- * @method appendPostData
- * @private
- * @static
- * @param {string} postData The HTTP POST data
- * @return {array} formElements Collection of hidden fields.
- */
- appendPostData:function(postData)
- {
- var formElements = [];
- var postMessage = postData.split('&');
- for(var i=0; i < postMessage.length; i++){
- var delimitPos = postMessage[i].indexOf('=');
- if(delimitPos != -1){
- formElements[i] = document.createElement('input');
- formElements[i].type = 'hidden';
- formElements[i].name = postMessage[i].substring(0,delimitPos);
- formElements[i].value = postMessage[i].substring(delimitPos+1);
- this._formNode.appendChild(formElements[i]);
- }
- }
-
- return formElements;
- },
-
- /**
- * @description Uploads HTML form, inclusive of files/attachments, using the
- * iframe created in createFrame to facilitate the transaction.
- * @method uploadFile
- * @private
- * @static
- * @param {int} id The transaction id.
- * @param {object} callback User-defined callback object.
- * @param {string} uri Fully qualified path of resource.
- * @param {string} postData POST data to be submitted in addition to HTML form.
- * @return {void}
- */
- uploadFile:function(o, callback, uri, postData){
-
- // Each iframe has an id prefix of "yuiIO" followed
- // by the unique transaction id.
- var frameId = 'yuiIO' + o.tId;
- var uploadEncoding = 'multipart/form-data';
- var io = document.getElementById(frameId);
- var oConn = this;
-
- // Track original HTML form attribute values.
- var rawFormAttributes =
- {
- action:this._formNode.getAttribute('action'),
- method:this._formNode.getAttribute('method'),
- target:this._formNode.getAttribute('target')
- };
-
- // Initialize the HTML form properties in case they are
- // not defined in the HTML form.
- this._formNode.setAttribute('action', uri);
- this._formNode.setAttribute('method', 'POST');
- this._formNode.setAttribute('target', frameId);
-
- if(this._formNode.encoding){
- // IE does not respect property enctype for HTML forms.
- // Instead it uses the property - "encoding".
- this._formNode.setAttribute('encoding', uploadEncoding);
- }
- else{
- this._formNode.setAttribute('enctype', uploadEncoding);
- }
-
- if(postData){
- var oElements = this.appendPostData(postData);
- }
-
- // Start file upload.
- this._formNode.submit();
-
- // Fire global custom event -- startEvent
- this.startEvent.fire(o);
-
- if(o.startEvent){
- // Fire transaction custom event -- startEvent
- o.startEvent.fire(o);
- }
-
- // Start polling if a callback is present and the timeout
- // property has been defined.
- if(callback && callback.timeout){
- this._timeOut[o.tId] = window.setTimeout(function(){ oConn.abort(o, callback, true); }, callback.timeout);
- }
-
- // Remove HTML elements created by appendPostData
- if(oElements && oElements.length > 0){
- for(var i=0; i < oElements.length; i++){
- this._formNode.removeChild(oElements[i]);
- }
- }
-
- // Restore HTML form attributes to their original
- // values prior to file upload.
- for(var prop in rawFormAttributes){
- if(YAHOO.lang.hasOwnProperty(rawFormAttributes, prop)){
- if(rawFormAttributes[prop]){
- this._formNode.setAttribute(prop, rawFormAttributes[prop]);
- }
- else{
- this._formNode.removeAttribute(prop);
- }
- }
- }
-
- // Reset HTML form state properties.
- this.resetFormState();
-
- // Create the upload callback handler that fires when the iframe
- // receives the load event. Subsequently, the event handler is detached
- // and the iframe removed from the document.
- var uploadCallback = function()
- {
- if(callback && callback.timeout){
- window.clearTimeout(oConn._timeOut[o.tId]);
- delete oConn._timeOut[o.tId];
- }
-
- // Fire global custom event -- completeEvent
- oConn.completeEvent.fire(o);
-
- if(o.completeEvent){
- // Fire transaction custom event -- completeEvent
- o.completeEvent.fire(o);
- }
-
- var obj = {};
- obj.tId = o.tId;
- obj.argument = callback.argument;
-
- try
- {
- // responseText and responseXML will be populated with the same data from the iframe.
- // Since the HTTP headers cannot be read from the iframe
- obj.responseText = io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:io.contentWindow.document.documentElement.textContent;
- obj.responseXML = io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;
- }
- catch(e){}
-
- if(callback && callback.upload){
- if(!callback.scope){
- callback.upload(obj);
- }
- else{
- callback.upload.apply(callback.scope, [obj]);
- }
- }
-
- // Fire global custom event -- uploadEvent
- oConn.uploadEvent.fire(obj);
-
- if(o.uploadEvent){
- // Fire transaction custom event -- uploadEvent
- o.uploadEvent.fire(obj);
- }
-
- YAHOO.util.Event.removeListener(io, "load", uploadCallback);
-
- setTimeout(
- function(){
- document.body.removeChild(io);
- oConn.releaseObject(o);
- }, 100);
- };
-
- // Bind the onload handler to the iframe to detect the file upload response.
- YAHOO.util.Event.addListener(io, "load", uploadCallback);
- },
-
- /**
- * @description Method to terminate a transaction, if it has not reached readyState 4.
- * @method abort
- * @public
- * @static
- * @param {object} o The connection object returned by asyncRequest.
- * @param {object} callback User-defined callback object.
- * @param {string} isTimeout boolean to indicate if abort resulted from a callback timeout.
- * @return {boolean}
- */
- abort:function(o, callback, isTimeout)
- {
- var abortStatus;
-
- if(o.conn){
- if(this.isCallInProgress(o)){
- // Issue abort request
- o.conn.abort();
-
- window.clearInterval(this._poll[o.tId]);
- delete this._poll[o.tId];
-
- if(isTimeout){
- window.clearTimeout(this._timeOut[o.tId]);
- delete this._timeOut[o.tId];
- }
-
- abortStatus = true;
- }
- }
- else if(o.isUpload === true){
- var frameId = 'yuiIO' + o.tId;
- var io = document.getElementById(frameId);
-
- if(io){
- // Remove the event listener from the iframe.
- YAHOO.util.Event.removeListener(io, "load", uploadCallback);
- // Destroy the iframe facilitating the transaction.
- document.body.removeChild(io);
-
- if(isTimeout){
- window.clearTimeout(this._timeOut[o.tId]);
- delete this._timeOut[o.tId];
- }
-
- abortStatus = true;
- }
- }
- else{
- abortStatus = false;
- }
-
- if(abortStatus === true){
- // Fire global custom event -- abortEvent
- this.abortEvent.fire(o);
-
- if(o.abortEvent){
- // Fire transaction custom event -- abortEvent
- o.abortEvent.fire(o);
- }
-
- this.handleTransactionResponse(o, callback, true);
- }
-
- return abortStatus;
- },
-
- /**
- * @description Determines if the transaction is still being processed.
- * @method isCallInProgress
- * @public
- * @static
- * @param {object} o The connection object returned by asyncRequest
- * @return {boolean}
- */
- isCallInProgress:function(o)
- {
- // if the XHR object assigned to the transaction has not been dereferenced,
- // then check its readyState status. Otherwise, return false.
- if(o && o.conn){
- return o.conn.readyState !== 4 && o.conn.readyState !== 0;
- }
- else if(o && o.isUpload === true){
- var frameId = 'yuiIO' + o.tId;
- return document.getElementById(frameId)?true:false;
- }
- else{
- return false;
- }
- },
-
- /**
- * @description Dereference the XHR instance and the connection object after the transaction is completed.
- * @method releaseObject
- * @private
- * @static
- * @param {object} o The connection object
- * @return {void}
- */
- releaseObject:function(o)
- {
- //dereference the XHR instance.
- if(o.conn){
- o.conn = null;
- }
- //dereference the connection object.
- o = null;
- }
-};
-
-YAHOO.register("connection", YAHOO.util.Connect, {version: "2.3.1", build: "541"});
\ No newline at end of file
+YAHOO.util.Connect={_msxml_progid:['MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP','Microsoft.XMLHTTP'],_http_headers:{},_has_http_headers:false,_use_default_post_header:true,_default_post_header:'application/x-www-form-urlencoded; charset=UTF-8',_use_default_xhr_header:true,_default_xhr_header:'XMLHttpRequest',_has_default_headers:true,_default_headers:{},_isFormSubmit:false,_isFileUpload:false,_formNode:null,_sFormData:null,_poll:{},_timeOut:{},_polling_interval:50,_transaction_id:0,_submitElementValue:null,_hasSubmitListener:(function()
+{if(YAHOO.util.Event){YAHOO.util.Event.addListener(document,'click',function(e){var obj=YAHOO.util.Event.getTarget(e);if(obj.type=='submit'){YAHOO.util.Connect._submitElementValue=encodeURIComponent(obj.name)+"="+encodeURIComponent(obj.value);}});return true;}
+return false;})(),startEvent:new YAHOO.util.CustomEvent('start'),completeEvent:new YAHOO.util.CustomEvent('complete'),successEvent:new YAHOO.util.CustomEvent('success'),failureEvent:new YAHOO.util.CustomEvent('failure'),uploadEvent:new YAHOO.util.CustomEvent('upload'),abortEvent:new YAHOO.util.CustomEvent('abort'),_customEvents:{onStart:['startEvent','start'],onComplete:['completeEvent','complete'],onSuccess:['successEvent','success'],onFailure:['failureEvent','failure'],onUpload:['uploadEvent','upload'],onAbort:['abortEvent','abort']},setProgId:function(id)
+{this._msxml_progid.unshift(id);},setDefaultPostHeader:function(b)
+{this._use_default_post_header=b;},setDefaultXhrHeader:function(b)
+{this._use_default_xhr_header=b;},setPollingInterval:function(i)
+{if(typeof i=='number'&&isFinite(i)){this._polling_interval=i;}},createXhrObject:function(transactionId)
+{var obj,http;try
+{http=new XMLHttpRequest();obj={conn:http,tId:transactionId};}
+catch(e)
+{for(var i=0;i<this._msxml_progid.length;++i){try
+{http=new ActiveXObject(this._msxml_progid[i]);obj={conn:http,tId:transactionId};break;}
+catch(e){}}}
+finally
+{return obj;}},getConnectionObject:function(isFileUpload)
+{var o;var tId=this._transaction_id;try
+{if(!isFileUpload){o=this.createXhrObject(tId);}
+else{o={};o.tId=tId;o.isUpload=true;}
+if(o){this._transaction_id++;}}
+catch(e){}
+finally
+{return o;}},asyncRequest:function(method,uri,callback,postData)
+{var o=(this._isFileUpload)?this.getConnectionObject(true):this.getConnectionObject();if(!o){return null;}
+else{if(callback&&callback.customevents){this.initCustomEvents(o,callback);}
+if(this._isFormSubmit){if(this._isFileUpload){this.uploadFile(o,callback,uri,postData);return o;}
+if(method.toUpperCase()=='GET'){if(this._sFormData.length!==0){uri+=((uri.indexOf('?')==-1)?'?':'&')+this._sFormData;}
+else{uri+="?"+this._sFormData;}}
+else if(method.toUpperCase()=='POST'){postData=postData?this._sFormData+"&"+postData:this._sFormData;}}
+o.conn.open(method,uri,true);if(this._use_default_xhr_header){if(!this._default_headers['X-Requested-With']){this.initHeader('X-Requested-With',this._default_xhr_header,true);}}
+if(this._isFormSubmit||(postData&&this._use_default_post_header)){this.initHeader('Content-Type',this._default_post_header);if(this._isFormSubmit){this.resetFormState();}}
+if(this._has_default_headers||this._has_http_headers){this.setHeader(o);}
+this.handleReadyState(o,callback);o.conn.send(postData||null);this.startEvent.fire(o);if(o.startEvent){o.startEvent.fire(o);}
+return o;}},initCustomEvents:function(o,callback)
+{for(var prop in callback.customevents){if(this._customEvents[prop][0]){o[this._customEvents[prop][0]]=new YAHOO.util.CustomEvent(this._customEvents[prop][1],(callback.scope)?callback.scope:null);o[this._customEvents[prop][0]].subscribe(callback.customevents[prop]);}}},handleReadyState:function(o,callback)
+{var oConn=this;if(callback&&callback.timeout){this._timeOut[o.tId]=window.setTimeout(function(){oConn.abort(o,callback,true);},callback.timeout);}
+this._poll[o.tId]=window.setInterval(function(){if(o.conn&&o.conn.readyState===4){window.clearInterval(oConn._poll[o.tId]);delete oConn._poll[o.tId];if(callback&&callback.timeout){window.clearTimeout(oConn._timeOut[o.tId]);delete oConn._timeOut[o.tId];}
+oConn.completeEvent.fire(o);if(o.completeEvent){o.completeEvent.fire(o);}
+oConn.handleTransactionResponse(o,callback);}},this._polling_interval);},handleTransactionResponse:function(o,callback,isAbort)
+{if(!callback){this.releaseObject(o);return;}
+var httpStatus,responseObject;try
+{if(o.conn.status!==undefined&&o.conn.status!==0){httpStatus=o.conn.status;}
+else{httpStatus=13030;}}
+catch(e){httpStatus=13030;}
+if(httpStatus>=200&&httpStatus<300||httpStatus===1223){responseObject=this.createResponseObject(o,callback.argument);if(callback.success){if(!callback.scope){callback.success(responseObject);}
+else{callback.success.apply(callback.scope,[responseObject]);}}
+this.successEvent.fire(responseObject);if(o.successEvent){o.successEvent.fire(responseObject);}}
+else{switch(httpStatus){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:responseObject=this.createExceptionObject(o.tId,callback.argument,(isAbort?isAbort:false));if(callback.failure){if(!callback.scope){callback.failure(responseObject);}
+else{callback.failure.apply(callback.scope,[responseObject]);}}
+break;default:responseObject=this.createResponseObject(o,callback.argument);if(callback.failure){if(!callback.scope){callback.failure(responseObject);}
+else{callback.failure.apply(callback.scope,[responseObject]);}}}
+this.failureEvent.fire(responseObject);if(o.failureEvent){o.failureEvent.fire(responseObject);}}
+this.releaseObject(o);responseObject=null;},createResponseObject:function(o,callbackArg)
+{var obj={};var headerObj={};try
+{var headerStr=o.conn.getAllResponseHeaders();var header=headerStr.split('\n');for(var i=0;i<header.length;i++){var delimitPos=header[i].indexOf(':');if(delimitPos!=-1){headerObj[header[i].substring(0,delimitPos)]=header[i].substring(delimitPos+2);}}}
+catch(e){}
+obj.tId=o.tId;obj.status=(o.conn.status==1223)?204:o.conn.status;obj.statusText=(o.conn.status==1223)?"No Content":o.conn.statusText;obj.getResponseHeader=headerObj;obj.getAllResponseHeaders=headerStr;obj.responseText=o.conn.responseText;obj.responseXML=o.conn.responseXML;if(typeof callbackArg!==undefined){obj.argument=callbackArg;}
+return obj;},createExceptionObject:function(tId,callbackArg,isAbort)
+{var COMM_CODE=0;var COMM_ERROR='communication failure';var ABORT_CODE=-1;var ABORT_ERROR='transaction aborted';var obj={};obj.tId=tId;if(isAbort){obj.status=ABORT_CODE;obj.statusText=ABORT_ERROR;}
+else{obj.status=COMM_CODE;obj.statusText=COMM_ERROR;}
+if(callbackArg){obj.argument=callbackArg;}
+return obj;},initHeader:function(label,value,isDefault)
+{var headerObj=(isDefault)?this._default_headers:this._http_headers;if(headerObj[label]===undefined){headerObj[label]=value;}
+else{headerObj[label]=value+","+headerObj[label];}
+if(isDefault){this._has_default_headers=true;}
+else{this._has_http_headers=true;}},setHeader:function(o)
+{if(this._has_default_headers){for(var prop in this._default_headers){if(YAHOO.lang.hasOwnProperty(this._default_headers,prop)){o.conn.setRequestHeader(prop,this._default_headers[prop]);}}}
+if(this._has_http_headers){for(var prop in this._http_headers){if(YAHOO.lang.hasOwnProperty(this._http_headers,prop)){o.conn.setRequestHeader(prop,this._http_headers[prop]);}}
+delete this._http_headers;this._http_headers={};this._has_http_headers=false;}},resetDefaultHeaders:function(){delete this._default_headers;this._default_headers={};this._has_default_headers=false;},setForm:function(formId,isUpload,secureUri)
+{this.resetFormState();var oForm;if(typeof formId=='string'){oForm=(document.getElementById(formId)||document.forms[formId]);}
+else if(typeof formId=='object'){oForm=formId;}
+else{return;}
+if(isUpload){var io=this.createFrame(secureUri?secureUri:null);this._isFormSubmit=true;this._isFileUpload=true;this._formNode=oForm;return;}
+var oElement,oName,oValue,oDisabled;var hasSubmit=false;for(var i=0;i<oForm.elements.length;i++){oElement=oForm.elements[i];oDisabled=oForm.elements[i].disabled;oName=oForm.elements[i].name;oValue=oForm.elements[i].value;if(!oDisabled&&oName)
+{switch(oElement.type)
+{case'select-one':case'select-multiple':for(var j=0;j<oElement.options.length;j++){if(oElement.options[j].selected){if(window.ActiveXObject){this._sFormData+=encodeURIComponent(oName)+'='+encodeURIComponent(oElement.options[j].attributes['value'].specified?oElement.options[j].value:oElement.options[j].text)+'&';}
+else{this._sFormData+=encodeURIComponent(oName)+'='+encodeURIComponent(oElement.options[j].hasAttribute('value')?oElement.options[j].value:oElement.options[j].text)+'&';}}}
+break;case'radio':case'checkbox':if(oElement.checked){this._sFormData+=encodeURIComponent(oName)+'='+encodeURIComponent(oValue)+'&';}
+break;case'file':case undefined:case'reset':case'button':break;case'submit':if(hasSubmit===false){if(this._hasSubmitListener&&this._submitElementValue){this._sFormData+=this._submitElementValue+'&';}
+else{this._sFormData+=encodeURIComponent(oName)+'='+encodeURIComponent(oValue)+'&';}
+hasSubmit=true;}
+break;default:this._sFormData+=encodeURIComponent(oName)+'='+encodeURIComponent(oValue)+'&';}}}
+this._isFormSubmit=true;this._sFormData=this._sFormData.substr(0,this._sFormData.length-1);return this._sFormData;},resetFormState:function(){this._isFormSubmit=false;this._isFileUpload=false;this._formNode=null;this._sFormData="";},createFrame:function(secureUri){var frameId='yuiIO'+this._transaction_id;var io;if(window.ActiveXObject){io=document.createElement('<iframe id="'+frameId+'" name="'+frameId+'" />');if(typeof secureUri=='boolean'){io.src='javascript:false';}
+else if(typeof secureURI=='string'){io.src=secureUri;}}
+else{io=document.createElement('iframe');io.id=frameId;io.name=frameId;}
+io.style.position='absolute';io.style.top='-1000px';io.style.left='-1000px';document.body.appendChild(io);},appendPostData:function(postData)
+{var formElements=[];var postMessage=postData.split('&');for(var i=0;i<postMessage.length;i++){var delimitPos=postMessage[i].indexOf('=');if(delimitPos!=-1){formElements[i]=document.createElement('input');formElements[i].type='hidden';formElements[i].name=postMessage[i].substring(0,delimitPos);formElements[i].value=postMessage[i].substring(delimitPos+1);this._formNode.appendChild(formElements[i]);}}
+return formElements;},uploadFile:function(o,callback,uri,postData){var frameId='yuiIO'+o.tId;var uploadEncoding='multipart/form-data';var io=document.getElementById(frameId);var oConn=this;var rawFormAttributes={action:this._formNode.getAttribute('action'),method:this._formNode.getAttribute('method'),target:this._formNode.getAttribute('target')};this._formNode.setAttribute('action',uri);this._formNode.setAttribute('method','POST');this._formNode.setAttribute('target',frameId);if(this._formNode.encoding){this._formNode.setAttribute('encoding',uploadEncoding);}
+else{this._formNode.setAttribute('enctype',uploadEncoding);}
+if(postData){var oElements=this.appendPostData(postData);}
+this._formNode.submit();this.startEvent.fire(o);if(o.startEvent){o.startEvent.fire(o);}
+if(callback&&callback.timeout){this._timeOut[o.tId]=window.setTimeout(function(){oConn.abort(o,callback,true);},callback.timeout);}
+if(oElements&&oElements.length>0){for(var i=0;i<oElements.length;i++){this._formNode.removeChild(oElements[i]);}}
+for(var prop in rawFormAttributes){if(YAHOO.lang.hasOwnProperty(rawFormAttributes,prop)){if(rawFormAttributes[prop]){this._formNode.setAttribute(prop,rawFormAttributes[prop]);}
+else{this._formNode.removeAttribute(prop);}}}
+this.resetFormState();var uploadCallback=function()
+{if(callback&&callback.timeout){window.clearTimeout(oConn._timeOut[o.tId]);delete oConn._timeOut[o.tId];}
+oConn.completeEvent.fire(o);if(o.completeEvent){o.completeEvent.fire(o);}
+var obj={};obj.tId=o.tId;obj.argument=callback.argument;try
+{obj.responseText=io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:io.contentWindow.document.documentElement.textContent;obj.responseXML=io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;}
+catch(e){}
+if(callback&&callback.upload){if(!callback.scope){callback.upload(obj);}
+else{callback.upload.apply(callback.scope,[obj]);}}
+oConn.uploadEvent.fire(obj);if(o.uploadEvent){o.uploadEvent.fire(obj);}
+if(YAHOO.util.Event){YAHOO.util.Event.removeListener(io,"load",uploadCallback);}
+else if(window.detachEvent){io.detachEvent('onload',uploadCallback);}
+else{io.removeEventListener('load',uploadCallback,false);}
+setTimeout(function(){document.body.removeChild(io);oConn.releaseObject(o);},100);};if(YAHOO.util.Event){YAHOO.util.Event.addListener(io,"load",uploadCallback);}
+else if(window.attachEvent){io.attachEvent('onload',uploadCallback);}
+else{io.addEventListener('load',uploadCallback,false);}},abort:function(o,callback,isTimeout)
+{var abortStatus;if(o.conn){if(this.isCallInProgress(o)){o.conn.abort();window.clearInterval(this._poll[o.tId]);delete this._poll[o.tId];if(isTimeout){window.clearTimeout(this._timeOut[o.tId]);delete this._timeOut[o.tId];}
+abortStatus=true;}}
+else if(o.isUpload===true){var frameId='yuiIO'+o.tId;var io=document.getElementById(frameId);if(io){document.body.removeChild(io);if(isTimeout){window.clearTimeout(this._timeOut[o.tId]);delete this._timeOut[o.tId];}
+abortStatus=true;}}
+else{abortStatus=false;}
+if(abortStatus===true){this.abortEvent.fire(o);if(o.abortEvent){o.abortEvent.fire(o);}
+this.handleTransactionResponse(o,callback,true);}
+else{}
+return abortStatus;},isCallInProgress:function(o)
+{if(o&&o.conn){return o.conn.readyState!==4&&o.conn.readyState!==0;}
+else if(o&&o.isUpload===true){var frameId='yuiIO'+o.tId;return document.getElementById(frameId)?true:false;}
+else{return false;}},releaseObject:function(o)
+{if(o.conn){o.conn=null;}
+o=null;}};YAHOO.register("connection",YAHOO.util.Connect,{version:"2.3.0",build:"442"});
\ No newline at end of file
More information about the pLog-svn
mailing list