OSDN Git Service

Version 0.6.87, fix SuperConstructor @ X.Class & force convert to PointerEvent @...
authoritozyun <itozyun@user.sourceforge.jp>
Tue, 30 Sep 2014 13:16:03 +0000 (22:16 +0900)
committeritozyun <itozyun@user.sourceforge.jp>
Tue, 30 Sep 2014 13:16:03 +0000 (22:16 +0900)
16 files changed:
0.6.x/index.html
0.6.x/js/00_core/00_X.js
0.6.x/js/00_core/04_XClass.js
0.6.x/js/00_core/06_XEventDispatcher.js
0.6.x/js/01_dom/10_XDom.js
0.6.x/js/01_dom/11_XDomDTD.js
0.6.x/js/01_dom/11_XDomNode.js
0.6.x/js/01_dom/12_XDomEvent.js
0.6.x/js/03_util/01_XNinjaIframe.js
0.6.x/js/04_net/00_XNet.js
0.6.x/js/04_net/01_XNetXHR.js
0.6.x/js/10_ui/04_XUI_Event.js
0.6.x/js/10_ui/05_XUI_Gesture.js
0.6.x/js/10_ui/06_AbstractUINode.js
0.6.x/js/10_ui/20_PageRoot.js
0.6.x/js/import.js [new file with mode: 0644]

index 457d051..27f8468 100644 (file)
 <meta name="viewport" id="dynamic-viewport" content="width=device-width,target-densitydpi=device-dpi,initial-scale=1,user-scalable=0,maximum-scale=1,minimum-scale=1">\r
 <link rel="stylesheet" type="text/css" media="all" href="css/xui.css">\r
 \r
-<script type="text/javascript" src="js/00_core/00_builtin.js"></script>\r
-<script type="text/javascript" src="js/00_core/00_X.js"></script>\r
-<script type="text/javascript" src="js/00_core/01_XUa.js"></script>\r
-<script type="text/javascript" src="js/00_core/02_XType.js"></script>\r
-\r
-<script type="text/javascript" src="js/00_core/03_XCallback.js"></script>\r
-<script type="text/javascript" src="js/00_core/04_XClass.js"></script>\r
-<script type="text/javascript" src="js/00_core/05_XTimer.js"></script>\r
-<script type="text/javascript" src="js/00_core/06_XEventDispatcher.js"></script>\r
-<script type="text/javascript" src="js/00_core/07_XNotification.js"></script>\r
-\r
-<script type="text/javascript" src="js/01_dom/10_XDom.js"></script>\r
-<script type="text/javascript" src="js/01_dom/11_XDomDTD.js"></script>\r
-<script type="text/javascript" src="js/01_dom/11_XDomNode.js"></script>\r
-<script type="text/javascript" src="js/01_dom/12_XDomEvent.js"></script>\r
-<script type="text/javascript" src="js/01_dom/13_XDomBoxModel.js"></script>\r
-<script type="text/javascript" src="js/01_dom/14_XDomAttr.js"></script>\r
-<script type="text/javascript" src="js/01_dom/15_XDomStyle.js"></script>\r
-<script type="text/javascript" src="js/01_dom/17_XDomNodeList.js"></script>\r
-<script type="text/javascript" src="js/01_dom/18_XDomQuery.js"></script>\r
-<script type="text/javascript" src="js/01_dom/19_XDomParser.js"></script>\r
-<script type="text/javascript" src="js/01_dom/20_XDomImage.js"></script>\r
-<!--<script type="text/javascript" src="js/01_dom/22_XDomBuilder.js"></script>-->\r
+<script type="text/javascript" src="js/import.js"></script>\r
 \r
 <script type="text/javascript" src="js/10_ui/00_XUI.js"></script>\r
 <script type="text/javascript" src="js/10_ui/02_XUI_Attr.js"></script>\r
index 2a9cfe3..f1293b8 100644 (file)
@@ -8,7 +8,8 @@ if( !window['console'] || ( window.parent && window.parent.log ) ) console = { l
 } };\r
 \r
 var undefined,\r
-       X = new Function( 'return X._shortcut && X._shortcut.apply( X._shortcut, arguments )' );\r
+       X = new Function( 'return X._shortcut && X._shortcut.apply( X._shortcut, arguments )' ),\r
+       X_TEMP = {};\r
 \r
 X.VERSION = '0.6.50';\r
                \r
@@ -61,6 +62,38 @@ X.cloneObject = function( src ){
        return ret;\r
 };\r
 \r
+X.deepCopy = function( src ){\r
+       function clone( src, objSrc, objCopy, n ) {\r
+               var ret, i, key;\r
+               if( !src ){ // 0, "", null, undefined, NaN, false\r
+                       return src;\r
+               } else\r
+               if( X.Type.isArray( src ) ){\r
+                       i = objSrc.indexOf( src );\r
+                       if( i !== -1 ) return objCopy[ i ];\r
+                       objSrc[ ++n ] = src;\r
+                       objCopy[ n ]  = ret = [];\r
+               } else\r
+               if( X.Type.isObject( src ) ){\r
+                       i = objSrc.indexOf( src );\r
+                       if( i !== -1 ) return objCopy[ i ];\r
+                       objSrc[ ++n ] = src;\r
+                       objCopy[ n ]  = ret = {};\r
+               } else {\r
+                       // string, number, true\r
+                       return src;\r
+               };\r
+               for( key in src ){\r
+                       ret[ key ] = clone( src[ key ], objSrc, objCopy, n );\r
+               };\r
+               return ret;\r
+       };                              \r
+       return clone( src, [], [], -1 );\r
+};\r
+\r
+\r
+\r
+\r
 X.copyArray = function( ary ){\r
        var ret = [], i = ary.length;\r
        if( !i ) return ret;\r
index 28fc4ad..ae07f5e 100644 (file)
@@ -17,6 +17,8 @@ var X_Class_CLASS_LIST         = [],
        X_Class_DEF_LIST           = [],\r
        X_Class_PRIVATE_CLASS_LIST = [],\r
        X_Class_PRIVATE_DEF_LIST   = [],\r
+       X_Class_CALLING_SUPER      = [],\r
+       X_Class_CALL_SUPER_STACK   = [],\r
        X_Class_killPrivateFlag    = false,\r
        X_Class_traits             = null,\r
        X_Class_useObjectCreate    = false, // !!Object.create, http://jsperf.com/prototype-vs-object-create-perf\r
@@ -458,10 +460,39 @@ function X_Class_actualConstructor( args ){
        };\r
        return instance;\r
 };\r
-\r
+/*  クラス定義を辿ってスーパークラスのコンストラクタを探す。\r
+ *  呼び出したコンストラクタは配列に控える。\r
+ *  さらに呼ばれた場合、配列を元にさらに奥のコンストラクタを取得\r
+ *  TODO 現在 new しているインスタンスを保持してチェックする\r
+ */\r
 function X_Class_superConstructor(){\r
-       var s = X_Class_getClassDef( this ).SuperConstructor;\r
-       return s && s.apply( this, arguments );\r
+       var sClass = this,\r
+               i      = X_Class_CALLING_SUPER.indexOf( sClass ),\r
+               n      = -1,\r
+               l, sList, def, sConst, ret;\r
+\r
+       if( i === -1 ){\r
+               X_Class_CALLING_SUPER[ l = X_Class_CALLING_SUPER.length ] = sClass;\r
+               X_Class_CALL_SUPER_STACK[ l ] = sList = [];\r
+       } else {\r
+               sList = X_Class_CALL_SUPER_STACK[ i ];\r
+       };\r
+       \r
+       while( sClass ){\r
+               def    = X_Class_getClassDef( sClass );\r
+               sClass = def.SuperClass;\r
+               sConst = def.SuperConstructor;\r
+               if( sConst && sList[ ++n ] !== sConst ){\r
+                       sList[ n ] = sConst;\r
+                       ret = sConst.apply( this, arguments );\r
+                       --sList.length;\r
+                       if( !sList.length ){\r
+                               X_Class_CALLING_SUPER.splice( i, 1 );\r
+                               X_Class_CALL_SUPER_STACK.splice( i, 1 );\r
+                       };\r
+                       return ret;\r
+               };\r
+       };\r
 };\r
 \r
 console.log( 'X.Core.Class' );\r
index 4f1f136..e71c638 100644 (file)
 \r
 X.Event = {\r
        COMPLETE               :  1,\r
-       SUCCESS                :  2,\r
-       ERROR                  :  3,\r
-       PROGRESS               :  4,\r
-       BEFORE_CANCEL          :  5,\r
-       CANCELED               :  6,\r
-       TIMEOUT                :  7,\r
-       BEFORE_KILL_INSTANCE   :  8,\r
-       KILL_INSTANCE          :  9,\r
-       KILL_INSTANCE_CANCELED : 10,\r
-       _LAST_EVENT            : 10\r
+       READY                  :  2,\r
+       SUCCESS                :  3,\r
+       ERROR                  :  4,\r
+       PROGRESS               :  5,\r
+       BEFORE_CANCEL          :  6,\r
+       CANCELED               :  7,\r
+       TIMEOUT                :  8,\r
+       BEFORE_KILL_INSTANCE   :  9,\r
+       KILL_INSTANCE          : 10,\r
+       KILL_INSTANCE_CANCELED : 11,\r
+       _LAST_EVENT            : 11\r
 };\r
 \r
 // ------------------------------------------------------------------------- //\r
