OSDN Git Service

Version 0.6.209, bug fixes X.Net.* & X.URL.
authoritozyun <itozyun@user.sourceforge.jp>
Tue, 2 Feb 2016 07:53:51 +0000 (16:53 +0900)
committeritozyun <itozyun@user.sourceforge.jp>
Tue, 2 Feb 2016 07:53:51 +0000 (16:53 +0900)
0.6.x/js/01_core/02_XUA.js
0.6.x/js/01_core/09_XURL.js
0.6.x/js/02_dom/10_XNodeAnime.js
0.6.x/js/06_net/00_XNet.js
0.6.x/js/06_net/01_XNetXHR.js
0.6.x/js/06_net/04_XNetImage.js
0.6.x/js/06_net/10_XOAuth2.js

index f614472..73e7105 100644 (file)
@@ -310,6 +310,16 @@ var X_UA = X[ 'UA' ] = {},
                         */\r
                        X_UA[ 'OperaTablet' ] = true;\r
                \r
+               // Android Opera12.10 UserAgent:Desktop\r
+               // この場合 android version 不明...\r
+               if( !X_UA[ 'OperaMini' ] && !X_UA[ 'OperaTablet' ] && !X_UA[ 'OperaMobile' ] && sys === 'Android' ){\r
+                       if( screen.width * screen.height < 320000 ){\r
+                               X_UA[ 'OperaMobile' ] = true;\r
+                       } else {\r
+                               X_UA[ 'OperaTablet' ] = true;\r
+                       };\r
+               };\r
+               \r
                if( 0 < dua.indexOf( 'Nintendo Wii' ) )\r
                        /**\r
                         * @alias X.UA.Wii\r
index 0eaccab..1be41ad 100644 (file)
@@ -4,6 +4,7 @@
 // ------------------------------------------------------------------------- //\r
 var X_URL_BASE_URL = ( function( parts ){\r
                var last = 1 < parts.length && parts[ parts.length - 1 ];\r
+               \r
                if( last !== false && ( last === '' || //末尾が/で終わるとき\r
                        last.indexOf( '.' ) !== -1 ) ){    //末尾がファイル名で終わる時\r
                        --parts.length;\r
@@ -11,6 +12,8 @@ var X_URL_BASE_URL = ( function( parts ){
                return parts.join( '/' );\r
        })( X_URL_cleanup( location.href ).split( '/' ) ),\r
        \r
+       X_URL_HOST     = location.protocol + '//' + location.hostname,\r
+       \r
        X_URL_IS_FILE  = location.protocol === 'file:',\r
        \r
        X_URL_IS_LOCAL = X_URL_IS_FILE || location.hostname === 'localhost' || location.hostname === '127.0.0.1',\r
@@ -109,7 +112,7 @@ function X_URL_toAbsolutePath( path ){
  */\r
 function X_URL_isSameDomain( path ){\r
        path = X_URL_cleanup( X_URL_toAbsolutePath( path ) );\r
-       return path === X_URL_BASE_URL || path.indexOf( X_URL_BASE_URL + '/' ) === 0;\r
+       return path === X_URL_HOST || path.indexOf( X_URL_HOST + '/' ) === 0;\r
 };\r
 /**\r
  * 同一プロトコルか?\r
index 580d6da..765dec7 100644 (file)
@@ -11,7 +11,10 @@ var X_NodeAnime_QUEUE           = [],
        \r
        /* Opera mobile で  translateZ(0) が有効だと XY が 0 0 になる */\r
        /* GPUレイヤーにいる間に要素のコンテンツを変更をすると transitionend が動かなくなるっぽい Mac safari と firefox */\r
