OSDN Git Service

Version 0.6.42, bugfix for tree update event.
[pettanr/clientJs.git] / 0.6.x / js / core / 03_XCallback.js
index b8ae2c7..484a263 100644 (file)
@@ -5,13 +5,14 @@ X.Callback = {
        NONE             :  0,\r
        UN_LISTEN        :  1,\r
        STOP_PROPAGATION :  2,  // 上位階層への伝播のキャンセル\r
-       STOP_NOW         :  4,  // 同一階層のリスナーのキャンセル\r
+       STOP_NOW         :  4 | 2,  // 同一階層のリスナーのキャンセル(上位へもキャンセル)\r
        PREVENT_DEFAULT  :  8,  // 結果動作のキャンセル,\r
        MONOPOLY         : 16,  // move event を独占する\r
-       SYS_CANCEL       : 32,\r
+       SYS_CANCEL       : 32 | 4 | 2,\r
+       \r
+       _LIVE_LIST       : [],\r
+       _POOL_LIST       : [],\r
        \r
-       _LIVE_LIST : [],\r
-       _POOL_LIST : [],\r
        create : function( arg0, arg1, arg2 /* [ listener || ( context + function ) || function ][ args... ] */ ){\r
                var self  = X.Callback,\r
                        live  = self._LIVE_LIST,\r
@@ -23,7 +24,7 @@ X.Callback = {
                } else\r
                if( typeof arg0 === 'function' ){\r
                        callback = arg0;\r
-                       arg2     = arg1;\r
+                       if( !( arg2 = arg1 ) ) return callback; // function のみの場合 callback オブジェクトを作らない\r
                } else\r
                if( arg0 && typeof arg0.handleEvent === 'function' ){\r
                        listener = arg0;\r
@@ -63,36 +64,7 @@ X.Callback = {
                };\r
                return f;\r
        },\r
-       find : function( arg0, arg1 /* [ listener || ( context + function ) || function ] */ ){\r
-               var live     = X.Callback._LIVE_LIST,\r
-                       i        = live.length,\r
-                       listener, context, callback,\r
-                       f;\r
-               if( typeof arg1 === 'function' ){\r
-                       context  = arg0;\r
-                       callback = arg1;\r
-               } else\r
-               if( typeof arg0 === 'function' ){\r
-                       callback = arg0;\r
-               } else\r
-               if( arg0 && typeof arg0.handleEvent === 'function' ){\r
-                       listener = arg0;\r
-               };\r
-               \r
-               for( ; i; ){\r
-                       f = live[ --i ];\r
-                       if( listener && f.listener === listener ){\r
-                               return f;\r
-                       } else\r
-                       if( context && f.context === context && f.callback === callback ){\r
-                               return f;\r
-                       } else          \r
-                       if( f.callback === callback ){\r
-                               return f;\r
-                       };\r
-               };\r
-               return null;\r
-       },\r
+       \r
        _contextCallback : function(){\r
                var f = this,\r
                        a = f.a,\r
@@ -104,8 +76,15 @@ X.Callback = {
                //s && s.push.apply( a, s );\r
                if( s && s.length ){\r
                        ary = [];\r
-                       a.length && ary.push.apply( ary, a );\r
-                       ary.push.apply( ary, s );\r
+                       a.length &&\r
+                               (\r
+                                       a.length === 1 ?\r
+                                               ( ary[ 0 ] = a[ 0 ] ) :\r
+                                               ary.push.apply( ary, a )\r
+                               );\r
+                       s.length === 1 ?\r
+                               ( ary[ ary.length ] = s[ 0 ] ) :\r
+                               ary.push.apply( ary, s );\r
                        a = ary;\r
                };\r
                r = a.length === 0 ? c.call( x ) : c.apply( x, a );\r
@@ -123,11 +102,22 @@ X.Callback = {
                //s && s.push.apply( a, s );\r
                if( s && s.length ){\r
                        ary = [];\r
-                       a.length && ary.push.apply( ary, a );\r
-                       ary.push.apply( ary, s );\r
+                       a.length &&\r
+                               (\r
+                                       a.length === 1 ?\r
+                                               ( ary[ 0 ] = a[ 0 ] ) :\r
+                                               ary.push.apply( ary, a )\r
+                               );\r
+                       s.length === 1 ?\r
+                               ( ary[ ary.length ] = s[ 0 ] ) :\r
+                               ary.push.apply( ary, s );\r
                        a = ary;\r
                };\r
-               r = a.length === 0 ? c() : c.apply( null, a );\r
+               r = a.length === 0 ?\r
+                               c() :\r
+                       a.length === 1 ?\r
+                               c( a[ 0 ] ) :\r
+                               c.apply( null, a );\r
                delete f.a;\r
                //delete f.t;\r
                return r;\r