OSDN Git Service

Version 0.6.194, X.UI.Page working.
authoritozyun <itozyun@user.sourceforge.jp>
Sat, 14 Nov 2015 10:38:21 +0000 (19:38 +0900)
committeritozyun <itozyun@user.sourceforge.jp>
Sat, 14 Nov 2015 10:38:21 +0000 (19:38 +0900)
22 files changed:
0.6.x/css/xui.css
0.6.x/index.html
0.6.x/js/01_core/02_XUA.js
0.6.x/js/01_core/05_XObject.js
0.6.x/js/01_core/13_XClass.js
0.6.x/js/01_core/15_XEventDispatcher.js
0.6.x/js/01_core/21_XViewPort.js
0.6.x/js/02_dom/06_XNodeCSS.js
0.6.x/js/03_plugin/00_XPlugin.js
0.6.x/js/05_util/01_XNinjaIframe.js
0.6.x/js/06_net/01_XNetXHR.js
0.6.x/js/07_audio/00_XAudio.js
0.6.x/js/07_audio/03_XSilverlightAudio.js
0.6.x/js/07_audio/05_XWMPAudio.js
0.6.x/js/20_ui/04_XUI_Event.js
0.6.x/js/20_ui/05_XUI_Gesture.js
0.6.x/js/20_ui/06_AbstractUINode.js
0.6.x/js/20_ui/08_Box.js
0.6.x/js/20_ui/15_ScrollBox.js
0.6.x/js/20_ui/17_Text.js
0.6.x/js/main.js
0.6.x/logger.html

index 41efe9a..d1f57f2 100644 (file)
                height   : 100%;\r
                overflow : hidden;\r
                margin   : 0;\r
-               padding  : 0;/* opera 8 */\r
+               padding  : 0; /* opera 8 */\r
                border   : 0;\r
        }\r
 \r
+       body {\r
+               background : #111;\r
+               color      : #eee;\r
+       }\r
+       .js-disabled body {\r
+               background : #111 url( "../img/loading.gif" ) 50% 50% no-repeat;\r
+       }\r
+\r
        .IE5x body,\r
        .IE6 body,\r
        .IE7 body,\r
        body, textarea {\r
                font-family:'ヒラギノ角ゴ Pro W3','Hiragino Kaku Gothic Pro','メイリオ',Meiryo,'MS Pゴシック',sans-serif;\r
        }\r
+\r
        .IE5x body, .IE5x textarea,\r
        .IE6  body, .IE6  textarea,  {\r
-               font-family: 'MS Pゴシック',sans-serif;\r
-       }\r
-\r
-       .js-disabled {\r
-               background       : #111 url( "../img/loading.gif" ) 50% 50% no-repeat;\r
+               font-family : 'MS Pゴシック',sans-serif;\r
        }\r
 \r
 \r
+/*------------------------------------------------------------------------------------\r
+ *  X.UI\r
+ */\r
 .Root {\r
        height   : 100%;\r
 }\r
        white-space        : pre;           /* CSS 2.0 */\r
        white-space        : pre-wrap;      /* CSS 2.1 */\r
        white-space        : pre-line;      /* CSS 3.0 */\r
-       /* white-space : -pre-wrap;     Opera 4-6 */\r
        white-space        : -o-pre-wrap;   /* Opera 7 */\r
-       white-space        : -moz-pre-wrap; /* Mozilla */\r
-       /* white-space : -hp-pre-wrap;  HP Printers */   \r
+       white-space        : -moz-pre-wrap; /* Mozilla */  \r
 }\r
 .IE5x .Root, .IE5x .Root div,\r
 .IE6  .Root, .IE6  .Root div,\r
        white-space : normal/* ie系では、 float要素へ回り込みする、 white-space の効いているテキストの位置が狂う */\r
 }\r
 \r
-* {zoom:1}\r
+\r
 \r
 /*------------------------------------------------------------------------------------\r
  *  mouse-operation-catcher\r
  */\r