-       X_NodeAnime_translateZ      = X_Node_CSS_VENDER_PREFIX[ 'perspective' ] && !X_UA[ 'OperaMobile' ] && !X_UA[ 'OperaTablet' ] ? ' translateZ(0)' : '',\r
+       X_NodeAnime_translateZ      = X_Node_CSS_VENDER_PREFIX[ 'perspective' ] &&\r
+                                                                       !X_UA[ 'OperaMobile' ] && !X_UA[ 'OperaTablet' ] //&&\r
+                                                                       /* ハードウェアによると思うが IE11 と Win8.1 で画面(塗)が乱れる */\r
+                                                                       /* !( ( X_UA[ 'IE' ] === 11 || X_UA[ 'IEHost' ] === 11 ) && X_UA[ 'Windows' ] === 8.1 ) */ ? ' translateZ(0)' : '',\r
 \r
 /*\r
  * phase:\r
index 469669d..7d5b26f 100644 (file)
@@ -242,13 +242,13 @@ function X_NET_proxyDispatch( e ){
                                        this[ 'unlisten' ]( X_EVENT_COMPLETE, X_NET_proxyDispatch )\r
                                                [ 'dispatch' ]( X_EVENT_COMPLETE );\r
                                };\r
-                               X_NET_shiftQueue();\r
+                               X_NET_shiftQueue( true );\r
                                X_Pair_release( this );\r
                                X_NET_completePhase = 0;\r
                        } else\r
                        if( this === X_NET_currentQueue ){\r
                                X_NET_currentWrapper.cancel();\r
-                               X_NET_shiftQueue();\r
+                               X_NET_shiftQueue( true );\r
                                flag = true;\r
                        } else\r
                        if( ( i = X_NET_QUEUE_LIST.indexOf( this ) ) !== -1 ){\r
@@ -289,11 +289,12 @@ function X_NET_proxyDispatch( e ){
        };\r
 };\r
 \r
-function X_NET_shiftQueue(){\r
-       var auth, authSettings;\r
+// TODO _busy は X.Net で触る.\r
+function X_NET_shiftQueue( currentKilled ){\r
+       var q, auth, authSettings;\r
 \r
        if( X_NET_currentQueue ){\r
-               if( X_NET_currentWrapper._busy ) return;\r
+               if( !currentKilled ) return;\r
                \r
                X_NET_currentWrapper\r
                        [ 'unlisten' ]( [ X_EVENT_PROGRESS, X_EVENT_SUCCESS, X_EVENT_ERROR ], X_NET_currentQueue, X_NET_proxyDispatch )\r
@@ -307,7 +308,7 @@ function X_NET_shiftQueue(){
        if( !X_NET_QUEUE_LIST.length ) return;\r
 \r
 \r
-       X_NET_currentQueue = X_NET_QUEUE_LIST.shift();\r
+       X_NET_currentQueue = q = X_NET_QUEUE_LIST.shift();\r
        X_NET_currentData  = X_Pair_get( X_NET_currentQueue );\r
        \r
        switch( X_NET_currentData.netType ){\r
@@ -335,12 +336,17 @@ function X_NET_shiftQueue(){
                                        case 1 :\r
                                        case 2 :\r
                                                if( !( auth[ 'dispatch' ]( X_EVENT_NEED_AUTH ) & X_CALLBACK_PREVENT_DEFAULT ) ){\r
-                                                       authSettings.lazyRequests = authSettings.lazyRequests || [];\r
-                                                       authSettings.lazyRequests.indexOf( X_NET_currentQueue ) === -1 && authSettings.lazyRequests.push( X_NET_currentQueue );\r
+                                                       // event 内で kill されていないことを確認\r
+                                                       if( X_NET_currentQueue === q ){\r
+                                                               authSettings.lazyRequests = authSettings.lazyRequests || [];\r
+                                                               authSettings.lazyRequests.indexOf( q ) === -1 && authSettings.lazyRequests.push( q );\r
+                                                               X_NET_currentQueue = null;\r
+                                                               X_NET_shiftQueue();                                                                     \r
+                                                       };\r
+                                               } else {\r
+                                                       X_NET_currentQueue === q && q[ 'kill' ]();\r
                                                };\r
-                                               X_NET_currentQueue = null;\r
-                                               X_NET_shiftQueue();\r
-                                               break;\r
+                                               return;\r
                                        case 3 : // refresh token\r
                                                X_NET_QUEUE_LIST.push( X_NET_currentQueue );\r
                                                X_NET_currentQueue = null;\r
index 4875e7e..2d5f3b7 100644 (file)
@@ -475,15 +475,15 @@ if( X_XHR_w3c || X_XHR_msXML ){
                                                        switch( X_XHR._dataType ){\r
                                                                case '' :\r
                                                                case 'text' :\r
-                                                                       data = raw[ 'responseText' ];\r
+                                                                       data = X_Script_try( X_Object_find, [ raw, 'responseText' ] );\r
                                                                        break;\r
                                                                case 'json' :\r
                                                                case 'moz-json' :\r
-                                                                       data = raw[ 'response' ] || raw[ 'responseText' ];\r
+                                                                       data = X_Script_try( X_Object_find, [ raw, 'response' ] ) || X_Script_try( X_Object_find, [ raw, 'responseText' ] );\r
                                                                        // eval() を使っているけど JSON の無いブラウザは XDomain な XHR はできないのでよしとする。\r
                                                                        // XDomain な XHR の際は Flash 等で代替し、その中に Json parser も組み込む。\r
                                                                        // http://d.hatena.ne.jp/sshi/20060904/p1\r
-                                                                       if( !X_Type_isObject( data ) ) data = X_JSON_parseTrustableString( data );\r
+                                                                       if( X_Type_isString( data ) ) data = X_JSON_parseTrustableString( data );\r
                                                                        break;\r
                                                                case 'document' :\r
                                                                case 'xml' :\r
@@ -499,6 +499,9 @@ if( X_XHR_w3c || X_XHR_msXML ){
                                                                        data = raw[ 'response' ] || raw[ 'responseText' ]; // とりあえず\r
                                                                        break;\r
                                                        };\r
+                                               };\r
+                                               \r
+                                               if( data ){\r
                                                        X_XHR[ 'asyncDispatch' ]( 32, { type : X_EVENT_SUCCESS, status : status || 200, response : data, 'headers' : headers || null } );\r
                                                } else {\r
                                                        X_XHR[ 'asyncDispatch' ]( 32, { type : X_EVENT_ERROR, status : status || 400, 'headers' : headers || null } );\r
index 92044e1..3bcc3b8 100644 (file)
@@ -6,10 +6,12 @@
  *  AUTHOR: uupaa.js@gmail.com\r
  * \r
  */\r
