OSDN Git Service

Version 0.6.106, bugfix for X.EventDispatcher, cleanup X.Node, Image JSONP for Opera1...
[pettanr/clientJs.git] / 0.6.x / js / 01_core / 16_XViewPort.js
index 5161c23..6eb62df 100644 (file)
@@ -12,7 +12,7 @@ var X_ViewPort_readyState,
        X_Dom_detectFontSize = !( X_UA.IE < 9 || X_UA.iOS ) && function(){
                        var size = X_Node_fontSizeNode._rawObject.offsetHeight;
                        if( X_ViewPort_baseFontSize !== size ){
-                               X_ViewPort_baseFontSize && X_ViewPort.asyncDispatch( { type : X.Event.BASE_FONT_RESIZED, fontSize : size, w : X_ViewPort_width, h : X_ViewPort_height } );
+                               X_ViewPort_baseFontSize && X_ViewPort.asyncDispatch( X.Event.BASE_FONT_RESIZED );
                                X_ViewPort_baseFontSize = size;
                        };
        },
@@ -25,6 +25,8 @@ var X_ViewPort_readyState,
        },
        
        X_ViewPort_document = new X.EventDispatcher( document ),
+       
+       X_ViewPort_postMessageAccessKey = Math.random() * 10000 | 0,
 
 X_ViewPort = X_Class_override(
        new X.EventDispatcher( window ),
@@ -34,34 +36,51 @@ X_ViewPort = X_Class_override(
                        var href;
                        switch( e.type ){
                                case 'beforeunload' :
-                                       
                                        // ie では a href="javascript" な要素でも beforeunload が起こる
                                        href = e.target && e.target.attr && e.target.attr( 'href' );
                                        if( href && href.indexOf && href.indexOf( 'javascript:' ) === 0 ) return X.Callback.PREVENT_DEFAULT | X.Callback.STOP_PROPAGATION;
                                        
                                        return X_ViewPort.dispatch( X.Event.BEFORE_UNLOAD );
+                                       
                                case 'unload' :
                                        X_ViewPort.dispatch( X.Event.UNLOAD );
+                               //alert('unload');
+                                       X_ViewPort_document.kill();
+                                       this.kill();
                                        
-                                       X_ViewPort.unlisten();
-                                       X_ViewPort_document.unlisten();
-                                       X_Node__actualRemove( X_Node_html, true );
+                                       //X_System.dispatch( X.Event.SHUT_DOWN );
                                        break;
+
                                case 'visibilitychange' :
-                                       X_ViewPort.dispatch( { type : ( X_ViewPort_active = document[ 'hidden' ] ) ? X.Event.VIEW_DEACTIVATE : X.Event.VIEW_ACTIVATE } );
+                                       X_ViewPort.asyncDispatch( ( X_ViewPort_active = document[ 'hidden' ] ) ? X.Event.VIEW_DEACTIVATE : X.Event.VIEW_ACTIVATE );
                                        break;
                                case 'webkitvisibilitychange' :
-                                       X_ViewPort.dispatch( { type : ( X_ViewPort_active = document[ 'webkitHidden' ] ) ? X.Event.VIEW_DEACTIVATE : X.Event.VIEW_ACTIVATE } );
+                                       X_ViewPort.asyncDispatch( ( X_ViewPort_active = document[ 'webkitHidden' ] ) ? X.Event.VIEW_DEACTIVATE : X.Event.VIEW_ACTIVATE );
                                        break;
+                                       
                                case 'pageshow' :
                                case 'focus' :
-                                       X_ViewPort_active = true;
-                                       X_ViewPort.dispatch( X.Event.VIEW_ACTIVATE );
+                                       if( !X_ViewPort_active ){
+                                               X_ViewPort_active = true;
+                                               X_ViewPort.asyncDispatch( X.Event.VIEW_ACTIVATE );                                              
+                                       };
                                        break;
+
                                case 'pagehide' :
                                case 'blur' :
-                                       X_ViewPort_active = false;
-                                       X_ViewPort.dispatch( X.Event.VIEW_DEACTIVATE );
+                                       if( X_ViewPort_active ){
+                                               X_ViewPort_active = false;
+                                               X_ViewPort.asyncDispatch( X.Event.VIEW_DEACTIVATE );                                            
+                                       };
+                                       break;
+                               
+                               // TODO
+                               case 'message' :
+                                       if( e.origin !== X.URL.BASE_URL ){
+                                               
+                                       } else {
+                                               e.data;
+                                       };
                                        break;
                        };
                }
@@ -77,8 +96,9 @@ X.ViewPort = {
                        /*
                         * X.Event.XDOM_READY 以後に listen した場合の対策
                         */
-                       X_ViewPort.asyncDispatch( { type : type, w : X_ViewPort_width, h : X_ViewPort_height } );
+                       X_ViewPort.asyncDispatch( type );
                };
+               // ie8-では keydown -> documentへ
                type && arg1 && X_ViewPort.listen( type, arg1, arg2, arg3 );
                return X.ViewPort;
        },
@@ -89,7 +109,7 @@ X.ViewPort = {
                        /*
                         * X.Event.XDOM_READY 以後に listen した場合の対策
                         */
-                       X_ViewPort.asyncDispatch( { type : type, w : X_ViewPort_width, h : X_ViewPort_height } );
+                       X_ViewPort.asyncDispatch( type );
                };
                type && arg1 && X_ViewPort.listenOnce( type, arg1, arg2, arg3 );
                return X.ViewPort;