@@ -215,7 +216,9 @@ X.EventDispatcher =
                 * @param {Array=} opt_arg3\r
                 */                     \r
                        listening : function( opt_type, opt_arg1, opt_arg2, opt_arg3 ){\r
-                               var list = this._listeners, unlistens, i, f, hash;\r
+                               var list = this._listeners,\r
+                                       unlistens, i, f, hash;\r
+                               \r
                                if( opt_type === undefined ) return !!list;\r
                                if( !list || !( list = list[ opt_type ] ) ) return false;\r
                                if( opt_arg1 === undefined ) return true;\r
@@ -274,7 +277,8 @@ function X_EventDispatcher_dispatch( e ){
        if( !type ){\r
                e = { type : type = e };\r
        };\r
-       e.target = e.target || this;\r
+       e.target        = e.target || this;\r
+       e.currentTarget = e.currentTarget || this;\r
        \r
        ++this._dispatching;\r
        \r
@@ -310,7 +314,7 @@ function X_EventDispatcher_dispatch( e ){
                if( r & X.Callback.STOP_NOW ){\r
                        sysOnly = true;\r
                };\r
-               ret |= r;\r
+               ret |= X.Type.isFinite( r ) ? r : 0;\r
        };\r
        \r
        if( ( --this._dispatching ) === 0 ){\r
@@ -358,7 +362,7 @@ function X_EventDispatcher_dispatch( e ){
  */\r
 function X_EventDispatcher_listen( type, opt_arg1, opt_arg2, opt_arg3 ){\r
        var list = this._listeners,\r
-               i, r, f;\r
+               i, raw, f;\r
        \r
        if( this._dispatching ){\r
                if( !this._reserves ) this._reserves = [];\r
@@ -373,7 +377,8 @@ function X_EventDispatcher_listen( type, opt_arg1, opt_arg2, opt_arg3 ){
                return this;\r
        };\r
        \r
-       ( !list || !list[ type ] ) && X.Type.isString( type ) && X_EventDispatcher_actualAddEvent( this, type );\r
+       raw = this._rawObject || this._ie4getRawNode && this._ie4getRawNode();\r
+       raw && ( !list || !list[ type ] ) && X.Type.isString( type ) && X_EventDispatcher_actualAddEvent( this, type, raw );\r
        \r
        if( this.listening( type, opt_arg1, opt_arg2, opt_arg3 ) ) return this;\r
 \r
@@ -398,7 +403,7 @@ function X_EventDispatcher_listen( type, opt_arg1, opt_arg2, opt_arg3 ){
  */\r
 function X_EventDispatcher_unlisten( opt_type, opt_arg1, opt_arg2, opt_arg3 ){\r
        var list = this._listeners,\r
-               _list, reserves, unlistens, i, f;\r
+               _list, reserves, unlistens, i, f, raw;\r
        if( !list ) return this;\r
        \r
        if( X.Type.isArray( opt_type ) ){\r
@@ -455,7 +460,8 @@ function X_EventDispatcher_unlisten( opt_type, opt_arg1, opt_arg2, opt_arg3 ){
                _list.splice( i, 1 );\r
                if( !_list.length ){\r
                        delete this._listeners[ opt_type ];\r
-                       X.Type.isString( opt_type ) && X_EventDispatcher_actualRemoveEvent( this, opt_type );\r
+                       raw = this._rawObject || this._ie4getRawNode && this._ie4getRawNode();\r
+                       raw && X.Type.isString( opt_type ) && X_EventDispatcher_actualRemoveEvent( this, opt_type, raw );\r
                        if( X.isEmptyObject( this._listeners ) ) delete this._listeners;\r
                };\r
        };\r
@@ -467,31 +473,29 @@ var X_EventDispatcher_actualAddEvent =
        // Days on the Moon DOM Events とブラウザの実装 \r
        // http://nanto.asablo.jp/blog/2007/03/23/1339502\r
        // Safari 2 では関数オブジェクトしか EventListener として使えませんが、Safari のナイトリービルドでは handleEvent メソッドを持つオブジェクトも EventListener として使えるようです。\r
-       X_EventDispatcher_temp.EVENT_W3C && ( X.UA.WebKit < 525.13 || X.UA.Opera7 || X.UA.NetFront < 4 ) ? // Safari3-\r
-               (function( that, type ){\r
-                       var raw = that._rawObject;\r
-                       if( !raw ) return; \r
-                       that._handleEvent = that._handleEvent || X.Callback.create( that, X_EventDispatcher_actualHandleEvent );\r
-                       type = X.Dom.Event.Rename[ type] || type;\r
-                       if( raw.addEventListener ){\r
-                               raw.addEventListener( type, that._handleEvent, false );\r
+       X_EventDispatcher_temp.EVENT_W3C /* && ( X.UA.WebKit < 525.13 || X.UA.Opera7 || X.UA.NetFront < 4 ) */ ? // Safari3-\r
+               (function( that, type, raw ){\r
+                       var i;\r
+                       \r
+                       type = X.Dom.Event.Rename[ type ] || type;\r
+                       \r
+                       if( X.Type.isArray( type ) ){\r
+                               for( i = type.length; i; ){\r
+                                       X_EventDispatcher_actualAddEvent( that, type[ --i ], raw );\r
+                               };\r
                        } else {\r
-                               // Safari は Image, Opera7 は window\r
-                               raw[ 'on' + type ] = that._handleEvent;\r
-                       };\r
-               }) :\r
-       X_EventDispatcher_temp.EVENT_W3C ?\r
-               (function( that, type ){\r
-                       if( that._rawObject ){\r
-                               that._handleEvent = that._handleEvent || X.Callback.create( that, X_EventDispatcher_actualHandleEvent );\r
-                               that._rawObject.addEventListener( X.Dom.Event.Rename[ type ] || type, that._handleEvent, false );\r
+                               that._handleEvent || ( that._handleEvent = X.Callback.create( that, X_EventDispatcher_actualHandleEvent ) );\r
+                               \r
+                               if( raw.addEventListener ){\r
+                                       raw.addEventListener( type, that._handleEvent, false );\r
+                               } else {\r
+                                       // Safari は Image, Opera7 は window\r
+                                       raw[ 'on' + type ] = that._handleEvent;\r
+                               };                              \r
                        };\r
                }) :\r
        X_EventDispatcher_temp.EVENT_IE ?\r
-               (function( that, type ){\r
-                       var raw = that._rawObject;\r
-                       if( !raw ) return;\r
-                       type = X.Dom.Event.Rename[ type ] || type;\r
+               (function( that, type, raw ){\r
                        //if( type === 'load' && that._tag && X.Dom.Event._LOAD_FIX_TAGS[ that._tag ] ){\r
                        //      type = 'readystatechange';\r
                        //};\r
@@ -499,55 +503,61 @@ var X_EventDispatcher_actualAddEvent =
                                // ie8- の XHR は window.event が更新されないため, eventType 毎に callback を指定する\r
                                raw[ 'on' + type ] = X.Callback.create( that, X_EventDispatcher_dispatch, [ type ] );\r
                        } else {\r
-                               that._handleEvent = that._handleEvent || X.Callback.create( that, X_EventDispatcher_actualHandleEvent );\r
+                               type = X.Dom.Event.Rename[ type ] || type;\r
                                \r
-                               if( raw.attachEvent ){\r
-                                       raw.attachEvent( 'on' + type, that._handleEvent );\r
-                               } else {\r
-                                       raw[ 'on' + type ] = that._handleEvent;\r
+                               if( X.Type.isArray( type ) ){\r
+                                       for( i = type.length; i; ){\r
+                                               X_EventDispatcher_actualAddEvent( that, type[ --i ], raw );\r
+                                       };\r
+                               } else{\r
+                                       that._handleEvent || ( that._handleEvent = X.Callback.create( that, X_EventDispatcher_actualHandleEvent ) );\r
+                                       \r
+                                       if( raw.attachEvent ){\r
+                                               raw.attachEvent( 'on' + type, that._handleEvent );\r
+                                       } else {\r
+                                               raw[ 'on' + type ] = that._handleEvent;\r
+                                       };                              \r
                                };                              \r
                        };\r
-\r
                }) :\r
-               (function( that, type ){\r
-                       var raw = that._rawObject || ( that._ie4getRawNode && that._ie4getRawNode() );\r
-                       if( !raw ) return;\r
-                       raw[ 'on' + ( X.Dom.Event.Rename[ type ] || type ) ] = that._handleEvent = that._handleEvent || X.Callback.create( that, X_EventDispatcher_actualHandleEvent );\r
+               (function( that, type, raw ){\r
+                       var i;\r
+                       type = X.Dom.Event.Rename[ type ] || type;\r
+                       \r
+                       if( X.Type.isArray( type ) ){\r
+                               for( i = type.length; i; ){\r
+                                       X_EventDispatcher_actualAddEvent( that, type[ --i ], raw );\r
+                               };\r
+                       } else {\r
+                               raw[ 'on' + type ] = that._handleEvent || ( that._handleEvent = X.Callback.create( that, X_EventDispatcher_actualHandleEvent ) );\r
+                       };\r
                });\r
 \r
 \r
 var X_EventDispatcher_actualRemoveEvent =\r
-       X_EventDispatcher_temp.EVENT_W3C && ( X.UA.WebKit < 525.13 || X.UA.Opera7 || X.UA.NetFront < 4 ) ? // Safari3-\r
-               (function( that, type ){\r
-                       var raw = that._rawObject;\r
-                       if( !raw ) return;\r
+       X_EventDispatcher_temp.EVENT_W3C /*&& ( X.UA.WebKit < 525.13 || X.UA.Opera7 || X.UA.NetFront < 4 )*/ ? // Safari3-\r
+               (function( that, type, raw, opt_skip ){\r
                        type = X.Dom.Event.Rename[ type ] || type;\r
                        \r
-                       if( raw.addEventListener ){ // Image\r
-                               raw.removeEventListener( type, that._handleEvent, false );\r
+                       if( X.Type.isArray( type ) ){\r
+                               for( i = type.length; i; ){\r
+                                       X_EventDispatcher_actualRemoveEvent( that, type[ --i ], raw, !!i );\r
+                               };\r
                        } else {\r
-                               raw[ 'on' + type ] = null;\r
-                       };\r
-                       if( !that._listeners ){\r
-                               X.Callback._correct( that._handleEvent );\r
-                               delete that._handleEvent;\r
-                       };\r
-               }) :\r
-       X_EventDispatcher_temp.EVENT_W3C ?\r
-               (function( that, type ){\r
-                       var raw = that._rawObject;\r
-                       if( !raw ) return;\r
-                       raw.removeEventListener( X.Dom.Event.Rename[ type ] || type, that._handleEvent, false );\r
-                       if( !that._listeners ){\r
-                               X.Callback._correct( that._handleEvent );\r
-                               delete that._handleEvent;\r
+                               if( raw.addEventListener ){ // Image\r
+                                       raw.removeEventListener( type, that._handleEvent, false );\r
+                               } else {\r
+                                       raw[ 'on' + type ] = null;\r
+                               };\r
+                               if( !opt_skip && !that._listeners ){\r
+                                       X.Callback._correct( that._handleEvent );\r
+                                       delete that._handleEvent;\r
+                               };              \r
                        };\r
                }) :\r
        X_EventDispatcher_temp.EVENT_IE ?\r
-               (function( that, type ){\r
-                       var raw = that._rawObject;\r
-                       if( !raw ) return;\r
-                       type = X.Dom.Event.Rename[ type ] || type;\r
+               (function( that, type, raw, opt_skip ){\r
+                       var i;\r
                        //if( type === 'load' && that._tag && X.Dom.Event._LOAD_FIX_TAGS[ that._tag ] ){\r
                        //      type = 'readystatechange';\r
                        //};\r
@@ -556,28 +566,41 @@ var X_EventDispatcher_actualRemoveEvent =
                                raw[ 'on' + type ] = X.emptyFunction;\r
                                raw[ 'on' + type ] = '';\r
                        } else {\r
-                               if( raw.attachEvent ){\r
-                                       raw.detachEvent( 'on' + type, that._handleEvent );\r
+                               type = X.Dom.Event.Rename[ type ] || type;\r
+                               \r
+                               if( X.Type.isArray( type ) ){\r
+                                       for( i = type.length; i; ){\r
+                                               X_EventDispatcher_actualRemoveEvent( that, type[ --i ], raw, !!i );\r
+                                       };\r
                                } else {\r
-                                       raw[ 'on' + type ] = X.emptyFunction;\r
-                                       raw[ 'on' + type ] = '';\r
+                                       if( raw.attachEvent ){\r
+                                               raw.detachEvent( 'on' + type, that._handleEvent );\r
+                                       } else {\r
+                                               raw[ 'on' + type ] = X.emptyFunction;\r
+                                               raw[ 'on' + type ] = '';\r
+                                       };\r
+                                       \r
+                                       if( !opt_skip && !that._listeners ){\r
+                                               X.Callback._correct( that._handleEvent );\r
+                                               delete that._handleEvent;\r
+                                       };\r
                                };\r
-                               \r
-                               if( !that._listeners ){\r
-                                       X.Callback._correct( that._handleEvent );\r
-                                       delete that._handleEvent;\r
-                               };                              \r
                        };\r
                }) :\r
-               (function( that, type ){\r
-                       var raw = that._rawObject || ( that._ie4getRawNode && that._ie4getRawNode() );\r
-                       if( !raw ) return;\r
+               (function( that, type, raw, opt_skip ){\r
+                       var i;\r
                        type = X.Dom.Event.Rename[ type ] || type;\r
-                       raw[ 'on' + type ] = X.emptyFunction;\r
-                       raw[ 'on' + type ] = '';\r
-                       if( !that._listeners ){\r
-                               X.Callback._correct( that._handleEvent );\r
-                               delete that._handleEvent;\r
+                       if( X.Type.isArray( type ) ){\r
+                               for( i = type.length; i; ){\r
+                                       X_EventDispatcher_actualRemoveEvent( that, type[ --i ], raw, !!i );\r
+                               };\r
+                       } else {\r
+                               raw[ 'on' + type ] = X.emptyFunction;\r
+                               raw[ 'on' + type ] = '';\r
+                               if( !opt_skip && !that._listeners ){\r
+                                       X.Callback._correct( that._handleEvent );\r
+                                       delete that._handleEvent;\r
+                               };\r
                        };\r
                });\r
 \r
@@ -586,15 +609,15 @@ var X_EventDispatcher_actualRemoveEvent =
 // Is this in regard to the Safari 1.x preventDefault bug on click/dblclick?\r
 // https://groups.google.com/forum/#!msg/comp.lang.javascript/uYEuCHjHxnw/yKoHtZJPa1QJ\r
 var X_EventDispatcher_actualHandleEvent =\r
-       X.UA.IE4 || X.UA.IE5678 ? // ie45678 EVENT_IE & EVENT_DOM0 for ie4\r
+       X.UA.IE4 || X_EventDispatcher_temp.EVENT_IE ? // ie45678 EVENT_IE & EVENT_DOM0 for ie4\r
                (function(){\r
                        var ret;\r
                        \r
-                       if( event.type === 'readystatechange' && this._tag && X.Dom.Event._LOAD_FIX_TAGS[ this._tag ] ){\r
+                       //if( event.type === 'readystatechange' && this._tag && X.Dom.Event._LOAD_FIX_TAGS[ this._tag ] ){\r
                                //type = 'readystatechange';\r
-                       };\r
+                       //};\r
                        \r
-                       ret = X_EventDispatcher_dispatch.call( this, new X.Dom.Event( event, this, this._rawObject ) );\r
+                       ret = this.dispatch( new X.Dom.Event( event, this, this._rawObject ) );\r
 \r
                        if( ret & X.Callback.STOP_PROPAGATION ){\r
                                event.cancelBubble = true;\r
@@ -606,7 +629,23 @@ var X_EventDispatcher_actualHandleEvent =
                }) :\r
        //X.Dom.EVENT_W3C & EVENT_DOM0\r
                (function( e ){\r
-                       var ret = X_EventDispatcher_dispatch.call( this, new X.Dom.Event( e, this ) );\r
+                       var ev  = new X.Dom.Event( e, this ),\r
+                               ret = X.Callback.NONE,\r
+                               i, l;\r
+                       \r
+                       // touch event -> pointer\r
+                       if( X.Type.isArray( ev ) ){\r
+                               if( ev.length === 0 ){\r
+                                       // TouchEvent の後に発生した MouseEvent のキャンセル\r
+                                       ret = X.Callback.STOP_PROPAGATION | X.Callback.PREVENT_DEFAULT;\r
+                               } else {\r
+                                       for( i = 0, l = ev.length; i < l; ++i ){\r
+                                               ret |= this.dispatch( ev[ i ] ) || 0;\r
+                                       };                              \r
+                               };\r
+                       } else {\r
+                               ret = this.dispatch( ev );\r
+                       };\r
                        \r
                        if( ret & X.Callback.STOP_PROPAGATION ){\r
                                e.stopPropagation();\r
@@ -635,24 +674,16 @@ if( X.UA.WebKit < 525.13 ){ // Safari3-
 };\r
 \r
 // イベントの退避、dom が画面から抜かれる場合に実施しておく\r
-function X_EventDispatcher_migrateEvent( that ){\r
-       var hash = that._listeners,\r
-               type;\r
-       if( !hash ) return;\r
-       for( type in hash ){\r
-               // 数字イベントの除外\r
-               '' + parseFloat( type ) !== type && X_EventDispatcher_actualRemoveEvent( that, type );\r
-       };\r
-};\r
-\r
 // 退避したイベントの復帰\r
-function X_EventDispatcher_restoreEvent( that ){\r
+function X_EventDispatcher_toggleAllEvents( that, add ){\r
        var hash = that._listeners,\r
+               raw  = that._rawObject || that._ie4getRawNode && that._ie4getRawNode(),\r
+               f    = add ? X_EventDispatcher_actualAddEvent : X_EventDispatcher_actualRemoveEvent,\r
                type;\r
-       if( !hash ) return;\r
+       if( !hash || !raw ) return;\r
        for( type in hash ){\r
                // 数字イベントの除外\r
-               '' + parseFloat( type ) !== type && X_EventDispatcher_actualAddEvent( that, type );\r
+               '' + parseFloat( type ) !== type && f( that, type, raw );\r
        };\r
 };\r
 \r
index 1f6386b..9355f21 100644 (file)
@@ -238,8 +238,6 @@ X.Dom = X.Class._override(
                _getSize :\r
                        X.UA.IE ?\r
                                new Function( 'return[X.Dom._root.clientWidth,X.Dom._root.clientHeight]' ) :\r
-                       4 <= X.UA.iOS ?\r
-                               new Function( 'return[window.innerWidth,window.innerHeight]' ) :\r
                                new Function( 'return[window.innerWidth,window.innerHeight]' ),\r
                \r
                getSize : function(){\r
@@ -345,35 +343,7 @@ if( document.layers ){
 X.Dom.EVENT_POINTER = navigator.msPointerEnabled || navigator.pointerEnabled;\r
 X.Dom.EVENT_TOUCH   = !X.Dom.EVENT_POINTER && window.ontouchstart !== undefined;\r
 \r
-X.Dom.moveToHead = {\r
-       STYLE   : true,\r
-       LINK    : true,\r
-       TITLE   : true,\r
-       BGSOUND : true,\r
-       AREA    : true,\r
-       BASE    : true,\r
-       META    : true\r
-};\r
 \r
-X.Dom.cleanupTagNames = {\r
-               SCRIPT   : true,\r
-               NOSCRIPT : true,\r
-               NOFRAMES : true,\r
-               '!'      : true, // ie\r
-               COMMENT  : true, // ie\r
-               NOEMBED  : true,\r
-               NOLAYER  : true\r
-       };\r
-X.Dom.skipCleanupTagNames = {\r
-       PRE       : true,\r
-       TEXTAREA  : true,\r
-       CODE      : true,\r
-       KBD       : true,\r
-       SAMP      : true,\r
-       XMP       : true,\r
-       PLAINTEXT : true,\r
-       LISTING   : true\r
-};\r
 \r
 X.Dom.CRLF = String.fromCharCode( 13 ) + String.fromCharCode( 10 );\r
                \r
@@ -435,7 +405,7 @@ X.Dom.getAbsolutePath = function( path ){
                ss = '//',\r
                _ary, ary, i = 0;\r
 \r
-       if( 'http:file'.indexOf( path.substr( 0, 4 ) ) !== -1 ) return path;\r
+       if( 'http:file:https:'.indexOf( path.substr( 0, 4 ) ) !== -1 ) return path;\r
        \r
        _ary = X.Dom.baseURL.split( ss );\r
        ary  = _ary[ 1 ].split( s );\r
index 894427b..07c2432 100644 (file)
@@ -1,4 +1,5 @@
 \r
+/* なんで */\r
 X.Dom.DTD = {\r
        \r
        EMPTY : {\r
@@ -42,4 +43,33 @@ X.Dom.DTD = {
        }\r
 };\r
 \r
+X.Dom.moveToHead = {\r
+       STYLE   : true,\r
+       LINK    : true,\r
+       TITLE   : true,\r
+       BGSOUND : true,\r
+       AREA    : true,\r
+       BASE    : true,\r
+       META    : true\r
+};\r
+\r
+X.Dom.cleanupTagNames = {\r
+       SCRIPT   : true,\r
+       NOSCRIPT : true,\r
+       NOFRAMES : true,\r
+       '!'      : true, // ie\r
+       COMMENT  : true, // ie\r
+       NOEMBED  : true,\r
+       NOLAYER  : true\r
+};\r
 \r
+X.Dom.skipCleanupTagNames = {\r
+       PRE       : true,\r
+       TEXTAREA  : true,\r
+       CODE      : true,\r
+       KBD       : true,\r
+       SAMP      : true,\r
+       XMP       : true,\r
+       PLAINTEXT : true,\r
+       LISTING   : true\r
+};\r
index 4c443e1..ff29163 100644 (file)
@@ -1303,7 +1303,7 @@ Node.prototype._afterActualCreate =
                };\r
                // src の onload があるので先ではないか?\r
                // ie の str から要素を作る場合、srcだけ イベント設定後ではないか?\r
-               X_EventDispatcher_restoreEvent( this );// イベントの復帰\r
+               X_EventDispatcher_toggleAllEvents( this, true );// イベントの復帰\r
        }) :\r
        X.Dom.DOM_IE4 ? (function(){\r
                var xnodes, i;\r
@@ -1321,7 +1321,7 @@ Node.prototype._afterActualCreate =
                        this._ie4getRawNode().style.filter = X.Dom.Style.SPECIAL_FIX( this._css );\r
                };\r
                delete this._dirty;\r
-               X_EventDispatcher_restoreEvent( this );// イベントの復帰\r
+               X_EventDispatcher_toggleAllEvents( this, true );// イベントの復帰\r
        }) :\r
        (function(){});\r
 \r
@@ -1339,7 +1339,7 @@ Node.prototype._actualRemove =
                        };\r
 \r
                        if( !elm ) return;\r
-                       this._xnodeType === 1 && X_EventDispatcher_migrateEvent( this );// イベントの退避\r
+                       this._xnodeType === 1 && X_EventDispatcher_toggleAllEvents( this, false );// イベントの退避\r
                        // elm.parentNode.tagName for ie7\r
                        if( !X.UA.MacIE ){\r
                                !isChild && elm.parentNode && elm.parentNode.tagName && elm.parentNode.removeChild( elm );\r
@@ -1359,7 +1359,7 @@ Node.prototype._actualRemove =
                        };\r
 \r
                        if( !elm ) return;\r
-                       this._xnodeType === 1 && X_EventDispatcher_migrateEvent( this );// イベントの退避\r
+                       this._xnodeType === 1 && X_EventDispatcher_toggleAllEvents( this, false );// イベントの退避\r
                        \r
                        if( X.Dom.Attr.HAS_VALUE[ this._tag ] && ( !this._newAttrs || !X.inObject( 'value', this._newAttrs ) ) ){\r
                                this._attrs.value = elm.value;\r
index fd81b01..183090e 100644 (file)
  * http://d.hatena.ne.jp/uupaa/20100430/1272561922\r
  * event.offsetX と offsetY の互換性について\r
  * \r
+ * http://www.keynavi.net/ja/tipsj/gokan.html\r
+ * Safari : マウスイベントは大丈夫ですが ページ全体に対するキーイベントをきちんと扱えない問題があります。 \r
+ * その他、リンクに対するフォーカス(element.focus())の動作がおかしい、 スクリーン上のマウス位置(event.screenX/Y)をブラウザ画面の 左下隅から計算する などの問題があり修正が待たれます。 \r
+ * \r
  */\r
 \r
+// http://msdn.microsoft.com/ja-jp/library/ie/dn255104%28v=vs.85%29.aspx\r
+var X_Dom_Event_devicePixelRatio = window.devicePixelRatio || ( window.screen.deviceXDPI / window.screen.logicalXDPI ),\r
+       X_Dom_Event_convertMSPointerType = window.MSPointerEvent && {\r
+               2 : 'touch',\r
+               3 : 'pen',\r
+               4 : 'mouse'\r
+       };\r
+\r
 if( !X.UA.IE || 9 <= X.UA.IE ){\r
        X.Dom.Event = function( e, xnode ){\r
-               var touch0;\r
-               //this._event        = e;\r
-               this.type          = X.Dom.Event.RenameTo[ e.type ] || e.type;\r
-               \r
-               //http://www.quirksmode.org/js/events_properties.html\r
-               if( e.target ){\r
-                       this.target        = Node._getXNode( e.target.nodeType === 3 ? e.target.parentNode : e.target );// defeat Safari bug // xnode\r
-               };\r
-               if( e.relatedTarget ){\r
-                       this.relatedTarget = Node._getXNode( e.relatedTarget.nodeType === 3 ? e.relatedTarget.parentNode : e.relatedTarget ); // xnode\r
-               };\r
-               \r
-               this.currentTarget = xnode; // xnode\r
-               this.eventPhase    = e.eventPhase;\r
-               \r
-               this.clientX       = e.clientX;\r
-               this.clientY       = e.clientY;\r
-               //this.screenX       = e.screenX;\r
-               //this.screenY       = e.screenY;\r
-               this.pageX         = e.pageX;\r
-               this.pageY         = e.pageY;\r
-               this.offsetX       = e.offsetX || e.layerX || 0; // 要素上の座標を取得 \r
-               this.offsetY       = e.offsetY || e.layerY || 0;\r
-               \r
-               this.keyCode       = e.keyCode;\r
-               this.altKey        = e.altKey;\r
-               this.ctrlKey       = e.ctrlKey;\r
-               this.shiftKey      = e.shiftKey;\r
-               \r
-               // http://www.programming-magic.com/20090127231544/\r
-               this.which         = e.which || ( e.button + 1 ); // 左:1, 中:2, 右:3\r
-               this.button        = e.button;\r
+               var _type = e.type,\r
+                       type,\r
+                       changedTouches, targetTouches, targetIDs, changedTargets, isEnd,\r
+                       altKey, ctrlKey, metaKey, shiftKey, target, related,\r
+                       i, n, time, touch, ev;\r
                \r
-               // https://developer.mozilla.org/ja/docs/DOM/DOM_event_reference/mousewheel\r
+               //this._event        = e;\r
+               this.type          = type = X.Dom.Event.RenameTo[ _type ] || _type;\r
                \r
-               // TODO\r
-               // axis\r
-               // https://w3g.jp/blog/tools/wheelevent_crossbrowser\r
-               // ホイール系イベント2014年版クロスブラウザ\r
-               if( e.deltaY !== undefined ){\r
-                       this.deltaX = e.deltaX;\r
-                       this.deltaY = e.deltaY;\r
-               } else\r
-               if( e.wheelDeltaY !== undefined ){\r
-                       this.deltaX = e.wheelDeltaX / 120;\r
-                       this.deltaY = e.wheelDeltaY / 120;\r
-               } else\r
-               if( e.wheelDelta !== undefined ){\r
-                       this.deltaX = 0;\r
-                       this.deltaY = e.wheelDelta / -120;\r
+               // http://msdn.microsoft.com/ja-jp/library/ie/dn304886%28v=vs.85%29.aspx\r
+               // ポインター イベントの更新\r
+               if( e.pointerType ){\r
+                       // PointerEvent;\r
+                       if( X_Dom_Event_convertMSPointerType ){\r
+                               this.pointerType   = X_Dom_Event_convertMSPointerType[ e.pointerType ];\r
+                               this.pressure      = e.pressure || ( e.button !== -1 ? 0.5 : 0 );\r
+                               // ポインターの接触形状の スクリーン ピクセル単位の幅と高さ なので変換。(多分、、、)\r
+                               this.width         = e.width  / X_Dom_Event_devicePixelRatio;\r
+                               this.height        = e.height / X_Dom_Event_devicePixelRatio;                   \r
+                       } else {\r
+                               this.pointerType   = e.pointerType;\r
+                               this.pressure      = e.pressure;\r
+                               // ポインターの接触形状の CSS ピクセル単位の幅と高さ。\r
+                               this.width         = e.width;\r
+                               this.height        = e.height;\r
+                       };\r
+\r
+                       switch( this.pointerType ){\r
+                               case 'pen' :\r
+                                       //Y-Z 平面と、ペンの軸が含まれる平面の間の角度を返します。Y 軸の範囲は -90 ~ +90 です。X の傾きの正の方向は右方向です。\r
+                                       this.tiltX         = e.tiltX;\r
+                                       this.tiltY         = e.tiltY;\r
+                                       if( _type === 'MSPointerHover' ){\r
+                                               this.type = 'pointermove'; // ie10 には pointerhover と pointermoveがあり、ie11 で一本化。ie11 では buttons を見て hover 状態を判定\r
+                                       };\r
+                               case 'touch' :\r
+                                       this.radiusX       = e.radiusX;\r
+                                       this.radiusY       = e.radiusY;\r
+                                       this.rotationAngle = e.rotationAngle;\r
+                               case 'mouse' :\r
+                       };\r
+                       \r
+                       this.button        = e.button;\r
+                       this.buttons       = e.buttons;\r
+                                               \r
+                       this.pointerId     = e.pointerId;                       \r
+                       this.target        = Node._getXNode( e.target );\r
+                       this.relatedTarget = Node._getXNode( e.relatedTarget ); // xnode\r
+                       this.isPrimary     = e.isPrimary;\r
+                       this.hwTimestamp   = e.hwTimestamp;\r
+                       this.timestamp     = e.timestamp;\r
+\r
+                       this.altKey        = e.altKey;\r
+                       this.ctrlKey       = e.ctrlKey;\r
+                       this.metaKey       = e.metaKey;\r
+                       this.shiftKey      = e.shiftKey;\r
+                       //this.screenX       = touch.screenX;\r
+                       //this.screenY       = touch.screenY;\r
+                       this.clientX       = e.clientX;\r
+                       this.clientY       = e.clientY;\r
+                       this.pageX         = e.pageX;\r
+                       this.pageY         = e.pageY;\r
+                       this.offsetX       = e.offsetX;\r
+                       this.offsetY       = e.offsetY;\r
                } else\r
-               if( e.detail !== undefined ){\r
-                       this.deltaX = 0;\r
-                       this.deltaY = e.type === 'MozMousePixelScroll' ? e.detail / 45 : e.detail / 3; // 3\r
+               if( X.Dom.Event.toPointer[ _type ] ){\r
+                       // Touch or Mouse\r
+                       \r
+                       /* e.constructor === window.TouchEvent -> e.touches for iOS3.13 */\r
+                       if( touches  = e.changedTouches ){\r
+                               if( touches.length === 0 ){\r
+                                       alert( 'e.changedTouches.length === 0' );\r
+                               };\r
+                               xnode._cancelMouse = type;\r
+                               \r
+                               events   = [];\r
+                               altKey   = e.altKey;\r
+                               ctrlKey  = e.ctrlKey;\r
+                               metaKey  = e.metaKey;\r
+                               shiftKey = e.shiftKey;\r
+                               time     = X.getTime();\r
+                               for( i = touches.length; i; ){\r
+                                       touch   = touches[ --i ];\r
+                                       target  = touch.target;\r
+                                       related = touch.relatedTarget;\r
+                                       events[ i ] = {\r
+                                               type          : type,\r
+                                               pointerType   : 'touch',\r
+                                               target        : Node._getXNode( target.nodeType === 3 ? target.parentNode : target ),// defeat Safari bug // xnodetouch.target,\r
+                                               currentTarget : xnode,\r
+                                               relatedTarget : Node._getXNode( related.nodeType === 3 ? related.parentNode : related ), // xnode\r
+                                               isPrimary     : true,\r
+                                               hwTimestamp   : time,\r
+                                               timestamp     : time,\r
+                                               buttons       : e.button,\r
+                                               buttons       : e.buttons || e.button,\r
+                                               altKey        : altKey,\r
+                                               ctrlKey       : ctrlKey,\r
+                                               metaKey       : metaKey,\r
+                                               shiftKey      : shiftKey,\r
+                                               pointerId     : touch.identifier + 2,\r
+                                               //screenX       : touch.screenX,\r
+                                               //screenY       : touch.screenY,\r
+                                               clientX       : touch.clientX,\r
+                                               clientY       : touch.clientY,\r
+                                               pageX         : touch.pageX,\r
+                                               pageY         : touch.pageY,\r
+                                               offsetX       : touch.offsetX, // 要素上の座標を取得 \r
+                                               offsetY       : touch.offsetY,\r
+                                               radiusX       : touch.radiusX || 0,\r
+                                               radiusY       : touch.radiusY || 0,\r
+                                               rotationAngle : touch.rotationAngle || 0,\r
+                                               pressure      : touch.force || touch.webkitForce || ( isEnd ? 0 : 0.5 ),\r
+                                               width         : touch.width || 0,\r
+                                               height        : touch.height || 0\r
+                                       };\r
+                               };\r
+                               return events.length === 1 ? events[ 0 ] : events;\r
+                       } else {\r
+                               \r
+                               if( xnode._cancelMouse === type ){\r
+                                       delete xnode._cancelMouse;\r
+                                       return [];\r
+                               };\r
+                               \r
+                               // MouseEvent;\r
+                               this.type          = type;\r
+                               this.pointerType   = 'mouse';\r
+                               \r
+                       // http://www.programming-magic.com/20090127231544/\r
+                       // TODO Opera で button==2の場合、コンテキストメニューイベントを発火 「ツール」->「設定」->「詳細設定」->「コンテンツ」->「Javascriptオプション」で「右クリックを制御するスクリプトを許可する」\r
+                               this.button        = e.button !== undefined ? e.button :\r
+                                                                        e.which !== undefined ? e.which - 1 : -1;\r
+                               this.buttons       = e.buttons !== undefined ? e.buttons : this.button === 0 ? 1 : this.button === 1 ? 2 : this.button === 2 ? 4 : 0;\r
+                               this.pressure      = ( this.button !== -1 ? 0.5 : 0 );\r
+                               \r
+                               elm = e.target;\r
+                               this.target        = Node._getXNode( elm.nodeType === 3 ? elm.parentNode : elm );// defeat Safari bug // xnodetouch.target;\r
+                               this.isPrimary     = true;\r
+                               this.hwTimestamp   = this.timestamp = X.getTime(); \r
+                               this.altKey        = e.altKey;\r
+                               this.ctrlKey       = e.ctrlKey;\r
+                               this.metaKey       = e.metaKey;\r
+                               this.shiftKey      = e.shiftKey;\r
+                               this.pointerId     = 1;\r
+                               //this.screenX       = touch.screenX;\r
+                               //this.screenY       = touch.screenY;\r
+                               // TODO http://uupaa-js.googlecode.com/svn-history/r8/trunk/doc/reference/symbols/src/trunk_uu.module.ui.js.html\r
+                               // Safari2ではclientX,YはpageX,Yと同じ値を返す\r
+                               this.clientX       = e.clientX;\r
+                               this.clientY       = e.clientY;\r
+                               this.pageX         = e.pageX;\r
+                               this.pageY         = e.pageY;\r
+                               this.offsetX       = e.offsetX || e.layerX; // 要素上の座標を取得 \r
+                               this.offsetY       = e.offsetY || e.layerY;\r
+                       };\r
                } else {\r
-                       this.deltaX = this.deltaY = 0;\r
-               };\r
-               \r
-               if( /* e.constructor === window.TouchEvent || */ e.touches /* for iOS3.13 */ ){\r
-                       // TouchEvent\r
-                       this.touches        = e.touches;\r
-                       this.changedTouches = e.changedTouches;\r
-                       this.targetTouches  = e.targetTouches;\r
-                       this.metaKey        = e.metaKey;\r
-                       this.force          = e.force || e.webkitForce || 0;\r
-                       //\r
-                       if( this.touches.length ){\r
-                               touch0             = this.touches[ 0 ];\r
-                               this.clientX       = touch0.clientX;\r
-                               this.clientY       = touch0.clientY;\r
-                               this.pageX         = touch0.pageX;\r
-                               this.pageY         = touch0.pageY;\r
-                               this.offsetX       = touch0.offsetX || touch0.layerX;\r
-                               this.offsetY       = touch0.offsetY || touch0.layerY;\r
+                       // Other\r
+                       \r
+                       this.keyCode       = e.keyCode || e.which;\r
+                       this.altKey        = e.altKey;\r
+                       this.ctrlKey       = e.ctrlKey;\r
+                       this.shiftKey      = e.shiftKey;\r
+                       this.metaKey       = e.metaKey;\r
+                       \r
+                       this.button        = e.button !== undefined ? e.button :\r
+                                                                e.which !== undefined ? e.which - 1 : -1;\r
+                       this.buttons       = e.buttons !== undefined ? e.buttons : this.button === 0 ? 1 : this.button === 1 ? 2 : this.button === 2 ? 4 : 0;\r
+                       \r
+                       //http://www.quirksmode.org/js/events_properties.html\r
+                       if( elm = e.target ){\r
+                               this.target        = Node._getXNode( elm.nodeType === 3 ? elm.parentNode : elm );// defeat Safari bug // xnode\r
                        };\r
-               } else\r
-               if( e.constructor === window.PointerEvent ){\r
-                       // PointerEvent;\r
-                       this.currentPoint  = e.currentPoint;\r
-                       this.width         = e.width;\r
-                       this.height        = e.height;\r
-                       this.timeStamp     = e.timeStamp;\r
-                       this.hwTimestamp   = e.hwTimestamp;\r
-                       this.intermediatePoints = e.intermediatePoints;\r
-                       this.isPrimary     = e.isPrimary;\r
-                       this.pointerId     = e.pointerId;\r
-                       this.pointerType   = e.pointerType;\r
-                       this.pressure      = e.pressure;\r
-                       this.tiltX         = e.tiltX;\r
-                       this.tiltY         = e.tiltY;\r
+                       if( elm = e.relatedTarget ){\r
+                               this.relatedTarget = Node._getXNode( elm.nodeType === 3 ? elm.parentNode : elm ); // xnode\r
+                       };\r
+                       \r
+                       if( type === 'wheel' ){\r
+                               // https://developer.mozilla.org/ja/docs/DOM/DOM_event_reference/mousewheel\r
+                               // TODO axis\r
+                               // https://w3g.jp/blog/tools/wheelevent_crossbrowser\r
+                               // ホイール系イベント2014年版クロスブラウザ\r
+                               if( e.deltaY !== undefined ){\r
+                                       this.deltaX = e.deltaX;\r
+                                       this.deltaY = e.deltaY;\r
+                                       this.deltaZ = e.deltaZ;\r
+                               } else\r
+                               if( e.wheelDeltaY !== undefined ){\r
+                                       this.deltaX = e.wheelDeltaX / 120;\r
+                                       this.deltaY = e.wheelDeltaY / 120;\r
+                                       this.deltaZ = e.wheelDeltaZ / 120 || 0;\r
+                               } else\r
+                               if( e.wheelDelta !== undefined ){\r
+                                       this.deltaX = this.deltaZ = 0;\r
+                                       this.deltaY = e.wheelDelta / -120;\r
+                               } else\r
+                               if( e.detail !== undefined ){\r
+                                       this.deltaX = this.deltaZ = 0;\r
+                                       this.deltaY = _type === 'MozMousePixelScroll' ? e.detail / 45 : e.detail / 3; // 3\r
+                               } else {\r
+                                       this.deltaX = this.deltaY = this.deltaZ = 0;\r
+                               };\r
+                       };                                                      \r
                };\r
-       };\r
-       if( !window.PointerEvent && window.MSPointerEvent ){\r
-               window.PointerEvent = window.MSPointerEvent;\r
+\r
+               this.currentTarget = xnode; // xnode\r
+               this.eventPhase    = e.eventPhase;\r
+               this.detail        = e.detail;\r
+               \r
        };\r
 } else {\r
-       X.Dom.Event = function( e, xnode, element, opt_type ){\r
+       X.Dom.Event = function( e, xnode, element ){\r
                var btn;\r
                \r
-               //this._event        = e;\r
-               this.type          = X.Dom.Event.RenameTo[ e.type ] || e.type || opt_type;\r
+               this.type          = X.Dom.Event.RenameTo[ e.type ] || e.type;\r
                this.target        = Node._getXNode( e.srcElement ); // xnode\r
                if( this.target && this.target._xnodeType === 3 ) this.target = this.target.parent; // ie4 の fake Textnode がヒットしていないか?\r
                this.currentTarget = xnode; // xnode\r
-               this.relatedTarget = Node._getXNode( e.formElement ? e.formElement : e.toElement ); // xnode\r
+               this.relatedTarget = Node._getXNode( e.formElement || e.toElement ); // xnode\r
                this.eventPhase    = e.srcElement === element ? 2: 3;\r
                \r
-               this.clientX       = e.clientX;\r
-               this.clientY       = e.clientY;\r
-               //this.screenX       = e.screenX;\r
-               //this.screenY       = e.screenY;\r
-               \r
-               if( X.Dom._root ){ // uuu...\r
-                       \r
-                       this.pageX         = e.clientX + X.Dom._root.scrollLeft;\r
-                       this.pageY         = e.clientY + X.Dom._root.scrollTop;\r
-                       \r
-                       // DOMAssistant 2.8.1\r
-                       //event.pageX = DOMAssistant.def(e.pageX)? e.pageX : (event.clientX + (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0));\r
-                       //event.pageY = DOMAssistant.def(e.pageY)? e.pageY : (event.clientY + (de.scrollTop || b.scrollTop) - (de.clientTop || 0));                                                     \r
-               };\r
-               \r
-\r
-               \r
-               if( 5 <= X.UA.IE ){\r
-                       this.offsetX       = e.offsetX; // イベントターゲット左上からの座標\r
-                       this.offsetY       = e.offsetY;                 \r
-               }// else\r
-               //if( e.srcElement ){\r
-               //      this.offsetX       = e.x - e.srcElement.offsetLeft; // e.x はイベント発生要素の親要素を基準にした座標。\r
-               //      this.offsetY       = e.y - e.srcElement.offsetTop;      \r
-               //};\r
-               \r
                this.keyCode       = e.keyCode;\r
                this.altKey        = e.altKey;\r
                this.ctrlKey       = e.ctrlKey;\r
-               this.shiftKey      = e.shiftKey;\r
-               \r
+               this.shiftKey      = e.shiftKey;                \r
+\r
                // http://www.programming-magic.com/20090127231544/\r
                switch( this.type ){\r
                        case 'click'    :\r
                        case 'dblclick' :\r
-                               this.which = 1;\r
+                               this.button = 0;\r
                                break;\r
                        case 'contextmenu' :\r
-                               this.which = 3;\r
+                               this.button = 2;\r
                                break;\r
                        default :\r
+                               // mouseup, mousedown\r
                                btn = e.button;\r
-                               this.which =\r
-                                       btn & 1 ? 1 :\r
+                               this.button =\r
+                                       btn & 1 ? 0 :\r
                                        btn & 4 ? 2 :\r
-                                       btn & 2 ? 3 : 0; // 左:1(click:0), 中:4, 右:2\r
+                                       btn & 2 ? 1 : -1; // 左:1(click:0), 中:4, 右:2\r
+                               \r
+               };\r
+               this.buttons     = e.button;\r
+       \r
+               if( type = X.Dom.Event.toPointer[ e.type ] ){\r
+                       this.type          = type;\r
+                       this.clientX       = e.clientX;\r
+                       this.clientY       = e.clientY;\r
+                       //this.screenX       = e.screenX;\r
+                       //this.screenY       = e.screenY;\r
+                       \r
+                       //if( X.Dom._root ){ // uuu...\r
+                               this.pageX         = e.clientX + X.Dom._root.scrollLeft;\r
+                               this.pageY         = e.clientY + X.Dom._root.scrollTop;\r
+                               // DOMAssistant 2.8.1\r
+                               //event.pageX = DOMAssistant.def(e.pageX)? e.pageX : (event.clientX + (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0));\r
+                               //event.pageY = DOMAssistant.def(e.pageY)? e.pageY : (event.clientY + (de.scrollTop || b.scrollTop) - (de.clientTop || 0));                                                     \r
+                       //};\r
+\r
+                       if( 5 <= X.UA.IE ){\r
+                               this.offsetX       = e.offsetX; // イベントターゲット左上からの座標\r
+                               this.offsetY       = e.offsetY;                 \r
+                       }// else\r
+                       //if( e.srcElement ){\r
+                       //      this.offsetX       = e.x - e.srcElement.offsetLeft; // e.x はイベント発生要素の親要素を基準にした座標。\r
+                       //      this.offsetY       = e.y - e.srcElement.offsetTop;      \r
+                       //};\r
+\r
+                       this.deltaX      = 0;\r
+                       this.deltaY      = e.wheelDelta / -120;\r
+                       \r
+                       this.pointerId     = 1;\r
+                       this.radiusX       = 0;\r
+                       this.radiusY       = 0;\r
+                       this.rotationAngle = 0;\r
+                       this.width         = 0;\r
+                       this.height        = 0;\r
+                       this.tiltX         = 0;\r
+                       this.tiltY         = 0;\r
                };\r
-               this.button      = this.which - 1;\r
-               this.deltaX      = 0;\r
-               this.deltaY      = e.wheelDelta / -120;\r
-               \r
-               if( this.type === 'wheel' ) console.log( e.wheelDelta );\r
        };\r
 };\r
 \r
@@ -203,28 +338,52 @@ X.Dom.Event._LOAD_FIX_TAGS = {
        //LINK   : true\r
 };\r
 \r
-X.Dom.Event.Rename = {};\r
-X.Dom.Event.RenameTo = {};\r
+X.Dom.Event.Rename    = {};\r
+X.Dom.Event.RenameTo  = {};\r
+X.Dom.Event.toPointer = !X.Dom.EVENT_POINTER && ( X.Dom.EVENT_TOUCH ?\r
+       {\r
+               touchdown   : 'pointerdown',\r
+               mousedown   : 'pointerdown',\r
+               touchup     : 'pointerup', \r
+               mouseup     : 'pointerup',\r
+               touchmove   : 'pointermove',\r
+               mousemove   : 'pointermove',\r
+               touchcancel : 'pointercancel',\r
+               contextmenu : 'contextmenu',\r
+               dbclick     : 'dbclick',\r
+               click       : 'click',\r
+               tap         : 'click'\r
+       } :\r
+       {\r
+               mousedown   : 'pointerdown',\r
+               mouseup     : 'pointerup',\r
+               mousemove   : 'pointermove',\r
+               contextmenu : 'contextmenu',\r
+               dbclick     : 'dbclick',\r
+               click       : 'click'\r
+       });\r
+\r
+\r
 // https://github.com/georgeadamson/jQuery.prefixfree-events/blob/master/jQuery.prefixfree-events.js\r
 // https://developer.mozilla.org/en-US/docs/Web/Events/wheel\r
 //\r
 if( document.onwheel === undefined ){\r
        // DOMMoseScroll\r
        if( X.UA.Gecko && window.MouseScrollEvent ){\r
-               if( 2 <= X.UA.Gecko || ( 1.9 < X.UA.Gecko && 1 <= X.UA.GeckoPatch ) ){ // Gecko 1.9.1+ (firefox3.5+)\r
+               if( 2 <= X.UA.Gecko || ( 1.9 <= X.UA.Gecko && 1 <= X.UA.GeckoPatch ) ){ // Gecko 1.9.1+ (firefox3.5+)\r
                        console.log( 'wheel <= MozMousePixelScroll' );\r
                        X.Dom.Event.Rename[ 'wheel' ] = 'MozMousePixelScroll';\r
                } else\r
-               if( 0.9 < X.UA.Gecko && 7 <= X.UA.GeckoPatch ){ // Gecko 0.9.7+ (NN6.2+?)\r
+               if( 1 <= X.UA.Gecko || ( 0.9 <= X.UA.Gecko && 7 <= X.UA.GeckoPatch ) ){ // Gecko 0.9.7+ (NN6.2+?)\r
                        console.log( 'wheel <= DOMMouseScroll' );\r
                        X.Dom.Event.Rename[ 'wheel' ] = 'DOMMouseScroll';\r
                };\r
        } else {\r
                X.Dom.Event.Rename[ 'wheel' ] = 'mousewheel';\r
        };\r
-       if( document.onmousewheel !== undefined ){ // Opera で判定失敗\r
-               X.Dom.Event.Rename[ 'wheel' ] = 'mousewheel';\r
-       };\r
+       //if( document.onmousewheel !== undefined ){ // Opera で判定失敗する\r
+       //      X.Dom.Event.Rename[ 'wheel' ] = 'mousewheel';\r
+       //};\r
 };\r
 \r
 \r
@@ -276,18 +435,43 @@ if( window.onmoztransitionend !== undefined && window.ontransitionend === undefi
        X.Dom.Event.Rename[ 'transitionend' ]    = 'mozTransitionEnd';\r
 };\r
 \r
-\r
-if( navigator.msPointerEnabled && !navigator.pointerEnabled ){\r
-       console.log( 'pointerdown <= MSPointerDown' );\r
-       X.Dom.Event.Rename[ 'pointerdown'     ] = 'MSPointerDown';\r
-       X.Dom.Event.Rename[ 'pointerup'       ] = 'MSPointerUp';\r
-       X.Dom.Event.Rename[ 'pointermove'     ] = 'MSPointerMove';\r
-       X.Dom.Event.Rename[ 'pointercancel'   ] = 'MSPointerCancel';\r
+if( !navigator.pointerEnabled ){\r
+       if( navigator.msPointerEnabled ){\r
+               console.log( 'pointerdown <= MSPointerDown' );\r
+               X.Dom.Event.Rename[ 'pointerdown'     ] = 'MSPointerDown';\r
+               X.Dom.Event.Rename[ 'pointerup'       ] = 'MSPointerUp';\r
+               X.Dom.Event.Rename[ 'pointermove'     ] = [ 'MSPointerMove', 'MSPointerHover' ];// ie10 と ie11 でペンのhoverevent の値が異なる\r
+               X.Dom.Event.Rename[ 'pointercancel'   ] = 'MSPointerCancel';\r
+               // http://msdn.microsoft.com/ja-jp/library/ie/dn304886%28v=vs.85%29.aspx\r
+       } else\r
+       if( X.Dom.EVENT_TOUCH ){\r
+               X.Dom.Event.Rename[ 'pointerdown'     ] = [ 'touchdown', 'mousedown' ];\r
+               X.Dom.Event.Rename[ 'pointerup'       ] = [ 'touchup',   'mouseup' ];\r
+               X.Dom.Event.Rename[ 'pointermove'     ] = [ 'touchmove', 'mousemove' ];\r
+               X.Dom.Event.Rename[ 'pointercancel'   ] = 'touchcancel';\r
+               X.Dom.Event.Rename[ 'click'           ] = [ 'click', 'tap' ];\r
+       } else {\r
+               X.Dom.Event.Rename[ 'pointerdown'     ] = 'mousedown';\r
+               X.Dom.Event.Rename[ 'pointerup'       ] = 'mouseup';\r
+               X.Dom.Event.Rename[ 'pointermove'     ] = 'mousemove';\r
+               X.Dom.Event.Rename[ 'pointercancel'   ] = 'mouseleave';//??\r
+               // Opera\r
+               // X.Dom.Event.Rename[ 'contextmenu'     ] = 'mousedown'; button==2 の場合\r
+       };\r
 };\r
 \r
+\r
 (function( rename, renameTo ){\r
-       for( var k in rename ){\r
-               renameTo[ rename[ k ] ] = k;\r
+       var k, name, i;\r
+       for( k in rename ){\r
+               name = rename[ k ];\r
+               if( X.Type.isArray( name ) ){\r
+                       for( i = name.length; i; ){\r
+                               renameTo[ name[ --i ] ] = k;\r
+                       };\r
+               } else {\r
+                       renameTo[ name ] = k;\r
+               };\r
        };\r
 })( X.Dom.Event.Rename, X.Dom.Event.RenameTo );\r
 \r
@@ -308,14 +492,14 @@ if( X.Dom.EVENT_W3C ){
 if( 6 <= X.UA.IE && X.inHead ){\r
        // if this script in Head\r
        document.write( "<script id=__ie_onload defer src=javascript:void(0)><\/script>" );\r
-       X.Dom._script = document.getElementById( "__ie_onload" );\r
-       X.Dom._script.onreadystatechange = function(){\r
-               var s = X.Dom._script;\r
+       X_TEMP._script = document.getElementById( "__ie_onload" );\r
+       X_TEMP._script.onreadystatechange = function(){\r
+               var s = X_TEMP._script;\r
                if( s && s.readyState === 'complete' ){\r
                        s.onreadystatechange = X.emptyFunction;\r
                        s.onreadystatechange = null;\r
                        s.parentNode.removeChild( s );\r
-                       delete X.Dom._script;\r
+                       delete X_TEMP._script;\r
                        X.Dom._init && X.Dom._init();\r
                };\r
        };\r
@@ -323,9 +507,9 @@ if( 6 <= X.UA.IE && X.inHead ){
 // Re: onLoad doesn't work with Safari?\r
 // http://lists.apple.com/archives/web-dev/2003/Oct/msg00036.html\r
 if( X.UA.WebKit || X.UA.Safari < 3 ){ // sniff\r
-       X.Timer.add( 10, function(){\r
+       X.Timer.add( 16, function(){\r
                if( !X.Dom._init ) return X.Callback.UN_LISTEN;\r
-               if( 'loaded|complete'.indexOf( document.readyState ) !== -1 ) return X.Dom._init();\r
+               if( document.readyState === 'loaded' || document.readyState === 'complete' ) return X.Dom._init();\r
        });\r
 };\r
 \r
index 0a06496..26eb94a 100644 (file)
@@ -1,3 +1,8 @@
+/*\r
+ * http://msdn.microsoft.com/ja-jp/library/ie/hh180174%28v=vs.85%29.aspx\r
+ * 孤立するとウィンドウ オブジェクトのプロパティが消去される\r
+ */\r
+\r
 X.Util.NinjaIframe = X.EventDispatcher.inherits(\r
        'NinjaIframe',\r
        {\r
@@ -99,14 +104,9 @@ X.Util.NinjaIframe = X.EventDispatcher.inherits(
                        \r
                        if( !opt_html ) return this;\r
                        \r
-                       if( X.UA.IE < 9 ){\r
-                       //if( 7 < X.UA.IE ){\r
-                               this._html = opt_html;\r
-                       //};                            \r
-                       } else {\r
-                               this._html = opt_html;\r
-                               X_Util_NinjaIframe_writeToIframe( this );\r
-                       };\r
+                       this._html = opt_html;\r
+                       X.UA.IE < 9 || X_Util_NinjaIframe_writeToIframe( this );\r
+                       \r
                        return this;\r
                },\r
                \r
index 9ed0aea..0900ae9 100644 (file)
@@ -28,6 +28,8 @@ X.Net = {
                return new X_NET_Queue( X_NET_TYPE_IMAGE, url );\r
        },\r
        \r
+       // <script>, <link>\r
+       \r
        amountQueue : function(){\r
                return X_NET_QUEUE_LIST.length;\r
        }\r
index 901c881..f5f4203 100644 (file)
@@ -113,16 +113,16 @@ if( X.Net.XHR.W3C || X_Net_XHR_ACTIVE_X ){
                                if( X_Net_XHR_X_DOMAIN ){\r
                                        if( false /* isXDomain( url ) */ ){ // isXDomain\r
                                                if( !this._isXDR ){\r
-                                                       X_EventDispatcher_migrateEvent( this );\r
+                                                       X_EventDispatcher_toggleAllEvents( this, false );\r
                                                        this._rawObject = X_Net_XHR_X_DOMAIN;\r
-                                                       X_EventDispatcher_restoreEvent( this );\r
+                                                       X_EventDispatcher_toggleAllEvents( this, true );\r
                                                        this._isXDR = true;\r
                                                };\r
                                        } else {\r
                                                if( this._isXDR ){\r
-                                                       X_EventDispatcher_migrateEvent( this );\r
+                                                       X_EventDispatcher_toggleAllEvents( this, false );\r
                                                        this._rawObject = X_Net_XHR_W3C || X_Net_XHR_ACTIVE_X;\r
-                                                       X_EventDispatcher_restoreEvent( this);\r
+                                                       X_EventDispatcher_toggleAllEvents( this, true );\r
                                                        this._isXDR = false;\r
                                                };\r
                                        };\r
@@ -138,7 +138,7 @@ if( X.Net.XHR.W3C || X_Net_XHR_ACTIVE_X ){
                                        };              \r
                                };\r
                                \r
-                               // send å\89\8dã\81«ã\83\95ã\83©ã\82°ã\82\92ç«\8bã\81¦ã\82\8b\9b\9eç·\9aã\81\8cæ\97©ã\81\84ã\81¨ raw.send() å\86\85ã\81§ onload -> _busy = false ã\81®ã\81®ã\81¡ã\80\81 _busy = true ã\81\99ã\82\8bã\82±ã\83¼ã\82¹ã\81\8cã\81\82ã\82\8bã\81\9fã\82\81ã\80\82\r
+                               // send 前にフラグを立てる,回線が早いと raw.send() 内で onload -> _busy = false ののち、 _busy = true するため。\r
                                this._busy = true;\r
                                \r
                                // http://allabout.co.jp/gm/gc/24097/#1\r
index c50ca7f..7c84e74 100644 (file)
@@ -28,6 +28,7 @@ X.UI.Event = {
        _START_BUBLEUP    : X.Dom.Event._LAST_EVENT + 0.5,              \r
 \r
        // raw pointing device event\r
+       \r
        _POINTER_DOWN     : ++X.Dom.Event._LAST_EVENT,\r
        _POINTER_UP       : ++X.Dom.Event._LAST_EVENT,\r
        _POINTER_MOVE     : ++X.Dom.Event._LAST_EVENT,\r
@@ -125,12 +126,12 @@ X.UI.Event = {
 };\r
 \r
 // raw pointing device event\r
-if( X.Dom.EVENT_POINTER ){\r
+//if( X.Dom.EVENT_POINTER ){\r
        X.UI.Event.IdToName[ X.UI.Event._POINTER_DOWN   ] = 'pointerdown';\r
        X.UI.Event.IdToName[ X.UI.Event._POINTER_UP     ] = 'pointerup';\r
        X.UI.Event.IdToName[ X.UI.Event._POINTER_MOVE   ] = 'pointermove';\r
        X.UI.Event.IdToName[ X.UI.Event._POINTER_CANCEL ] = 'pointercancel';\r
-} else {\r
+/*} else {\r
        \r
        if( X.Dom.EVENT_TOUCH ){\r
                X.UI.Event.IdToName[ X.UI.Event._TOUCH_START  ] = 'touchstart';\r
@@ -143,7 +144,7 @@ if( X.Dom.EVENT_POINTER ){
        X.UI.Event.IdToName[ X.UI.Event._MOUSE_UP     ] = 'mouseup';\r
        X.UI.Event.IdToName[ X.UI.Event._MOUSE_MOVE   ] = 'mousemove';\r
        X.UI.Event.IdToName[ X.UI.Event._MOUSE_CANCEL ] = 'mouseleave'; // ??\r
-};\r
+};*/\r
 \r
 \r
 ( function( IdToName, NameToID, p ){\r
index abe8b82..77df8c2 100644 (file)
                        numTouches = 0,// count the total touches on the screen\r
                        pointerType, i, l, touches, ret, active, gesture, startEv,\r
                        hammer, deltaTime, deltaX, deltaY, velocity, center;\r
-\r
-               //console.log( 'Hammer@handleEvent ' + X.UI.Event.IdToName[ e.type ] + ' ' + e.pointerType );\r
+               \r
+               //console.log( 'Hammer@handleEvent ' + X.UI.Event.IdToName[ e.type ] + ' ' + e.pointerType + ' ' + type );\r
                if( !type ) return;\r
                \r
+               //console.log( e.type + ' dw:' + X.UI.Event._POINTER_DOWN + ' up:' + X.UI.Event._POINTER_UP + ' mv:' + X.UI.Event._POINTER_MOVE );\r
+               \r
                if( e.pointerType ){\r
                        type |= POINTER;\r
                        switch( e.pointerType ){\r
                else if (\r
                        type & TOUCH || //sourceEventType.match(/touch/) || // touch events are always on screen\r
                        ( type & POINTER && type & START ) || //sourceEventType.match(/pointerdown/) || // pointerevents touch\r
-                       ( type & MOUSE   && e.which === 1 ) //(sourceEventType.match(/mouse/) && e.which === 1) // mouse is pressed\r
+                       ( type & MOUSE   && e.button === 0 ) //(sourceEventType.match(/mouse/) && e.which === 1) // mouse is pressed\r
                ){\r
                        enable_detect = true;\r
                };\r
 \r
+               console.log( 'Hammer@handleEvent ' + IdToGestureID[ e.type ] + ' ' + e.type + ' ' + X.UI.Event._POINTER_DOWN + ' ' + enable_detect );\r
+\r
                // we are in a touch event, set the touch triggered bool to true,\r
                // this for the conflicts that may occur on ios and android\r
-               type & ( TOUCH | POINTER ) && ( touch_triggered = true );\r
+               //type & ( TOUCH | POINTER ) && ( touch_triggered = true );\r
+               type & TOUCH && ( touch_triggered = true );\r
                //if (sourceEventType.match(/touch|pointer/)) { touch_triggered = true;}\r
 \r
                // when touch has been triggered in this detection session\r
@@ -94,6 +99,8 @@
                                        POINTERS[ i ] && ( touches[ touches.length ] = POINTERS[ i ] );\r
                                };\r
                                numTouches = touches.length;\r
+                               \r
+                               console.log( 'numTouches ' + numTouches );\r
                        } else\r
                        // touch\r
                        if ( type & TOUCH ){ //sourceEventType.match(/touch/)) {\r
 \r
                        e = {\r
                                center      : Utils.getCenter( touches ),\r
-                               timeStamp   : Date.now ? Date.now() : +new Date,\r
+                               timeStamp   : e.timeStamp,\r
                                target      : e.target,\r
                                touches     : touches,\r
                                eventType   : type & EVENT_TYPE_MASK,\r
                        Detection.register( Gestures[ name ] );\r
                };\r
 \r
-               if( X.Dom.EVENT_POINTER ){\r
+               //if( X.Dom.EVENT_POINTER ){\r
                        Hammer.EVENT_TYPES_START = [ X.UI.Event._POINTER_DOWN ];\r
                        types = [ X.UI.Event._POINTER_MOVE, X.UI.Event._POINTER_UP, X.UI.Event._POINTER_CANCEL ];\r
-               } else\r
+               /*} else\r
                if( X.Dom.EVENT_TOUCH ){\r
                        Hammer.EVENT_TYPES_START = [ X.UI.Event._TOUCH_START, X.UI.Event._MOUSE_DOWN ];\r
                        types = [ X.UI.Event._MOUSE_MOVE, X.UI.Event._MOUSE_UP, X.UI.Event._MOUSE_CANCEL,\r
                } else {\r
                        Hammer.EVENT_TYPES_START = [ X.UI.Event._MOUSE_DOWN ];\r
                        types = [ X.UI.Event._MOUSE_MOVE, X.UI.Event._MOUSE_UP, X.UI.Event._MOUSE_CANCEL ];\r
-               };\r
+               }; */\r
 \r
                // Add touch events on the document\r
                Utils.addEvents( uinodeRoot, types, Hammer.prototype.handleEvent );\r
        Hammer.DO_TOUCHES_FIX = Hammer.HAS_TOUCHEVENTS && ( X.UA.Android < 2.2 || X.UA.Blink || X.UA.Opera );\r
        \r
        // detect touchevents\r
-       Hammer.HAS_POINTEREVENTS = navigator.pointerEnabled || navigator.msPointerEnabled;\r
+       Hammer.HAS_POINTEREVENTS = true; // navigator.pointerEnabled || navigator.msPointerEnabled;\r
        Hammer.HAS_POINTEREVENTS && console.log( 'Hammer.HAS_POINTEREVENTS : true' );\r
 \r
 \r
index 9074dec..d229636 100644 (file)
@@ -69,14 +69,14 @@ X.UI._AbstractUINode = X.EventDispatcher.inherits(
                        //this.xnode      = X.Dom.Node.create( 'div' );\r
                        this.phase      = 1;\r
                        \r
-                       this.dispatch( { type : X.UI.Event.INIT } );\r
+                       this.dispatch( X.UI.Event.INIT );\r
                },\r
                \r
                addToParent : function( xnodeParent ){\r
                        xnodeParent && xnodeParent.append( this.xnode );\r
                        \r
                        this.phase = 2;\r
-                       this.dispatch( { type : X.UI.Event.ADDED } );\r
+                       this.dispatch( X.UI.Event.ADDED );\r
                },\r
                \r
                creationComplete : function(){\r
@@ -84,7 +84,7 @@ X.UI._AbstractUINode = X.EventDispatcher.inherits(
                                l, i;\r
                        \r
                        this.phase = 3;\r
-                       this.User.dispatch( { type : X.UI.Event.CREATION_COMPLETE } );\r
+                       this.User.dispatch( X.UI.Event.CREATION_COMPLETE );\r
                        \r
                        // html 要素が親に追加されるまで控えていたイベントの登録\r
                        if( events && ( l = events.length ) ){\r
@@ -826,15 +826,18 @@ X.UI._AbstractUINode = X.EventDispatcher.inherits(
                },\r
                \r
                dispatch : function( e ){\r
+                       //console.log( e.type + ' ' + ( this._listeners && this._listeners[ e.type ] ) );\r
                        var xve  = X.UI.Event,\r
                                ret  = X_EventDispatcher_dispatch.call( this, e ),\r
-                               type = e.type;\r
+                               type = e.type || e;\r
+                       \r
+                       // TODO captureEvent PointerEvent\r
                        if( ret & X.Callback.MONOPOLY && !this.hitChildData && ( xve._POINTER_MOVE === type || xve._MOUSE_MOVE === type || xve.FILE_DRAG === type ) ){\r
                                this.rootData.monopolyNodeData = this;\r
                                return ret;\r
                        };\r
                        this.rootData.monopolyNodeData = null;\r
-                       if( xve._START_BUBLEUP < type && this.parentData && ret & X.Callback.STOP_PROPAGATION === 0 && ret & X.Callback.STOP_NOW === 0 ) return this.parentData.dispatch( e );\r
+                       if( xve._START_BUBLEUP < type && this.parentData && !( ret & X.Callback.STOP_PROPAGATION ) && !( ret & X.Callback.STOP_NOW ) ) return this.parentData.dispatch( e );\r
                        return ret;\r
                }\r
                \r
index e6f931a..37f0a41 100644 (file)
@@ -115,21 +115,21 @@ X.UI._PageRoot = X.UI._Box.inherits(
                        // hover や rollover rollout のための move イベントの追加
                        // X.Dom.Event.activate, X.Dom.Event.deactivate ?
                        // mouseout, mouseover
-                       if( X.Dom.EVENT_POINTER ){
+                       //if( X.Dom.EVENT_POINTER ){
                                this.xnodeInteractiveLayer.listen( X.UI.Event.IdToName[ X.UI.Event._POINTER_MOVE ], X.UI._eventRellay );
                                if( counter[ X.UI.Event._POINTER_MOVE ] ){
                                        ++counter[ X.UI.Event._POINTER_MOVE ];
                                } else {
                                        counter[ X.UI.Event._POINTER_MOVE ] = 1;
                                };
-                       } else {
+                       /*} else {
                                this.xnodeInteractiveLayer.listen( X.UI.Event.IdToName[ X.UI.Event._MOUSE_MOVE ], X.UI._eventRellay );
                                if( counter[ X.UI.Event._MOUSE_MOVE ] ){
                                        ++counter[ X.UI.Event._MOUSE_MOVE ];
                                } else {
                                        counter[ X.UI.Event._MOUSE_MOVE ] = 1;
                                };
-                       };
+                       };*/
                        X.Timer.once( 0, this, this.afterAddToView );
                },
                afterAddToView : function(){
diff --git a/0.6.x/js/import.js b/0.6.x/js/import.js
new file mode 100644 (file)
index 0000000..5d75604
--- /dev/null
@@ -0,0 +1,37 @@
+document.write( [\r
+       '<script src="' +\r
+               'js/00_core/00_builtin.js',\r
+               'js/00_core/00_X.js',\r
+               'js/00_core/01_XUa.js',\r
+               'js/00_core/02_XType.js',\r
+               \r
+               'js/00_core/03_XCallback.js',\r
+               'js/00_core/04_XClass.js',\r
+               'js/00_core/05_XTimer.js',\r
+               'js/00_core/06_XEventDispatcher.js',\r
+               'js/00_core/07_XNotification.js',\r
+               \r
+               'js/01_dom/10_XDom.js',\r
+               'js/01_dom/11_XDomDTD.js',\r
+               'js/01_dom/11_XDomNode.js',\r
+               'js/01_dom/12_XDomEvent.js',\r
+               'js/01_dom/13_XDomBoxModel.js',\r
+               'js/01_dom/14_XDomAttr.js',\r
+               'js/01_dom/15_XDomStyle.js',\r
+               'js/01_dom/17_XDomNodeList.js',\r
+               'js/01_dom/18_XDomQuery.js',\r
+               'js/01_dom/19_XDomParser.js',\r
+               'js/01_dom/20_XDomImage.js',\r
+               'js/01_dom/22_XDomBuilder.js',\r
+\r
+               'js/03_util/00_XUtil.js',\r
+               'js/03_util/01_XNinjaIframe.js',\r
+               'js/03_util/02_XJSON.js',\r
+               \r
+               'js/04_net/00_XNet.js',\r
+               'js/04_net/01_XNetXHR.js',\r
+               'js/04_net/02_XNetJSONP.js'\r
+       + '"></script>'\r
+].join( '"></script><script src="' ));\r
+\r
+\r