OSDN Git Service

Version 0.6.188, fix X.UI.
[pettanr/clientJs.git] / 0.6.x / js / 20_ui / 20_Root.js
index ae0cfba..6c2dd6b 100644 (file)
@@ -47,14 +47,14 @@ function X_UI_eventRellay( e ){
                };
                if( parent !== X_UI_rootData ){
                        data.hoverClassName && data.xnode[ 'removeClass' ]( data.hoverClassName );
-                       data[ '_listeners' ] && data[ '_listeners' ][ XUI_Event.POINTER_OUT ] && data[ 'dispatch' ]( e, XUI_Event.POINTER_OUT, false ); // new Event
+                       data[ '_listeners' ] && data[ '_listeners' ][ XUI_Event.POINTER_OUT ] && data[ 'dispatch' ]( XUI_Event.POINTER_OUT, false ); // new Event
                        delete data.hovering;
                        list.splice( i, 1 );
                        continue;
                };
                if( !data.hovering ){
                        data.hoverClassName && data.xnode.addClassName( data.hoverClassName );
-                       data[ '_listeners' ] && data[ '_listeners' ][ XUI_Event.POINTER_IN ] && data[ 'dispatch' ]( e, XUI_Event.POINTER_IN, true ); // new Event
+                       data[ '_listeners' ] && data[ '_listeners' ][ XUI_Event.POINTER_IN ] && data[ 'dispatch' ]( XUI_Event.POINTER_IN, true ); // new Event
                        data.hovering = true;
                };
        };
@@ -62,6 +62,21 @@ function X_UI_eventRellay( e ){
        return ret | X_CALLBACK_PREVENT_DEFAULT;
 };
 
+function X_UI_onMouseOut( e ){
+       var list = X_UI_rootData.hoverList,
+               i = list.length;
+console.log( e.type + i + ' ' + e.pointerType )                
+       for( ; i; ){
+               data = list[ --i ];
+               console.log( data.xnode.className() );
+               data.hoverClassName && data.xnode[ 'removeClass' ]( data.hoverClassName );
+               data[ '_listeners' ] && data[ '_listeners' ][ XUI_Event.POINTER_OUT ] && data[ 'dispatch' ](
+                       { type : XUI_Event.POINTER_OUT, pointerType : e.pointerType }, false ); // new Event
+               delete data.hovering;
+       };
+       list.length = 0;
+};
+
 /*
  * body が存在したら要素を作成、css も指定
  * 背景画像を読み終える onload で活動開始
@@ -88,7 +103,7 @@ var XUI_Root = XUI_Box.inherits(
                        if( X_ViewPort_readyState === X_EVENT_XDOM_READY ){
                                X_Timer_once( 0, this, this.start );
                        } else {
-                               X.ViewPort[ 'listenOnce' ]( X_EVENT_XDOM_READY, this, this.start );
+                               X_ViewPort[ 'listenOnce' ]( X_EVENT_XDOM_READY, this, this.start );
                        };
                        
                        this.hoverList    = [];
@@ -111,9 +126,10 @@ var XUI_Root = XUI_Box.inherits(
                        this.xnodeInteractiveLayer = X.Doc.body.create( 'div', {
                                'class'      : 'mouse-operation-catcher',
                                unselectable : 'on'
-                       } );
+                       } )[ 'listen' ]( 'pointerleave', this, X_UI_onMouseOut );
                        
                        // hover や rollover rollout のための move イベントの追加
+                       // TODO この切り替えを ViewPort へ
                        ( X_UA[ 'IE' ] < 9 ? X_ViewPort_document : X_UA[ 'Opera' ] < 8 ? X_Node_body : X_ViewPort )[ 'listen' ]( 'pointermove', X_UI_eventRellay );
                        if( counter[ XUI_Event._POINTER_MOVE ] ){
                                ++counter[ XUI_Event._POINTER_MOVE ];
@@ -170,7 +186,7 @@ var XUI_Root = XUI_Box.inherits(
 function XUI_Root_do1stCalculate(){
        this.calculate();
        this.phase = 4;
-       X.ViewPort
+       X_ViewPort
                [ 'listen' ]( X_EVENT_VIEW_RESIZED, this, this.calculate )
                [ 'listen' ]( X_EVENT_BASE_FONT_RESIZED, this, this.calculate );
 };