@@ -132,7 +152,7 @@ X.ViewPort = {
        //http://onozaty.hatenablog.com/entry/20060803/p1
        // Safari2.0.4では標準・互換どちらも document.body
                
-               X_Node_body._updateTimerID && X_Node_startUpdate();
+               X_Node_updateTimerID && X_Node_startUpdate();
                /*X_UA.Opera ?
                        ( document.documentElement && document.documentElement.clientWidth ?
                                new Function( 'return[document.documentElement.clientWidth,document.documentElement.clientHeight]' ) :
@@ -147,16 +167,16 @@ X.ViewPort = {
        getScrollPosition :
                window.pageXOffset !== undefined ?
                        ( function(){
-                               X_Node_body._updateTimerID && X_Node_startUpdate();
+                               X_Node_updateTimerID && X_Node_startUpdate();
                                return[ window.pageXOffset, window.pageYOffset ];
                        } ) :
                window.scrollLeft  !== undefined ?
                        ( function(){
-                               X_Node_body._updateTimerID && X_Node_startUpdate();
+                               X_Node_updateTimerID && X_Node_startUpdate();
                                return[ window.scrollLeft, window.scrollTop ];
                        } ) :
                        ( function(){
-                               X_Node_body._updateTimerID && X_Node_startUpdate();
+                               X_Node_updateTimerID && X_Node_startUpdate();
                                // body は Safari2-
                                return[ X_ViewPort_rootElement.scrollLeft || document.body.scrollLeft, X_ViewPort_rootElement.scrollTop || document.body.scrollTop ];
                        } ),
@@ -166,7 +186,7 @@ X.ViewPort = {
        },
        
        getBaseFontSize : function(){
-               if( X_Node_body._updateTimerID ){
+               if( X_Node_updateTimerID ){
                        X_Node_startUpdate();
                        return X_ViewPort_baseFontSize = X_Node_fontSizeNode._rawObject.offsetHeight;
                };
@@ -219,7 +239,7 @@ X.ViewPort = {
                                        
                                        size = X_Node_fontSizeNode._rawObject.offsetHeight;
                                        if( X_ViewPort_baseFontSize !== size ){
-                                               X_ViewPort_baseFontSize && X_ViewPort.asyncDispatch( { type : X.Event.BASE_FONT_RESIZED, fontSize : size, w : X_ViewPort_width, h : X_ViewPort_height  } );
+                                               X_ViewPort_baseFontSize && X_ViewPort.asyncDispatch( X.Event.BASE_FONT_RESIZED );
                                                X_ViewPort_baseFontSize = size;
                                        };
                                        
@@ -240,7 +260,7 @@ X.ViewPort = {
                        } else {
                                console.log( '-- detectFinishResizing : ' + X_Timer_now() );
                                
-                               X_ViewPort.asyncDispatch( { type : X.Event.VIEW_RESIZED, fontSize : X_ViewPort_baseFontSize, w : X_ViewPort_width, h : X_ViewPort_height } );
+                               X_ViewPort.asyncDispatch( X.Event.VIEW_RESIZED );
                                X_ViewPort_lock = false;
                                if( X_ViewPort_orientationFlag ){
                                        X_ViewPort_orientationFlag = false;
@@ -336,11 +356,11 @@ X.ViewPort = {
                                
                                //
                                if( X_Dom_orientationchange ){
-                                       X_ViewPort.listen( 'orientationchange', X_Dom_orientationchange );
+                                       X_EventDispatcher_systemListen( X_ViewPort, 'orientationchange', X_Dom_orientationchange );
                                };
                                
                                if( X_Dom_detectFontSize ){
-                                       X_ViewPort.listen( 'resize', X_ViewPort_resize );
+                                       X_EventDispatcher_systemListen( X_ViewPort, 'resize', X_ViewPort_resize );
                                        X.Timer.add( 333, X_Dom_detectFontSize );
                                } else {
                                        X.Timer.add( 333, X_ViewPort_resize );
@@ -354,25 +374,22 @@ X.ViewPort = {
 
                        console.log( X_ViewPort.asyncDispatch( X_TEMP.SYSTEM_EVENT_PRE_INIT ) );        
 
-                       X_ViewPort
-                               .listen( 'beforeunload', X_ViewPort )
-                               .listenOnce( 'unload', X_ViewPort );
+
+                       X_EventDispatcher_systemListen( X_ViewPort, [ 'beforeunload', 'unload' ] );
 
 //ブラウザの戻るボタンで戻ったときに呼ばれるイベントとかキャッシュとかそこらへんのこと
 //http://d.hatena.ne.jp/koumiya/20080916/1221580149
 
                        if( document[ 'hidden' ] !== undefined ) {// iOS 7+
-                               X_ViewPort_document.listen( 'visibilitychange', X_ViewPort );
+                               X_EventDispatcher_systemListen( X_ViewPort_document, 'visibilitychange', X_ViewPort );
                        } else
                        if( document[ 'webkitHidden' ] !== undefined ) {
-                               X_ViewPort_document.listen( 'webkitvisibilitychange', X_ViewPort );
+                               X_EventDispatcher_systemListen( X_ViewPort_document, 'webkitvisibilitychange', X_ViewPort );
                        } else
                        if( X_UA.iOS && window[ 'onpageshow' ] !== undefined ) {
-                               X_ViewPort.listen( 'pageshow', X_ViewPort )
-                                                       .listen( 'pagehide', X_ViewPort );      
+                               X_EventDispatcher_systemListen( X_ViewPort, [ 'pageshow', 'pagehide' ] );
                        } else {
-                               X_ViewPort.listen( 'focus', X_ViewPort )
-                                                       .listen( 'blur', X_ViewPort );
+                               X_EventDispatcher_systemListen( X_ViewPort, [ 'focus', 'blur' ] );
                        };
 
                        return X_Callback_UN_LISTEN;