-       .mouse-operation-catcher {\r
+       .mouse-operation-catcher,\r
+       .mouse-operation-catcher-scrollFix {\r
                position : absolute;\r
                top      : 0;\r
                left     : 0;\r
                background       : #fff;\r
                filter           : alpha( opacity=0 );\r
        }\r
+       \r
+       .mouse-operation-catcher-scrollFix {\r
+               overflow : scroll;\r
+       }\r
+       .mouse-operation-catcher-scrollFix div {\r
+               width            : 300%;\r
+               height           : 300%;\r
+               /* background       : url( "../img/grid.gif" ) repeat; */\r
+       }\r
 \r
 /*------------------------------------------------------------------------------------\r
  *  hidden-sysyem-node\r
index b66af41..a479045 100644 (file)
@@ -1,8 +1,9 @@
 <!DOCTYPE html>\r
-<html lang="ja" class="js-disabled">\r
+<html lang="ja" class="js-disabled notranslate" xmlns:v="urn:schemas-microsoft-com:vml">\r
 <head>\r
 <meta charset="utf-8">\r
-<title>New X.UI</title>\r
+<title>pettanR UI\83V\83X\83e\83\80</title>\r
+<meta name="msapplication-tap-highlight" content="no">\r
 <meta name="HandheldFriendly" content="true">\r
 <meta name="mobileoptimized" content="0">\r
 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">\r
@@ -32,6 +33,8 @@
 <script type="text/javascript" src="js/20_ui/17_Text.js"></script>\r
 <script type="text/javascript" src="js/20_ui/20_Root.js"></script>\r
 \r
+<script type="text/javascript" src="js/22_uipage/01_Page.js"></script>\r
+\r
 <script type="text/javascript" src="js/onReachEndOfScript.js"></script>\r
 \r
 <script type="text/javascript" src="js/main.js"></script>\r
index f4a5dbb..a1e3aae 100644 (file)
@@ -155,14 +155,14 @@ var X_UA = X[ 'UA' ] = {},
                                 * @type {boolean}\r
                                 */\r
                                X_UA[ sys ] = true;\r
-                               \r
-                               if( v = dav.split( 'Windows NT 10' )[ 1 ] ){\r
+\r
+                               if( v = dua.split( 'Windows NT 10' )[ 1 ] ){\r
                                        switch( v.substr( 0, 2 ) ){\r
                                                case '.0' : v = 10; break;\r
                                                default : v = '?';\r
                                        };\r
                                } else\r
-                               if( v = dav.split( 'Windows NT ' )[ 1 ] ){\r
+                               if( v = dua.split( 'Windows NT ' )[ 1 ] ){\r
                                        switch( v.substr( 0, 3 ) ){\r
                                                case '6.3' : v = 8.1; break;\r
                                                case '6.2' : v = 8; break;\r
@@ -173,9 +173,9 @@ var X_UA = X[ 'UA' ] = {},
                                                case '5.0' : v = v.indexOf( '5.01' ) ? 2000 : '2kSP1'; break;\r
                                                case '4.0' : v = 'NT'; break;\r
                                                default : v = '?';\r
-                                       };                      \r
+                                       };      \r
                                } else\r
-                               if( v = dav.split( 'Windows ' )[ 1 ] ){\r
+                               if( v = dua.split( 'Windows ' )[ 1 ] ){\r
                                        switch( v.substr( 0, 2 ) ){\r
                                                case '98' : v = v.indexOf( '98; Win 9x 4.90' ) ? '98|98SE' : 'ME'; break;\r
                                                case '95' : v = 95; break;\r
index 329973d..8326ed8 100644 (file)
@@ -88,7 +88,7 @@ function X_Object_override( target, src ){
 /**\r
  * オブジェクトの全てのメンバーを破棄します。\r
  * @alias X.Object.clear\r
- * @param {object} obj\r
+ * @param {object} obj\r
  */\r
 function X_Object_clear( obj, k ){\r
        if( obj ){\r
@@ -157,7 +157,7 @@ function X_Object_isEmpty( v ){
  * obj に対し、selector で示した値を返す。メンバを辿れなかった場合、undefined が返る。\r
  * @alias X.Object.find\r
  * @param {object} obj\r
- * @param {string} selector\r
+ * @param {string} selector 'navigator>mineTypes>hoge'\r
  * @return {*}\r
  */\r
 function X_Object_find( obj, selector ){\r
index 072bc2c..343f862 100644 (file)
@@ -119,7 +119,7 @@ X_Class_CommonMethods =
        },\r
        \r
        /**\r
-        * 関数は Constructor 内で使用します。クラス定義を辿ってスーパークラスのコンストラクタをします。<br>\r
+        * 関数は Constructor 内で使用します。クラス定義を辿ってスーパークラスのコンストラクタを呼び出します。<br>\r
         * 内部的には、呼び出したコンストラクタは配列に控え(X_Class_CALLING_SUPER)、呼び出したコンストラクタ内でさらに Super が呼ばれた場合、配列を元にさらにスーパーなコンストラクタを辿ります。\r
         * @example Constructor : function( arg1, arg2 ){\r
         *      this.Super( aeg1, arg2 );\r
@@ -130,24 +130,22 @@ X_Class_CommonMethods =
        // TODO 現在 new しているインスタンスを保持してチェックする\r
        'Super' : function( var_args ){\r
                var me     = this,\r
-                       sClass = me,\r
+                       sClass = me.constructor,\r
                        i      = X_Class_SUPER_CALLER.indexOf( me ),\r
                        stack, t, def, ret;\r
        \r
                if( i === -1 ){\r
                        X_Class_SUPER_CALLER[ i = X_Class_SUPER_CALLER.length ] = me;\r
-                       X_Class_SUPER_STACKS[ i ] = stack = 0;\r
+                       t = stack = X_Class_SUPER_STACKS[ i ] = 0;\r
                } else {\r
-                       stack = X_Class_SUPER_STACKS[ i ];\r
+                       t = stack = X_Class_SUPER_STACKS[ i ];\r
+                       \r
+               while( t ){\r
+                       sClass = X_Class_getClassDef( sClass ).SuperClass;\r
+                   --t;\r
+               };                      \r
                };\r
-               \r
-               t = stack;\r
-               \r
-        while( t ){\r
-               sClass = X_Class_getClassDef( sClass ).SuperClass;\r
-            --t;\r
-        };\r
-               \r
+\r
                while( sClass ){\r
                        ++t;\r
                        sClass = X_Class_getClassDef( sClass ).SuperClass;\r
@@ -173,25 +171,27 @@ X_Class_CommonMethods =
        },\r
 \r
        /**\r
-        * func について、親クラスで設定されている同名の関数メンバーを呼び出す。<br>\r
-        * 第一引数にオーバーライド済の自身の(自身から参照できる)関数を指定します。内部では関数名を調べた上で prototype チェーンをゴリゴリ辿る、特別なことはしていません。\r
-        * superCall がネストする場合、arguments.callee でないと正しく現在階層を取得して親関数を知ることができない\r
-        * 次の理由によって、関数名で辿ることはやめました\r
+        * myFunc について、スーパークラスで設定されている同名の関数を呼び出す。<br>\r
+        * 低速な関数なので多用されるべきではありません!<br>\r
+        * 第一引数に自身の(自身から参照できる)関数を指定します。内部では関数名を調べた上で prototype チェーンをゴリゴリ辿る、特別なことはしていません。<br>\r
+        * superCall と Super がネストする場合も現在のクラス階層を X_Class_SUPER_CALLER, X_Class_SUPER_STACKS を使って控えているので、意図した親関数が呼ばれます。<br>\r
+        * 次の理由によって、関数名で辿ることは非推奨です。\r
         * <ol>\r
         * <li>closur compiler でメソッド名が変更される\r
-        * <li>superCall 内からさらに superCall が呼ばれた場合に、起点となる関数を特定できない\r
         * </ol>\r
-        * 次の場合、意図した動作が得られません\r
+        * 次の場合、意図した動作が得られません\r
         * <ol>\r
-        * <li>2つ以上の異なる名前で同じ関数がメンバーがいた場合<br>\r
-        * <li>または、サブクラスのメンバーにスーパークラスと同じ関数が出現する\r
-        * <li>superCall 以外の手段で親関数を呼び、そのなかで superCall を読んだ\r
+        * <li>2つ以上の異なる名前で同じ関数がメンバーがいた場合\r
+        * <li>サブクラスの prototype にスーパークラスと同じ関数をコピーしている\r
+        * <li>非関数でメンバーを上書きしている\r
+        * <li>superCall 以外の手段で親関数を呼び、そのなかで superCall を呼んだ\r
         * </ol>\r
-        * 通常の X.Class.create の書き方ではこのような状況は起きませんが、js はなんでもできるので\r
-        * 参考:<a href="http://qiita.com/no22@github/items/d3bead2acbb7ff1fb86b" target="_blank">ES5なJavascriptでモダンなクラス的継承&スーパー呼び出し </a>\r
+        * 通常の X.Class.create の書き方ではこのような状況は起きませんが、js はなんでもいろいろ出来てしまいますから…<br>\r
+        * 参考:<a href="http://qiita.com/no22@github/items/d3bead2acbb7ff1fb86b" target="_blank">ES5なJavascriptでモダンなクラス的継承&スーパー呼び出し </a><br>\r
+        * original:<a href="http://javascript.crockford.com/inheritance.html" target="_blank">Classical Inheritance in JavaScript</a>\r
         * @param myFunc {Function|string} オーバーライド済の自身の(自身から参照できる)関数。\r
         * @param var_args {...*} オーバーライド元関数に渡す任意の数の引数\r
-        * @example return this.superCall( arguments.callee, param0, param1, ... );\r
+        * @example return this.superCall( this.myFunc, param0, param1, ... );\r
         * @return {*} オーバーライド元の関数を呼び出した戻り値。\r
         */\r
        'superCall' : function( myFunc, var_args ){\r
@@ -199,9 +199,8 @@ X_Class_CommonMethods =
                        sClass = me.constructor,\r
                        proto  = sClass.prototype,\r
                        i      = X_Class_SUPER_CALLER.indexOf( me ),\r
-                       l, d, ret,\r
                        args   = arguments,\r
-                       name, p, sFunc;\r
+                       p, name, t, sFunc, ret;\r
 \r
                if( X_Type_isFunction( myFunc ) ){\r
                        for( p in proto ){\r
@@ -211,24 +210,25 @@ X_Class_CommonMethods =
                                };\r
                        };\r
                        if( !name ) return;\r
+               } else\r
+               if( X_Type_isString( myFunc ) && X_Type_isFunction( me[ myFunc ] ) ){\r
+                       name = myFunc;\r
                } else {\r
                        return;\r
                };\r
                        \r
                if( i === -1 ){\r
                        X_Class_SUPER_CALLER[ i = X_Class_SUPER_CALLER.length ] = me;\r
-                       X_Class_SUPER_STACKS[ i ] = stack = 0;\r
+                       t = stack = X_Class_SUPER_STACKS[ i ] = 0;\r
                } else {\r
-                       stack = X_Class_SUPER_STACKS[ i ];\r
+                       t = stack = X_Class_SUPER_STACKS[ i ];\r
+                       \r
+               while( t ){\r
+                       sClass = X_Class_getClassDef( sClass ).SuperClass;\r
+                   --t;\r
+               };                      \r
                };\r
 \r
-               t = stack;\r
-\r
-        while( t ){\r
-               sClass = X_Class_getClassDef( sClass ).SuperClass;\r
-            --t;\r
-        };\r
-        \r
         if( sClass ){\r
                myFunc = sClass.prototype[ name ];\r
 \r
@@ -297,7 +297,7 @@ X_Class_CommonMethods =
 // --- interface ----------------------------------------------------------- //\r
 // ------------------------------------------------------------------------- //\r
 \r
-/**\r
+/*\r
  * @enum {number}\r
  * @const\r
  */\r
index 34a5933..5a9864a 100644 (file)
@@ -36,11 +36,8 @@ var X_LISTENERS_ACTUAL_HANDLER = 0,
 // ------------------------------------------------------------------------- //\r
 // ------------ local variables -------------------------------------------- //\r
 // ------------------------------------------------------------------------- //\r
-var /** @const */\r
-       X_EventDispatcher_EVENT_TARGET_OTHER        = 0,\r
-       /** @const */\r
+var X_EventDispatcher_EVENT_TARGET_OTHER        = 0,\r
        X_EventDispatcher_EVENT_TARGET_XHR          = 1,\r
-       /** @const */\r
        X_EventDispatcher_EVENT_TARGET_SILVER_LIGHT = 2;\r
 \r
 var X_EventDispatcher_once         = false,\r
@@ -101,7 +98,9 @@ var X_EventDispatcher = X[ 'EventDispatcher' ] =
                {\r
 \r
                /**\r
-                * OTHER(Node,window,document,Image,Audio), XHR, Silverlight\r
+                * EventDispatcher がラップしている EventTarget オブジェクトのタイプです。<br>\r
+                * X_EventDispatcher_actualAddEvent で使用されます。<br>\r
+                * OTHER:0(node,window,document,Image,Audio), XHR:1, Silverlight:2\r
                 * @private\r
                 * @type {number}\r
                 */\r
@@ -374,10 +373,6 @@ function X_EventDispatcher_dispatch( e ){
  * this[ 'listen' ]( [ 'open', 'close', 'ready' ], onUpdate );\r
  * \r
  * @alias EventDispatcher.prototype.listen\r
- * @param {string|number|Array.<string,number>} type 配列を指定した場合、複数のイベントタイプに対して同じコールバックを登録する。\r
- * @param {listener|function|Array} [opt_arg1=]\r
- * @param {function|Array} [opt_arg2=]\r
- * @param {Array} [opt_arg3=] コールバック時の引数を配列に入れる。引数がひとつでも配列を使用する。省略した場合引数なし。\r
  * @return {EventDispatcher} チェインメソッド\r
  */\r
 function X_EventDispatcher_listen( type, opt_arg1, opt_arg2, opt_arg3 ){\r
@@ -427,13 +422,10 @@ function X_EventDispatcher_systemListen( that, type, opt_arg1, opt_arg2, opt_arg
 };\r
 \r
 /**\r
- * イベントリスナの解除を行う。登録時と同じ引数を与える必要がある。kill() ですべてのイベントが解除されるので、途中で解除されるイベント以外は kill() に任せてしまってよい。\r
+ * イベントリスナの解除を行う。登録時と同じ引数を与える必要がある。kill() で自信に登録されたすべてのイベントが解除されるので、途中で解除されるイベント以外は kill() に任せてしまってよい。<br>\r
+ * 他人に登録したイベントを解除せずに kill するのは NG。\r
  * @alias EventDispatcher.prototype.unlisten\r
  * @return {EventDispatcher}\r
- * @param {string|number|Array.<string,number>} opt_type イベントID, イベント名、またはその配列\r
- * @param {listener|function|Array} opt_arg1\r
- * @param {function|Array} opt_arg2\r
- * @param {Array} opt_arg3\r
  */\r
 function X_EventDispatcher_unlisten( opt_type, opt_arg1, opt_arg2, opt_arg3 ){\r
        var listeners = this[ '_listeners' ],\r
index 5f1f098..02ec900 100644 (file)
@@ -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}
         */             
index f9ddadd..a951a50 100644 (file)
@@ -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 の複数指定が使用できるか?<br>
                 * 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<br>
+                * この値を用いる場合には、spread-radius を省略出来ません。box-shadow が効かないケースに遭遇した時はこの事を思い出して下さい。<br>
+                * chrome 4+, ff3.5(1.9.1), ie9+, opera10.5+, Safari5+(533)<br>
                 * 
-                * 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/<br>
+                *  box-shadow:inset と border-radius を指定しているときの Google Chrome の表示<br>
+                *  このバグは Windows と Linux で発生するようです。<br>
+                *  Windows 版 Chrome 10.0.648.127 で修正されているのを確認しました。<br>
+                * @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;
 
 })();
index b73cffe..550f607 100644 (file)
@@ -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' );
 
index b39d0eb..702706d 100644 (file)
@@ -6,8 +6,7 @@
  * モバイルブラウザでの iframe の挙動(Mobile Safari, Chrome for Android)\r
  * \r
  * @alias X.Util.NinjaIframe\r
- * @class 隠し iframe 機能を提供します。\r
- * @constructor \r
+ * @class NinjaIframe 隠し iframe 機能を提供します。\r
  * @constructs NinjaIframe\r
  * @extends {Node}\r
  */\r
index 13ee2f9..59e2f1c 100644 (file)
@@ -114,7 +114,7 @@ X[ 'XHR' ] = {
  * http://hakuhin.jp/as/javascript.html\r
  * Flash から JavaScript にアクセスする(3+)\r
  */\r
-       'FLASH'       : 4 <= X_Pulgin_FLASH_VERSION ? 8 : 0,\r
+       'FLASH'       : 4 <= X_Plugin_FLASH_VERSION ? 8 : 0,\r
        \r
        'GADGET'      : 5.5 <= X_UA[ 'IE' ] || !X_UA[ 'IE' ] ? 16 : 0,\r
 \r
index 5d714c2..234f057 100644 (file)
@@ -25,16 +25,17 @@ X_TEMP.onSystemReady.push(
        });\r
 \r
 /**\r
- * <p>複数のバックエンドから、与えられた音声を再生可能なものを見つけ、音声を再生します。\r
+ * <p>è¤\87æ\95°ã\81®ã\82ªã\83¼ã\83\87ã\82£ã\82ªã\83»ã\83\90ã\83\83ã\82¯ã\82¨ã\83³ã\83\89ã\81\8bã\82\89ã\80\81ä¸\8eã\81\88ã\82\89ã\82\8cã\81\9fé\9f³å£°ã\82\92å\86\8dç\94\9få\8f¯è\83½ã\81ªã\82\82ã\81®ã\82\92è¦\8bã\81¤ã\81\91ã\80\81é\9f³å£°ã\82\92å\86\8dç\94\9fã\81\97ã\81¾ã\81\99ã\80\82\r
  * <p>HTMLAudio の動作・機能がブラウザ毎にバラバラなのに業を煮やし、メソッドやイベントは独自に定義しています。\r
  * <h4>バックエンドの種類</h4>\r
  * <p>HTMLAudio, WebAudio, Silverlight, WMP\r
  * <h4>イベント</h4>\r
  * <dl>\r
- * <dt>X.Event.BACKEND_READY <dd>音声(src リスト)を再生可能なバックエンドが見つかった。\r
- * <dt>X.Event.BACKEND_NONE  <dd>音声を再生可能なバックエンドが見つからなかった。Audio は kill されます。\r
- * <dt>X.Event.READY         <dd>再生可能、実際の状態は canplay から loadeddata まで様々、、、\r
- * <dt>X.Event.ERROR         <dd><ul>\r
+ * <dt>X.Event.BACKEND_READY   <dd>音声(src リスト)を再生可能なバックエンドが見つかった。\r
+ * <dt>X.Event.BACKEND_NONE    <dd>音声を再生可能なバックエンドが見つからなかった。Audio は kill されます。\r
+ * <dt>X.Event.MEDIA_CAN_TOUCH <dd>モバイル端末の制約で音声の再生またはロードに、タッチを必要とする場合、タッチイベント内で play を呼び出す準備が出来たことを通知する。\r
+ * <dt>X.Event.READY           <dd>再生可能、実際の状態は canplay から loadeddata まで様々、、、\r
+ * <dt>X.Event.ERROR           <dd><ul>\r
  *   <li> 1 : ユーザーによってメディアの取得が中断された\r
  *   <li> 2 : ネットワークエラー\r
  *   <li> 3 : メディアのデコードエラー\r
@@ -47,7 +48,6 @@ X_TEMP.onSystemReady.push(
  * <dt>X.Event.MEDIA_PAUSED    <dd>ポーズした\r
  * <dt>X.Event.MEDIA_WAITING   <dd>再生中に音声が待機状態に。\r
  * <dt>X.Event.MEDIA_SEEKING   <dd>シーク中に音声が待機状態に。\r
- * <dt>X.Event.MEDIA_CAN_TOUCH <dd>シーク中に音声が待機状態に。\r
  * </dl>\r
  * \r
  * @alias X.Audio\r
@@ -70,14 +70,14 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ](
                 * @type {string}\r
                 */\r
                'source'      : '',\r
+               \r
                /**\r
                 * 音声再生バックエンドの名前。X.Event.BACKEND_READY で設定される。\r
                 * @alias Audio.prototype.backendName\r
                 * @type {string}\r
                 */\r
                'backendName' : '',\r
-               \r
-               // TODO\r
+\r
                'Constructor' : function( sourceList, opt_option ){\r
                        X_Audio_startDetectionBackend(\r
                                X_Audio_BACKENDS[ 0 ], this,\r
@@ -90,6 +90,12 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ](
                /**\r
                 * 再生。開始位置・終了位置、ループの有無、ループ以降の開始位置、ループ以降の終了位置\r
                 * @alias Audio.prototype.play\r
+                * @param {number=} startTime 開始時間を ms で\r
+                * @param {number=} endTime 終了時間を ms で\r
+                * @param {boolean=} endTime に達した際に曲をループさせるか\r
+                * @param {number=} loopStartTime ループ以後の開始時間を ms で\r
+                * @param {number=} loopEndTime ループ以後の終了時間を ms で\r
+                * @return {Audio} メソッドチェーン\r
                 */\r
                'play' : function( startTime, endTime, loop, loopStartTime, loopEndTime ){\r
                        var pair = X_Pair_get( this );\r
@@ -97,8 +103,10 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ](
                        return this;\r
                },\r
                /**\r
-                * シーク\r
+                * シーク、再生中で無い場合は次回再生開始位置の指定のみ\r
                 * @alias Audio.prototype.seek\r
+                * @param {number} seekTime シーク位置を ms で\r
+                * @return {Audio} メソッドチェーン\r
                 */\r
                'seek' : function( seekTime ){\r
                        var pair = X_Pair_get( this );\r
@@ -108,6 +116,7 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ](
                /**\r
                 * ポーズ\r
                 * @alias Audio.prototype.pause\r
+                * @return {Audio} メソッドチェーン\r
                 */\r
                'pause' : function(){\r
                        var pair = X_Pair_get( this );\r
@@ -117,6 +126,21 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ](
                /**\r
                 * 状態の getter と setter\r
                 * @alias Audio.prototype.state\r
+                * @param {object=} obj setter の場合、上書きする値を格納したobject\r
+                * @return {Audio|object}\r
+                * @example\r
+                * audio.setState(\r
+                                       {\r
+                                       'startTime'     : 0,\r
+                                       'endTime'       : 80000,\r
+                                       'loopStartTime' : 120000,\r
+                                       'loopEndTime'   : 200000,\r
+                                       'currentTime'   : 0,\r
+                                       'loop'          : true,\r
+                                       'looded'        : false,\r
+                                       'volume'        : 1,\r
+                                       'autoplay'      : true\r
+                                       });\r
                 */\r
                'state' : function( obj ){\r
                        var pair = X_Pair_get( this );\r
@@ -130,18 +154,22 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ](
                                        'currentTime'   : -1,\r
                                        'loop'          : false,\r
                                        'looded'        : false,\r
-                                       'error'         : false,\r
+                                       'error'         : 0,\r
+                                       'autoplay'      : false,\r
                                        'playing'       : false,\r
-                                       'source'        : this[ 'source' ] || '',\r
-                                       'duration'      : 0\r
+                                       'source'        : this[ 'source' ],\r
+                                       'duration'      : 0,\r
+                                       'volume'        : 0.5\r
                                        };\r
                        };\r
                        pair && pair.setState( obj );\r
                        return this;\r
                },              \r
                /**\r
-                * ループの getter と setter\r
+                * ループの setter\r
                 * @alias Audio.prototype.loop\r
+                * @param {boolean} v \r
+                * @return {Audio}\r
                 */\r
                'loop' : function( v ){\r
                        var pair = X_Pair_get( this );\r
@@ -149,8 +177,10 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ](
                        return this;\r
                },\r
                /**\r
-                * ボリュームの getter と setter 実装不十分!\r
+                * ボリュームの setter 実装不十分!\r
                 * @alias Audio.prototype.volume\r
+                * @param {number} v \r
+                * @return {Audio}\r
                 */\r
                'volume' : function( v ){\r
                        var pair = X_Pair_get( this );\r
@@ -158,8 +188,10 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ](
                        return this;\r
                },\r
                /**\r
-                * 再生位置。\r
+                * å\86\8dç\94\9fä½\8dç½®ã\81®setterã\80\82\r
                 * @alias Audio.prototype.currentTime\r
+                * @param {number} v msで\r
+                * @return {Audio}\r
                 */\r
                'currentTime' : function( v ){\r
                        var pair = X_Pair_get( this );\r
@@ -169,6 +201,7 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ](
                /**\r
                 * 再生中か?\r
                 * @alias Audio.prototype.isPlaying\r
+                * @return {boolean}\r
                 */\r
                'isPlaying' : function(){\r
                        var pair = X_Pair_get( this );\r
@@ -347,6 +380,7 @@ var X_AudioBase = X_EventDispatcher[ 'inherits' ](
                        'volume'        : this.gain,\r
                        'playing'       : this.playing,                         \r
                        'duration'      : this.duration,\r
+                       'autoplay'      : this.autoplay,\r
                        \r
                        'currentTime'  : this.playing ? this.getActualCurrentTime() : this.seekTime,\r
                        'error'        : this.getActualError ? this.getActualError() : this.error\r
index c713961..d6b41e4 100644 (file)
@@ -15,7 +15,7 @@
 var X_SLAudio,\r
        X_SLAudio_uid = 0;\r
 \r
-if( X_Pulgin_SILVER_LIGHT_VERSION ){\r
+if( X_Plugin_SILVER_LIGHT_VERSION ){\r
        \r
        X_TEMP.slaudioInit = function(){\r
                //\r
index 04be569..a095818 100644 (file)
@@ -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,
index afd289f..d5117b6 100644 (file)
@@ -103,12 +103,12 @@ var XUI_Event = X[ 'UI' ][ 'Event' ] = {
        ANIME_BEFORE_STOP   : ++X_Event_last, // before cancel\r
        ANIME_STOP          : ++X_Event_last,\r
 \r
-       PAGE_BEFORE_SHOW    : ++X_Event_last,\r
+       PAGE_SHOW_BEFORE    : ++X_Event_last,\r
        PAGE_SHOW           : ++X_Event_last,\r
-       PAGE_AFTER_SHOW     : ++X_Event_last,\r
-       PAGE_BEFORE_HIDE    : ++X_Event_last,\r
+       PAGE_SHOW_AFTER     : ++X_Event_last,\r
+       PAGE_HIDE_BEFORE    : ++X_Event_last,\r
        PAGE_HIDE           : ++X_Event_last,\r
-       PAGE_AFTER_HIDE     : ++X_Event_last,\r
+       PAGE_HIDE_AFTER     : ++X_Event_last,\r
 \r
        // X.UI.Form\r
        CHANGE              : ++X_Event_last,\r
index db684c3..e726389 100644 (file)
@@ -423,7 +423,7 @@ function XUI_Gesture_handleEvent( e ){
 \r
 \r
 var XUI_Gesture_LIST = [\r
-       /**\r
+       /*\r
         * Touch\r
         * Called as first, tells the user has touched the screen\r
         * @events  touch\r
@@ -453,7 +453,7 @@ var XUI_Gesture_LIST = [
                }\r
        },\r
        \r
-       /**\r
+       /*\r
         * Transform\r
         * User want to scale or rotate with 2 fingers\r
         * @events  transform, transformstart, transformend, pinch, pinchin, pinchout, rotate\r
@@ -545,7 +545,7 @@ var XUI_Gesture_LIST = [
                }\r
        },\r
        \r
-       /**\r
+       /*\r
         * Drag\r
         * Move with x fingers (default 1) around on the page. Blocking the scrolling when\r
         * moving left and right is a good practice. When all the drag events are blocking\r
@@ -668,7 +668,7 @@ var XUI_Gesture_LIST = [
                }\r
        },\r
 \r
-       /**\r
+       /*\r
         * Tap/DoubleTap\r
         * Quick touch at a place or double at the same place\r
         * @events  tap, doubletap\r
index 3bd4cf3..c85dba5 100644 (file)
@@ -342,13 +342,12 @@ var XUI_AbstractUINode = X_EventDispatcher[ 'inherits' ](
                                case 2:\r
                                        \r
                                case 1:\r
-                                       this.xnode[ 'kill' ]();\r
+                                       this.xnode[ 'remove' ]();\r
                                \r
                                        delete this.root;\r
                                        delete this.rootData;\r
                                        delete this.parent;\r
                                        delete this.parentData;\r
-                                       delete this.xnode;\r
                                        \r
                                        delete this.phase;\r
                        };\r
index 0aa8008..49cf1bd 100644 (file)
@@ -283,7 +283,6 @@ var XUI_Box = XUI_AbstractUINode.inherits(
                                        delete this.rootData;\r
                                        delete this.parent;\r
                                        delete this.parentData;\r
-                                       delete this.xnode;\r
                        };\r
                        delete this.phase;\r
                }\r
index b6cfabc..f7d334b 100644 (file)
@@ -14,7 +14,7 @@ function XUI_ScrollBox_start( scrollBox ){
                        XUI_ScrollBox_indicatorV = X_Doc_create( 'div' )[ 'className' ]( 'ScrollBox-IndicatorV' );\r
                        \r
                };\r
-               XUI_ScrollBox_indicatorV.parent !== scrollBox.xnode && scrollBox.xnode[ 'append' ]( XUI_ScrollBox_indicatorV );\r
+               scrollBox.xnode[ 'append' ]( XUI_ScrollBox_indicatorV );\r
                XUI_ScrollBox_indicatorV[ 'animate' ](\r
                                { opacity : 0 },\r
                                { opacity : 1 },\r
@@ -27,7 +27,7 @@ function XUI_ScrollBox_start( scrollBox ){
                if( !XUI_ScrollBox_indicatorH ){\r
                        XUI_ScrollBox_indicatorH = X_Doc_create( 'div' )[ 'className' ]( 'ScrollBox-IndicatorH' );\r
                };\r
-               XUI_ScrollBox_indicatorH.parent !== scrollBox.xnode && scrollBox.xnode[ 'append' ]( XUI_ScrollBox_indicatorH );\r
+               scrollBox.xnode[ 'append' ]( XUI_ScrollBox_indicatorH );\r
                XUI_ScrollBox_indicatorH[ 'animate' ](\r
                                { opacity : 0 },\r
                                { opacity : 1 },\r
@@ -174,8 +174,18 @@ var XUI_ScrollBox = XUI_ChromeBox.inherits(
                \r
                _remove : function(){\r
                        XUI_AbstractUINode.prototype._remove.apply( this, arguments );\r
+                       \r
                        if( this.scrolling ){\r
-                               // remove scroll\r
+                               // scroller 削除\r
+                               this[ 'unlisten' ]( XUI_Event._POINTER_DOWN, X_UI_ScrollBox_onStart )\r
+                                       [ 'unlisten' ]( XUI_Event.DRAG, X_UI_ScrollBox_onMove )\r
+                                       [ 'unlisten' ]( XUI_Event.DRAG_END, X_UI_ScrollBox_onEnd );\r
+                               XUI_rootData[ 'unlisten' ]( XUI_Event.LAYOUT_BEFORE, this, X_UI_ScrollBox_onLayoutBefore );\r
+                               \r
+                               XUI_rootData[ 'unlisten' ]( XUI_Event.LAYOUT_COMPLETE, this, X_UI_ScrollBox_onLayoutComplete );\r
+                               this[ 'unlisten' ]( XUI_Event.SCROLL_END, XUI_rootData, XUI_rootData.calculate );\r
+                               \r
+                               this.xnodeSlider[ 'stop' ]();\r
                        };\r
                }\r
                \r
@@ -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 );\r
                } else {\r
                        // scroller 作る\r
-                       // shadow の listen には this が必要!\r
-                       // TODO AbstractUI の listen が悪い!\r
-                       this[ 'listen' ]( XUI_Event._POINTER_DOWN, this, X_UI_ScrollBox_onStart )\r
-                               [ 'listen' ]( XUI_Event.DRAG, this, X_UI_ScrollBox_onMove );\r
-       this[ 'listen' ]( XUI_Event.DRAG_END, this, X_UI_ScrollBox_onEnd );\r
+                       this[ 'listen' ]( XUI_Event._POINTER_DOWN, X_UI_ScrollBox_onStart )\r
+                               [ 'listen' ]( XUI_Event.DRAG, X_UI_ScrollBox_onMove )\r
+                               [ 'listen' ]( XUI_Event.DRAG_END, X_UI_ScrollBox_onEnd );\r
                        XUI_rootData[ 'listen' ]( XUI_Event.LAYOUT_BEFORE, this, X_UI_ScrollBox_onLayoutBefore );\r
                        \r
                        X_UI_ScrollBox_translate( this, this.scrollXMax * this.scrollXRatio, this.scrollYMax * this.scrollYRatio, 100, '', 300 );\r
@@ -238,9 +246,9 @@ function X_UI_ScrollBox_onLayoutComplete( e ){
        // scroll 不要\r
        if( this.scrolling ){\r
                // scroller 削除\r
-               this[ 'unlisten' ]( XUI_Event._POINTER_DOWN, this, X_UI_ScrollBox_onStart )\r
-                       [ 'unlisten' ]( XUI_Event.DRAG, this, X_UI_ScrollBox_onMove );\r
-       this[ 'unlisten' ]( XUI_Event.DRAG_END, this, X_UI_ScrollBox_onEnd );\r
+               this[ 'unlisten' ]( XUI_Event._POINTER_DOWN, X_UI_ScrollBox_onStart )\r
+                       [ 'unlisten' ]( XUI_Event.DRAG, X_UI_ScrollBox_onMove )\r
+                       [ 'unlisten' ]( XUI_Event.DRAG_END, X_UI_ScrollBox_onEnd );\r
                XUI_rootData[ 'unlisten' ]( XUI_Event.LAYOUT_BEFORE, this, X_UI_ScrollBox_onLayoutBefore );\r
                \r
                ( this.scrollX !== 0 || this.scrollY !== 0 ) && X_UI_ScrollBox_translate( this, 0, 0, 100, '', 300 );\r
index 08cec6d..40877be 100644 (file)
@@ -22,8 +22,8 @@ var XUI_Text = XUI_AbstractUINode.inherits(
                        this.User  = user;\r
                        this.xnode = X_Doc_create( 'div' );\r
                        \r
-                       if( X_Type_isString( content ) && content ){\r
-                               this.content = content;\r
+                       if( content != null ){\r
+                               this.content = '' + content;\r
                        };\r
                },\r
                \r
@@ -51,8 +51,8 @@ var XUI_Text = XUI_AbstractUINode.inherits(
                        \r
                        XUI_AbstractUINode.prototype.setItemData.apply( this, arguments );\r
                        \r
-                       if( X_Type_isObject( itemData = this.itemData ) && this.dataFeild ){\r
-                               this.setContent( itemData[ this.dataFeild ] || '' );\r
+                       if( X_Type_isObject( itemData = this.itemData ) && itemData[ this.dataFeild ] != null ){\r
+                               this.setContent( '' + itemData[ this.dataFeild ] );\r
                        };\r
                }\r
        }\r
@@ -74,6 +74,7 @@ X.UI.Text = X.UI.AbstractUINode.inherits(
                        if( v === undefined ){\r
                                return content;\r
                        };\r
+                       v += '';\r
                        content !== v && data.setContent( v );\r
                        return this;\r
                }\r
index 8f76774..d1e1e22 100644 (file)
 \r
-X(\r
-       function(){\r
-               var source = [\r
-                       {\r
-                               label   : 'ぺったんR',\r
-                               summary : X.VERSION + ( X.buildTimeStamp ? ' ' + X.buildTimeStamp : '' )\r
-                       },\r
-                       {\r
-                               label   : 'レンダリングエンジン',\r
-                               summary : X.UA.IE ? 'Trident' :\r
-                                       X.UA.Opera ? 'Presto' :\r
-                                       X.UA.Gecko ? 'Gecko' :\r
-                                       X.UA.KHTML ? 'KHTML' : X.UA.WebKit ? 'WebKit' : X.UA.Blink ? 'Blink' :\r
-                                       X.UA.Edge ? 'Edge' : 'Other'\r
-                       },\r
-                       {\r
-                               label   : 'OS',\r
-                               summary : X.UA.Windows ? 'Windows' : X.UA.Mac ? 'Mac' : X.UA.Android ? 'Android' : X.UA.iOS ? 'iOS' : 'Other'\r
-                       },\r
-                       {\r
-                               label   : '起動時間',\r
-                               summary : X.bootSpeed + 'ms'\r
-                       },\r
-                       {\r
-                               label   : '設定'\r
-                       },\r
-                       {\r
-                               label   : '情報'\r
-                       },\r
-                       {\r
-                               label   : 'ローカルストレージ'\r
-                       },\r
-                       {\r
-                               label   : '外部API接続'\r
-                       },\r
-                       {\r
-                               label   : 'HID'\r
-                       }\r
-               ];\r
+X( function(){\r
+       with( X.UI ){\r
+               Page(\r
+                       'ホーム',\r
+                       'home',\r
+                       List(\r
+                               [\r
+                                       {\r
+                                               label   : 'ぺったんR',\r
+                                               summary : X.VERSION + ( X.buildTimeStamp ? ' ' + X.buildTimeStamp : '' )\r
+                                       },\r
+                                       { label   : 'ツール' },\r
+                                       { label   : 'テスト' , next : 'test' },\r
+                                       { label   : '情報' , next : 'info' },\r
+                                       { label   : 'ローカルストレージ' },\r
+                                       { label   : '外部API接続' }\r
+                               ],\r
+                               AndroidItem()\r
+                       )\r
+               ).show();\r
 \r
+               Page(\r
+                       'テスト目次',\r
+                       'test',\r
+                       List(\r
+                               [\r
+                                       { label : '戻る', back : true },\r
+                                       { label : 'インタラクション・ジェスチャー' },\r
+                                       { label : 'Ajax' },\r
+                                       { label : 'マルチメディア' }\r
+                               ],\r
+                               AndroidItem()\r
+                       )\r
+               );\r
 \r
-               with( X.UI ){\r
-                       Root(\r
-                               List(\r
-                                       source,\r
-                                       AndroidItem().listen( X.UI.Event.ITEMDATA_CHANGED )\r
-                               )\r
-                       );      \r
-               };\r
-       }\r
-);\r
+               Page(\r
+                       '情報',\r
+                       'info',\r
+                       List(\r
+                               [\r
+                                       { label : '戻る', back : true },\r
+                                       { label : 'システムスコア'   , next : 'spec' },\r
+                                       { label : 'OS・ブラウザ'     , next : 'ua' },\r
+                                       { label : 'プラグインとアドオン', next : 'plugin' },\r
+                                       { label : 'ストレージ' },\r
+                                       { label : 'HID' },\r
+                                       { label : 'pettanR ビルド情報' }\r
+                               ],\r
+                               AndroidItem()\r
+                       )\r
+               );\r
+\r
+               Page(\r
+                       'システムスコア',\r
+                       'spec',\r
+                       List(\r
+                               [\r
+                                       { label : '戻る', back : true },\r
+                                       {\r
+                                               label   : '起動時間',\r
+                                               summary : X.bootSpeed + 'ms'\r
+                                       }\r
+                               ],\r
+                               AndroidItem()\r
+                       )\r
+               );\r
+\r
+               Page(\r
+                       'OS・ブラウザ',\r
+                       'ua',\r
+                       List(\r
+                               [\r
+                                       { label : '戻る', back : true },\r
+                                       {\r
+                                               label   : 'ブラウザ',\r
+                                               summary : X.UA.IE ? 'IE ' + X.UA.IE :\r
+                                                       X.UA.Opera      ? 'Presto Opera ' + X.UA.Opera :\r
+                                                       X.UA.Gecko      ? 'Gecko ' + X.UA.Gecko :\r
+                                                       X.UA.KHTML      ? 'KHTML ' + X.UA.KHTML :\r
+                                                       X.UA.WebKit     ? 'WebKit ' + X.UA.WebKit :\r
+                                                       X.UA.BlinkOpera ? 'Blink Opera ' + X.UA.BlinkOpera :\r
+                                                       X.UA.Blink      ? 'Blink ' + X.UA.Blink :\r
+                                                       X.UA.AOSP       ? 'AOSP ' + X.UA.AOSP :\r
+                                                       X.UA.ChromeWV   ? 'Chrome WebView ' + X.UA.ChromeWV :\r
+                                                       X.UA.Edge       ? 'Edge' + X.UA.Edge : 'Other'\r
+                                       },\r
+                                       {\r
+                                               label   : 'OS',\r
+                                               summary : X.UA.Windows ? 'Windows ' + X.UA.Windows : X.UA.Mac ? 'Mac' : X.UA.Android ? 'Android' : X.UA.iOS ? 'iOS' : 'Other'\r
+                                       },\r
+                                       {\r
+                                               label   : 'ユーザーエージェント文字列',\r
+                                               summary : navigator.userAgent\r
+                                       },\r
+                                       {\r
+                                               label   : 'プラットフォーム',\r
+                                               summary : 'navigator.platform=' + navigator.platform\r
+                                       },\r
+                                       {\r
+                                               label   : 'アプリ名',\r
+                                               summary : 'navigator.appName=' + navigator.appName\r
+                                       },\r
+                                       {\r
+                                               label   : 'アプリコード名',\r
+                                               summary : 'navigator.appCodeName=' + navigator.appCodeName\r
+                                       },\r
+                                       {\r
+                                               label   : 'アプリバージョン',\r
+                                               summary : 'navigator.appVersion=' + navigator.appVersion\r
+                                       }\r
+                               ],\r
+                               AndroidItem()\r
+                       )\r
+               );\r
+\r
+               Page(\r
+                       'プラグインとアドオン',\r
+                       'plugin',\r
+                       List(\r
+                               [\r
+                                       { label : '戻る', back : true },\r
+                                       {\r
+                                               label   : 'Adobe FlashPlayer',\r
+                                               summary : X.Plugin.Flash || '-'\r
+                                       },\r
+                                       {\r
+                                               label   : 'Silverlight',\r
+                                               summary : X.Plugin.Silverlight || '-'\r
+                                       },\r
+                                       {\r
+                                               label   : 'Unity Web Player',\r
+                                               summary : X.Plugin.Unity || '-'\r
+                                       },\r
+                                       {\r
+                                               label   : 'Google Gears',\r
+                                               summary : X.Plugin.Gears ? 'o' : '-'\r
+                                       },\r
+                                       {\r
+                                               label   : 'Windows Media Player',\r
+                                               summary : X.Plugin.WMP || '-'\r
+                                       }\r
+                               ],\r
+                               AndroidItem()\r
+                       )\r
+               );\r
+               \r
+       };\r
+} );\r
 \r
 \r
 var AndroidItem = X.UI.Box.inherits(\r
        'AndroidItem',\r
        X.Class.NONE,\r
        {\r
+               next : '',\r
+               back : false,           \r
+               \r
                Constructor : function(){\r
                        this.Super( {\r
                                sizing      : 'border',\r
@@ -66,9 +166,11 @@ var AndroidItem = X.UI.Box.inherits(
                                height      : 4,\r
                                left        : 0,\r
                                right       : 0\r
-                       } ).listen( X.UI.Event.TAP );\r
+                       } )\r
+                       .listen( X.UI.Event.TAP )\r
+                       .listen( X.UI.Event.ITEMDATA_CHANGED );\r
                },\r
-               \r
+\r
                handleEvent : function( e ){\r
                        var txt;\r
                        \r
@@ -95,15 +197,36 @@ var AndroidItem = X.UI.Box.inherits(
                                                        left        : 1\r
                                                } ) );\r
                                        };\r
+                                       \r
+                                       if( e.itemData.next ){\r
+                                               this.add( X.UI.Text( String.fromCharCode( 9654 ), {\r
+                                                       fontColor   : 0xAAAAAA,\r
+                                                       fontBold    : true,\r
+                                                       top         : 1.35,\r
+                                                       width       : 1,\r
+                                                       right       : 1\r
+                                               } ) );\r
+                                               \r
+                                               this.next = e.itemData.next;\r
+                                       } else\r
+                                       if( e.itemData.back ){\r
+                                               this.back = true;\r
+                                       };\r
                                        break;\r
                                \r
                                case X.UI.Event.TAP :\r
                                        txt = this.getNodeAt( 0 );\r
                                        txt.content( txt.content() + '+' );\r
+                                       \r
+                                       if( this.next ){\r
+                                               X.UI.Page.move( this.next );\r
+                                       } else\r
+                                       if( this.back ){\r
+                                               X.UI.Page.back();\r
+                                       };\r
+                                       \r
                        };\r
                }       \r
        }       \r
 );\r
 \r
-\r
-\r
index 74a955e..731be4e 100644 (file)
@@ -4,7 +4,7 @@
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">\r
                \r
        <title>Logger</title>\r
-       \r
+       <meta name="msapplication-tap-highlight" content="no">\r
        <meta name="HandheldFriendly" content="true">\r
        <meta name="mobileoptimized" content="0">\r
        \r