-var X_ImgLoader_hasImage  = !!window[ 'Image' ],\r
-       X_ImgLoader_image     = X_ImgLoader_hasImage && new Image(),\r
+var X_ImgLoader_image     = window[ 'Image' ] && new Image(),\r
        // IE では厳密には HTMLImageElement ではなく、appendChild してもサイズが取れず、removeChild に失敗する\r
-       X_ImgLoader_isElement = !( X_UA[ 'IE' ] < 9 ) && X_Type_isHTMLElement( X_ImgLoader_image );\r
+       X_ImgLoader_isElement = !( X_UA[ 'IE' ] < 9 ) && X_Type_isHTMLElement( X_ImgLoader_image ),\r
+       // http://uupaa.hatenablog.com/entry/2013/12/17/171809\r
+       // お手軽に画像の読み込みをハンドリングする、今どきな方法\r
+       X_ImgLoader_0forError = !X_UA[ 'IE' ] || X_UA[ 'IE' ] === 11;\r
 \r
 /*\r
  * TODO\r
@@ -23,16 +25,15 @@ X_TEMP.X_ImgLoader_init = function(){
                X_TEMP.X_ImgLoader_params\r
        );\r
        \r
-       X_ImgLoader[ 'listen' ]( [ 'load', 'error' /*, 'abort'*/, X_EVENT_KILL_INSTANCE ], X_ImgLoader_handleEvent );\r
+       X_ImgLoader[ 'listen' ]( [ 'load', 'error' /*, 'abort'*/ ], X_ImgLoader_handleEvent );\r
        \r
        delete X_TEMP.X_ImgLoader_init;\r
