• R/O
  • HTTP
  • SSH
  • HTTPS

clientJs: コミット

クライアント側 js 開発用


コミットメタ情報

リビジョン5633b955bc9fcd998e8ecf7e8e30c311aafc588c (tree)
日時2015-11-25 14:48:45
作者itozyun <itozyun@user...>
コミッターitozyun

ログメッセージ

Version 0.6.197, add X.Util.Windfow.

変更サマリ

差分

--- a/0.6.x/js/02_dom/04_XBoxModel.js
+++ b/0.6.x/js/02_dom/04_XBoxModel.js
@@ -213,12 +213,12 @@ function X_Node_y(){
213213 };
214214
215215 /**
216- * 要素の文書内の位置。引数に xnode を与えた場合、
216+ * 要素の文書内の位置。
217217 * @alias Node.prototype.offset
218218 * @return {object} { x: {number}, y : {number} }
219219 * @example node.offset();
220220 */
221-function X_Node_offset( xnode ){
221+function X_Node_offset(){
222222 var flags = this[ '_flags' ],
223223 offset = { x : 0, y : 0 },
224224 obj, parent, elm;
--- a/0.6.x/js/05_util/01_XNinjaIframe.js
+++ b/0.6.x/js/05_util/01_XNinjaIframe.js
@@ -7,21 +7,40 @@
77 *
88 * @alias X.Util.NinjaIframe
99 * @class NinjaIframe 隠し iframe 機能を提供します。
10- * @constructs NinjaIframe
1110 * @extends {Node}
1211 */
1312 var X_NinjaIframe = X[ 'Util' ][ 'NinjaIframe' ] = Node[ 'inherits' ](
1413 'NinjaIframe',
14+
15+ /** @lends NinjaIframe.prototype */
1516 {
16- autoRefresh : 0,
17+ /* autoRefresh : 0, */
1718
19+ /**
20+ * iframe の contentWindow
21+ * @private
22+ * @type {window} */
1823 _iwin : null,
1924
25+ /**
26+ * iframe に write する html 文字時列
27+ * @type {string} */
2028 _contentHTML : '',
29+
30+ /**
31+ * iframe の name
32+ * @private
33+ * @type {string} */
2134 _name : '',
35+
36+ /**
37+ * iframe への html 文字列の write が完了した
38+ * @private
39+ * @type {string} */
2240 _ready : false,
2341
2442 'Constructor' : function( html ){
43+ // TODO src も設定可能に
2544
2645 this._name = 'hidden-iframe-' + X_Timer_now();
2746 // https://github.com/polygonplanet/Pot.js/blob/master/src/Worker.js
@@ -59,6 +78,11 @@ var X_NinjaIframe = X[ 'Util' ][ 'NinjaIframe' ] = Node[ 'inherits' ](
5978 X_ViewPort[ 'listenOnce' ]( X_EVENT_AFTER_UPDATE, this, X_Util_NinjaIframe_handleEvent );
6079 },
6180
81+ /**
82+ * iframe 内をリフレッシュ、または内容を上書きする
83+ * @param {string=} opt_contentHTML html文字列
84+ * @return {NinjaIframe} チェーンメソッド
85+ */
6286 'refresh' : function( opt_contentHTML ){
6387 var raw = this[ '_rawObject' ],
6488 idoc;
@@ -82,7 +106,6 @@ var X_NinjaIframe = X[ 'Util' ][ 'NinjaIframe' ] = Node[ 'inherits' ](
82106
83107 if( !( X_UA[ 'IE' ] < 9 ) ){
84108 X_Util_NinjaIframe_writeToIframe( this );
85- //this._ready = true;
86109 };
87110
88111 return this;
@@ -106,7 +129,6 @@ function X_Util_NinjaIframe_handleEvent( e ){
106129
107130 if( !( X_UA[ 'IE' ] < 9 ) ){
108131 X_Util_NinjaIframe_writeToIframe( this );
109- //this._ready = true;
110132 return;
111133 };
112134 //break; これあると IE8 で駄目!
@@ -116,7 +138,6 @@ function X_Util_NinjaIframe_handleEvent( e ){
116138 // ie9-
117139 if( !this._ready ){
118140 X_Util_NinjaIframe_writeToIframe( this );
119- //this._ready = true;
120141 break;
121142 };
122143 // onload
@@ -143,7 +164,7 @@ function X_Util_NinjaIframe_writeToIframe( that ){
143164 idoc = raw.contentDocument || that._iwin.document,
144165 html = that._contentHTML;
145166
146- that._ready = true; // これを削除すると ie6,7,8 で Stack overflow at line : 0 意味不明
167+ that._ready = true; // これを削除すると ie6,7,8 で Stack overflow at line : 0 意味不明 'readystatechange' が繰り返し起こりループする??
147168 delete that._contentHTML;
148169
149170 idoc.open();
--- /dev/null
+++ b/0.6.x/js/05_util/06_XWindow.js
@@ -0,0 +1,121 @@
1+/**
2+ * 別窓(別タブ)の操作
3+ * <ol>
4+ * <li>win.kill() で別窓を閉じる
5+ * <li>win.kill() 以外で閉じられた場合、ユーザーの[x]ボタン操作や、他のscriptによって閉じられた場合、X.Event.UNLOAD イベントを発して自身を kill する。
6+ * </ol>
7+ * イベント
8+ * <dl>
9+ * <dt>X.Event.UNLOAD<dd>win.kill() 以外で閉じられた場合に通知、自身はkillする
10+ * <dt>X.Event.ERROR<dd>他ドメインに遷移した等の理由で win.write() による書き換えに失敗した場合
11+ * </dl>
12+ *
13+ * @example // 別ページの表示
14+ * win = X.Util.Window( { url : 'other.html' } );
15+ * // コンテンツの書き込み
16+ * win = X.Util.Window( { html : '&lt;p&gt;Hello,world!&lt;/p&gt;' } );
17+ * // 閉じる
18+ * win.kill();
19+ *
20+ * @alias X.Util.Window
21+ * @class Window 別窓(別タブ)
22+ * @extends {EventDispatcher}
23+ */
24+var X_Window = X[ 'Util' ][ 'Window' ] = X_EventDispatcher[ 'inherits' ](
25+ 'X.Window',
26+
27+ /** @lends X.Util.Window.prototype */
28+ {
29+
30+ // TODO pair 側に
31+ /**
32+ * closed の監視用タイマーID
33+ * @private
34+ * @type {number} */
35+ _timerID : 0,
36+
37+ 'Constructor' : function( options ){
38+ var url = options[ 'url' ],
39+ page = window.open( url || ''/* 'about:blank' */, options[ 'name' ] || '', options[ 'params' ] || '' ),
40+ html = options[ 'html' ],
41+ doc = X_Script_try( X_Object_find, [ page, 'document' ] );
42+
43+ X_Pair_create( this, page );
44+
45+ if( !url && html ){
46+ this[ 'write' ]( html );
47+ };
48+
49+ X_ViewPort[ 'listenOnce' ]( X_EVENT_UNLOAD, this, X_Util_Window_handleEvent );
50+ this[ 'listenOnce' ]( [ X_EVENT_UNLOAD, X_EVENT_KILL_INSTANCE ], X_Util_Window_handleEvent );
51+
52+ this._timerID = X_Timer_add( options[ 'interval' ] || 500, 0, this, X_Util_Window_onTimer );
53+ },
54+
55+ /**
56+ * 別窓が閉じられたか?
57+ * <ol>
58+ * <li>ユーザーの[x]クリック操作等
59+ * <li>別窓内の script, または他の script
60+ * </ol>
61+ * @return {boolean}
62+ */
63+ 'closed' : function(){
64+ return X_Script_try( X_Object_find, [ X_Pair_get( this ), 'closed' ] );
65+ },
66+
67+ /**
68+ * 別窓の内容を書き換える
69+ * @param {string=} opt_html html文字列
70+ * @return {Window} チェーンメソッド
71+ */
72+ 'write' : function( opt_html ){
73+ var doc = X_Script_try( X_Object_find, [ X_Pair_get( this ), 'document' ] );
74+
75+ if( doc ){
76+ doc.open();
77+ doc.write( opt_html || '' ); // TODO 無毒化
78+ doc.close();
79+ } else {
80+ this[ 'asyncDispatch' ]( X_EVENT_ERROR );
81+ };
82+
83+ return this;
84+ }
85+
86+ // TODO url
87+
88+ }
89+);
90+
91+function X_Util_Window_onTimer( e ){
92+ if( this[ 'closed' ]() ){
93+ this[ 'asyncDispatch' ]( X_EVENT_UNLOAD );
94+ delete this._timerID;
95+ return X_CALLBACK_UN_LISTEN;
96+ };
97+};
98+
99+function X_Util_Window_handleEvent( e ){
100+ var page = X_Pair_get( this );
101+
102+ switch( e.type ){
103+ case X_EVENT_UNLOAD :
104+ this[ 'kill' ]();
105+ break;
106+
107+ case X_EVENT_KILL_INSTANCE :
108+ if( page && !this[ 'closed' ]() ){
109+ if( 9 < X_UA[ 'IEHost' ] ){
110+ page.close();
111+ } else {
112+ page.open( 'about:blank', '_self' ).close();
113+ };
114+ X_Pair_release( this, page );
115+ };
116+ this._timerID && X_Timer_remove( this._timerID );
117+ X_ViewPort[ 'unlisten' ]( X_EVENT_UNLOAD, this, X_Util_Window_handleEvent );
118+ break;
119+ };
120+};
121+
--- a/0.6.x/js/06_net/10_XOAuth2.js
+++ b/0.6.x/js/06_net/10_XOAuth2.js
@@ -114,7 +114,7 @@ X[ 'OAuth2' ] = X_EventDispatcher[ 'inherits' ](
114114 'response_type' : 'code',
115115 'client_id' : pair[ 'clientID' ],
116116 'redirect_uri' : pair[ 'redirectURI' ],
117- 'scope' : ( pair[ 'scopes' ] || [] ).join(' ')
117+ 'scope' : ( pair[ 'scopes' ] || [] ).join( ' ' )
118118 }
119119 ),
120120 'oauthauthorize',
旧リポジトリブラウザで表示