From: itozyun Date: Sat, 14 Nov 2015 10:38:21 +0000 (+0900) Subject: Version 0.6.194, X.UI.Page working. X-Git-Url: http://git.osdn.jp/view?p=pettanr%2FclientJs.git;a=commitdiff_plain;h=f74335422a0ae2d66e3ce9bfa03f0c77a107e8d1 Version 0.6.194, X.UI.Page working. --- diff --git a/0.6.x/css/xui.css b/0.6.x/css/xui.css index 41efe9a..d1f57f2 100644 --- a/0.6.x/css/xui.css +++ b/0.6.x/css/xui.css @@ -13,10 +13,18 @@ height : 100%; overflow : hidden; margin : 0; - padding : 0;/* opera 8 */ + padding : 0; /* opera 8 */ border : 0; } + body { + background : #111; + color : #eee; + } + .js-disabled body { + background : #111 url( "../img/loading.gif" ) 50% 50% no-repeat; + } + .IE5x body, .IE6 body, .IE7 body, @@ -30,16 +38,16 @@ body, textarea { font-family:'ヒラギノ角ゴ Pro W3','Hiragino Kaku Gothic Pro','メイリオ',Meiryo,'ï¼­ï¼³ Pゴシック',sans-serif; } + .IE5x body, .IE5x textarea, .IE6 body, .IE6 textarea, { - font-family: 'ï¼­ï¼³ Pゴシック',sans-serif; - } - - .js-disabled { - background : #111 url( "../img/loading.gif" ) 50% 50% no-repeat; + font-family : 'ï¼­ï¼³ Pゴシック',sans-serif; } +/*------------------------------------------------------------------------------------ + * X.UI + */ .Root { height : 100%; } @@ -73,10 +81,8 @@ white-space : pre; /* CSS 2.0 */ white-space : pre-wrap; /* CSS 2.1 */ white-space : pre-line; /* CSS 3.0 */ - /* white-space : -pre-wrap; Opera 4-6 */ white-space : -o-pre-wrap; /* Opera 7 */ - white-space : -moz-pre-wrap; /* Mozilla */ - /* white-space : -hp-pre-wrap; HP Printers */ + white-space : -moz-pre-wrap; /* Mozilla */ } .IE5x .Root, .IE5x .Root div, .IE6 .Root, .IE6 .Root div, @@ -87,12 +93,13 @@ white-space : normal/* ie系では、 float要素へ回り込みする、 white-space の効いているテキストの位置が狂う */ } -* {zoom:1} + /*------------------------------------------------------------------------------------ * mouse-operation-catcher */ - .mouse-operation-catcher { + .mouse-operation-catcher, + .mouse-operation-catcher-scrollFix { position : absolute; top : 0; left : 0; @@ -132,6 +139,15 @@ background : #fff; filter : alpha( opacity=0 ); } + + .mouse-operation-catcher-scrollFix { + overflow : scroll; + } + .mouse-operation-catcher-scrollFix div { + width : 300%; + height : 300%; + /* background : url( "../img/grid.gif" ) repeat; */ + } /*------------------------------------------------------------------------------------ * hidden-sysyem-node diff --git a/0.6.x/index.html b/0.6.x/index.html index b66af41..a479045 100644 --- a/0.6.x/index.html +++ b/0.6.x/index.html @@ -1,8 +1,9 @@ - + -New X.UI +pettanR UIƒVƒXƒeƒ€ + @@ -32,6 +33,8 @@ + + diff --git a/0.6.x/js/01_core/02_XUA.js b/0.6.x/js/01_core/02_XUA.js index f4a5dbb..a1e3aae 100644 --- a/0.6.x/js/01_core/02_XUA.js +++ b/0.6.x/js/01_core/02_XUA.js @@ -155,14 +155,14 @@ var X_UA = X[ 'UA' ] = {}, * @type {boolean} */ X_UA[ sys ] = true; - - if( v = dav.split( 'Windows NT 10' )[ 1 ] ){ + + if( v = dua.split( 'Windows NT 10' )[ 1 ] ){ switch( v.substr( 0, 2 ) ){ case '.0' : v = 10; break; default : v = '?'; }; } else - if( v = dav.split( 'Windows NT ' )[ 1 ] ){ + if( v = dua.split( 'Windows NT ' )[ 1 ] ){ switch( v.substr( 0, 3 ) ){ case '6.3' : v = 8.1; break; case '6.2' : v = 8; break; @@ -173,9 +173,9 @@ var X_UA = X[ 'UA' ] = {}, case '5.0' : v = v.indexOf( '5.01' ) ? 2000 : '2kSP1'; break; case '4.0' : v = 'NT'; break; default : v = '?'; - }; + }; } else - if( v = dav.split( 'Windows ' )[ 1 ] ){ + if( v = dua.split( 'Windows ' )[ 1 ] ){ switch( v.substr( 0, 2 ) ){ case '98' : v = v.indexOf( '98; Win 9x 4.90' ) ? '98|98SE' : 'ME'; break; case '95' : v = 95; break; diff --git a/0.6.x/js/01_core/05_XObject.js b/0.6.x/js/01_core/05_XObject.js index 329973d..8326ed8 100644 --- a/0.6.x/js/01_core/05_XObject.js +++ b/0.6.x/js/01_core/05_XObject.js @@ -88,7 +88,7 @@ function X_Object_override( target, src ){ /** * オブジェクトの全てのメンバーを破棄します。 * @alias X.Object.clear - * @param {object} obj。 + * @param {object} obj */ function X_Object_clear( obj, k ){ if( obj ){ @@ -157,7 +157,7 @@ function X_Object_isEmpty( v ){ * obj に対し、selector で示した値を返す。メンバを辿れなかった場合、undefined が返る。 * @alias X.Object.find * @param {object} obj - * @param {string} selector + * @param {string} selector 'navigator>mineTypes>hoge' * @return {*} */ function X_Object_find( obj, selector ){ diff --git a/0.6.x/js/01_core/13_XClass.js b/0.6.x/js/01_core/13_XClass.js index 072bc2c..343f862 100644 --- a/0.6.x/js/01_core/13_XClass.js +++ b/0.6.x/js/01_core/13_XClass.js @@ -119,7 +119,7 @@ X_Class_CommonMethods = }, /** - * 関数は Constructor 内で使用します。クラス定義を辿ってスーパークラスのコンストラクタを探します。
+ * 関数は Constructor 内で使用します。クラス定義を辿ってスーパークラスのコンストラクタを呼び出します。
* 内部的には、呼び出したコンストラクタは配列に控え(X_Class_CALLING_SUPER)、呼び出したコンストラクタ内でさらに Super が呼ばれた場合、配列を元にさらにスーパーなコンストラクタを辿ります。 * @example Constructor : function( arg1, arg2 ){ * this.Super( aeg1, arg2 ); @@ -130,24 +130,22 @@ X_Class_CommonMethods = // TODO 現在 new しているインスタンスを保持してチェックする 'Super' : function( var_args ){ var me = this, - sClass = me, + sClass = me.constructor, i = X_Class_SUPER_CALLER.indexOf( me ), stack, t, def, ret; if( i === -1 ){ X_Class_SUPER_CALLER[ i = X_Class_SUPER_CALLER.length ] = me; - X_Class_SUPER_STACKS[ i ] = stack = 0; + t = stack = X_Class_SUPER_STACKS[ i ] = 0; } else { - stack = X_Class_SUPER_STACKS[ i ]; + t = stack = X_Class_SUPER_STACKS[ i ]; + + while( t ){ + sClass = X_Class_getClassDef( sClass ).SuperClass; + --t; + }; }; - - t = stack; - - while( t ){ - sClass = X_Class_getClassDef( sClass ).SuperClass; - --t; - }; - + while( sClass ){ ++t; sClass = X_Class_getClassDef( sClass ).SuperClass; @@ -173,25 +171,27 @@ X_Class_CommonMethods = }, /** - * func について、親クラスで設定されている同名の関数メンバーを呼び出す。
- * 第一引数にオーバーライド済の自身の(自身から参照できる)関数を指定します。内部では関数名を調べた上で prototype チェーンをゴリゴリ辿る、特別なことはしていません。 - * superCall がネストする場合、arguments.callee でないと正しく現在階層を取得して親関数を知ることができない - * 次の理由によって、関数名で辿ることはやめました + * myFunc について、スーパークラスで設定されている同名の関数を呼び出す。
+ * 低速な関数なので多用されるべきではありません!
+ * 第一引数に自身の(自身から参照できる)関数を指定します。内部では関数名を調べた上で prototype チェーンをゴリゴリ辿る、特別なことはしていません。
+ * superCall と Super がネストする場合も現在のクラス階層を X_Class_SUPER_CALLER, X_Class_SUPER_STACKS を使って控えているので、意図した親関数が呼ばれます。
+ * 次の理由によって、関数名で辿ることは非推奨です。 *
    *
  1. closur compiler でメソッド名が変更される - *
  2. superCall 内からさらに superCall が呼ばれた場合に、起点となる関数を特定できない *
- * 次の場合、意図した動作が得られません + * 次の場合、意図した動作が得られません。 *
    - *
  1. 2つ以上の異なる名前で同じ関数がメンバーがいた場合
    - *
  2. または、サブクラスのメンバーにスーパークラスと同じ関数が出現する - *
  3. superCall 以外の手段で親関数を呼び、そのなかで superCall を読んだ + *
  4. 2つ以上の異なる名前で同じ関数がメンバーがいた場合 + *
  5. サブクラスの prototype にスーパークラスと同じ関数をコピーしている + *
  6. 非関数でメンバーを上書きしている + *
  7. superCall 以外の手段で親関数を呼び、そのなかで superCall を呼んだ *
- * 通常の X.Class.create の書き方ではこのような状況は起きませんが、js はなんでもできるので - * 参考:ES5なJavascriptでモダンなクラス的継承&スーパー呼び出し + * 通常の X.Class.create の書き方ではこのような状況は起きませんが、js はなんでもいろいろ出来てしまいますから…
+ * 参考:ES5なJavascriptでモダンなクラス的継承&スーパー呼び出し
+ * original:Classical Inheritance in JavaScript * @param myFunc {Function|string} オーバーライド済の自身の(自身から参照できる)関数。 * @param var_args {...*} オーバーライド元関数に渡す任意の数の引数 - * @example return this.superCall( arguments.callee, param0, param1, ... ); + * @example return this.superCall( this.myFunc, param0, param1, ... ); * @return {*} オーバーライド元の関数を呼び出した戻り値。 */ 'superCall' : function( myFunc, var_args ){ @@ -199,9 +199,8 @@ X_Class_CommonMethods = sClass = me.constructor, proto = sClass.prototype, i = X_Class_SUPER_CALLER.indexOf( me ), - l, d, ret, args = arguments, - name, p, sFunc; + p, name, t, sFunc, ret; if( X_Type_isFunction( myFunc ) ){ for( p in proto ){ @@ -211,24 +210,25 @@ X_Class_CommonMethods = }; }; if( !name ) return; + } else + if( X_Type_isString( myFunc ) && X_Type_isFunction( me[ myFunc ] ) ){ + name = myFunc; } else { return; }; if( i === -1 ){ X_Class_SUPER_CALLER[ i = X_Class_SUPER_CALLER.length ] = me; - X_Class_SUPER_STACKS[ i ] = stack = 0; + t = stack = X_Class_SUPER_STACKS[ i ] = 0; } else { - stack = X_Class_SUPER_STACKS[ i ]; + t = stack = X_Class_SUPER_STACKS[ i ]; + + while( t ){ + sClass = X_Class_getClassDef( sClass ).SuperClass; + --t; + }; }; - t = stack; - - while( t ){ - sClass = X_Class_getClassDef( sClass ).SuperClass; - --t; - }; - if( sClass ){ myFunc = sClass.prototype[ name ]; @@ -297,7 +297,7 @@ X_Class_CommonMethods = // --- interface ----------------------------------------------------------- // // ------------------------------------------------------------------------- // -/** +/* * @enum {number} * @const */ diff --git a/0.6.x/js/01_core/15_XEventDispatcher.js b/0.6.x/js/01_core/15_XEventDispatcher.js index 34a5933..5a9864a 100644 --- a/0.6.x/js/01_core/15_XEventDispatcher.js +++ b/0.6.x/js/01_core/15_XEventDispatcher.js @@ -36,11 +36,8 @@ var X_LISTENERS_ACTUAL_HANDLER = 0, // ------------------------------------------------------------------------- // // ------------ local variables -------------------------------------------- // // ------------------------------------------------------------------------- // -var /** @const */ - X_EventDispatcher_EVENT_TARGET_OTHER = 0, - /** @const */ +var X_EventDispatcher_EVENT_TARGET_OTHER = 0, X_EventDispatcher_EVENT_TARGET_XHR = 1, - /** @const */ X_EventDispatcher_EVENT_TARGET_SILVER_LIGHT = 2; var X_EventDispatcher_once = false, @@ -101,7 +98,9 @@ var X_EventDispatcher = X[ 'EventDispatcher' ] = { /** - * OTHER(Node,window,document,Image,Audio), XHR, Silverlight + * EventDispatcher がラップしている EventTarget オブジェクトのタイプです。
+ * X_EventDispatcher_actualAddEvent で使用されます。
+ * OTHER:0(node,window,document,Image,Audio), XHR:1, Silverlight:2 * @private * @type {number} */ @@ -374,10 +373,6 @@ function X_EventDispatcher_dispatch( e ){ * this[ 'listen' ]( [ 'open', 'close', 'ready' ], onUpdate ); * * @alias EventDispatcher.prototype.listen - * @param {string|number|Array.} type 配列を指定した場合、複数のイベントタイプに対して同じコールバックを登録する。 - * @param {listener|function|Array} [opt_arg1=] - * @param {function|Array} [opt_arg2=] - * @param {Array} [opt_arg3=] コールバック時の引数を配列に入れる。引数がひとつでも配列を使用する。省略した場合引数なし。 * @return {EventDispatcher} チェインメソッド */ function X_EventDispatcher_listen( type, opt_arg1, opt_arg2, opt_arg3 ){ @@ -427,13 +422,10 @@ function X_EventDispatcher_systemListen( that, type, opt_arg1, opt_arg2, opt_arg }; /** - * イベントリスナの解除を行う。登録時と同じ引数を与える必要がある。kill() ですべてのイベントが解除されるので、途中で解除されるイベント以外は kill() に任せてしまってよい。 + * イベントリスナの解除を行う。登録時と同じ引数を与える必要がある。kill() で自信に登録されたすべてのイベントが解除されるので、途中で解除されるイベント以外は kill() に任せてしまってよい。
+ * 他人に登録したイベントを解除せずに kill するのは NG。 * @alias EventDispatcher.prototype.unlisten * @return {EventDispatcher} - * @param {string|number|Array.} opt_type イベントID, イベント名、またはその配列 - * @param {listener|function|Array} opt_arg1 - * @param {function|Array} opt_arg2 - * @param {Array} opt_arg3 */ function X_EventDispatcher_unlisten( opt_type, opt_arg1, opt_arg2, opt_arg3 ){ var listeners = this[ '_listeners' ], diff --git a/0.6.x/js/01_core/21_XViewPort.js b/0.6.x/js/01_core/21_XViewPort.js index 5f1f098..02ec900 100644 --- a/0.6.x/js/01_core/21_XViewPort.js +++ b/0.6.x/js/01_core/21_XViewPort.js @@ -432,7 +432,7 @@ X[ 'ViewPort' ] = { X_ViewPort_rootElement = document.compatMode !== 'CSS1Compat' ? X_elmBody : X_elmHtml || X_elmBody; /** - * Node( documentElement ) + * X.Node( documentElement ) * @alias X.Doc.html * @type {Node} */ @@ -440,14 +440,14 @@ X[ 'ViewPort' ] = { html[ '_flags' ] |= X_NodeFlags_IN_TREE; /** - * Node( head ) + * X.Node( head ) * @alias X.Doc.head * @type {Node} */ X[ 'Doc' ][ 'head' ] = head = X_Node_head = X_elmHead && Node( X_elmHead ); /** - * Node( documentElement ) + * X.Node( body ) * @alias X.Doc.body * @type {Node} */ diff --git a/0.6.x/js/02_dom/06_XNodeCSS.js b/0.6.x/js/02_dom/06_XNodeCSS.js index f9ddadd..a951a50 100644 --- a/0.6.x/js/02_dom/06_XNodeCSS.js +++ b/0.6.x/js/02_dom/06_XNodeCSS.js @@ -330,7 +330,7 @@ function X_Node_CSS_objToIEFilterText( that, opt_css ){ filters[ ++n ] = v; break; case 2 : //'opacity' : - filters[ ++n ] = 'alpha(opacity=' + ( v * 100 | 0 ) +')'; + if( v !== 1 ) filters[ ++n ] = 'alpha(opacity=' + ( v * 100 | 0 ) +')'; break; case 3 : //'boxShadow' : // TODO カンマ区切りの複数指定 @@ -789,11 +789,14 @@ var X_Node_CSS_Support = {}, * @namespace X.CSS */ X[ 'CSS' ] = { - + /** + * @alias X.CSS.VENDER_PREFIX + */ 'VENDER_PREFIX' : X_Node_CSS_VENDER_PREFIX, - // iscroll で使用 - 'uncamelize' : X_Node_CSS_uncamelize, - + + /** + * @alias X.CSS.Support + */ 'Support' : X_Node_CSS_Support }; @@ -837,41 +840,62 @@ X[ 'CSS' ] = { }; testStyle.cssText = 'background:rgba(0,0,0,0.5);border-color:transparent'; +/** + * 色指定に rgba() が使用できるか? + * @alias X.CSS.Support.rgba + * @type {boolean} + */ X_Node_CSS_Support[ 'rgba' ] = !!testStyle[ 'background' ]; + +/** + * 色指定に transparent が使用できるか? + * @alias X.CSS.Support.transparent + * @type {boolean} + */ X_Node_CSS_Support[ 'transparent' ] = !!testStyle[ 'borderColor' ]; // TODO border による三角形の可否 // 2:完全、 1:透過に非対応(IE7-) 0:borderの描画が非標準で三角形が作れない - - /* - * chrome 1+, ff3.5(1.9.1), ie9+, opera10.5+, Safari3+(522) - */ + if( prop = X_Node_CSS_VENDER_PREFIX[ 'boxShadow' ] ){ testStyle.cssText = X_Node_CSS_uncamelize( prop ) + ':0 0'; + + /** + * boxShadow が使用できるか? + * chrome 1+, ff3.5(1.9.1), ie9+, opera10.5+, Safari3+(522) + * @alias X.CSS.Support.boxShadow + * @type {boolean} + */ X_Node_CSS_Support[ 'boxShadow' ] = !!testStyle[ prop ]; - /* + testStyle.cssText = X_Node_CSS_uncamelize( prop ) + ':0 0, 0 0'; + + /** + * boxShadow の複数指定が使用できるか?
* chrome 4+, ff3.5(1.9.1), ie9+, opera10.5+, Safari5+(533) + * @alias X.CSS.Support.boxShadowMulti + * @type {boolean} */ - testStyle.cssText = X_Node_CSS_uncamelize( prop ) + ':0 0, 0 0'; X_Node_CSS_Support[ 'boxShadowMulti' ] = !!testStyle[ prop ]; - /* - * https://developer.mozilla.org/ja/docs/Web/CSS/box-shadow - * この値を用いる場合には、spread-radius を省略出来ません。box-shadow が効かないケースに遭遇した時はこの事を思い出して下さい。 - * chrome 4+, ff3.5(1.9.1), ie9+, opera10.5+, Safari5+(533) + testStyle.cssText = X_Node_CSS_uncamelize( prop ) + ':0 0 inset'; + + /** + * https://developer.mozilla.org/ja/docs/Web/CSS/box-shadow
+ * この値を用いる場合には、spread-radius を省略出来ません。box-shadow が効かないケースに遭遇した時はこの事を思い出して下さい。
+ * chrome 4+, ff3.5(1.9.1), ie9+, opera10.5+, Safari5+(533)
* - * http://unformedbuilding.com/articles/considerations-when-using-the-box-shadow/ - * box-shadow:inset と border-radius を指定しているときの Google Chrome の表示 - * このバグは Windows と Linux で発生するようです。 - * Windows 版 Chrome 10.0.648.127 で修正されているのを確認しました。 + * http://unformedbuilding.com/articles/considerations-when-using-the-box-shadow/
+ * box-shadow:inset と border-radius を指定しているときの Google Chrome の表示
+ * このバグは Windows と Linux で発生するようです。
+ * Windows 版 Chrome 10.0.648.127 で修正されているのを確認しました。
+ * @alias X.CSS.Support.boxShadowInset + * @type {boolean} */ - testStyle.cssText = X_Node_CSS_uncamelize( prop ) + ':0 0 inset'; X_Node_CSS_Support[ 'boxShadowInset' ] = testStyle[ prop ] && testStyle[ prop ].indexOf( 'inset' ) !== -1; }; - testStyle.cssText = temp; })(); diff --git a/0.6.x/js/03_plugin/00_XPlugin.js b/0.6.x/js/03_plugin/00_XPlugin.js index b73cffe..550f607 100644 --- a/0.6.x/js/03_plugin/00_XPlugin.js +++ b/0.6.x/js/03_plugin/00_XPlugin.js @@ -16,7 +16,7 @@ * flash player 10.3, Mac 10.5 * flash player 11.1, Win2k, Android 2.x-4.x */ -var X_Pulgin_FLASH_VERSION = +var X_Plugin_FLASH_VERSION = !X_UA[ 'IE' ] || !X_UA[ 'ActiveX' ] ? parseFloat( X_Object_find( navigator, 'plugins>Shockwave Flash>version' ) || 0 ) : !X_UA[ 'IE4' ] && !X_UA[ 'IE5' ] && X_UA[ 'ActiveX' ] ? (function(){ var obj = X_Script_createActiveXObjectSafty( 'ShockwaveFlash.ShockwaveFlash' ); @@ -25,7 +25,7 @@ var X_Pulgin_FLASH_VERSION = })() : 0, - X_Pulgin_SILVER_LIGHT_VERSION = + X_Plugin_SILVER_LIGHT_VERSION = !X_UA[ 'IE' ] || !X_UA[ 'ActiveX' ] ? parseFloat( X_Object_find( navigator, 'plugins>Silverlight Plug-In>version' ) || 0 ) : X_UA[ 'ActiveX' ] && 6 <= X_UA[ 'IE' ] ? (function(){ var obj = X_Script_createActiveXObjectSafty( 'AgControl.AgControl' ), @@ -39,7 +39,7 @@ var X_Pulgin_FLASH_VERSION = 0, //http://docs.unity3d.ru/Manual/Detecting%20the%20Unity%20Web%20Player%20using%20browser%20scripting.html - X_Pulgin_UNITY_VERSION = + X_Plugin_UNITY_VERSION = !X_UA[ 'IE' ] || !X_UA[ 'ActiveX' ] ? parseFloat( X_Object_find( navigator, 'plugins>Unity Player>version' ) || 0 ) : !X_UA[ 'IE4' ] && !X_UA[ 'IE5' ] && X_UA[ 'ActiveX' ] ? (function(){ @@ -49,7 +49,7 @@ var X_Pulgin_FLASH_VERSION = })() : 0, - X_Pulgin_GEARS_ENABLED = + X_Plugin_GEARS_ENABLED = window.GearsFactory || ( X_UA[ 'ActiveX' ] && 6 <= X_UA[ 'IE' ] ? (function(){ @@ -61,7 +61,7 @@ var X_Pulgin_FLASH_VERSION = // https://support.microsoft.com/ja-jp/kb/279022 // Windows Media Player 7 がクライアントにインストールされている場合に、自動的に Web ページに埋め込む方法 // TODO GeckoActiveXObject - X_Pulgin_WMP_VERSION = + X_Plugin_WMP_VERSION = !X_UA[ 'IE' ] || !X_UA[ 'ActiveX' ] ? 0 : (function(){ var obj = X_Script_createActiveXObjectSafty( 'WMPlayer.OCX.7' ); @@ -72,7 +72,7 @@ var X_Pulgin_FLASH_VERSION = // QuickTime Plug-in 7.7.6 /* - X_Pulgin_QUICKTIME_VERSION = + X_Plugin_QUICKTIME_VERSION = !X_UA[ 'IE' ] || !X_UA[ 'ActiveX' ] ? (function( plugins, k ){ for( k in plugins ){ if( k.indexOf( 'QuickTime' ) === 0 ) return parseFloat( k.substr( 18 ) ) || 0; @@ -88,25 +88,25 @@ var X_Pulgin_FLASH_VERSION = 0, */ /** - * @namespace X.Pulgin + * @namespace X.Plugin */ -X[ 'Pulgin' ] = { +X[ 'Plugin' ] = { - 'Flash' : X_Pulgin_FLASH_VERSION, + 'Flash' : X_Plugin_FLASH_VERSION, // FlashLite - 'Silverlight' : X_Pulgin_SILVER_LIGHT_VERSION, + 'Silverlight' : X_Plugin_SILVER_LIGHT_VERSION, - 'Unity' : X_Pulgin_UNITY_VERSION, + 'Unity' : X_Plugin_UNITY_VERSION, - //'QuickTime' : X_Pulgin_QUICKTIME_VERSION, + //'QuickTime' : X_Plugin_QUICKTIME_VERSION, - 'Gears' : !!X_Pulgin_GEARS_ENABLED, + 'Gears' : !!X_Plugin_GEARS_ENABLED, - 'WMP' : X_Pulgin_WMP_VERSION + 'WMP' : X_Plugin_WMP_VERSION }; -//if( X_Pulgin_GEARS_ENABLED ) alert( 'X_Pulgin_GEARS_ENABLED' ); +//if( X_Plugin_GEARS_ENABLED ) alert( 'X_Plugin_GEARS_ENABLED' ); diff --git a/0.6.x/js/05_util/01_XNinjaIframe.js b/0.6.x/js/05_util/01_XNinjaIframe.js index b39d0eb..702706d 100644 --- a/0.6.x/js/05_util/01_XNinjaIframe.js +++ b/0.6.x/js/05_util/01_XNinjaIframe.js @@ -6,8 +6,7 @@ * モバイルブラウザでの iframe の挙動(Mobile Safari, Chrome for Android) * * @alias X.Util.NinjaIframe - * @class 隠し iframe 機能を提供します。 - * @constructor + * @class NinjaIframe 隠し iframe 機能を提供します。 * @constructs NinjaIframe * @extends {Node} */ diff --git a/0.6.x/js/06_net/01_XNetXHR.js b/0.6.x/js/06_net/01_XNetXHR.js index 13ee2f9..59e2f1c 100644 --- a/0.6.x/js/06_net/01_XNetXHR.js +++ b/0.6.x/js/06_net/01_XNetXHR.js @@ -114,7 +114,7 @@ X[ 'XHR' ] = { * http://hakuhin.jp/as/javascript.html * Flash から JavaScript にアクセスする(3+) */ - 'FLASH' : 4 <= X_Pulgin_FLASH_VERSION ? 8 : 0, + 'FLASH' : 4 <= X_Plugin_FLASH_VERSION ? 8 : 0, 'GADGET' : 5.5 <= X_UA[ 'IE' ] || !X_UA[ 'IE' ] ? 16 : 0, diff --git a/0.6.x/js/07_audio/00_XAudio.js b/0.6.x/js/07_audio/00_XAudio.js index 5d714c2..234f057 100644 --- a/0.6.x/js/07_audio/00_XAudio.js +++ b/0.6.x/js/07_audio/00_XAudio.js @@ -25,16 +25,17 @@ X_TEMP.onSystemReady.push( }); /** - *

複数のバックエンドから、与えられた音声を再生可能なものを見つけ、音声を再生します。 + *

複数のオーディオ・バックエンドから、与えられた音声を再生可能なものを見つけ、音声を再生します。 *

HTMLAudio の動作・機能がブラウザ毎にバラバラなのに業を煮やし、メソッドやイベントは独自に定義しています。 *

バックエンドの種類

*

HTMLAudio, WebAudio, Silverlight, WMP *

イベント

*
- *
X.Event.BACKEND_READY
音声(src リスト)を再生可能なバックエンドが見つかった。 - *
X.Event.BACKEND_NONE
音声を再生可能なバックエンドが見つからなかった。Audio は kill されます。 - *
X.Event.READY
再生可能、実際の状態は canplay から loadeddata まで様々、、、 - *
X.Event.ERROR
    + *
    X.Event.BACKEND_READY
    音声(src リスト)を再生可能なバックエンドが見つかった。 + *
    X.Event.BACKEND_NONE
    音声を再生可能なバックエンドが見つからなかった。Audio は kill されます。 + *
    X.Event.MEDIA_CAN_TOUCH
    モバイル端末の制約で音声の再生またはロードに、タッチを必要とする場合、タッチイベント内で play を呼び出す準備が出来たことを通知する。 + *
    X.Event.READY
    再生可能、実際の状態は canplay から loadeddata まで様々、、、 + *
    X.Event.ERROR
      *
    • 1 : ユーザーによってメディアの取得が中断された *
    • 2 : ネットワークエラー *
    • 3 : メディアのデコードエラー @@ -47,7 +48,6 @@ X_TEMP.onSystemReady.push( *
      X.Event.MEDIA_PAUSED
      ポーズした *
      X.Event.MEDIA_WAITING
      再生中に音声が待機状態に。 *
      X.Event.MEDIA_SEEKING
      シーク中に音声が待機状態に。 - *
      X.Event.MEDIA_CAN_TOUCH
      シーク中に音声が待機状態に。 *
* * @alias X.Audio @@ -70,14 +70,14 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ]( * @type {string} */ 'source' : '', + /** * 音声再生バックエンドの名前。X.Event.BACKEND_READY で設定される。 * @alias Audio.prototype.backendName * @type {string} */ 'backendName' : '', - - // TODO + 'Constructor' : function( sourceList, opt_option ){ X_Audio_startDetectionBackend( X_Audio_BACKENDS[ 0 ], this, @@ -90,6 +90,12 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ]( /** * 再生。開始位置・終了位置、ループの有無、ループ以降の開始位置、ループ以降の終了位置 * @alias Audio.prototype.play + * @param {number=} startTime 開始時間を ms で + * @param {number=} endTime 終了時間を ms で + * @param {boolean=} endTime に達した際に曲をループさせるか + * @param {number=} loopStartTime ループ以後の開始時間を ms で + * @param {number=} loopEndTime ループ以後の終了時間を ms で + * @return {Audio} メソッドチェーン */ 'play' : function( startTime, endTime, loop, loopStartTime, loopEndTime ){ var pair = X_Pair_get( this ); @@ -97,8 +103,10 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ]( return this; }, /** - * シーク + * シーク、再生中で無い場合は次回再生開始位置の指定のみ * @alias Audio.prototype.seek + * @param {number} seekTime シーク位置を ms で + * @return {Audio} メソッドチェーン */ 'seek' : function( seekTime ){ var pair = X_Pair_get( this ); @@ -108,6 +116,7 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ]( /** * ポーズ * @alias Audio.prototype.pause + * @return {Audio} メソッドチェーン */ 'pause' : function(){ var pair = X_Pair_get( this ); @@ -117,6 +126,21 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ]( /** * 状態の getter と setter * @alias Audio.prototype.state + * @param {object=} obj setter の場合、上書きする値を格納したobject + * @return {Audio|object} + * @example + * audio.setState( + { + 'startTime' : 0, + 'endTime' : 80000, + 'loopStartTime' : 120000, + 'loopEndTime' : 200000, + 'currentTime' : 0, + 'loop' : true, + 'looded' : false, + 'volume' : 1, + 'autoplay' : true + }); */ 'state' : function( obj ){ var pair = X_Pair_get( this ); @@ -130,18 +154,22 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ]( 'currentTime' : -1, 'loop' : false, 'looded' : false, - 'error' : false, + 'error' : 0, + 'autoplay' : false, 'playing' : false, - 'source' : this[ 'source' ] || '', - 'duration' : 0 + 'source' : this[ 'source' ], + 'duration' : 0, + 'volume' : 0.5 }; }; pair && pair.setState( obj ); return this; }, /** - * ループの getter と setter + * ループの setter * @alias Audio.prototype.loop + * @param {boolean} v + * @return {Audio} */ 'loop' : function( v ){ var pair = X_Pair_get( this ); @@ -149,8 +177,10 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ]( return this; }, /** - * ボリュームの getter と setter 実装不十分! + * ボリュームの setter 実装不十分! * @alias Audio.prototype.volume + * @param {number} v + * @return {Audio} */ 'volume' : function( v ){ var pair = X_Pair_get( this ); @@ -158,8 +188,10 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ]( return this; }, /** - * 再生位置。 + * 再生位置のsetter。 * @alias Audio.prototype.currentTime + * @param {number} v msで + * @return {Audio} */ 'currentTime' : function( v ){ var pair = X_Pair_get( this ); @@ -169,6 +201,7 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ]( /** * 再生中か? * @alias Audio.prototype.isPlaying + * @return {boolean} */ 'isPlaying' : function(){ var pair = X_Pair_get( this ); @@ -347,6 +380,7 @@ var X_AudioBase = X_EventDispatcher[ 'inherits' ]( 'volume' : this.gain, 'playing' : this.playing, 'duration' : this.duration, + 'autoplay' : this.autoplay, 'currentTime' : this.playing ? this.getActualCurrentTime() : this.seekTime, 'error' : this.getActualError ? this.getActualError() : this.error diff --git a/0.6.x/js/07_audio/03_XSilverlightAudio.js b/0.6.x/js/07_audio/03_XSilverlightAudio.js index c713961..d6b41e4 100644 --- a/0.6.x/js/07_audio/03_XSilverlightAudio.js +++ b/0.6.x/js/07_audio/03_XSilverlightAudio.js @@ -15,7 +15,7 @@ var X_SLAudio, X_SLAudio_uid = 0; -if( X_Pulgin_SILVER_LIGHT_VERSION ){ +if( X_Plugin_SILVER_LIGHT_VERSION ){ X_TEMP.slaudioInit = function(){ // diff --git a/0.6.x/js/07_audio/05_XWMPAudio.js b/0.6.x/js/07_audio/05_XWMPAudio.js index 04be569..a095818 100644 --- a/0.6.x/js/07_audio/05_XWMPAudio.js +++ b/0.6.x/js/07_audio/05_XWMPAudio.js @@ -7,7 +7,7 @@ var X_WMPAudio; -if( X_Pulgin_WMP_VERSION ){ // IETester で 6.x は不可 +if( X_Plugin_WMP_VERSION ){ // IETester で 6.x は不可 X_WMPAudio = X_AudioBase[ 'inherits' ]( 'X.WMPAudio', X_Class.POOL_OBJECT, @@ -26,7 +26,7 @@ if( X_Pulgin_WMP_VERSION ){ // IETester で 6.x は不可 this.disatcher = disatcher || this; this._source = source; - if( 7 <= X_Pulgin_WMP_VERSION ){ + if( 7 <= X_Plugin_WMP_VERSION ){ this.xnodeObject = X_Node_systemNode[ 'create' ]( 'object', { 'classID' : 'CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6', width : 1, @@ -59,7 +59,7 @@ if( X_Pulgin_WMP_VERSION ){ // IETester で 6.x は不可 switch( e.type ){ case X_EVENT_AFTER_UPDATE : this._readyState = 1; - if( 7 <= X_Pulgin_WMP_VERSION ){ + if( 7 <= X_Plugin_WMP_VERSION ){ this._wmp = this.xnodeObject[ '_rawObject' ]; this._wmp[ 'URL' ] = this._source; this.wmp = this._wmp[ 'controls' ]; @@ -114,7 +114,7 @@ if( X_Pulgin_WMP_VERSION ){ // IETester で 6.x は不可 // road 中の場合 if( this._readyState === 1 ){ - if( 7 <= X_Pulgin_WMP_VERSION ){ + if( 7 <= X_Plugin_WMP_VERSION ){ progress = this._wmp[ 'network' ][ 'downloadProgress' ]; } else { progress = this.wmp[ 'BufferingProgress' ]; @@ -123,7 +123,7 @@ if( X_Pulgin_WMP_VERSION ){ // IETester で 6.x は不可 this.disatcher[ 'dispatch' ]( { type : X_EVENT_PROGRESS, 'percent' : progress } ); } else { this._readyState = 2; - if( 7 <= X_Pulgin_WMP_VERSION ){ + if( 7 <= X_Plugin_WMP_VERSION ){ this.duration = this._wmp[ 'currentMedia' ].duration * 1000 | 0; } else { this.duration = this.wmp[ 'Duration' ] * 1000 | 0; @@ -181,7 +181,7 @@ if( X_Pulgin_WMP_VERSION ){ // IETester で 6.x は不可 }, setVolume : function(){ - if( 7 <= X_Pulgin_WMP_VERSION ){ + if( 7 <= X_Plugin_WMP_VERSION ){ this._wmp[ 'settings' ][ 'Volume' ] = this.gain * 100; } else { this.wmp[ 'Volume' ] = ( 1 - this.gain ) * 10000; @@ -207,7 +207,7 @@ if( X_Pulgin_WMP_VERSION ){ // IETester で 6.x は不可 X_Audio_BACKENDS.push( { backendID : 16, - backendName : 'WMP' + X_Pulgin_WMP_VERSION, + backendName : 'WMP' + X_Plugin_WMP_VERSION, canPlay : { 'mp3' : true, diff --git a/0.6.x/js/20_ui/04_XUI_Event.js b/0.6.x/js/20_ui/04_XUI_Event.js index afd289f..d5117b6 100644 --- a/0.6.x/js/20_ui/04_XUI_Event.js +++ b/0.6.x/js/20_ui/04_XUI_Event.js @@ -103,12 +103,12 @@ var XUI_Event = X[ 'UI' ][ 'Event' ] = { ANIME_BEFORE_STOP : ++X_Event_last, // before cancel ANIME_STOP : ++X_Event_last, - PAGE_BEFORE_SHOW : ++X_Event_last, + PAGE_SHOW_BEFORE : ++X_Event_last, PAGE_SHOW : ++X_Event_last, - PAGE_AFTER_SHOW : ++X_Event_last, - PAGE_BEFORE_HIDE : ++X_Event_last, + PAGE_SHOW_AFTER : ++X_Event_last, + PAGE_HIDE_BEFORE : ++X_Event_last, PAGE_HIDE : ++X_Event_last, - PAGE_AFTER_HIDE : ++X_Event_last, + PAGE_HIDE_AFTER : ++X_Event_last, // X.UI.Form CHANGE : ++X_Event_last, diff --git a/0.6.x/js/20_ui/05_XUI_Gesture.js b/0.6.x/js/20_ui/05_XUI_Gesture.js index db684c3..e726389 100644 --- a/0.6.x/js/20_ui/05_XUI_Gesture.js +++ b/0.6.x/js/20_ui/05_XUI_Gesture.js @@ -423,7 +423,7 @@ function XUI_Gesture_handleEvent( e ){ var XUI_Gesture_LIST = [ - /** + /* * Touch * Called as first, tells the user has touched the screen * @events touch @@ -453,7 +453,7 @@ var XUI_Gesture_LIST = [ } }, - /** + /* * Transform * User want to scale or rotate with 2 fingers * @events transform, transformstart, transformend, pinch, pinchin, pinchout, rotate @@ -545,7 +545,7 @@ var XUI_Gesture_LIST = [ } }, - /** + /* * Drag * Move with x fingers (default 1) around on the page. Blocking the scrolling when * moving left and right is a good practice. When all the drag events are blocking @@ -668,7 +668,7 @@ var XUI_Gesture_LIST = [ } }, - /** + /* * Tap/DoubleTap * Quick touch at a place or double at the same place * @events tap, doubletap diff --git a/0.6.x/js/20_ui/06_AbstractUINode.js b/0.6.x/js/20_ui/06_AbstractUINode.js index 3bd4cf3..c85dba5 100644 --- a/0.6.x/js/20_ui/06_AbstractUINode.js +++ b/0.6.x/js/20_ui/06_AbstractUINode.js @@ -342,13 +342,12 @@ var XUI_AbstractUINode = X_EventDispatcher[ 'inherits' ]( case 2: case 1: - this.xnode[ 'kill' ](); + this.xnode[ 'remove' ](); delete this.root; delete this.rootData; delete this.parent; delete this.parentData; - delete this.xnode; delete this.phase; }; diff --git a/0.6.x/js/20_ui/08_Box.js b/0.6.x/js/20_ui/08_Box.js index 0aa8008..49cf1bd 100644 --- a/0.6.x/js/20_ui/08_Box.js +++ b/0.6.x/js/20_ui/08_Box.js @@ -283,7 +283,6 @@ var XUI_Box = XUI_AbstractUINode.inherits( delete this.rootData; delete this.parent; delete this.parentData; - delete this.xnode; }; delete this.phase; } diff --git a/0.6.x/js/20_ui/15_ScrollBox.js b/0.6.x/js/20_ui/15_ScrollBox.js index b6cfabc..f7d334b 100644 --- a/0.6.x/js/20_ui/15_ScrollBox.js +++ b/0.6.x/js/20_ui/15_ScrollBox.js @@ -14,7 +14,7 @@ function XUI_ScrollBox_start( scrollBox ){ XUI_ScrollBox_indicatorV = X_Doc_create( 'div' )[ 'className' ]( 'ScrollBox-IndicatorV' ); }; - XUI_ScrollBox_indicatorV.parent !== scrollBox.xnode && scrollBox.xnode[ 'append' ]( XUI_ScrollBox_indicatorV ); + scrollBox.xnode[ 'append' ]( XUI_ScrollBox_indicatorV ); XUI_ScrollBox_indicatorV[ 'animate' ]( { opacity : 0 }, { opacity : 1 }, @@ -27,7 +27,7 @@ function XUI_ScrollBox_start( scrollBox ){ if( !XUI_ScrollBox_indicatorH ){ XUI_ScrollBox_indicatorH = X_Doc_create( 'div' )[ 'className' ]( 'ScrollBox-IndicatorH' ); }; - XUI_ScrollBox_indicatorH.parent !== scrollBox.xnode && scrollBox.xnode[ 'append' ]( XUI_ScrollBox_indicatorH ); + scrollBox.xnode[ 'append' ]( XUI_ScrollBox_indicatorH ); XUI_ScrollBox_indicatorH[ 'animate' ]( { opacity : 0 }, { opacity : 1 }, @@ -174,8 +174,18 @@ var XUI_ScrollBox = XUI_ChromeBox.inherits( _remove : function(){ XUI_AbstractUINode.prototype._remove.apply( this, arguments ); + if( this.scrolling ){ - // remove scroll + // scroller 削除 + this[ 'unlisten' ]( XUI_Event._POINTER_DOWN, X_UI_ScrollBox_onStart ) + [ 'unlisten' ]( XUI_Event.DRAG, X_UI_ScrollBox_onMove ) + [ 'unlisten' ]( XUI_Event.DRAG_END, X_UI_ScrollBox_onEnd ); + XUI_rootData[ 'unlisten' ]( XUI_Event.LAYOUT_BEFORE, this, X_UI_ScrollBox_onLayoutBefore ); + + XUI_rootData[ 'unlisten' ]( XUI_Event.LAYOUT_COMPLETE, this, X_UI_ScrollBox_onLayoutComplete ); + this[ 'unlisten' ]( XUI_Event.SCROLL_END, XUI_rootData, XUI_rootData.calculate ); + + this.xnodeSlider[ 'stop' ](); }; } @@ -224,11 +234,9 @@ function X_UI_ScrollBox_onLayoutComplete( e ){ X_UI_ScrollBox_translate( this, this.scrollXMax * this.scrollXRatio, this.scrollYMax * this.scrollYRatio, 100, '', 300 ); } else { // scroller 作る - // shadow の listen には this が必要! - // TODO AbstractUI の listen が悪い! - this[ 'listen' ]( XUI_Event._POINTER_DOWN, this, X_UI_ScrollBox_onStart ) - [ 'listen' ]( XUI_Event.DRAG, this, X_UI_ScrollBox_onMove ); - this[ 'listen' ]( XUI_Event.DRAG_END, this, X_UI_ScrollBox_onEnd ); + this[ 'listen' ]( XUI_Event._POINTER_DOWN, X_UI_ScrollBox_onStart ) + [ 'listen' ]( XUI_Event.DRAG, X_UI_ScrollBox_onMove ) + [ 'listen' ]( XUI_Event.DRAG_END, X_UI_ScrollBox_onEnd ); XUI_rootData[ 'listen' ]( XUI_Event.LAYOUT_BEFORE, this, X_UI_ScrollBox_onLayoutBefore ); X_UI_ScrollBox_translate( this, this.scrollXMax * this.scrollXRatio, this.scrollYMax * this.scrollYRatio, 100, '', 300 ); @@ -238,9 +246,9 @@ function X_UI_ScrollBox_onLayoutComplete( e ){ // scroll 不要 if( this.scrolling ){ // scroller 削除 - this[ 'unlisten' ]( XUI_Event._POINTER_DOWN, this, X_UI_ScrollBox_onStart ) - [ 'unlisten' ]( XUI_Event.DRAG, this, X_UI_ScrollBox_onMove ); - this[ 'unlisten' ]( XUI_Event.DRAG_END, this, X_UI_ScrollBox_onEnd ); + this[ 'unlisten' ]( XUI_Event._POINTER_DOWN, X_UI_ScrollBox_onStart ) + [ 'unlisten' ]( XUI_Event.DRAG, X_UI_ScrollBox_onMove ) + [ 'unlisten' ]( XUI_Event.DRAG_END, X_UI_ScrollBox_onEnd ); XUI_rootData[ 'unlisten' ]( XUI_Event.LAYOUT_BEFORE, this, X_UI_ScrollBox_onLayoutBefore ); ( this.scrollX !== 0 || this.scrollY !== 0 ) && X_UI_ScrollBox_translate( this, 0, 0, 100, '', 300 ); diff --git a/0.6.x/js/20_ui/17_Text.js b/0.6.x/js/20_ui/17_Text.js index 08cec6d..40877be 100644 --- a/0.6.x/js/20_ui/17_Text.js +++ b/0.6.x/js/20_ui/17_Text.js @@ -22,8 +22,8 @@ var XUI_Text = XUI_AbstractUINode.inherits( this.User = user; this.xnode = X_Doc_create( 'div' ); - if( X_Type_isString( content ) && content ){ - this.content = content; + if( content != null ){ + this.content = '' + content; }; }, @@ -51,8 +51,8 @@ var XUI_Text = XUI_AbstractUINode.inherits( XUI_AbstractUINode.prototype.setItemData.apply( this, arguments ); - if( X_Type_isObject( itemData = this.itemData ) && this.dataFeild ){ - this.setContent( itemData[ this.dataFeild ] || '' ); + if( X_Type_isObject( itemData = this.itemData ) && itemData[ this.dataFeild ] != null ){ + this.setContent( '' + itemData[ this.dataFeild ] ); }; } } @@ -74,6 +74,7 @@ X.UI.Text = X.UI.AbstractUINode.inherits( if( v === undefined ){ return content; }; + v += ''; content !== v && data.setContent( v ); return this; } diff --git a/0.6.x/js/main.js b/0.6.x/js/main.js index 8f76774..d1e1e22 100644 --- a/0.6.x/js/main.js +++ b/0.6.x/js/main.js @@ -1,61 +1,161 @@  -X( - function(){ - var source = [ - { - label : 'ぺったんR', - summary : X.VERSION + ( X.buildTimeStamp ? ' ' + X.buildTimeStamp : '' ) - }, - { - label : 'レンダリングエンジン', - summary : X.UA.IE ? 'Trident' : - X.UA.Opera ? 'Presto' : - X.UA.Gecko ? 'Gecko' : - X.UA.KHTML ? 'KHTML' : X.UA.WebKit ? 'WebKit' : X.UA.Blink ? 'Blink' : - X.UA.Edge ? 'Edge' : 'Other' - }, - { - label : 'OS', - summary : X.UA.Windows ? 'Windows' : X.UA.Mac ? 'Mac' : X.UA.Android ? 'Android' : X.UA.iOS ? 'iOS' : 'Other' - }, - { - label : '起動時間', - summary : X.bootSpeed + 'ms' - }, - { - label : '設定' - }, - { - label : '情報' - }, - { - label : 'ローカルストレージ' - }, - { - label : '外部API接続' - }, - { - label : 'HID' - } - ]; +X( function(){ + with( X.UI ){ + Page( + 'ホーム', + 'home', + List( + [ + { + label : 'ぺったんR', + summary : X.VERSION + ( X.buildTimeStamp ? ' ' + X.buildTimeStamp : '' ) + }, + { label : 'ツール' }, + { label : 'テスト' , next : 'test' }, + { label : '情報' , next : 'info' }, + { label : 'ローカルストレージ' }, + { label : '外部API接続' } + ], + AndroidItem() + ) + ).show(); + Page( + 'テスト目次', + 'test', + List( + [ + { label : '戻る', back : true }, + { label : 'インタラクション・ジェスチャー' }, + { label : 'Ajax' }, + { label : 'マルチメディア' } + ], + AndroidItem() + ) + ); - with( X.UI ){ - Root( - List( - source, - AndroidItem().listen( X.UI.Event.ITEMDATA_CHANGED ) - ) - ); - }; - } -); + Page( + '情報', + 'info', + List( + [ + { label : '戻る', back : true }, + { label : 'システムスコア' , next : 'spec' }, + { label : 'OS・ブラウザ' , next : 'ua' }, + { label : 'プラグインとアドオン', next : 'plugin' }, + { label : 'ストレージ' }, + { label : 'HID' }, + { label : 'pettanR ビルド情報' } + ], + AndroidItem() + ) + ); + + Page( + 'システムスコア', + 'spec', + List( + [ + { label : '戻る', back : true }, + { + label : '起動時間', + summary : X.bootSpeed + 'ms' + } + ], + AndroidItem() + ) + ); + + Page( + 'OS・ブラウザ', + 'ua', + List( + [ + { label : '戻る', back : true }, + { + label : 'ブラウザ', + summary : X.UA.IE ? 'IE ' + X.UA.IE : + X.UA.Opera ? 'Presto Opera ' + X.UA.Opera : + X.UA.Gecko ? 'Gecko ' + X.UA.Gecko : + X.UA.KHTML ? 'KHTML ' + X.UA.KHTML : + X.UA.WebKit ? 'WebKit ' + X.UA.WebKit : + X.UA.BlinkOpera ? 'Blink Opera ' + X.UA.BlinkOpera : + X.UA.Blink ? 'Blink ' + X.UA.Blink : + X.UA.AOSP ? 'AOSP ' + X.UA.AOSP : + X.UA.ChromeWV ? 'Chrome WebView ' + X.UA.ChromeWV : + X.UA.Edge ? 'Edge' + X.UA.Edge : 'Other' + }, + { + label : 'OS', + summary : X.UA.Windows ? 'Windows ' + X.UA.Windows : X.UA.Mac ? 'Mac' : X.UA.Android ? 'Android' : X.UA.iOS ? 'iOS' : 'Other' + }, + { + label : 'ユーザーエージェント文字列', + summary : navigator.userAgent + }, + { + label : 'プラットフォーム', + summary : 'navigator.platform=' + navigator.platform + }, + { + label : 'アプリ名', + summary : 'navigator.appName=' + navigator.appName + }, + { + label : 'アプリコード名', + summary : 'navigator.appCodeName=' + navigator.appCodeName + }, + { + label : 'アプリバージョン', + summary : 'navigator.appVersion=' + navigator.appVersion + } + ], + AndroidItem() + ) + ); + + Page( + 'プラグインとアドオン', + 'plugin', + List( + [ + { label : '戻る', back : true }, + { + label : 'Adobe FlashPlayer', + summary : X.Plugin.Flash || '-' + }, + { + label : 'Silverlight', + summary : X.Plugin.Silverlight || '-' + }, + { + label : 'Unity Web Player', + summary : X.Plugin.Unity || '-' + }, + { + label : 'Google Gears', + summary : X.Plugin.Gears ? 'o' : '-' + }, + { + label : 'Windows Media Player', + summary : X.Plugin.WMP || '-' + } + ], + AndroidItem() + ) + ); + + }; +} ); var AndroidItem = X.UI.Box.inherits( 'AndroidItem', X.Class.NONE, { + next : '', + back : false, + Constructor : function(){ this.Super( { sizing : 'border', @@ -66,9 +166,11 @@ var AndroidItem = X.UI.Box.inherits( height : 4, left : 0, right : 0 - } ).listen( X.UI.Event.TAP ); + } ) + .listen( X.UI.Event.TAP ) + .listen( X.UI.Event.ITEMDATA_CHANGED ); }, - + handleEvent : function( e ){ var txt; @@ -95,15 +197,36 @@ var AndroidItem = X.UI.Box.inherits( left : 1 } ) ); }; + + if( e.itemData.next ){ + this.add( X.UI.Text( String.fromCharCode( 9654 ), { + fontColor : 0xAAAAAA, + fontBold : true, + top : 1.35, + width : 1, + right : 1 + } ) ); + + this.next = e.itemData.next; + } else + if( e.itemData.back ){ + this.back = true; + }; break; case X.UI.Event.TAP : txt = this.getNodeAt( 0 ); txt.content( txt.content() + '+' ); + + if( this.next ){ + X.UI.Page.move( this.next ); + } else + if( this.back ){ + X.UI.Page.back(); + }; + }; } } ); - - diff --git a/0.6.x/logger.html b/0.6.x/logger.html index 74a955e..731be4e 100644 --- a/0.6.x/logger.html +++ b/0.6.x/logger.html @@ -4,7 +4,7 @@ Logger - +