OSDN Git Service

Version 0.6.159, fix X.Class & X.XHR.Gadget.
[pettanr/clientJs.git] / 0.6.x / js / 01_core / 10_XCallback.js
index a8dd6a3..31c8a3c 100644 (file)
@@ -3,13 +3,13 @@
 // ------------ local variables -------------------------------------------- //\r
 // ------------------------------------------------------------------------- //\r
 \r
-var /** @const */\r
+var \r
        X_Callback_LIVE_LIST        = [],\r
-       /** @const */\r
+\r
        X_Callback_POOL_LIST        = [],\r
-       /** @const */\r
+\r
        X_Closure_COMMAND_BACK      = X_Callback_LIVE_LIST,\r
-       /** @const */\r
+\r
        X_Closure_COMMAND_DROP      = X_Callback_POOL_LIST,\r
        \r
        /** @const */\r
@@ -18,6 +18,8 @@ var /** @const */
        X_Callback_HANDLEEVENT      = 2,\r
        /** @const */\r
        X_Callback_FUNC_ONLY        = 3,\r
+       /** @const */\r
+       X_Callback_THIS_FUNCNAME    = 4,\r
 \r
        /** @const */\r
        X_Callback_NONE             =  0,\r
@@ -30,14 +32,15 @@ var /** @const */
        /** @const */\r
        X_Callback_PREVENT_DEFAULT  =  8,  // 結果動作のキャンセル,\r
        /** @const */\r
-       X_Callback_MONOPOLY         = 16,  // move event を独占する\r
-       \r
        X_Callback_CAPTURE_POINTER  = 16,\r
+       /** @const */\r
        X_Callback_RELEASE_POINTER  = 32,\r
        \r
        /** @const */\r
        X_Callback_SYS_CANCEL       = 64 | 4 | 2;\r
 \r
+\r
+\r
 /*\r
  * handleEvent という関数のメンバーを持つオブジェクト\r
  * @typedef {{ handleEvent : function }}\r
@@ -109,6 +112,11 @@ var __CallbackHash__ =
         */\r
        func : undefined,\r
        /**\r
+        * コールバック名。コールバック作成時に関数が無い、関数が入れ替わっていても動作する。\r
+        * @type {string|undefined} \r
+        */\r
+       name : undefined,\r
+       /**\r
         * コールバックの this コンテキスト。 \r
         * @type {listener|object|undefined}\r
         */\r
@@ -128,37 +136,43 @@ var __CallbackHash__ =
 /**\r
  * X.Timer と X.EventDispatcher からのコールバックの返り値を定義。\r
  * @namespace X.Callback\r
- * @alias X.Callback\r
  */\r
 X[ 'Callback' ] = {\r
        /**\r
         * このコールバックでは返り値による操作は無い。\r
+        * @alias X.Callback.NONE\r
         */\r
        'NONE'             : X_Callback_NONE,\r
        /**\r
         * X.Timer, X.EventDispatcher のコールバックでタイマーやイベントリスナの解除に使用。\r
+        * @alias X.Callback.UN_LISTEN\r
         */\r
        'UN_LISTEN'        : X_Callback_UN_LISTEN,\r
        /**\r
         * 上位階層へのイベント伝播のキャンセル。DOM イベントのコールバックの戻り値に指定すると e.stopPropagation() が呼ばれる。\r
+        * @alias X.Callback.STOP_PROPAGATION\r
         */\r
        'STOP_PROPAGATION' : X_Callback_STOP_PROPAGATION,\r
        /**\r
         * 以降のイベントのディスパッチを中断する。STOP_PROPAGATION との違いは、次に控えているコールバックもキャンセルされる点。但し system によって追加されたイベントはキャンセルされない。\r
+        * @alias X.Callback.STOP_NOW\r
         */\r
        'STOP_NOW'         : X_Callback_STOP_NOW,\r
        /**\r
         * DOM イベントのコールバックの戻り値に指定すると e.preventDefault() が呼ばれる。\r
         * またフレームワーク内で定義されたデフォルト動作の回避にも使用される。\r
+        * @alias X.Callback.PREVENT_DEFAULT\r
         */\r
        'PREVENT_DEFAULT'  : X_Callback_PREVENT_DEFAULT,\r
        /**\r
-        * X.UI に於いて、ポインターイベントの戻り値に指定すると、以降のポインターベントを独占する。\r
+        * X.UI の uinode でポインターイベントの戻り値に指定すると、以降のポインターベントを独占する。\r
+        * @alias X.Callback.CAPTURE_POINTER\r
         */\r
-       'MONOPOLY'         : X_Callback_MONOPOLY,\r
-       \r
        'CAPTURE_POINTER'  : X_Callback_CAPTURE_POINTER,\r
-       \r
+       /**\r
+        * X.UI の uinode でポインターイベントの戻り値に指定すると、以降のポインターベントを独占を解除する。\r
+        * @alias X.Callback.RELEASE_POINTER\r
+        */\r
        'RELEASE_POINTER'  : X_Callback_RELEASE_POINTER\r
 };\r
 \r
