OSDN Git Service

Version 0.6.199, bug fixes X.Node.Anime & X.Util.Window & X.Net.OAuth2 & X.UI.*.
[pettanr/clientJs.git] / 0.6.x / js / 05_util / 06_XWindow.js
index f3941ee..3fbe53a 100644 (file)
@@ -25,23 +25,13 @@ var X_Window = X[ 'Util' ][ 'Window' ] = X_EventDispatcher[ 'inherits' ](
        'X.Window',\r
        \r
        /** @lends X.Util.Window.prototype */\r
-       {\r
-               \r
-               // TODO pair 側に\r
-               /**\r
-                * closed の監視用タイマーID\r
-                * @private\r
-                * @type {number} */\r
-               _timerID : 0,\r
-               \r
+       {               \r
                'Constructor' : function( options ){\r
                        var url  = options[ 'url' ],\r
                                page = window.open( url || ''/* 'about:blank' */, options[ 'name' ] || '', options[ 'params' ] || '' ),\r
                                html = options[ 'html' ],\r
                                doc  = X_Script_try( X_Object_find, [ page, 'document' ] );\r
-                       \r
-                       X_Pair_create( this, page );\r
-                       \r
+\r
                        if( !url && html ){\r
                                this[ 'write' ]( html );\r
                        };\r
@@ -49,7 +39,10 @@ var X_Window = X[ 'Util' ][ 'Window' ] = X_EventDispatcher[ 'inherits' ](
                        X_ViewPort[ 'listenOnce' ]( X_EVENT_UNLOAD, this, X_Util_Window_handleEvent );\r
                        this[ 'listenOnce' ]( [ X_EVENT_UNLOAD, X_EVENT_KILL_INSTANCE ], X_Util_Window_handleEvent );\r
                        \r
-                       this._timerID = X_Timer_add( options[ 'interval' ] || 500, 0, this, X_Util_Window_onTimer );\r
+                       X_Pair_create( this, {\r
+                               page    : page,\r
+                               timerID : X_Timer_add( options[ 'interval' ] || 500, 0, this, X_Util_Window_onTimer )\r
+                       } );\r
                },\r
                \r
                /**\r
@@ -61,16 +54,30 @@ var X_Window = X[ 'Util' ][ 'Window' ] = X_EventDispatcher[ 'inherits' ](
                 * @return {boolean}\r
                 */\r
                'closed' : function(){\r
-                       return X_Script_try( X_Object_find, [ X_Pair_get( this ), 'closed' ] );\r
+                       var pair = X_Pair_get( this );\r
+                       \r
+                       return pair ? X_Script_try( X_Object_find, [ pair.page, 'closed' ] ) : true;\r
                },\r
-               \r
+\r
+               /**\r
+                * 別窓の url を書き換える\r
+                * @param {string} url\r
+                * @return {Window} チェーンメソッド\r
+                */\r
+               'url' : function( url ){\r
+                       var pair = X_Pair_get( this );\r
+                       \r
+                       pair && ( pair.location.href = url );\r
+               },\r
+\r
                /**\r
                 * 別窓の内容を書き換える\r
                 * @param {string=} opt_html html文字列\r
                 * @return {Window} チェーンメソッド\r
                 */\r
                'write' : function( opt_html ){\r
-                       var doc  = X_Script_try( X_Object_find, [ X_Pair_get( this ), 'document' ] );\r
+                       var pair = X_Pair_get( this ),\r
+                               doc  = pair && X_Script_try( X_Object_find, [ pair.page, 'document' ] );\r
 \r
                        if( doc ){\r
                                doc.open();\r
@@ -81,23 +88,34 @@ var X_Window = X[ 'Util' ][ 'Window' ] = X_EventDispatcher[ 'inherits' ](
                        };\r
                        \r
                        return this;\r
+               },\r
+\r
+               /**\r
+                * 別窓の値にアクセスする, X.Object.find 参照\r
+                * @param {string} selector 'navigator>mineTypes>hoge'\r
+                * @return {*}\r
+                */\r
+               'find' : function( selector ){\r
+                       var pair = X_Pair_get( this );\r
+                       \r
+                       if( pair ) return X_Script_try( X_Object_find, [ pair.page, selector ] );\r
                }\r
-               \r
-               // TODO url\r
-               \r
        }\r
 );\r
 \r
 function X_Util_Window_onTimer( e ){\r
+       var pair = X_Pair_get( this );\r
+\r
        if( this[ 'closed' ]() ){\r
                this[ 'asyncDispatch' ]( X_EVENT_UNLOAD );\r
-               delete this._timerID;\r
+               delete pair.timerID;\r
                return X_CALLBACK_UN_LISTEN;\r
        };\r
 };\r
 \r
 function X_Util_Window_handleEvent( e ){\r
-       var page = X_Pair_get( this );\r
+       var pair = X_Pair_get( this ),\r
+               page = pair && pair.page;\r
 \r
        switch( e.type ){\r
                case X_EVENT_UNLOAD :\r
@@ -113,7 +131,7 @@ function X_Util_Window_handleEvent( e ){
                                };\r
                                X_Pair_release( this, page );                           \r
                        };\r
-                       this._timerID && X_Timer_remove( this._timerID );\r
+                       pair.timerID && X_Timer_remove( pair.timerID );\r
                        X_ViewPort[ 'unlisten' ]( X_EVENT_UNLOAD, this, X_Util_Window_handleEvent );\r
                        break;\r
        };\r