OSDN Git Service

Version 0.6.143, fix X.UI.ScrollBox for iOS3.
authoritozyun <itozyun@user.sourceforge.jp>
Tue, 28 Apr 2015 09:49:05 +0000 (18:49 +0900)
committeritozyun <itozyun@user.sourceforge.jp>
Tue, 28 Apr 2015 09:49:05 +0000 (18:49 +0900)
16 files changed:
0.6.x/js/01_core/00_builtin.js
0.6.x/js/01_core/01_X.js
0.6.x/js/01_core/02_XUA.js
0.6.x/js/01_core/14_XTimer.js
0.6.x/js/01_core/16_XViewPort.js
0.6.x/js/02_dom/03_XDomEvent.js
0.6.x/js/02_dom/09_XHTMLParser.js
0.6.x/js/02_dom/10_XNodeAnime.js
0.6.x/js/03_plugin/00_XPlugin.js
0.6.x/js/06_net/00_XNet.js
0.6.x/js/06_net/01_XNetXHR.js
0.6.x/js/07_audio/02_XHTMLAudio.js
0.6.x/js/07_audio/10_XAudioSprite.js
0.6.x/js/20_ui/05_XUI_Gesture.js
0.6.x/js/20_ui/15_ScrollBox.js
0.6.x/js/20_ui/20_PageRoot.js

index 8a8f073..b5cb1cb 100644 (file)
@@ -173,7 +173,7 @@ DecodeURI=function(str){
 };\r
  */\r
 \r