@@ -177,6 +191,7 @@ function X_Callback_create( thisObject, opt_callback, opt_args /* [ listener ||
                _obj = ret( X_Closure_COMMAND_BACK );\r
                \r
                _obj.kind       = obj.kind;\r
+               _obj.name       = obj.name;\r
                _obj.func       = obj.func;\r
                _obj.context    = obj.context;\r
                _obj.supplement = obj.supplement;\r
@@ -193,12 +208,16 @@ function X_Callback_create( thisObject, opt_callback, opt_args /* [ listener ||
 function X_Callback_classifyCallbackArgs( arg1, arg2, arg3, alt_context ){\r
        var obj;\r
        \r
-       if( arg1 && X_Type_isFunction( arg2 ) ){\r
+       if( X_Type_isObject( arg1 ) && X_Type_isFunction( arg2 ) ){\r
                obj  = { context : arg1, func : arg2, kind : X_Callback_THIS_FUNC };\r
        } else\r
-       if( arg1 && X_Type_isFunction( arg1[ 'handleEvent' ] ) ){\r
-               obj  = { context : arg1, kind : X_Callback_HANDLEEVENT };\r
-               arg3 = arg2;\r
+       if( X_Type_isObject( arg1 ) ){\r
+               if( arg2 && X_Type_isString( arg2 ) ){\r
+                       obj  = { context : arg1, name : arg2, kind : X_Callback_THIS_FUNCNAME };\r
+               } else {\r
+                       obj  = { context : arg1, kind : X_Callback_HANDLEEVENT };\r
+                       arg3 = arg2;                    \r
+               };\r
        } else\r
        if( X_Type_isFunction( arg1 ) ){\r
                arg3 = arg2;\r
@@ -216,6 +235,10 @@ function X_Callback_classifyCallbackArgs( arg1, arg2, arg3, alt_context ){
                        obj  = { func : arg2, kind : X_Callback_FUNC_ONLY };\r
                };\r
        } else\r
+       if( alt_context && X_Type_isString( arg1 ) ){\r
+               arg3 = arg2;\r
+               obj  = { context : alt_context, name : arg1, kind : X_Callback_THIS_FUNCNAME };\r
+       } else\r
        if( alt_context ){\r
                obj  = { context : alt_context, kind : X_Callback_HANDLEEVENT };\r
                arg3 = arg1;\r
@@ -243,7 +266,7 @@ function X_Callback_proxyCallback( xfunc, _args ){
                thisObj = xfunc.context,\r
                func    = xfunc.func,\r
                supp    = xfunc.supplement,\r
-               temp, ret;      \r
+               temp, ret, funcName;    \r
        \r
        if( supp && supp.length ){\r
                temp = [];\r
@@ -263,9 +286,12 @@ function X_Callback_proxyCallback( xfunc, _args ){
 \r
                case X_Callback_THIS_FUNC :\r
                        return args.length === 0 ? func.call( thisObj ) : func.apply( thisObj, args );\r
-                       \r
+               \r
+               case X_Callback_THIS_FUNCNAME :\r
+                       funcName = xfunc.name;\r
                case X_Callback_HANDLEEVENT :\r
-                       temp = thisObj[ 'handleEvent' ];\r
+                       funcName = funcName || 'handleEvent';\r
+                       temp = thisObj[ funcName ];\r
                        if( X_Type_isFunction( temp ) ){\r
                                return args.length === 0 ? thisObj[ 'handleEvent' ]() :\r
                                           args.length === 1 ? thisObj[ 'handleEvent' ]( args[ 0 ] ) : temp.apply( thisObj, args );\r
@@ -298,6 +324,7 @@ function X_Callback_correct( f ){
                X_Callback_POOL_LIST[ X_Callback_POOL_LIST.length ] = f;\r
                obj = f( X_Closure_COMMAND_BACK );\r
                delete obj.kind;\r
+               if( obj.name ) delete obj.name;\r
                if( obj.func ) delete obj.func;\r
                if( obj.context ) delete obj.context;\r
                if( obj.supplement ) delete obj.supplement;\r