OSDN Git Service

Version 0.6.66, fixed around X.Callback.
authoritozyun <itozyun@user.sourceforge.jp>
Sun, 24 Aug 2014 21:35:42 +0000 (06:35 +0900)
committeritozyun <itozyun@user.sourceforge.jp>
Sun, 24 Aug 2014 21:35:42 +0000 (06:35 +0900)
0.6.x/js/core/01_XUa.js
0.6.x/js/core/03_XCallback.js
0.6.x/js/core/04_XClass.js
0.6.x/js/core/06_XEventDispatcher.js
0.6.x/js/dom/10_XDom.js
0.6.x/js/dom/11_XDomDTD.js
0.6.x/js/dom/11_XDomNode.js
0.6.x/js/dom/12_XDomEvent.js
0.6.x/js/ui/05_XUI_Gesture.js

index 173748c..268c041 100644 (file)
@@ -27,9 +27,9 @@ X.UA = (function( n, undefined ){
                // --compilation_level WHITESPACE_ONLY --formatting pretty_print <- 動く\r
                acme.Opera7      = acme.Opera < 8;\r
                acme.Opera78     = acme.Opera < 9;\r
-               acme.OperaMini   = 0 < dua.indexOf("Opera Mini");\r
-               acme.OperaMobile = 0 < dua.indexOf("Opera Mobi");\r
-               acme.OperaTablet = 0 < dua.indexOf("Opera Tablet");\r
+               acme.OperaMini   = 0 < dua.indexOf('Opera Mini');\r
+               acme.OperaMobile = 0 < dua.indexOf('Opera Mobi');\r
+               acme.OperaTablet = 0 < dua.indexOf('Opera Tablet');\r
                acme.Wii         = dua.indexOf( 'Nintendo Wii' ) !== -1;\r
                acme.NDS         = dua.indexOf( 'Nitro' ) !== -1;\r
                console.log( '>> Opera : ' + acme.Opera );\r
@@ -39,7 +39,7 @@ X.UA = (function( n, undefined ){
        // Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko\r
        if( document.all || dav.indexOf( 'Trident/' ) !== -1 ){\r
                acme.ActiveX  = !!window[ 'ActiveXObject' ];\r
-               acme.IE       = document.documentMode || parseFloat(dua.split("MSIE ")[1]) || parseFloat(dua.split("rv:")[1]) || parseFloat(dav.split("MSIE ")[1]) || 0;\r
+               acme.IE       = document.documentMode || parseFloat(dua.split('MSIE ')[1]) || parseFloat(dua.split('rv:')[1]) || parseFloat(dav.split('MSIE ')[1]) || 0;\r
                acme.IE4      = acme.IE && acme.IE < 5;\r
                acme.IE5678   = 5 <= acme.IE && acme.IE < 9;\r
                acme.MacIE    = dua.indexOf( 'Mac_PowerPC' ) !== -1 || dua.indexOf( 'Mac_PPC' ) !== -1 || dua.indexOf( 'Mac_68K' ) !== -1;\r
@@ -87,6 +87,10 @@ X.UA = (function( n, undefined ){
                        ( parseFloat( v[ 1 ] ) || 0 ) / 10 +\r
                        ( parseFloat( v[ 2 ] ) || 0 ) / 100;\r
                \r
+               acme.GeckoMajor = parseFloat( v[ 0 ] ) || 0;\r
+               acme.GeckoMinor = parseFloat( v[ 1 ] ) || 0;\r
+               acme.GeckoPatch = parseFloat( v[ 2 ] ) || 0;\r
+               \r
                //Fennec\r
                if( ( i = dua.indexOf( 'Fennec/' ) ) !== -1 ){\r
                        acme.Fennec = parseFloat( dua.substr( i + 7 ) );\r
@@ -122,17 +126,19 @@ X.UA = (function( n, undefined ){
        \r
        // TODO Blink\r
        \r
-       acme.Khtml  = ( dav.indexOf("Konqueror") >= 0 ) ? tv : undefined;\r
+       acme.Khtml  = ( 0 <= dav.indexOf('Konqueror') ) ? tv : undefined;\r
+       \r
        \r
+       acme.WebKit = i = parseFloat(dua.split('WebKit\/')[1]) || undefined;\r
+       acme.Chrome = parseFloat(dua.split('Chrome\/')[1]) || undefined;\r
        \r
-       acme.WebKit = i = parseFloat(dua.split("WebKit\/")[1]) || undefined;\r
-       acme.Chrome = parseFloat(dua.split("Chrome\/")[1]) || undefined;\r
+       // TODO webkit Opera\r
 \r
        console.log( '>>Webkit : ' + acme.WebKit );\r
 \r
        if( i && !acme.Chrome && dua.indexOf( 'Safari' ) !== -1 ){\r
                if( dav.indexOf( 'Version/' ) !== -1 ){\r
-                       acme.Safari = parseFloat( dav.split("Version/")[1] );\r
+                       acme.Safari = parseFloat( dav.split('Version/')[1] );\r
                } else {\r
                        if( i < 73 ){\r
                                acme.Safari = 0.8;\r
index 5aad3d9..b40d878 100644 (file)
@@ -43,7 +43,6 @@ X.Callback = {
                                break;\r
                        case X.Callback._HANDLEEVENT :\r
                                f.x = hash.x;\r
-                               f.f = hash.f;\r
                                break;\r
                        case X.Callback._FUNC_ONLY :\r
                                f.f = hash.f;\r
index 040b39d..5bf2fea 100644 (file)
@@ -254,9 +254,6 @@ X.Class = ( function(){
                                } else {\r
                                        X.Class._override( klass.prototype, CommonProps, false );\r
                                };\r
-                       //if( X.UA.Safari && X.UA.Safari < 3 ){ // TODO Gecko もこちらへ\r
-                       //      X.Class._override( X.Class._override( traits || klass.prototype, props, true ), CommonProps, false );\r
-                       //      if( traits ) klass.prototype.__proto__ = traits;\r
                        } else {\r
                                klass.prototype = X.Class._override( X.Class._override( traits || klass.prototype, props, true ), CommonProps, false );\r
                                klass.prototype.constructor = klass;\r
index 25d7311..bc418aa 100644 (file)
@@ -64,23 +64,22 @@ X.EventDispatcher =
                                        // 全て削除\r
                                        for( type in list ){\r
                                                _list = list[ type ];\r
-                                               if( !( i = _list.length ) ) continue;\r
-                                               for( ; i; ){\r
+                                               for( i = _list.length; i; ){\r
                                                        this.unlisten( type, _list[ --i ] ); // override されていることがあるので、必ず unlisten を使用\r
                                                };\r
                                                // this.unlisten( type ); これは無茶!\r
                                        };\r
                                        return this;\r
-                               };\r
+                               } else\r
                                if( arg1 === undefined ){\r
                                        // 同一タイプを全て削除\r
-                                       if( !( list = list[ type ] ) || !( i = list.length ) ) return this;\r
-                                       for( ; i; ){\r
-                                               this.unlisten( type, list[ --i ] ); // override されていることがあるので、必ず unlisten を使用\r
+                                       if( _list = list[ type ] ){\r
+                                               for( i = _list.length; i; ){\r
+                                                       this.unlisten( type, _list[ --i ] ); // override されていることがあるので、必ず unlisten を使用\r
+                                               };\r
                                        };\r
                                        return this;\r
-                               };\r
-                               \r
+                               } else\r
                                if( reserves = this._reserves ){\r
                                        for( i = reserves.length; i; ){\r
                                                f = reserves[ --i ];\r
@@ -97,7 +96,7 @@ X.EventDispatcher =
                                delete this._needsIndex;\r
                                if( i === false ) return this;\r
 \r
-                               f = ( list = list[ type ] )[ i ];\r
+                               f = ( _list = list[ type ] )[ i ];\r
                                if( unlistens = this._unlistens ){\r
                                        ( unlistens = unlistens[ type ] ) ?\r
                                                ( unlistens[ unlistens.length ] = f ) :\r
@@ -105,8 +104,8 @@ X.EventDispatcher =
                                } else {\r
                                        delete f.once;\r
                                        f.kill === X.Callback._kill && f.kill();\r
-                                       list.splice( i, 1 );\r
-                                       if( !list.length ){\r
+                                       _list.splice( i, 1 );\r
+                                       if( !_list.length ){\r
                                                delete this._listeners[ type ];\r
                                                if( X.isEmptyObject( this._listeners ) ) delete this._listeners;\r
                                        };\r
index 5bdaf03..f79fbd8 100644 (file)
@@ -46,7 +46,7 @@ X.Dom = X.Class._override(
                                        console.log( '-- resize : ' + X.getTime() );\r
                                        \r
                                        !X.Dom._lock && ( X.Dom._lock = true ) && X.Timer.once( 100, X.Dom._detectFinishResizing );\r
-                                       return X.Callback.STOP_PROPAGATION;\r
+                                       return X.Callback.PREVENT_DEFAULT | X.Callback.STOP_PROPAGATION;\r
                                }),\r
                \r
                _detectFinishResizing : function (){\r
@@ -74,6 +74,9 @@ X.Dom = X.Class._override(
                        console.log( 'X.Dom._init()' );\r
                        \r
                        delete X.Dom._init;\r
+                       // DOMContentLoaded の無いブラウザで X.Dom._init への参照が残り続けるのを回避\r
+                       Node._document.unlisten( 'DOMContentLoaded', X.Dom._init );\r
+                       \r
                        X.Dom.readyState = X.Dom.Event.DOM_PRE_INIT;\r
                        \r
                        X.Dom._root = document.compatMode !== 'CSS1Compat' ? document.body : document.documentElement || document.body;\r
index 33b899e..3117654 100644 (file)
@@ -1,20 +1,21 @@
 \r
 X.Dom.DTD = {\r
+       \r
        EMPTY : {\r
-               AREA:true,\r
-               BASE:true,\r
-               BASEFONT:true,\r
-               BR:true,\r
-               COL:true,\r
-               FRAME:true,\r
-               HR:true,\r
-               IMG:true,\r
-               INPUT:true,\r
-               ISINDEX:true,\r
-               LINK:true,\r
-               META:true,\r
-               PARAM:true,\r
-               EMBED:true\r
+               AREA     : true,\r
+               BASE     : true,\r
+               BASEFONT : true,\r
+               BR       : true,\r
+               COL      : true,\r
+               FRAME    : true,\r
+               HR       : true,\r
+               IMG      : true,\r
+               INPUT    : true,\r
+               ISINDEX  : true,\r
+               LINK     : true,\r
+               META     : true,\r
+               PARAM    : true,\r
+               EMBED    : true\r
        },//,\r
        \r
        TAG_FIX :\r
index 3096eed..7484184 100644 (file)
@@ -47,6 +47,8 @@ X.Dom.Node = X.EventDispatcher.inherits(
                _isNew     : false,\r
                \r
                _rawNode   : null,\r
+               _rect      : null, // \r
+               \r
                _root      : null, // xnode が文書ツリーに属しているか?はこれを見る\r
                parent     : null, // remove された枝も親子構造は維持している。\r
                _xnodes    : null,\r
@@ -175,7 +177,7 @@ Node._getType = function( v ){
        if( v === window ) return Node.IS_WINDOW;\r
        if( v === document ) return Node.IS_DOCUMENT;\r
        if( v.constructor === window.Image ) return Node.IS_IMAGE;\r
-       if( X.UA.Safari && X.UA.Safari < 3 ){\r
+       if( X.UA.WebKit < 525.13 ){ // Safari3-\r
                if( v.src !== undefined && v.onload !== undefined && X.Type.isNumber( v.height ) && X.Type.isNumber( v.width ) && X.Type.isBoolean( v.complete ) ){\r
                        return Node.IS_IMAGE;\r
                };\r
@@ -285,6 +287,9 @@ Node.prototype.create = function( tag, opt_attrs, opt_css ){
        this._root && this._reserveUpdate();\r
        return xnode;\r
 };\r
+Node.prototype.createAt = function( index, tag, opt_attrs, opt_css ){\r
+       // TODO\r
+};\r
 \r
 /* --------------------------------------\r
  *  CreateText\r
@@ -302,6 +307,9 @@ Node.prototype.createText = function( text ){
        this._xnodes[ this._xnodes.length ] = xnode;\r
        return xnode;\r
 };\r
+Node.prototype.createTextAt = function( index, text ){\r
+       // TODO\r
+};\r
 \r
 /* --------------------------------------\r
  *  Clone\r
@@ -476,9 +484,18 @@ Node.prototype.appendToRoot = function( opt_index ){
 /* --------------------------------------\r
  *  Before , After, Replace\r
  */\r
-Node.prototype.before = function( v ){\r
-       var parent, l, start;\r
-       if( !( parent = this.parent ) ) return this;\r
+Node.prototype.before = Node.prototype.prevNode = function( v ){\r
+       var parent = this.parent, xnodes, i, l, start;\r
+       \r
+       // getter\r
+       if( v === undefined ){\r
+               if( !parent ) return;\r
+               xnodes = parent._xnodes;\r
+               i      = xnodes.indexOf( this );\r
+               return 0 < i ? xnodes[ i - 1 ] : v;\r
+       };\r
+       \r
+       if( !parent ) return this;\r
        \r
        l = arguments.length;\r
        start = this.getOrder();\r
@@ -492,9 +509,18 @@ Node.prototype.before = function( v ){
        return this;\r
 };\r
 \r
-Node.prototype.after = function( v ){\r
-       var parent, l, i, start;\r
-       if( !( parent = this.parent ) ) return this;\r
+Node.prototype.after = Node.prototype.nextNode = function( v ){\r
+       var parent = this.parent, xnodes, i, l, start;\r
+       \r
+       // getter\r
+       if( v === undefined ){\r
+               if( !parent ) return;\r
+               xnodes = parent._xnodes;\r
+               i      = xnodes.indexOf( this );\r
+               return ++i < xnodes.length ? xnodes[ i ] : v;\r
+       };\r
+       \r
+       if( !parent ) return this;\r
        \r
        l = arguments.length;\r
        start = this.getOrder() + 1;\r
@@ -555,6 +581,8 @@ Node.prototype.empty = function(){
 /* --------------------------------------\r
  *  destory\r
  */\r
+Node._destroyChildFlag = false; // TODO\r
+\r
 Node.prototype.destroy = function( isChild ){\r
        var xnodes = this._xnodes, i, elm;\r
        \r
@@ -615,23 +643,8 @@ Node.prototype.getChildAt = function( i ){
 \r
 \r
 /* --------------------------------------\r
- *  prevNode, nextNode, firstChild, lastChild\r
+ *  firstChild, lastChild\r
  */\r
-\r
-Node.prototype.prevNode = function(){\r
-       var parent = this.parent, xnodes, index;\r
-       if( !parent ) return;\r
-       xnodes = parent._xnodes;\r
-       index = xnodes.indexOf( this );\r
-       if( 0 < index ) return xnodes[ index - 1 ];\r
-};\r
-Node.prototype.nextNode = function(){\r
-       var parent = this.parent, xnodes, index;\r
-       if( !parent ) return;\r
-       xnodes = parent._xnodes;\r
-       index  = xnodes.indexOf( this );\r
-       if( index + 1 < xnodes.length ) return xnodes[ index + 1 ];\r
-};\r
 Node.prototype.firstChild = function(){\r
        return this.getChildAt( 0 );\r
 };\r
@@ -690,7 +703,7 @@ Node.prototype.addClass = function( v ){
 Node.prototype.removeClass = function( v ){\r
        var _          = ' ',\r
                className  = this._className,\r
-               names      = v.split( ' ' ),\r
+               names      = v.split( _ ),\r
                classNames, i, f, j;\r
        if( !className ) return this;\r
        for( classNames = className.split( _ ), i = classNames.length; i; ){\r
@@ -704,10 +717,19 @@ Node.prototype.removeClass = function( v ){
                        };\r
                };\r
        };\r
-       return f ? this.className( classNames.join( ' ' ) ) : this;\r
+       return f ? this.className( classNames.join( _ ) ) : this;\r
 };\r
-Node.prototype.toggleClass = function( v ){\r
-\r
+Node.prototype.toggleClass = function( v, opt_toggle ){\r
+       var names, i, name;\r
+       if( opt_toggle !== undefined ){\r
+               return !!opt_toggle ? this.addClass( v ) : this.removeClass( v );       \r
+       };\r
+       names = v.split( ' ' );\r
+       for( i = names.length; i; ){\r
+               name = names[ --i ];\r
+               this.hassClass( name ) ? this.removeClass( name ) : this.addClass( name );\r
+       };\r
+       return this;\r
 };\r
 Node.prototype.hasClass = function( v ){\r
        var _ = ' ',\r
@@ -814,7 +836,8 @@ Node.prototype.each = function( func ){
  * \r
  * state:\r
  *  0 : no_rawnode\r
- *  1 : not_added\r
+ *  1 : no_parent\r
+ *  2 : no_root\r
  *  3 : dirty\r
  *  4 : clean\r
  * \r
index 5ad2058..d80f5e0 100644 (file)
@@ -42,6 +42,7 @@ if( X.Dom.EVENT_W3C ){
                // https://developer.mozilla.org/ja/docs/DOM/DOM_event_reference/mousewheel\r
                \r
                // TODO\r
+               // axis\r
                // https://w3g.jp/blog/tools/wheelevent_crossbrowser\r
                // ホイール系イベント2014年版クロスブラウザ\r
                if( e.wheelDeltaY !== undefined ){\r
@@ -191,25 +192,29 @@ X.Dom.Event.Rename = {};
 X.Dom.Event.RenameTo = {};\r
 // https://github.com/georgeadamson/jQuery.prefixfree-events/blob/master/jQuery.prefixfree-events.js\r
 \r
-// TODO DOMMoseScroll\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
+               console.log( 'mousewheel <= MozMousePixelScroll' );\r
+               X.Dom.Event.Rename[ 'mousewheel' ] = 'MozMousePixelScroll';\r
+       } else\r
+       if( 0.9 < X.UA.Gecko && 7 <= X.UA.GeckoPatch ){ // Gecko 0.9.7+ (NN6.2+?)\r
+               console.log( 'mousewheel <= DOMMouseScroll' );\r
+               X.Dom.Event.Rename[ 'mousewheel' ] = 'DOMMouseScroll';\r
+       };\r
+};\r
 \r
 if( window.onwebkitanimationend !== undefined && window.onanimationend === undefined ){\r
        console.log( 'animationend <= webkitAnimationEnd' );\r
-         X.Dom.Event.Rename[ 'animationend' ]             = 'webkitAnimationEnd';\r
-       X.Dom.Event.RenameTo[ 'webkitAnimationEnd' ]       = 'animationend';\r
-         X.Dom.Event.Rename[ 'animationstart' ]           = 'webkitAnimationStart';\r
-       X.Dom.Event.RenameTo[ 'webkitAnimationStart' ]     = 'animationstart';\r
-         X.Dom.Event.Rename[ 'animationiteration' ]       = 'webkitAnimationIteration';\r
-       X.Dom.Event.RenameTo[ 'webkitAnimationIteration' ] = 'animationiteration';\r
+       X.Dom.Event.Rename[ 'animationend' ]        = 'webkitAnimationEnd';\r
+       X.Dom.Event.Rename[ 'animationstart' ]      = 'webkitAnimationStart';\r
+       X.Dom.Event.Rename[ 'animationiteration' ]  = 'webkitAnimationIteration';\r
 } else\r
 if( window.onoanimationend !== undefined && window.onanimationend === undefined ){\r
        console.log( 'animationend <= oAnimationEnd' );\r
-         X.Dom.Event.Rename[ 'animationend' ]        = 'oAnimationEnd';\r
-       X.Dom.Event.RenameTo[ 'oAnimationEnd' ]       = 'animationend';\r
-         X.Dom.Event.Rename[ 'animationstart' ]      = 'oAnimationStart';\r
-       X.Dom.Event.RenameTo[ 'oAnimationStart' ]     = 'animationstart';\r
-         X.Dom.Event.Rename[ 'animationiteration' ]  = 'oAnimationIteration';\r
-       X.Dom.Event.RenameTo[ 'oAnimationIteration' ] = 'animationiteration';\r
+       X.Dom.Event.Rename[ 'animationend' ]        = 'oAnimationEnd';\r
+       X.Dom.Event.Rename[ 'animationstart' ]      = 'oAnimationStart';\r
+       X.Dom.Event.Rename[ 'animationiteration' ]  = 'oAnimationIteration';\r
 } else\r
 /*\r
 if( window.onmozanimationend !== undefined && window.onanimationend === undefined ){\r
@@ -222,51 +227,44 @@ if( window.onmozanimationend !== undefined && window.onanimationend === undefine
 } else*/\r
 if( document.documentElement && document.documentElement.style.msAnimation !== undefined && document.documentElement.style.animation === undefined ){ //document.documentElement.style.msAnimation \r
        console.log( 'animationend <= MSAnimationEnd' );\r
-         X.Dom.Event.Rename[ 'animationend' ]         = 'MSAnimationEnd';\r
-       X.Dom.Event.RenameTo[ 'MSAnimationEnd' ]       = 'animationend';\r
-         X.Dom.Event.Rename[ 'animationstart' ]       = 'MSAnimationStart';\r
-       X.Dom.Event.RenameTo[ 'MSAnimationStart' ]     = 'animationstart';\r
-         X.Dom.Event.Rename[ 'animationiteration' ]   = 'MSAnimationIteration';\r
-       X.Dom.Event.RenameTo[ 'MSAnimationIteration' ] = 'animationiteration';\r
+       X.Dom.Event.Rename[ 'animationend' ]         = 'MSAnimationEnd';\r
+       X.Dom.Event.Rename[ 'animationstart' ]       = 'MSAnimationStart';\r
+       X.Dom.Event.Rename[ 'animationiteration' ]   = 'MSAnimationIteration';\r
 };\r
 // https://developer.mozilla.org/en-US/docs/Web/Events/transitionend\r
 // chrome1+, firefox4+, IE10+, Opera10.5+, Safari3.2+, Android2.1+\r
 if( window.onwebkittransitionend !== undefined && window.ontransitionend === undefined ){\r
        console.log( 'transitionend <= webkitTransitionEnd' );\r
-         X.Dom.Event.Rename[ 'transitionend' ]       = 'webkitTransitionEnd';\r
-       X.Dom.Event.RenameTo[ 'webkitTransitionEnd' ] = 'transitionend';\r
+       X.Dom.Event.Rename[ 'transitionend' ]      = 'webkitTransitionEnd';\r
 } else\r
 if( window.onotransitionend !== undefined && window.ontransitionend === undefined ){\r
        if( X.UA.Opera < 12 ){\r
                console.log( 'transitionend <= oTransitionEnd|ver.' + X.UA.Opera );\r
-                 X.Dom.Event.Rename[ 'transitionend' ]  = 'oTransitionEnd';\r
-               X.Dom.Event.RenameTo[ 'oTransitionEnd' ] = 'transitionend';\r
+               X.Dom.Event.Rename[ 'transitionend' ]  = 'oTransitionEnd';\r
        } else {\r
                console.log( 'transitionend <= otransitionEnd|ver.' + X.UA.Opera );\r
-                 X.Dom.Event.Rename[ 'transitionend' ]  = 'otransitionEnd';\r
-               X.Dom.Event.RenameTo[ 'otransitionEnd' ] = 'transitionend';\r
+               X.Dom.Event.Rename[ 'transitionend' ]  = 'otransitionEnd';\r
        };\r
 } else\r
 if( window.onmoztransitionend !== undefined && window.ontransitionend === undefined ){\r
        console.log( 'transitionend <= mozTransitionEnd' );\r
-         X.Dom.Event.Rename[ 'transitionend' ]    = 'mozTransitionEnd';\r
-       X.Dom.Event.RenameTo[ 'mozTransitionEnd' ] = 'transitionend';\r
+       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.RenameTo[ 'MSPointerDown'   ] = 'pointerdown';\r
-         X.Dom.Event.Rename[ 'pointerup'       ] = 'MSPointerUp';\r
-       X.Dom.Event.RenameTo[ 'MSPointerUp'     ] = 'pointerup';\r
-         X.Dom.Event.Rename[ 'pointermove'     ] = 'MSPointerMove';\r
-       X.Dom.Event.RenameTo[ 'MSPointerMove'   ] = 'pointermove';\r
-         X.Dom.Event.Rename[ 'pointercancel'   ] = 'MSPointerCancel';\r
-       X.Dom.Event.RenameTo[ 'MSPointerCancel' ] = 'pointercancel';\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
 };\r
 \r
-\r
+(function( rename, renameTo ){\r
+       for( var k in rename ){\r
+               renameTo[ rename[ k ] ] = k;\r
+       };\r
+})( X.Dom.Event.Rename, X.Dom.Event.RenameTo );\r
 \r
 X.Dom.Node.prototype.listen = function( type /* , arg1, arg2, arg3[ listener || ( context + function ) || function ][ arguments ] */ ){\r
        if( this._xnodeType === 0 || this._xnodeType === 3 ) return this;\r
@@ -280,26 +278,16 @@ X.Dom.Node.prototype._addEvent =
        // 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.Dom.EVENT_W3C && X.UA.Safari && X.UA.Safari < 3 ?\r
+       X.Dom.EVENT_W3C && ( X.UA.WebKit < 525.13 || X.UA.Opera7 ) ? // Safari3-\r
                (function( type ){\r
                        var raw = this._rawNode;\r
                        if( !raw ) return;\r
                        this._handleEvent = this._handleEvent || X.Callback.create( this );\r
-                       if( this._xnodeType === 4 ){ // Image\r
-                               raw[ 'on' + type ] = this._handleEvent;\r
-                       } else {\r
+                       if( raw.addEventListener ){\r
                                raw.addEventListener( type, this._handleEvent, false );\r
-                       };\r
-               }) :\r
-       X.Dom.EVENT_W3C && X.UA.Opera7 ?\r
-               (function( type ){\r
-                       var raw = this._rawNode;\r
-                       if( !raw ) return;\r
-                       this._handleEvent = this._handleEvent || X.Callback.create( this );\r
-                       if( raw === window ){\r
-                               raw[ 'on' + type ] = this._handleEvent;\r
                        } else {\r
-                               raw.addEventListener( type, this._handleEvent, false );\r
+                               // Safari は Image, Opera7 は window\r
+                               raw[ 'on' + type ] = this._handleEvent;\r
                        };\r
                }) :\r
        X.Dom.EVENT_W3C ?\r
@@ -308,14 +296,19 @@ X.Dom.Node.prototype._addEvent =
                }) :\r
        X.Dom.EVENT_IE ?\r
                (function( type ){\r
-                       if( !this._rawNode ) return;\r
+                       var raw = this._rawNode;\r
+                       if( !raw ) return;\r
                        this._handleEvent = this._handleEvent || X.Callback.create( this );\r
-                       this._rawNode.attachEvent( 'on' + type, this._handleEvent );\r
+                       if( raw.attachEvent ){\r
+                               raw.attachEvent( 'on' + type, this._handleEvent );\r
+                       } else {\r
+                               raw[ 'on' + type ] = this._handleEvent;\r
+                       };\r
                }) :\r
                (function( type ){\r
-                       var elm = this._rawNode || ( this._ie4getRawNode && this._ie4getRawNode() );\r
-                       if( !elm ) return;\r
-                       this._handleEvent = elm[ 'on' + type ] = this._handleEvent || X.Callback.create( this );\r
+                       var raw = this._rawNode || ( this._ie4getRawNode && this._ie4getRawNode() );\r
+                       if( !raw ) return;\r
+                       raw[ 'on' + type ] = this._handleEvent = this._handleEvent || X.Callback.create( this );\r
                });\r
 \r
 \r
@@ -331,30 +324,15 @@ X.Dom.Node.prototype.unlisten = function( type /* , arg1, arg2, arg3 */ ){
 };\r
 \r
 X.Dom.Node.prototype._removeEvent =\r
-       X.Dom.EVENT_W3C && X.UA.Safari && X.UA.Safari < 3 ?\r
+       X.Dom.EVENT_W3C && ( X.UA.WebKit < 525.13 || X.UA.Opera7 ) ? // Safari3-\r
                (function( type ){\r
                        var raw = this._rawNode;\r
                        if( !raw ) return;\r
                        \r
-                       if( this._xnodeType === 4 ){ // Image\r
-                               raw[ 'on' + type ] = '';\r
-                       } else {\r
+                       if( raw.addEventListener ){ // Image\r
                                raw.removeEventListener( type, this._handleEvent, false );\r
-                       };\r
-                       if( !this._listeners ){\r
-                               X.Callback._correct( this._handleEvent );\r
-                               delete this._handleEvent;\r
-                       };\r
-               }) :\r
-       X.Dom.EVENT_W3C && X.UA.Opera7 ?\r
-               (function( type ){\r
-                       var raw = this._rawNode;\r
-                       if( !raw ) return;\r
-                       \r
-                       if( raw === window ){\r
-                               raw[ 'on' + type ] = null;\r
                        } else {\r
-                               raw.removeEventListener( type, this._handleEvent, false );\r
+                               raw[ 'on' + type ] = null;\r
                        };\r
                        if( !this._listeners ){\r
                                X.Callback._correct( this._handleEvent );\r
@@ -363,25 +341,30 @@ X.Dom.Node.prototype._removeEvent =
                }) :\r
        X.Dom.EVENT_W3C ?\r
                (function( type ){\r
-                       var elm = this._rawNode;\r
-                       if( !elm ) return;\r
-                       elm.removeEventListener( X.Dom.Event.Rename[ type ] || type, this, false );\r
+                       var raw = this._rawNode;\r
+                       if( !raw ) return;\r
+                       raw.removeEventListener( X.Dom.Event.Rename[ type ] || type, this, false );\r
                }) :\r
        X.Dom.EVENT_IE ?\r
                (function( type ){\r
-                       var elm = this._rawNode;\r
-                       if( !elm ) return;\r
-                       elm.detachEvent( 'on' + type, this._handleEvent );\r
+                       var raw = this._rawNode;\r
+                       if( !raw ) return;\r
+                       if( raw.attachEvent ){\r
+                               raw.detachEvent( 'on' + type, this._handleEvent );\r
+                       } else {\r
+                               raw[ 'on' + type ] = X.emptyFunction;\r
+                               raw[ 'on' + type ] = '';\r
+                       };\r
                        if( !this._listeners ){\r
                                X.Callback._correct( this._handleEvent );\r
                                delete this._handleEvent;\r
                        };\r
                }) :\r
                (function( type ){\r
-                       var elm = this._rawNode || ( this._ie4getRawNode && this._ie4getRawNode() );\r
-                       if( !elm ) return;\r
-                       elm[ 'on' + type ] = X.emptyFunction;\r
-                       elm[ 'on' + type ] = '';\r
+                       var raw = this._rawNode || ( this._ie4getRawNode && this._ie4getRawNode() );\r
+                       if( !raw ) return;\r
+                       raw[ 'on' + type ] = X.emptyFunction;\r
+                       raw[ 'on' + type ] = '';\r
                        if( !this._listeners ){\r
                                X.Callback._correct( this._handleEvent );\r
                                delete this._handleEvent;\r
@@ -390,9 +373,20 @@ X.Dom.Node.prototype._removeEvent =
 \r
 // 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
-\r
 X.Dom.Node.prototype.handleEvent =\r
-       X.Dom.EVENT_W3C ?\r
+       X.UA.IE < 9 ? // ie45678 EVENT_IE & EVENT_DOM0 for ie4\r
+               (function(){\r
+                       var ret = X.EventDispatcher.prototype.dispatch.call( this, new X.Dom.Event( event, this, this._rawNode ) );\r
+\r
+                       if( ret & X.Callback.STOP_PROPAGATION ){\r
+                               event.cancelBubble = true;\r
+                       };\r
+                       if( ret & X.Callback.PREVENT_DEFAULT ){\r
+                               this._tag === 'A' && this._rawNode.blur();\r
+                               return event.returnValue = false;\r
+                       };\r
+               }) :\r
+       //X.Dom.EVENT_W3C & EVENT_DOM0 for NetFront\r
                (function( e ){\r
                        var ret = X.EventDispatcher.prototype.dispatch.call( this, new X.Dom.Event( e, this ) );\r
                        \r
@@ -402,24 +396,13 @@ X.Dom.Node.prototype.handleEvent =
                        if( ret & X.Callback.PREVENT_DEFAULT ){\r
                                this._tag === 'A' && this._rawNode.blur();\r
                                e.preventDefault();\r
-                               if( X.UA.Safari && X.UA.Safari < 3 ){\r
+                               if( X.UA.WebKit < 525.13 ){ // Safari3-\r
                                        if( e.type === 'click' || e.type === 'dbclick' ){\r
                                                X.Dom._safariPreventDefault = true;\r
                                        };\r
                                };\r
                                return false;\r
                        };\r
-               }) :\r
-               (function(){\r
-                       var ret = X.EventDispatcher.prototype.dispatch.call( this, new X.Dom.Event( event, this, this._rawNode ) );\r
-\r
-                       if( ret & X.Callback.STOP_PROPAGATION ){\r
-                               event.cancelBubble = true;\r
-                       };\r
-                       if( ret & X.Callback.PREVENT_DEFAULT ){\r
-                               this._tag === 'A' && this._rawNode.blur();\r
-                               return event.returnValue = false;\r
-                       };\r
                });\r
 \r
 \r
@@ -429,7 +412,8 @@ X.Dom.Node.prototype._migrateEvent = function(){
                type;\r
        if( !hash ) return;\r
        for( type in hash ){\r
-               this._removeEvent( type );\r
+               // 数字イベントの除外\r
+               /*'' + parseFloat( type ) !== type && */this._removeEvent( type );\r
        };\r
 };\r
 \r
@@ -439,7 +423,8 @@ X.Dom.Node.prototype._restoreEvent = function(){
                type;\r
        if( !hash ) return;\r
        for( type in hash ){\r
-               this._addEvent( type );\r
+               // 数字イベントの除外\r
+               /*'' + parseFloat( type ) !== type && */ this._addEvent( type );\r
        };\r
 };\r
 \r
@@ -487,7 +472,7 @@ X.Dom.listenOnce( X.Dom.Event.XDOM_READY, function(e){
        console.log( 'X.Dom XDomReady ' + X.Dom.readyState );\r
 } );\r
 \r
-if( X.UA.Safari && X.UA.Safari < 3 ){\r
+if( X.UA.WebKit < 525.13 ){ // Safari3-\r
        document.documentElement.onclick =\r
        document.documentElement.ondbclick = function( e ){\r
                        if( X.Dom._safariPreventDefault ){\r
index c73697f..ba655fd 100644 (file)
                } else\r
                if( e.touches ){\r
                        type |= TOUCH;\r
-                       //alert( 'Hammer@handleEvent ' + X.UI.Event.IdToName[ e.type ] + ' ' + e.touches.length );\r
                } else {\r
                        type |= MOUSE;\r
-                       //alert( 'Hammer@handleEvent ' + X.UI.Event.IdToName[ e.type ] + ' mouse!' );\r
                };\r
                \r
                // onmouseup, but when touchend has been fired we do nothing.\r