-/* 正規表現が使われているため、まだ投入しない itozyun\r
+/* 正規表現が使われているため、まだ投入しない itozyun*/\r
 window.encodeURI || (window.encodeURI = function (x) {\r
        return ("" + x).replace(/[^!#$&-;=?-Z_a-z~]/g, function (s) {\r
                var c = s.charCodeAt(0), p = "%";\r
@@ -209,7 +209,7 @@ window.decodeURI || (window.decodeURI = function (x) {
                );\r
        });\r
 });\r
-*/\r
+\r
 \r
 \r
 //window.decodeURIComponent || (window.decodeURIComponent = window.decodeURI);\r
index 5b76024..92cc634 100644 (file)
@@ -84,7 +84,7 @@ var undefined,
 /**\r
  * バージョン文字列:"0.6.123"\r
  * @type {string} */\r
-X[ 'VERSION' ] = '0.6.127';\r
+X[ 'VERSION' ] = '0.6.143';\r
 \r
 /**\r
  * ブートタイム ms\r
index 52da87e..8c1d839 100644 (file)
@@ -4,7 +4,7 @@
 // ------------------------------------------------------------------------- //\r
 \r
 /**\r
- * UserAgent ã\81®関する定数を保持する。\r
+ * UserAgent ã\81«関する定数を保持する。\r
  * @namespace X.UA\r
  * @alias X.UA\r
  * @type {object}\r
index 48b27a3..741d12c 100644 (file)
@@ -407,6 +407,7 @@ if( X_UA[ 'iOS' ] ){
                        X_Timer_timeStamp = now;\r
                        X_Timer_waitTime  = last / X_Timer_INTERVAL_TIME | 0;\r
                };\r
+               X_ViewPort[ 'getScrollPosition' ](); // X_DomEvent のための X_ViewPort_scrollX & Y の更新、\r
        });\r
 };\r
 \r
index b970452..2ed34f4 100644 (file)
@@ -5,6 +5,8 @@ var X_ViewPort_readyState,
        X_ViewPort_lock,
        X_ViewPort_width,
        X_ViewPort_height,
+       X_ViewPort_scrollX = 0,
+       X_ViewPort_scrollY = 0,
        X_ViewPort_baseFontSize,
        X_ViewPort_vScrollbarSize,
        X_ViewPort_hScrollbarSize,
@@ -169,17 +171,17 @@ X[ 'ViewPort' ] = {
                window.pageXOffset !== undefined ?
                        ( function(){
                                X_Node_updateTimerID && X_Node_startUpdate();
-                               return[ window.pageXOffset, window.pageYOffset ];
+                               return[ X_ViewPort_scrollX = window.pageXOffset, X_ViewPort_scrollY = window.pageYOffset ];
                        } ) :
                window.scrollLeft  !== undefined ?
                        ( function(){
                                X_Node_updateTimerID && X_Node_startUpdate();
-                               return[ window.scrollLeft, window.scrollTop ];
+                               return[ X_ViewPort_scrollX = window.scrollLeft, X_ViewPort_scrollY = window.scrollTop ];
                        } ) :
                        ( function(){
                                X_Node_updateTimerID && X_Node_startUpdate();
                                // body は Safari2-
-                               return[ X_ViewPort_rootElement.scrollLeft || document.body.scrollLeft, X_ViewPort_rootElement.scrollTop || document.body.scrollTop ];
+                               return[ X_ViewPort_scrollX = X_ViewPort_rootElement.scrollLeft || document.body.scrollLeft, X_ViewPort_scrollY = X_ViewPort_rootElement.scrollTop || document.body.scrollTop ];
                        } ),
 
        'getScrollbarSize' : function(){
index bcfe934..a58bead 100644 (file)
@@ -133,17 +133,17 @@ if( !X_UA[ 'IE' ] || 9 <= X_UA[ 'IE' ] ){
                                                'isPrimary'     : true,\r
                                                'hwTimestamp'   : time,\r
                                                'timestamp'     : time,\r
-                                               'button'        : e.button,\r
-                                               'buttons'       : e.buttons || e.button,\r
+                                               'button'        : /*e.button ||*/ ( force ? 0 : -1 ),\r
+                                               'buttons'       : /*e.buttons || e.button ||*/ ( force ? 1 : 0 ),\r
                                                'altKey'        : altKey,\r
                                                'ctrlKey'       : ctrlKey,\r
                                                'metaKey'       : metaKey,\r
                                                'shiftKey'      : shiftKey,\r
-                                               'pointerId'     : touch.identifier + 2,\r
+                                               'pointerId'     : touch.identifier + 2, // iOS4 は 変換が必要!\r
                                                //screenX       : touch.screenX,\r
                                                //screenY       : touch.screenY,\r
-                                               'clientX'       : touch.clientX,\r
-                                               'clientY'       : touch.clientY,\r
+                                               'clientX'       : touch.clientX || ( touch.pageX - X_ViewPort_scrollX ), // iOS4以下は clientX が undefined, コードでは入れ子のスクロールに対応できない\r
+                                               'clientY'       : touch.clientY || ( touch.pageY - X_ViewPort_scrollY ),\r
                                                'pageX'         : touch.pageX,\r
                                                'pageY'         : touch.pageY,\r
                                                'offsetX'       : touch.offsetX, // 要素上の座標を取得 \r
@@ -155,6 +155,7 @@ if( !X_UA[ 'IE' ] || 9 <= X_UA[ 'IE' ] ){
                                                'width'         : touch.width || 0,\r
                                                'height'        : touch.height || 0\r
                                        };\r
+                                       console.log( 'e.pointerId = ' + touch.identifier );\r
                                };\r
                                return events.length === 1 ? events[ 0 ] : events;\r
                        } else {\r
index 764ce5f..c23bfe3 100644 (file)
@@ -20,7 +20,7 @@ var X_HTMLParser_CHARS = {
        X_HTMLParser_block = {'ADDRESS':1,'APPLET':1,'BLOCKQUOTE':1,'BUTTON':1,'CENTER':1,'DD':1,'DEL':1,'DIR':1,'DIV':1,'DL':1,'DT':1,'FIELDSET':1,'FORM':1,'FRAMESET':1,'HR':1,'IFRAME':1,'INS':1,\r
                'ISINDEX':1,'LI':1,'MAP':1,'MENU':1,'NOFRAMES':1,'NOSCRIPT':1,'OBJECT':1,'OL':1,'P':1,'PRE':1,'SCRIPT':1,'TABLE':1,'TBODY':1,'TD':1,'TFOOT':1,'TH':1,'THEAD':1,'TR':1,'UL':1 },\r
        // Inline Elements - HTML 4.01\r
-       X_HTMLParser_inline = {'A':1,'ABBR':1,'ACRONYM':1,'APPLET':1,'B':1,'BASEFONT':1,'BDO':1,'BIG':1,'BR':1,'BUTTON':1,'CITE':1,'CODE':1,'DEL':1,'DFN':1,'EM':1,'FONT':1,'I':1,'IFRAME':1,'IMG':1,\r
+       X_HTMLParser_inline = {/*'A':1,*/'ABBR':1,'ACRONYM':1,'APPLET':1,'B':1,'BASEFONT':1,'BDO':1,'BIG':1,'BR':1,'BUTTON':1,'CITE':1,'CODE':1,'DEL':1,'DFN':1,'EM':1,'FONT':1,'I':1,'IFRAME':1,'IMG':1,\r
                'INPUT':1,'INS':1,'KBD':1,'LABEL':1,'MAP':1,'OBJECT':1,'Q':1,'S':1,'SAMP':1,'SCRIPT':1,'SELECT':1,'SMALL':1,'SPAN':1,'STRIKE':1,'STRONG':1,'SUB':1,'SUP':1,'TEXTAREA':1,'TT':1,'U':1,'VAR':1},\r
        // Elements that you can,' intentionally,' leave open\r
        // (and which close themselves)\r
index 247fe48..839697a 100644 (file)
@@ -72,7 +72,7 @@ var X_Node_ANIMATIONS            = [],
        X_Node_Anime_transitionProps = X_Node_Anime_hasTransform ? X_Node_CSS_VENDER_PREFIX[ 'transform' ] : 'left,top',\r
        // transitionEnd イベント中に要素の更新( X_Node_startUpdate() )ができるか?\r
        // iOS3+4 では可能、iOS6.1.5 で不可。TODO iOS5 及び他の環境で調査。ダメな場合、anime.html が正しく描画されない。\r
-       X_Node_updateOnTransitionEnd = X_UA[ 'iOS' ] < 6;\r
+       X_Node_updateOnTransitionEnd = false; //X_UA[ 'iOS' ] < 6;\r
 \r
 // gpu化だけ transformX , willChange\r
 // 終了位置の変更\r
@@ -85,6 +85,7 @@ var X_Node_ANIMATIONS            = [],
  * TODO : skew\r
  * TODO : filter\r
  * TODO 前回位置からの継続\r
+ * TODO scrollLeft, scrollTop\r
  */\r
 Node.prototype[ 'animate' ] = function( start, dest, duration, easing, wait ){\r
        var isNew = !this[ '_anime' ],\r
@@ -330,7 +331,7 @@ function X_Node_Anime_updateAnimation( xnode ){
                        obj.phase = obj.gpuParent ? 10 : 4;\r
                        // このタイミングで animation 関連の css を削除したところ(X_Node_Anime_clearTransition)、iOS3、4 で再描画忘れが度々起きるように、、、\r
                        if( !obj.gpuParent ) X_Node_Anime_clearTransition( xnode );\r
-                       xnode[ 'dispatch' ]( { type : X_EVENT_ANIME_END, 'gpu' : obj.gpuParent } );\r
+                       //xnode[ 'dispatch' ]( { type : X_EVENT_ANIME_END, 'gpu' : obj.gpuParent } );\r
                        break;\r
 \r
                case 4 :\r
@@ -365,7 +366,7 @@ function X_Node_Anime_updateAnimation( xnode ){
                                X_Node_Anime_clearTransition( xnode );\r
                                X_Node_Anime_updatePosition( xnode, obj.destX, obj.destY, obj.destA, phase === 14 );\r
                                obj.phase = phase === 14 ? 10 : 4;\r
-                               xnode[ 'dispatch' ]( { type : X_EVENT_ANIME_END, 'gpu' : obj.gpuParent } );\r
+                               xnode[ 'asyncDispatch' ]( time, { type : X_EVENT_ANIME_END, 'gpu' : obj.gpuParent } );\r
                        } else {\r
                                current = X_Node_Anime_getComputedPosition( xnode );\r
                                obj.startX    = current.x;\r
@@ -384,7 +385,8 @@ function X_Node_Anime_updateAnimation( xnode ){
                        // console.log( 'GPU有効で停止(待機)している xnode のGPU解除' );\r
                        X_Node_Anime_clearTransition( xnode );\r
                        X_Node_Anime_updatePosition( xnode, obj.destX, obj.destY, obj.destA, false );\r
-                       obj.gpuTimerID && X_Timer_remove( obj.gpuTimerID );\r
+                       //obj.gpuTimerID && X_Timer_remove( obj.gpuTimerID );\r
+                       //delete obj.gpuTimerID;\r
                        X_ViewPort[ 'listenOnce' ]( X_EVENT_AFTER_UPDATE, xnode, X_Node_Anime_gpuReleased );\r
                        return true;\r
                \r
@@ -418,7 +420,7 @@ function X_Node_Anime_getComputedPosition( that ) {
 };\r
 \r
 function X_Node_Anime_onTransitionEnd( e ){\r
-       // console.log( 'アニメ終了[onTransitionEnd] ' + ( this[ '_anime' ] && this[ '_anime' ].phase ) );\r
+       console.log( '[TransitionEnd] ' + ( this[ '_anime' ] && this[ '_anime' ].phase ) );\r
        \r
        if( !this[ '_anime' ] || this[ '_anime' ].phase !== 2 ){\r
                // ここで return してしまうと、view の更新イベント待ちの場合、アニメが止まる\r
@@ -432,6 +434,8 @@ function X_Node_Anime_onTransitionEnd( e ){
        this[ 'dispatch' ]( { type : X_EVENT_ANIME_END, 'gpu' : this[ '_anime' ].gpuParent } );\r
        X_Node_Anime_onTransition = false;\r
        \r
+       X_Node_Anime_clearTransition( this ); // iOS 大丈夫??\r
+       \r
        X_Node_Anime_needsDetection = true;\r
        // iOS は transitionend 内の 更新でアニメーション可能 iOS3, iOS4 で確認 \r
        // win+Gecko は不可\r
@@ -477,7 +481,7 @@ function X_Node_Anime_clearTransition( xnode ){
 };\r
 \r
 function X_Node_Anime_updatePosition( xnode, x, y, opacity, useGPU ){\r
-       // console.log( 'updatePosition y:' + y + ' gpu:' + !!useGPU );\r
+       console.log( 'updatePosition x:' + x + ' gpu:' + !!useGPU );\r
        if( X_Node_Anime_hasTransform ){\r
                xnode[ 'css' ]({\r
                        transform : 'translate(' + ( x | 0 ) + 'px,' + ( y | 0 ) + 'px)' + ( useGPU ? X_Node_Anime_translateZ : '' ),\r
index 8b31533..a6e6512 100644 (file)
@@ -97,5 +97,5 @@ X[ 'Pulgin' ] = {
        
 };
 
-if( X_Pulgin_GEARS_ENABLED ) alert( 'X_Pulgin_GEARS_ENABLED' );
+//if( X_Pulgin_GEARS_ENABLED ) alert( 'X_Pulgin_GEARS_ENABLED' );
 
index 8e1e63d..4d96192 100644 (file)
@@ -53,6 +53,9 @@ X[ 'Net' ] = {
                return new X_NET_Queue( X_NET_TYPE_IMAGE, { url : url, needSize : needSize } );\r
        },\r
        \r
+       'gadget' : function( obj ){\r
+               return new X_NET_Queue( 5, obj );\r
+       },\r
        // <script>, <link>\r
        \r
        'amountQueue' : function(){\r
@@ -81,6 +84,7 @@ var X_NET_TYPE_XHR   = 1,
        X_NET_JSONPWrapper,\r
        X_NET_FormWrapper,\r
        X_NET_ImageWrapper,\r
+       X_NET_GIMRWrapper,\r
 \r
        X_NET_currentWrapper,\r
        X_NET_currentQueue;\r
@@ -177,7 +181,7 @@ function X_NET_shiftQueue(){
                        X_NET_currentWrapper = X_NET_XHRWrapper;\r
                        break;\r
                case X_NET_TYPE_JSONP :\r
-                       X_NET_currentWrapper = X_NET_JSONPWrapper;\r
+                       X_NET_currentWrapper = X_NET_JSONPWrapper; // X_NET_JSONPWrapper || createJSONPWrapper\r
                        break;\r
                case X_NET_TYPE_FORM :\r
                        X_NET_currentWrapper = X_NET_FormWrapper;\r
@@ -185,6 +189,9 @@ function X_NET_shiftQueue(){
                case X_NET_TYPE_IMAGE :\r
                        X_NET_currentWrapper = X_NET_ImageWrapper;\r
                        break;\r
+               case 5 :\r
+                       X_NET_currentWrapper = X_NET_GIMRWrapper;\r
+                       break;\r
        };\r
        \r
        X_NET_currentWrapper[ 'listen' ]( [ X_EVENT_PROGRESS, X_EVENT_SUCCESS, X_EVENT_ERROR, X_EVENT_TIMEOUT, X_EVENT_CANCELED ], X_NET_currentQueue = queue, X_NET_proxyDispatch );\r
index 8435371..2095b96 100644 (file)
@@ -74,6 +74,7 @@ X[ 'Net' ][ 'XHR' ] = {
 \r
        'UL_PROGRESS' : X_Net_XHR_upload,\r
 \r
+       // or gadget proxy\r
        'CORS'        : X_Net_XHR_X_DOMAIN || ( X_Net_XHR_W3C && X_Net_XHR_W3C.withCredentials !== undefined )\r
 };\r
 \r
index 5122880..6da87e2 100644 (file)
@@ -6,7 +6,8 @@
 \r
 var X_Audio_HTMLAudio_playTrigger =\r
                6 <= X_UA[ 'iOS' ] ? 'loadeddata' :\r
-               X_UA[ 'iOS' ] ? 'suspend' :\r
+               X_UA[ 'iOS' ] < 5  ? 'stalled' :\r
+               X_UA[ 'iOS' ]      ? 'suspend' :\r
                X_UA[ 'AndroidBrowser2' ] ? 'stalled' : // Android 2.3.5(SBM101SH) では stalled は発生しない,,,\r
                X_UA[ 'AndroidBrowser4' ] ? 'loadeddata' : \r
                X_UA[ 'OperaMobile' ] || X_UA[ 'OperaTablet' ] ? 'loadeddata' : 'canplay',\r
@@ -29,7 +30,7 @@ var X_Audio_HTMLAudio_playTrigger =
        X_Audio_HTMLAudioWrapper_ieMobile9Fix    = ( X_UA[ 'WinPhone' ] && X_UA[ 'IE9' ] ),\r
        X_Audio_HTMLAudioWrapper_durationFix     = ( !X_Audio_HTMLAudioWrapper_currentTimeFix && 12 <= X_UA[ 'Opera' ] ),\r
        \r
-       X_Audio_HTMLAudioWrapper_shortPlayFix    = !!X_UA[ 'AndroidBrowser4' ],\r
+       X_Audio_HTMLAudioWrapper_shortPlayFix    = X_UA[ 'AndroidBrowser2' ],\r
        \r
        X_Audio_codecs;\r
 \r
index 3b9366e..99d7782 100644 (file)
@@ -130,7 +130,7 @@ X_Audio_Sprite_members = {
                                if( video || ( i === 1 && X_Audio_Sprite_useVideoForMulti ) ){\r
                                        option[ 'useVideo' ] = true;\r
                                };\r
-                               tracks.push( X.Audio( urls, X_Object_clone( option ) ) );\r
+                               tracks.push( X[ 'Audio' ]( urls, X_Object_clone( option ) ) );\r
                        };\r
                        \r
                        tracks[ n - 1 ][ 'listenOnce' ]( [ X_EVENT_BACKEND_READY, X_EVENT_BACKEND_NONE ], this, X_Audio_Sprite_handleEvent );\r
index 3361dfa..355fbaf 100644 (file)
                if( enable_detect ){\r
                        // update pointerevent\r
                        if( Hammer.HAS_POINTEREVENTS ){ //eventType !== Hammer.EVENT_END ){\r
+                               console.log( 'e.pointerId = ' + e.pointerId );\r
                                POINTERS[ e.identifier = e.pointerId ] = type & END ? null : e;\r
                                touches = [];\r
+                               numTouches = -1;\r
                                // we can use forEach since pointerEvents only is in IE10\r
                                for( i = 0, l = POINTERS.length; i < l; ++i ){\r
-                                       POINTERS[ i ] && ( touches[ touches.length ] = POINTERS[ i ] );\r
+                                       POINTERS[ i ] && ( touches[ ++numTouches ] = POINTERS[ i ] );\r
                                };\r
                                numTouches = touches.length;\r
                                \r
index 43b57cf..be6884f 100644 (file)
@@ -284,6 +284,8 @@ function X_UI_ScrollBox_onStart( e ){
        this.pointX    = e.pageX;\r
        this.pointY    = e.pageY;\r
        \r
+       console.log( 'scrollstart ' + e.pageY );\r
+       \r
        this[ 'listen' ]( XUI_Event._POINTER_MOVE, this, X_UI_ScrollBox_onMove );\r
        this[ 'listen' ]( [ XUI_Event._POINTER_UP, XUI_Event._POINTER_CANCEL ], this, X_UI_ScrollBox_onEnd );\r
 \r
@@ -296,7 +298,9 @@ function X_UI_ScrollBox_onMove( e ){
                newX, newY,\r
                absDistX, absDistY;\r
        // 規定以上の move でスクロール開始\r
-       \r
+\r
+console.log( 'scrollmove ' + e.buttons + ' ' + e.button );\r
+\r
        if( !this.scrollEnabled || e.pointerType !== this.initiated ){\r
                return ret;\r
        };\r
@@ -422,7 +426,7 @@ function X_UI_ScrollBox_onEnd( e ){
        // we scrolled less than 10 pixels\r
        if( !this.moved ){\r
                // this[ 'dispatch' ]( X_EVENT_CANCELED );\r
-               console.log( 'we scrolled less than 10 pixels' );\r
+               console.log( 'we scrolled less than 10 pixels ' + e.pageY );\r
                return ret;\r
        };\r
 \r
index a73c3e6..c67f5b0 100644 (file)
@@ -3,8 +3,8 @@ var X_UI_rootData  = null,
 
 function X_UI_eventRellay( e ){
        var font    = X_ViewPort_baseFontSize,
-               x       = e.clientX / font,
-               y       = e.clientY / font,
+               x       = e.pageX / font, // clientX iOS4- で通らない?
+               y       = e.pageY / font,
                type    = XUI_Event.NameToID[ e.type ],
                i       = 0,
                data    = X_UI_rootData,