X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=0.6.x%2Fjs%2F06_net%2F00_XNet.js;h=90693963a7b992dd65e4e0d73dccea361c80d8ee;hb=4e4ab3be10850546063d4a4b93250ed142bb8cd2;hp=a97d45ec70a3960a0e19971b3b5a2e9992ce3cf6;hpb=2956150a7c2798e60639b36d69b0c13f6b20a62a;p=pettanr%2FclientJs.git
diff --git a/0.6.x/js/06_net/00_XNet.js b/0.6.x/js/06_net/00_XNet.js
index a97d45e..9069396 100644
--- a/0.6.x/js/06_net/00_XNet.js
+++ b/0.6.x/js/06_net/00_XNet.js
@@ -7,30 +7,31 @@
/**
- *
busy() ã¡ã½ããã ããæã¤ãéä¿¡ç¨ã®ããããã£ã¯ X.Pair ã«ãã£ã¦é è½ãããã
+ *
state() ã¡ã½ããã ããæã¤ãéä¿¡ç¨ã®ããããã£ã¯ X.Pair ã«ãã£ã¦é è½ããã¦ãã¾ãã
*
éä¿¡ã®ãã£ã³ã»ã«
- * kill() ã§éä¿¡å¾
ã¡ä¸ã¯ãã£ã³ã»ã«&ç ´æ£ãéä¿¡ä¸ã®å ´åã¯éä¿¡ã®ä¸æ&ç ´æ£ãè¡ããSUCCESS, ERROR, TIMEOUT ã¤ãã³ã以é㯠kill() ã¯ç¡è¦ãããã
+ *
kill() ã§éä¿¡å¾
ã¡ä¸ã¯ãã£ã³ã»ã«&ç ´æ£ãéä¿¡ä¸ã®å ´åã¯éä¿¡ã®ä¸æ&ç ´æ£ãè¡ãã
*
ã¤ãã³ã
*
* - X.Event.PROGRESS
- éä¿¡é²è¡ç¶æ³
*
- X.Event.SUCCESS
- éä¿¡æå
- *
- X.Event.ERROR
- éä¿¡ã¨ã©ã¼
- *
- X.Event.TIMEOUT
- éä¿¡ã¿ã¤ã ã¢ã¦ã
- *
- X.Event.CANCELED
- éä¿¡ã®ã¦ã¼ã¶ã¼ãããã°ã©ã ã«ãããã£ã³ã»ã«
- *
- X.Event.COMPLETE
- éä¿¡å®äºãSUCCESS, ERROR, TIMEOUT, CANCELED å¾ã«çºçã
+ *
- X.Event.ERROR
- éä¿¡ã¨ã©ã¼ãã¿ã¤ã ã¢ã¦ãã®å ´åãe.timeout == true ã§åããã
+ *
- X.Event.CANCELED
- éä¿¡ã®ã¦ã¼ã¶ã¼ãããã°ã©ã ã«ãããã£ã³ã»ã«ãSUCCESS, ERROR, COMPLETE å¾ã« kill()ãã¦ãCANCELEDã¯å¼ã°ãã¾ããã
+ *
- X.Event.COMPLETE
- éä¿¡å®äºãSUCCESS, ERROR, CANCELED å¾ã«çºçã
*
* X.Net ã¤ã³ã¹ã¿ã³ã¹ã¯ COMPLETE å¾ã«èªåã§ç ´æ£ãããã
*
å¿
é ããããã£
*
* - url
- URL
- *
- type
- 'xhr', 'jsonp', 'image', 'img'
+ *
- type
- 'xhr', 'jsonp', 'form', 'image', 'img'
*
- xhr
- URL { url : 'hoge', type : 'xhr' } ã®çç¥å½¢
*
- jsonp
- URL { url : 'hoge', type : 'jsonp' } ã®çç¥å½¢
+ *
- form
- URL { url : 'hoge', type : 'form' } ã®çç¥å½¢
*
- image, img
- URL { url : 'hoge', type : 'image' } ã®çç¥å½¢
*
* XHR ç¨ããããã£
*
* - method
- 'GET', 'POST' æªæå®ã㤠postdata ãè¨å®ãã¦ããå ´åã'POST' ã«ãªãã
+ *
- params
- url ãã©ã¡ã¼ã¿ã object ã§æ¸¡ããã¨ãåºæ¥ãã
*
- postdata
- string, object ã®å ´å㯠X.String.serialize ãããã
*
- async
- boolean
*
- username
- BASIC èªè¨¼
@@ -41,6 +42,25 @@
*
- dataType
- 'text', 'json', 'xml', 'blob', 'arraybuffer' çãxhr.responseType ã«æå®ããå¤
*
- mimeType
- 'text/xml', 'audio/mpeg' çãxhr.overrideMimeType ããå¤
*
- auth
- X.OAuth2 ã¤ã³ã¹ã¿ã³ã¹(OAuth2 ãµã¼ãã¹ã®å®ç¾©)
+ *
- getFullHeaders
- getAllResponseHeaders() ããã¼ã¹ããããã·ã¥ãè¿ããå¤ã¯é
åã«ãªã£ã¦ãããXDR 㯠Content-Type ããåå¾ã§ããªãã
+ *
- canUse
- æªå®è£
ãgadget proxy, YQL,
YPipes çã®ããã·ã¥ã¢ããã®è¨±å¯ãç¾å¨ã¯ test : 'gadget' ã¨ãã¦ãã
+ *
+ *
+ * JSONP ç¨ããããã£
+ *
+ * - params
- url ãã©ã¡ã¼ã¿ã object ã§æ¸¡ããã¨ãåºæ¥ãã
+ *
- callbackName
- callback(json) ã³ã¼ã«ããã¯åãåºå®ããã¦ããéã«æå®ãã¾ã㯠&callback=hoge 以å¤ã®ååã§ã³ã¼ã«ããã¯ãæå®ããå ´åã« params 㨠callbackName ã«æ¸ãã¦ãããurl ãã©ã¡ã¼ã¿ã« callback ãç¡ããcallbackName ããªãå ´åããã¬ã¼ã ã¯ã¼ã¯å
ã§èªåã§è¨å®ããã
+ *
- charset
- ãã¼ã¸ã¨ç°ãªãjsonpãèªã¿è¾¼ãå ´åã«æå® 'EUC-JP', 'Shift-JIS' ç script ã¿ã°ã® charset ã«å
¥ããhttps://code.google.com/p/ajaxzip3/issues/detail?id=5
+ *
- useFireWall
- ç°ãªããã¡ã¤ã³ã« jsonp ãèªã¿è¾¼ãã å¾ãxdomain iframe éä¿¡ã使ã£ã¦ãã¼ã¿ãåãåããä¸æ£ãªã³ã¼ãã®å®è¡ãé²ããã¨ãåºæ¥ã(ã¯ã)ãæªå®è£
+ *
+ *
+ * Form ç¨ããããã£
+ *
+ * - method
- 'GET' or 'POST'
+ *
- params
- ãã©ã¡ã¼ã¿ object 㯠input ã¿ã°ã® name & value ã«å±éããããobject ãå
¥ãåã«ãããã¨ã¯ã§ããªãã
+ *
- target
- '_self', '_parent', '_top' ã®å ´åããã¼ã¸ããé¢è±ãããtarget ãæå®ããåä¸ãã¡ã¤ã³ã®å ´å response ã« body.innerHTML ãè¿ããTODO X.Window
+ *
- timeout
- ms ã¿ã¤ã ã¢ã¦ãæéãçç¥å¯è½
+ *
- charset
- æªå®è£
*
*
* @alias X.Net
@@ -52,11 +72,17 @@
* .listen( X.Event.PROGRESS )
* .listenOnce( [ X.Event.SUCCESS, X.Event.ERROR, X.Event.TIMEOUT, X.Event.CANCELED ] );
*
+ * // XHR - GET
+ * var net = X.Net( urlString );
+ *
* // XHR - POST
* var net = X.Net( { xhr : urlString, postdata : myData } );
*
* // JSONP
- * var net = X.Net( { jsonp : urlString, staticCallbackName : callbackName, useXDomainWall : false } );
+ * var net = X.Net( { jsonp : urlString, params : params, callbackName : callbackName, charset : charset, useFireWall : false } );
+ *
+ * // Form
+ * var net = X.Net( { form : urlString, method : 'POST', target : '_self', params : {} } );
*
* // Image preload & getSize
* var net = X.Net( { image : src, sizeDetection : true } );
@@ -67,58 +93,45 @@ X[ 'Net' ] = X_EventDispatcher[ 'inherits' ](
'X.Net',
X_Class.NONE,
{
- 'netType' : '',
- 'netName' : '',
- 'netVersion' : 0,
'Constructor' : function( urlOrObject, opt_options ){
- var v, opt, url, type;
+ var opt, url, type, auth;
if( X_Type_isObject( opt = urlOrObject ) ){
- if( v = opt[ 'xhr' ] ){
- url = v;
+ //{+xhr
+ if( X_Type_isString( url = opt[ 'xhr' ] ) ){
type = X_NET_TYPE_XHR;
} else
- if( v = opt[ 'jsonp' ] ){
- url = v;
+ //}+xhr
+ //{+jsonp
+ if( X_Type_isString( url = opt[ 'jsonp' ] ) ){
type = X_NET_TYPE_JSONP;
} else
- if( v = opt[ 'img' ] || opt[ 'image' ] ){
- url = v;
+ //}+jsonp
+ //{+netimage
+ if( X_Type_isString( url = opt[ 'img' ] || opt[ 'image' ] ) ){
type = X_NET_TYPE_IMAGE;
} else
- if( v = opt[ 'form' ] ){
- url = v;
+ //}+netimage
+ //{+netform
+ if( X_Type_isString( url = opt[ 'form' ] ) ){
type = X_NET_TYPE_FORM;
} else
- if( v = opt[ 'type' ] ){
-
- switch( v ){
- case 'xhr' :
- type = X_NET_TYPE_XHR;
- break;
- case 'jsonp' :
- type = X_NET_TYPE_JSONP;
- break;
- case 'img' :
- case 'image' :
- type = X_NET_TYPE_IMAGE;
- break;
- case 'from' :
- type = X_NET_TYPE_FORM;
- break;
- default :
- alert( 'X.Net args error' );
- return;
- };
- url = opt[ 'url' ];
+ //}+netform
+ if( !( type = X_NET_NAME_TO_ID[ opt[ 'type' ] ] ) ){
+ //{+dev
+ alert( 'X.Net args error' );
+ //}+dev
+ return;
+ } else {
+ url = opt[ 'url' ];
};
-
+ //{+dev
if( !X_Type_isString( url ) ){
alert( 'X.Net args error' );
return;
};
-
+ //}+dev
} else
if( X_Type_isString( urlOrObject ) ){
url = urlOrObject;
@@ -129,39 +142,58 @@ X[ 'Net' ] = X_EventDispatcher[ 'inherits' ](
type = X_NET_TYPE_XHR;
opt = { 'url' : url, 'method' : 'GET' };
};
-
+ //{+dev
} else {
alert( 'X.Net args error' );
return;
+ //}+dev
+ };
+
+ // auth ã®éé¿
+ if( auth = opt[ 'auth' ] ){
+ delete opt[ 'auth' ];
+ };
+ opt = X_Object_deepCopy( opt );
+ if( auth ){
+ opt[ 'auth' ] = auth; // auth 㯠deep copy ãããã¨ã¾ãã
};
+ // params ã url ã«è¿½å ä½ã form ã¯é¤ã
+ if( opt[ 'params' ] && type !== X_NET_TYPE_FORM ){
+ url = X_URL_create( url, opt[ 'params' ] );
+ delete opt[ 'params' ];
+ };
+
if( type === X_NET_TYPE_XHR ){
opt[ 'method' ] = opt[ 'method' ] || ( opt[ 'postdata' ] ? 'POST' : 'GET' );
-
+
// XDomain ä¸å¯ -> Flash, Gears, Silverlight, canUseGadget ãªã gadget ã«åæ¿?
// PUT DELETE UPDATE ä¸å¯ -> Flash, Gears, Silverlight, canUseGadget ãªã gadget ã«åæ¿?
+ // xãããã³ã«(X_URL_isSameProtocol) 㪠binary ã®ãã¼ã -> gadget å
㧠proxyURL ã«ãã XHR
// or X_EVENT_ERROR
- };
+ opt[ 'dataType' ] = opt[ 'dataType' ] || X_URL_getEXT( url );
+ };
- opt = X_Object_deepCopy( opt );
opt.netType = type;
opt[ 'url' ] = url;
X_Pair_create( this, opt );
- this[ 'listen' ]( [ X_EVENT_BEFORE_KILL_INSTANCE, X_EVENT_KILL_INSTANCE ], X_NET_proxyDispatch );
+ this[ 'listen' ]( X_EVENT_KILL_INSTANCE, X_NET_proxyDispatch );
X_NET_QUEUE_LIST[ X_NET_QUEUE_LIST.length ] = this;
!X_NET_currentQueue && X_NET_shiftQueue();
},
-
+
/**
- * ç¾å¨éä¿¡ä¸ãï¼èª¿ã¹ããfalse ã®å ´åãéä¿¡ã®é çªå¾
ã¡ããéä¿¡ãçµäºãã¦ããã
- * @alias Net.prototype.busy
+ * ç¾å¨ã®ç¶æ
ã1:é çªå¾
ã¡, 2:éä¿¡ä¸, 3:éä¿¡å®äºãã§ã¼ãº
+ * @alias Net.prototype.state
*/
- 'busy' : function(){
- return this === X_NET_currentQueue && X_NET_currentWrapper._busy;
+ 'state' : function(){
+ return this === X_NET_currentQueue ?
+ ( X_NET_completePhase ? 3 : 2 ) :
+ 0 <= X_NET_QUEUE_LIST.indexOf( this ) ? 1 : 0;
}
}
);
@@ -179,13 +211,21 @@ var X_NET_TYPE_XHR = 1,
X_NET_TYPE_FORM = 3,
X_NET_TYPE_IMAGE = 4,
+ X_NET_NAME_TO_ID = {
+ 'xhr' : X_NET_TYPE_XHR,
+ 'jsonp' : X_NET_TYPE_JSONP,
+ 'form' : X_NET_TYPE_FORM,
+ 'img' : X_NET_TYPE_IMAGE,
+ 'image' : X_NET_TYPE_IMAGE
+ },
+
X_NET_QUEUE_LIST = [],
- X_NET_XHRWrapper,
- X_NET_JSONPWrapper,
- X_NET_FormWrapper,
- X_NET_ImageWrapper,
- X_NET_GIMRWrapper,
+ X_XHR,
+ X_JSONP,
+ X_FormSender,
+ X_ImgLoader,
+ X_GadgetXHR,
X_NET_currentWrapper,
X_NET_currentQueue,
@@ -196,27 +236,30 @@ function X_NET_proxyDispatch( e ){
var i, flag, auth;
switch( e.type ){
- case X_EVENT_BEFORE_KILL_INSTANCE :
- if( this === X_NET_currentQueue && X_NET_completePhase ) return X_Callback_PREVENT_DEFAULT;
- break;
-
case X_EVENT_KILL_INSTANCE :
- i = X_NET_QUEUE_LIST.indexOf( this );
-
- if( i !== -1 ){
- X_NET_QUEUE_LIST.splice( i, 1 );
- flag = true;
+ if( this === X_NET_currentQueue && X_NET_completePhase ){
+ if( X_NET_completePhase === 1 ){
+ this[ 'unlisten' ]( X_EVENT_COMPLETE, X_NET_proxyDispatch )
+ [ 'dispatch' ]( X_EVENT_COMPLETE );
+ };
+ X_NET_shiftQueue( true );
+ X_Pair_release( this );
+ X_NET_completePhase = 0;
} else
if( this === X_NET_currentQueue ){
X_NET_currentWrapper.cancel();
- X_NET_shiftQueue();
+ X_NET_shiftQueue( true );
+ flag = true;
+ } else
+ if( ( i = X_NET_QUEUE_LIST.indexOf( this ) ) !== -1 ){
+ X_NET_QUEUE_LIST.splice( i, 1 );
flag = true;
};
if( flag ){ // flag ãç«ã¤å ´åãããã¯ä¸æ
this[ 'dispatch' ]( X_EVENT_CANCELED );
this[ 'dispatch' ]( { type : X_EVENT_COMPLETE, 'lastEventType' : X_EVENT_CANCELED } );
- X_Pair_release( this );
+ X_Pair_release( this );
};
break;
case X_EVENT_PROGRESS :
@@ -225,66 +268,86 @@ function X_NET_proxyDispatch( e ){
case X_EVENT_ERROR :
if( e.status === 401 ){
- auth = X_Pair_get( this )[ 'auth' ];
- if( auth ){
- X_Pair_get( auth ).onAuthError( auth );
+ if( auth = X_Pair_get( this )[ 'auth' ] ){
+ X_Pair_get( auth ).onAuthError( auth, e );
+ // TODO ç ´æ£ããªãã§å¾
æ©ã
};
};
case X_EVENT_SUCCESS :
- case X_EVENT_TIMEOUT :
- X_NET_completePhase = true;
- this
- [ 'listenOnce' ]( X_EVENT_COMPLETE, X_NET_proxyDispatch )
- [ 'unlisten' ]( [ X_EVENT_BEFORE_KILL_INSTANCE, X_EVENT_KILL_INSTANCE ], X_NET_proxyDispatch )
- [ 'asyncDispatch' ]( e );
- this[ 'asyncDispatch' ]( 32, { type : X_EVENT_COMPLETE, 'lastEventType' : e.type } );
+ X_NET_completePhase = 1;
+ this[ 'listenOnce' ]( X_EVENT_COMPLETE, X_NET_proxyDispatch )
+ [ 'asyncDispatch' ]( 32, { type : X_EVENT_COMPLETE, 'lastEventType' : e.type } );
+
+ this[ 'asyncDispatch' ]( e );
break;
+
case X_EVENT_COMPLETE :
- X_Pair_release( this );
- X_NET_shiftQueue();
- X_NET_completePhase = false;
+ X_NET_completePhase = 2;
this[ 'kill' ]();
break;
};
};
-function X_NET_shiftQueue(){
- var auth, authSettings;
+// TODO _busy 㯠X.Net ã§è§¦ã.
+function X_NET_shiftQueue( currentKilled ){
+ var q, auth, authSettings;
if( X_NET_currentQueue ){
- if( X_NET_currentWrapper._busy ) return;
+ if( !currentKilled ) return;
+
X_NET_currentWrapper
- [ 'unlisten' ]( [ X_EVENT_PROGRESS, X_EVENT_SUCCESS, X_EVENT_ERROR, X_EVENT_TIMEOUT ], X_NET_currentQueue, X_NET_proxyDispatch )
+ [ 'unlisten' ]( [ X_EVENT_PROGRESS, X_EVENT_SUCCESS, X_EVENT_ERROR ], X_NET_currentQueue, X_NET_proxyDispatch )
.reset();
+
X_NET_currentQueue = X_NET_currentWrapper = X_NET_currentData = null;
};
+ console.log( 'â â ------------ X_NET_shiftQueue ' + X_NET_QUEUE_LIST.length );
+
if( !X_NET_QUEUE_LIST.length ) return;
- X_NET_currentQueue = X_NET_QUEUE_LIST.shift();
+
+ X_NET_currentQueue = q = X_NET_QUEUE_LIST.shift();
X_NET_currentData = X_Pair_get( X_NET_currentQueue );
switch( X_NET_currentData.netType ){
case X_NET_TYPE_XHR :
- // TODO (xProtocol |ãmethod) & canUse -> gadget.io.makeRequset, flash
+ // TODO (xProtocol |ãmethod='update' | !cors) & canUse -> gadget.io.makeRequset, flash
// force 'gadget', 'flash'
- X_NET_currentWrapper = X_NET_XHRWrapper || X_TEMP.X_Net_XHR_init();
+ switch( X_NET_currentData[ 'test' ] ){
+ case 'gadget' :
+ X_NET_currentWrapper = X_GadgetXHR || X_TEMP.X_GadgetXHR_init();
+ break;
+ case 'flash' :
+ break;
+
+ default :
+ X_NET_currentWrapper = X_XHR || X_TEMP.X_XHR_init();
+ };
+
// OAuth2
if( auth = X_NET_currentData[ 'auth' ] ){
authSettings = X_Pair_get( auth );
- switch( auth.state() ){
+ switch( auth[ 'state' ]() ){
case 0 :
case 1 :
- if( !( auth[ 'dispatch' ]( X_EVENT_NEED_AUTH ) & X_Callback_PREVENT_DEFAULT ) ){
- authSettings.lazyReq = X_NET_currentQueue;
+ case 2 :
+ if( !( auth[ 'dispatch' ]( X_EVENT_NEED_AUTH ) & X_CALLBACK_PREVENT_DEFAULT ) ){
+ // event å
㧠kill ããã¦ããªããã¨ã確èª
+ if( X_NET_currentQueue === q ){
+ authSettings.lazyRequests = authSettings.lazyRequests || [];
+ authSettings.lazyRequests.indexOf( q ) === -1 && authSettings.lazyRequests.push( q );
+ X_NET_currentQueue = null;
+ X_NET_shiftQueue();
+ };
+ } else {
+ X_NET_currentQueue === q && q[ 'kill' ]();
};
- X_NET_currentQueue = null;
- X_NET_shiftQueue();
- break;
- case 2 : // refresh token
+ return;
+ case 3 : // refresh token
X_NET_QUEUE_LIST.push( X_NET_currentQueue );
X_NET_currentQueue = null;
X_NET_shiftQueue();
@@ -294,20 +357,17 @@ function X_NET_shiftQueue(){
};
break;
case X_NET_TYPE_JSONP :
- X_NET_currentWrapper = X_NET_JSONPWrapper || X_TEMP.X_NET_JSONP_init();
+ X_NET_currentWrapper = X_JSONP || X_TEMP.X_JSONP_init();
break;
case X_NET_TYPE_FORM :
- X_NET_currentWrapper = X_NET_FormWrapper;
+ X_NET_currentWrapper = X_FormSender || X_TEMP.X_FormSender_init();
break;
case X_NET_TYPE_IMAGE :
- X_NET_currentWrapper = X_NET_ImageWrapper || X_TEMP.X_NET_Image_init();
- break;
- case 5 :
- X_NET_currentWrapper = X_NET_GIMRWrapper;
+ X_NET_currentWrapper = X_ImgLoader || X_TEMP.X_ImgLoader_init();
break;
};
- X_NET_currentWrapper[ 'listen' ]( [ X_EVENT_PROGRESS, X_EVENT_SUCCESS, X_EVENT_ERROR, X_EVENT_TIMEOUT ], X_NET_currentQueue, X_NET_proxyDispatch );
+ X_NET_currentWrapper[ 'listen' ]( [ X_EVENT_PROGRESS, X_EVENT_SUCCESS, X_EVENT_ERROR ], X_NET_currentQueue, X_NET_proxyDispatch );
X_NET_currentWrapper.load( X_NET_currentData );
};