-       delete X_TEMP.X_ImgLoader_params;       \r
+       delete X_TEMP.X_ImgLoader_params;\r
        \r
        return X_ImgLoader;\r
 };\r
 \r
 X_TEMP.X_ImgLoader_params = {\r
-               _busy      : false,\r
                tick       : 0,\r
                timerID    : 0,\r
                finish     : false,\r
@@ -41,7 +42,6 @@ X_TEMP.X_ImgLoader_params = {
                timeout    : 0,\r
                \r
                load : function( data ){\r
-                       this._busy   = true;\r
                        this.abspath = X_URL_toAbsolutePath( data[ 'url' ] );\r
                        this.delay   = data[ 'delay'   ] || 100;\r
                        this.timeout = data[ 'timeout' ] || 5000;\r
@@ -60,7 +60,6 @@ X_TEMP.X_ImgLoader_params = {
                        // abort がある?\r
                        raw && raw.abort && raw.abort();\r
                        // this[ '_rawObject' ].src = '';\r
-                       this._busy  = false;\r
                        this.finish = true;\r
                },\r
                \r
@@ -68,12 +67,12 @@ X_TEMP.X_ImgLoader_params = {
                        console.log( 'X.Net.Image:reset ' + this.abspath + ' timerID:' + this.timerID );\r
                        \r
                        this.timerID && X_Timer_remove( this.timerID );\r
+                       this.timerID = 0;\r
+                       \r
                        //X_ImgLoader_isElement ? this[ '_rawObject' ].removeAttribute( 'src' ) : ( this[ '_rawObject' ].src = '' );\r
                        this[ '_rawObject' ].src = '';\r
-                       this.timerID  = 0;\r
-                       this._busy    = false;\r
-                       this.finished = false;\r
-                       this.abspath  = '';\r
+                       this.finish  = false;\r
+                       this.abspath = '';\r
                }\r
        };\r
 \r
@@ -81,8 +80,8 @@ function X_ImgLoader_detect(){
        var raw = this[ '_rawObject' ];\r
        \r
        if( this.finish ) return;\r
+       \r
        if( raw && raw.complete ){\r
-               this._busy  = false;\r
                this.finish = true;\r
                console.log( 'X.Net.Image:detect ' + raw.width );\r
                if( raw.width ) return;\r
@@ -90,7 +89,6 @@ function X_ImgLoader_detect(){
                this.timerID = this[ 'asyncDispatch' ]( X_EVENT_ERROR );\r
        } else\r
        if( this.timeout < ( this.tick += this.delay ) ){\r
-               this._busy  = false;\r
                this.finish = true;\r
                X_Timer_remove( this.timerID );\r
                this.timerID = this[ 'asyncDispatch' ]( { type : X_EVENT_ERROR, 'timeout' : true } );\r
@@ -98,15 +96,18 @@ function X_ImgLoader_detect(){
 };\r
 \r
 function X_ImgLoader_handleEvent( e ){\r
-       var size;\r
+       var raw = this[ '_rawObject' ], size;\r
        \r
+       // IE11 reset() 時にここに入ってくる...\r
+       if( !this.abspath ) return;\r
        console.log( 'X.Net.Image:handleEvent ' + e.type );\r
        \r
        switch( e.type ){\r
                case 'error' :\r
                //case 'abort' : // TODO ??\r
+                       // ie11(10,9 開発モード)で mineType 不正の場合、画像取得に成功してもエラーイベントが起こるのを無視する。\r
+                       if( X_ImgLoader_0forError && raw.width ) return;\r
                        if( this.finish ) return;\r
-                       this._busy  = false;\r
                        this.finish  = true;\r
                        this.timerID && X_Timer_remove( this.timerID );\r
                        this.timerID = this[ 'asyncDispatch' ]( /*e.type === 'error' ?*/ X_EVENT_ERROR /*: X_EVENT_CANCELED*/ );\r
@@ -115,10 +116,9 @@ function X_ImgLoader_handleEvent( e ){
                case 'load' :\r
                // if( finish === true ) return; // これがあると firefox3.6 で駄目、、、\r
                // if( timer ) return; // これがあると safari3.2 で駄目、、、\r
-                       this._busy  = false;\r
                        this.finish = true;\r
                        this.timerID && X_Timer_remove( this.timerID );\r
-                       if( X_UA[ 'Opera' ] && !this[ '_rawObject' ].complete ){\r
+                       if( X_UA[ 'Opera' ] && !raw.complete ){\r
                                this.timerID = this[ 'asyncDispatch' ]( X_EVENT_ERROR );\r
                                return;\r
                        };\r
@@ -133,10 +133,6 @@ function X_ImgLoader_handleEvent( e ){
                                // time , this[ '_rawObject' ].fileSize\r
                        } );\r
                        break;\r
-\r
-               case X_EVENT_KILL_INSTANCE :\r
-                       this.reset();\r
-                       break;\r
        };\r
 };\r
 \r
index b37a6f9..e1f923e 100644 (file)
@@ -6,7 +6,7 @@ var X_OAUTH2_authWindow,
 /**
  * イベント
  * <dl>
- * <dt>X.Event.NEED_AUTH<dd>window を popup して認可を行う必要あり。ポインターイベント内で oauth2.requestAuth() を呼ぶ。
+ * <dt>X.Event.NEED_AUTH<dd>window を popup して認可を行う必要あり。ポインターイベント内で oauth2.requestAuth() を呼ぶ。このイベントをキャンセルすると
  * <dt>X.Event.CANCELED<dd>認可 window が閉じられた。([x]等でウインドウが閉じられた、oauth2.cancelAuth() が呼ばれた)
  * <dt>X.Event.SUCCESS<dd>認可 window でユーザーが認可し、続いてコードの認可が済んだ。
  * <dt>X.Event.ERROR<dd>コードの認可のエラー、リフレッシュトークンのエラー、ネットワークエラー