• R/O
  • HTTP
  • SSH
  • HTTPS

clientJs: コミット

クライアント側 js 開発用


コミットメタ情報

リビジョン2bea17ee282c2cf4ce0de6685db3ade602f6e60f (tree)
日時2016-02-02 16:53:51
作者itozyun <itozyun@user...>
コミッターitozyun

ログメッセージ

Version 0.6.209, bug fixes X.Net.* & X.URL.

変更サマリ

差分

--- a/0.6.x/js/01_core/02_XUA.js
+++ b/0.6.x/js/01_core/02_XUA.js
@@ -310,6 +310,16 @@ var X_UA = X[ 'UA' ] = {},
310310 */
311311 X_UA[ 'OperaTablet' ] = true;
312312
313+ // Android Opera12.10 UserAgent:Desktop
314+ // この場合 android version 不明...
315+ if( !X_UA[ 'OperaMini' ] && !X_UA[ 'OperaTablet' ] && !X_UA[ 'OperaMobile' ] && sys === 'Android' ){
316+ if( screen.width * screen.height < 320000 ){
317+ X_UA[ 'OperaMobile' ] = true;
318+ } else {
319+ X_UA[ 'OperaTablet' ] = true;
320+ };
321+ };
322+
313323 if( 0 < dua.indexOf( 'Nintendo Wii' ) )
314324 /**
315325 * @alias X.UA.Wii
--- a/0.6.x/js/01_core/09_XURL.js
+++ b/0.6.x/js/01_core/09_XURL.js
@@ -4,6 +4,7 @@
44 // ------------------------------------------------------------------------- //
55 var X_URL_BASE_URL = ( function( parts ){
66 var last = 1 < parts.length && parts[ parts.length - 1 ];
7+
78 if( last !== false && ( last === '' || //末尾が/で終わるとき
89 last.indexOf( '.' ) !== -1 ) ){ //末尾がファイル名で終わる時
910 --parts.length;
@@ -11,6 +12,8 @@ var X_URL_BASE_URL = ( function( parts ){
1112 return parts.join( '/' );
1213 })( X_URL_cleanup( location.href ).split( '/' ) ),
1314
15+ X_URL_HOST = location.protocol + '//' + location.hostname,
16+
1417 X_URL_IS_FILE = location.protocol === 'file:',
1518
1619 X_URL_IS_LOCAL = X_URL_IS_FILE || location.hostname === 'localhost' || location.hostname === '127.0.0.1',
@@ -109,7 +112,7 @@ function X_URL_toAbsolutePath( path ){
109112 */
110113 function X_URL_isSameDomain( path ){
111114 path = X_URL_cleanup( X_URL_toAbsolutePath( path ) );
112- return path === X_URL_BASE_URL || path.indexOf( X_URL_BASE_URL + '/' ) === 0;
115+ return path === X_URL_HOST || path.indexOf( X_URL_HOST + '/' ) === 0;
113116 };
114117 /**
115118 * 同一プロトコルか?
--- a/0.6.x/js/02_dom/10_XNodeAnime.js
+++ b/0.6.x/js/02_dom/10_XNodeAnime.js
@@ -11,7 +11,10 @@ var X_NodeAnime_QUEUE = [],
1111
1212 /* Opera mobile で translateZ(0) が有効だと XY が 0 0 になる */
1313 /* GPUレイヤーにいる間に要素のコンテンツを変更をすると transitionend が動かなくなるっぽい Mac safari と firefox */
14- X_NodeAnime_translateZ = X_Node_CSS_VENDER_PREFIX[ 'perspective' ] && !X_UA[ 'OperaMobile' ] && !X_UA[ 'OperaTablet' ] ? ' translateZ(0)' : '',
14+ X_NodeAnime_translateZ = X_Node_CSS_VENDER_PREFIX[ 'perspective' ] &&
15+ !X_UA[ 'OperaMobile' ] && !X_UA[ 'OperaTablet' ] //&&
16+ /* ハードウェアによると思うが IE11 と Win8.1 で画面(塗)が乱れる */
17+ /* !( ( X_UA[ 'IE' ] === 11 || X_UA[ 'IEHost' ] === 11 ) && X_UA[ 'Windows' ] === 8.1 ) */ ? ' translateZ(0)' : '',
1518
1619 /*
1720 * phase:
--- a/0.6.x/js/06_net/00_XNet.js
+++ b/0.6.x/js/06_net/00_XNet.js
@@ -242,13 +242,13 @@ function X_NET_proxyDispatch( e ){
242242 this[ 'unlisten' ]( X_EVENT_COMPLETE, X_NET_proxyDispatch )
243243 [ 'dispatch' ]( X_EVENT_COMPLETE );
244244 };
245- X_NET_shiftQueue();
245+ X_NET_shiftQueue( true );
246246 X_Pair_release( this );
247247 X_NET_completePhase = 0;
248248 } else
249249 if( this === X_NET_currentQueue ){
250250 X_NET_currentWrapper.cancel();
251- X_NET_shiftQueue();
251+ X_NET_shiftQueue( true );
252252 flag = true;
253253 } else
254254 if( ( i = X_NET_QUEUE_LIST.indexOf( this ) ) !== -1 ){
@@ -289,11 +289,12 @@ function X_NET_proxyDispatch( e ){
289289 };
290290 };
291291
292-function X_NET_shiftQueue(){
293- var auth, authSettings;
292+// TODO _busy は X.Net で触る.
293+function X_NET_shiftQueue( currentKilled ){
294+ var q, auth, authSettings;
294295
295296 if( X_NET_currentQueue ){
296- if( X_NET_currentWrapper._busy ) return;
297+ if( !currentKilled ) return;
297298
298299 X_NET_currentWrapper
299300 [ 'unlisten' ]( [ X_EVENT_PROGRESS, X_EVENT_SUCCESS, X_EVENT_ERROR ], X_NET_currentQueue, X_NET_proxyDispatch )
@@ -307,7 +308,7 @@ function X_NET_shiftQueue(){
307308 if( !X_NET_QUEUE_LIST.length ) return;
308309
309310
310- X_NET_currentQueue = X_NET_QUEUE_LIST.shift();
311+ X_NET_currentQueue = q = X_NET_QUEUE_LIST.shift();
311312 X_NET_currentData = X_Pair_get( X_NET_currentQueue );
312313
313314 switch( X_NET_currentData.netType ){
@@ -335,12 +336,17 @@ function X_NET_shiftQueue(){
335336 case 1 :
336337 case 2 :
337338 if( !( auth[ 'dispatch' ]( X_EVENT_NEED_AUTH ) & X_CALLBACK_PREVENT_DEFAULT ) ){
338- authSettings.lazyRequests = authSettings.lazyRequests || [];
339- authSettings.lazyRequests.indexOf( X_NET_currentQueue ) === -1 && authSettings.lazyRequests.push( X_NET_currentQueue );
339+ // event 内で kill されていないことを確認
340+ if( X_NET_currentQueue === q ){
341+ authSettings.lazyRequests = authSettings.lazyRequests || [];
342+ authSettings.lazyRequests.indexOf( q ) === -1 && authSettings.lazyRequests.push( q );
343+ X_NET_currentQueue = null;
344+ X_NET_shiftQueue();
345+ };
346+ } else {
347+ X_NET_currentQueue === q && q[ 'kill' ]();
340348 };
341- X_NET_currentQueue = null;
342- X_NET_shiftQueue();
343- break;
349+ return;
344350 case 3 : // refresh token
345351 X_NET_QUEUE_LIST.push( X_NET_currentQueue );
346352 X_NET_currentQueue = null;
--- a/0.6.x/js/06_net/01_XNetXHR.js
+++ b/0.6.x/js/06_net/01_XNetXHR.js
@@ -475,15 +475,15 @@ if( X_XHR_w3c || X_XHR_msXML ){
475475 switch( X_XHR._dataType ){
476476 case '' :
477477 case 'text' :
478- data = raw[ 'responseText' ];
478+ data = X_Script_try( X_Object_find, [ raw, 'responseText' ] );
479479 break;
480480 case 'json' :
481481 case 'moz-json' :
482- data = raw[ 'response' ] || raw[ 'responseText' ];
482+ data = X_Script_try( X_Object_find, [ raw, 'response' ] ) || X_Script_try( X_Object_find, [ raw, 'responseText' ] );
483483 // eval() を使っているけど JSON の無いブラウザは XDomain な XHR はできないのでよしとする。
484484 // XDomain な XHR の際は Flash 等で代替し、その中に Json parser も組み込む。
485485 // http://d.hatena.ne.jp/sshi/20060904/p1
486- if( !X_Type_isObject( data ) ) data = X_JSON_parseTrustableString( data );
486+ if( X_Type_isString( data ) ) data = X_JSON_parseTrustableString( data );
487487 break;
488488 case 'document' :
489489 case 'xml' :
@@ -499,6 +499,9 @@ if( X_XHR_w3c || X_XHR_msXML ){
499499 data = raw[ 'response' ] || raw[ 'responseText' ]; // とりあえず
500500 break;
501501 };
502+ };
503+
504+ if( data ){
502505 X_XHR[ 'asyncDispatch' ]( 32, { type : X_EVENT_SUCCESS, status : status || 200, response : data, 'headers' : headers || null } );
503506 } else {
504507 X_XHR[ 'asyncDispatch' ]( 32, { type : X_EVENT_ERROR, status : status || 400, 'headers' : headers || null } );
--- a/0.6.x/js/06_net/04_XNetImage.js
+++ b/0.6.x/js/06_net/04_XNetImage.js
@@ -6,10 +6,12 @@
66 * AUTHOR: uupaa.js@gmail.com
77 *
88 */
9-var X_ImgLoader_hasImage = !!window[ 'Image' ],
10- X_ImgLoader_image = X_ImgLoader_hasImage && new Image(),
9+var X_ImgLoader_image = window[ 'Image' ] && new Image(),
1110 // IE では厳密には HTMLImageElement ではなく、appendChild してもサイズが取れず、removeChild に失敗する
12- X_ImgLoader_isElement = !( X_UA[ 'IE' ] < 9 ) && X_Type_isHTMLElement( X_ImgLoader_image );
11+ X_ImgLoader_isElement = !( X_UA[ 'IE' ] < 9 ) && X_Type_isHTMLElement( X_ImgLoader_image ),
12+ // http://uupaa.hatenablog.com/entry/2013/12/17/171809
13+ // お手軽に画像の読み込みをハンドリングする、今どきな方法
14+ X_ImgLoader_0forError = !X_UA[ 'IE' ] || X_UA[ 'IE' ] === 11;
1315
1416 /*
1517 * TODO
@@ -23,16 +25,15 @@ X_TEMP.X_ImgLoader_init = function(){
2325 X_TEMP.X_ImgLoader_params
2426 );
2527
26- X_ImgLoader[ 'listen' ]( [ 'load', 'error' /*, 'abort'*/, X_EVENT_KILL_INSTANCE ], X_ImgLoader_handleEvent );
28+ X_ImgLoader[ 'listen' ]( [ 'load', 'error' /*, 'abort'*/ ], X_ImgLoader_handleEvent );
2729
2830 delete X_TEMP.X_ImgLoader_init;
29- delete X_TEMP.X_ImgLoader_params;
31+ delete X_TEMP.X_ImgLoader_params;
3032
3133 return X_ImgLoader;
3234 };
3335
3436 X_TEMP.X_ImgLoader_params = {
35- _busy : false,
3637 tick : 0,
3738 timerID : 0,
3839 finish : false,
@@ -41,7 +42,6 @@ X_TEMP.X_ImgLoader_params = {
4142 timeout : 0,
4243
4344 load : function( data ){
44- this._busy = true;
4545 this.abspath = X_URL_toAbsolutePath( data[ 'url' ] );
4646 this.delay = data[ 'delay' ] || 100;
4747 this.timeout = data[ 'timeout' ] || 5000;
@@ -60,7 +60,6 @@ X_TEMP.X_ImgLoader_params = {
6060 // abort がある?
6161 raw && raw.abort && raw.abort();
6262 // this[ '_rawObject' ].src = '';
63- this._busy = false;
6463 this.finish = true;
6564 },
6665
@@ -68,12 +67,12 @@ X_TEMP.X_ImgLoader_params = {
6867 console.log( 'X.Net.Image:reset ' + this.abspath + ' timerID:' + this.timerID );
6968
7069 this.timerID && X_Timer_remove( this.timerID );
70+ this.timerID = 0;
71+
7172 //X_ImgLoader_isElement ? this[ '_rawObject' ].removeAttribute( 'src' ) : ( this[ '_rawObject' ].src = '' );
7273 this[ '_rawObject' ].src = '';
73- this.timerID = 0;
74- this._busy = false;
75- this.finished = false;
76- this.abspath = '';
74+ this.finish = false;
75+ this.abspath = '';
7776 }
7877 };
7978
@@ -81,8 +80,8 @@ function X_ImgLoader_detect(){
8180 var raw = this[ '_rawObject' ];
8281
8382 if( this.finish ) return;
83+
8484 if( raw && raw.complete ){
85- this._busy = false;
8685 this.finish = true;
8786 console.log( 'X.Net.Image:detect ' + raw.width );
8887 if( raw.width ) return;
@@ -90,7 +89,6 @@ function X_ImgLoader_detect(){
9089 this.timerID = this[ 'asyncDispatch' ]( X_EVENT_ERROR );
9190 } else
9291 if( this.timeout < ( this.tick += this.delay ) ){
93- this._busy = false;
9492 this.finish = true;
9593 X_Timer_remove( this.timerID );
9694 this.timerID = this[ 'asyncDispatch' ]( { type : X_EVENT_ERROR, 'timeout' : true } );
@@ -98,15 +96,18 @@ function X_ImgLoader_detect(){
9896 };
9997
10098 function X_ImgLoader_handleEvent( e ){
101- var size;
99+ var raw = this[ '_rawObject' ], size;
102100
101+ // IE11 reset() 時にここに入ってくる...
102+ if( !this.abspath ) return;
103103 console.log( 'X.Net.Image:handleEvent ' + e.type );
104104
105105 switch( e.type ){
106106 case 'error' :
107107 //case 'abort' : // TODO ??
108+ // ie11(10,9 開発モード)で mineType 不正の場合、画像取得に成功してもエラーイベントが起こるのを無視する。
109+ if( X_ImgLoader_0forError && raw.width ) return;
108110 if( this.finish ) return;
109- this._busy = false;
110111 this.finish = true;
111112 this.timerID && X_Timer_remove( this.timerID );
112113 this.timerID = this[ 'asyncDispatch' ]( /*e.type === 'error' ?*/ X_EVENT_ERROR /*: X_EVENT_CANCELED*/ );
@@ -115,10 +116,9 @@ function X_ImgLoader_handleEvent( e ){
115116 case 'load' :
116117 // if( finish === true ) return; // これがあると firefox3.6 で駄目、、、
117118 // if( timer ) return; // これがあると safari3.2 で駄目、、、
118- this._busy = false;
119119 this.finish = true;
120120 this.timerID && X_Timer_remove( this.timerID );
121- if( X_UA[ 'Opera' ] && !this[ '_rawObject' ].complete ){
121+ if( X_UA[ 'Opera' ] && !raw.complete ){
122122 this.timerID = this[ 'asyncDispatch' ]( X_EVENT_ERROR );
123123 return;
124124 };
@@ -133,10 +133,6 @@ function X_ImgLoader_handleEvent( e ){
133133 // time , this[ '_rawObject' ].fileSize
134134 } );
135135 break;
136-
137- case X_EVENT_KILL_INSTANCE :
138- this.reset();
139- break;
140136 };
141137 };
142138
--- a/0.6.x/js/06_net/10_XOAuth2.js
+++ b/0.6.x/js/06_net/10_XOAuth2.js
@@ -6,7 +6,7 @@ var X_OAUTH2_authWindow,
66 /**
77 * イベント
88 * <dl>
9- * <dt>X.Event.NEED_AUTH<dd>window を popup して認可を行う必要あり。ポインターイベント内で oauth2.requestAuth() を呼ぶ。
9+ * <dt>X.Event.NEED_AUTH<dd>window を popup して認可を行う必要あり。ポインターイベント内で oauth2.requestAuth() を呼ぶ。このイベントをキャンセルすると
1010 * <dt>X.Event.CANCELED<dd>認可 window が閉じられた。([x]等でウインドウが閉じられた、oauth2.cancelAuth() が呼ばれた)
1111 * <dt>X.Event.SUCCESS<dd>認可 window でユーザーが認可し、続いてコードの認可が済んだ。
1212 * <dt>X.Event.ERROR<dd>コードの認可のエラー、リフレッシュトークンのエラー、ネットワークエラー
旧リポジトリブラウザで表示