OSDN Git Service

Version 0.6.197, add X.Util.Windfow.
authoritozyun <itozyun@user.sourceforge.jp>
Wed, 25 Nov 2015 05:48:45 +0000 (14:48 +0900)
committeritozyun <itozyun@user.sourceforge.jp>
Wed, 25 Nov 2015 05:48:45 +0000 (14:48 +0900)
0.6.x/js/02_dom/04_XBoxModel.js
0.6.x/js/05_util/01_XNinjaIframe.js
0.6.x/js/05_util/06_XWindow.js [new file with mode: 0644]
0.6.x/js/06_net/10_XOAuth2.js

index 43d7e99..d96d253 100644 (file)
@@ -213,12 +213,12 @@ function X_Node_y(){
 };\r
 \r
 /**\r
- * 要素の文書内の位置。引数に xnode を与えた場合、\r
+ * 要素の文書内の位置。\r
  * @alias Node.prototype.offset\r
  * @return {object} { x: {number}, y : {number} }\r
  * @example node.offset();\r
  */\r
-function X_Node_offset( xnode ){\r
+function X_Node_offset(){\r
        var flags  = this[ '_flags' ],\r
                offset = { x : 0, y : 0 },\r
                obj, parent, elm;\r
index 702706d..3bd2e4c 100644 (file)
@@ -7,21 +7,40 @@
  * \r
  * @alias X.Util.NinjaIframe\r
  * @class NinjaIframe 隠し iframe 機能を提供します。\r
- * @constructs NinjaIframe\r
  * @extends {Node}\r
  */\r
 var X_NinjaIframe = X[ 'Util' ][ 'NinjaIframe' ] = Node[ 'inherits' ](\r
        'NinjaIframe',\r
+       \r
+       /** @lends NinjaIframe.prototype */\r
        {\r
-               autoRefresh  : 0,\r
+               /* autoRefresh  : 0, */\r
                \r
+               /**\r
+                * iframe の contentWindow\r
+                * @private\r
+                * @type {window} */\r
                _iwin        : null,\r
                \r
+               /**\r
+                * iframe に write する html 文字時列\r
+                * @type {string} */\r
                _contentHTML : '',\r
+               \r
+               /**\r
+                * iframe の name\r
+                * @private\r
+                * @type {string} */\r
                _name        : '',\r
+               \r
+               /**\r
+                * iframe への html 文字列の write が完了した\r
+                * @private\r
+                * @type {string} */\r
                _ready       : false,\r
                \r
                'Constructor' : function( html ){\r
+                       // TODO src も設定可能に\r
                        \r
                        this._name = 'hidden-iframe-' + X_Timer_now();\r
                        // https://github.com/polygonplanet/Pot.js/blob/master/src/Worker.js\r
@@ -59,6 +78,11 @@ var X_NinjaIframe = X[ 'Util' ][ 'NinjaIframe' ] = Node[ 'inherits' ](
                        X_ViewPort[ 'listenOnce' ]( X_EVENT_AFTER_UPDATE, this, X_Util_NinjaIframe_handleEvent );\r
                },\r
                \r
+               /**\r
+                * iframe 内をリフレッシュ、または内容を上書きする\r
+                * @param {string=} opt_contentHTML html文字列\r
+                * @return {NinjaIframe} チェーンメソッド\r
+                */\r
                'refresh' : function( opt_contentHTML ){\r
                        var raw = this[ '_rawObject' ],\r
                                idoc;\r
@@ -82,7 +106,6 @@ var X_NinjaIframe = X[ 'Util' ][ 'NinjaIframe' ] = Node[ 'inherits' ](
 \r
                        if( !( X_UA[ 'IE' ] < 9 ) ){\r
                                X_Util_NinjaIframe_writeToIframe( this );\r
-                               //this._ready = true;\r
                        };\r
                        \r
                        return this;\r
@@ -106,7 +129,6 @@ function X_Util_NinjaIframe_handleEvent( e ){
                        \r
                        if( !( X_UA[ 'IE' ] < 9 ) ){\r
                                X_Util_NinjaIframe_writeToIframe( this );\r
-                               //this._ready = true;\r
                                return;\r
                        };\r
                        //break; これあると IE8 で駄目!\r
@@ -116,7 +138,6 @@ function X_Util_NinjaIframe_handleEvent( e ){
                        // ie9-\r
                        if( !this._ready ){\r
                                X_Util_NinjaIframe_writeToIframe( this );\r
-                               //this._ready = true;\r
                                break;\r
                        };\r
                        // onload\r
@@ -143,7 +164,7 @@ function X_Util_NinjaIframe_writeToIframe( that ){
                idoc = raw.contentDocument || that._iwin.document,\r
                html = that._contentHTML;\r
        \r
-       that._ready = true; // これを削除すると ie6,7,8 で Stack overflow at line : 0 意味不明\r
+       that._ready = true; // これを削除すると ie6,7,8 で Stack overflow at line : 0 意味不明 'readystatechange' が繰り返し起こりループする??\r
        delete that._contentHTML;\r
 \r
        idoc.open();\r
diff --git a/0.6.x/js/05_util/06_XWindow.js b/0.6.x/js/05_util/06_XWindow.js
new file mode 100644 (file)
index 0000000..f3941ee
--- /dev/null
@@ -0,0 +1,121 @@
+/**\r
+ * 別窓(別タブ)の操作\r
+ * <ol>\r
+ * <li>win.kill() で別窓を閉じる\r
+ * <li>win.kill() 以外で閉じられた場合、ユーザーの[x]ボタン操作や、他のscriptによって閉じられた場合、X.Event.UNLOAD イベントを発して自身を kill する。\r
+ * </ol>\r
+ * イベント\r
+ * <dl>\r
+ * <dt>X.Event.UNLOAD<dd>win.kill() 以外で閉じられた場合に通知、自身はkillする\r
+ * <dt>X.Event.ERROR<dd>他ドメインに遷移した等の理由で win.write() による書き換えに失敗した場合\r
+ * </dl>\r
+ * \r
+ * @example // 別ページの表示\r
+ * win = X.Util.Window( { url : 'other.html' } );\r
+ * // コンテンツの書き込み\r
+ * win = X.Util.Window( { html : '&lt;p&gt;Hello,world!&lt;/p&gt;' } );\r
+ * // 閉じる\r
+ * win.kill();\r
+ * \r
+ * @alias X.Util.Window\r
+ * @class Window 別窓(別タブ)\r
+ * @extends {EventDispatcher}\r
+ */\r
+var X_Window = X[ 'Util' ][ 'Window' ] = X_EventDispatcher[ 'inherits' ](\r
+       '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
+               '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
+                       if( !url && html ){\r
+                               this[ 'write' ]( html );\r
+                       };\r
+                       \r
+                       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
+               },\r
+               \r
+               /**\r
+                * 別窓が閉じられたか?\r
+                * <ol>\r
+                * <li>ユーザーの[x]クリック操作等\r
+                * <li>別窓内の script, または他の script\r
+                * </ol>\r
+                * @return {boolean}\r
+                */\r
+               'closed' : function(){\r
+                       return X_Script_try( X_Object_find, [ X_Pair_get( this ), 'closed' ] );\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
+\r
+                       if( doc ){\r
+                               doc.open();\r
+                               doc.write( opt_html || '' ); // TODO 無毒化\r
+                               doc.close();\r
+                       } else {\r
+                               this[ 'asyncDispatch' ]( X_EVENT_ERROR );\r
+                       };\r
+                       \r
+                       return this;\r
+               }\r
+               \r
+               // TODO url\r
+               \r
+       }\r
+);\r
+\r
+function X_Util_Window_onTimer( e ){\r
+       if( this[ 'closed' ]() ){\r
+               this[ 'asyncDispatch' ]( X_EVENT_UNLOAD );\r
+               delete this._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
+\r
+       switch( e.type ){\r
+               case X_EVENT_UNLOAD :\r
+                       this[ 'kill' ]();\r
+                       break;\r
+               \r
+               case X_EVENT_KILL_INSTANCE :\r
+                       if( page && !this[ 'closed' ]() ){\r
+                               if( 9 < X_UA[ 'IEHost' ] ){\r
+                                       page.close();\r
+                               } else {\r
+                                       page.open( 'about:blank', '_self' ).close();\r
+                               };\r
+                               X_Pair_release( this, page );                           \r
+                       };\r
+                       this._timerID && X_Timer_remove( this._timerID );\r
+                       X_ViewPort[ 'unlisten' ]( X_EVENT_UNLOAD, this, X_Util_Window_handleEvent );\r
+                       break;\r
+       };\r
+};\r
+\r
index b881ec2..961d0a2 100644 (file)
@@ -114,7 +114,7 @@ X[ 'OAuth2' ] = X_EventDispatcher[ 'inherits' ](
                                                        'response_type' : 'code',
                                                        'client_id'     : pair[ 'clientID' ],
                                                        'redirect_uri'  : pair[ 'redirectURI' ],
-                                                       'scope'         : ( pair[ 'scopes' ] || [] ).join(' ')
+                                                       'scope'         : ( pair[ 'scopes' ] || [] ).join( ' ' )
                                                }
                                        ),
                                        'oauthauthorize',