// ------------------------------------------------------------------------- //\r
// ------------ local variables -------------------------------------------- //\r
// ------------------------------------------------------------------------- //\r
-var /** @const */\r
- X_EventDispatcher_EVENT_TARGET_OTHER = 0,\r
- /** @const */\r
+var X_EventDispatcher_EVENT_TARGET_OTHER = 0,\r
X_EventDispatcher_EVENT_TARGET_XHR = 1,\r
- /** @const */\r
X_EventDispatcher_EVENT_TARGET_SILVER_LIGHT = 2;\r
\r
var X_EventDispatcher_once = false,\r
\r
// iOS と MacOSX Iron36 で発生。連続してアニメーションが起こると、クロージャの束縛された obj へのアクセスに失敗する。Win では起きない?\r
// むしろ、MacOSX のブラウザ全般で起こる??\r
- X_EventDispatcher_ANIME_EVENTS = false && ( X_UA[ 'WebKit' ] || X_UA[ 'Blink' ] ) && {\r
+ X_EventDispatcher_ANIME_EVENTS = ( X_UA[ 'WebKit' ] || X_UA[ 'Blink' ] ) && {\r
'transitionend' : true, 'webkitTransitionEnd' : true, 'mozTransitionEnd' : true, 'oTransitionEnd' : true, 'otransitionEnd' : true,\r
'animationend' : true, 'webkitAnimationEnd' : true, 'oAnimationEnd' : true,\r
'animationstart' : true, 'webkitAnimationStart' : true, 'oAnimationStart' : true,\r
{\r
\r
/**\r
- * OTHER(Node,window,document,Image,Audio), XHR, Silverlight\r
+ * EventDispatcher がラップしている EventTarget オブジェクトのタイプです。<br>\r
+ * X_EventDispatcher_actualAddEvent で使用されます。<br>\r
+ * OTHER:0(node,window,document,Image,Audio), XHR:1, Silverlight:2\r
* @private\r
* @type {number}\r
*/\r
* this[ 'listen' ]( [ 'open', 'close', 'ready' ], onUpdate );\r
* \r
* @alias EventDispatcher.prototype.listen\r
- * @param {string|number|Array.<string,number>} type 配列を指定した場合、複数のイベントタイプに対して同じコールバックを登録する。\r
- * @param {listener|function|Array} [opt_arg1=]\r
- * @param {function|Array} [opt_arg2=]\r
- * @param {Array} [opt_arg3=] コールバック時の引数を配列に入れる。引数がひとつでも配列を使用する。省略した場合引数なし。\r
* @return {EventDispatcher} チェインメソッド\r
*/\r
function X_EventDispatcher_listen( type, opt_arg1, opt_arg2, opt_arg3 ){\r
};\r
\r
/**\r
- * イベントリスナの解除を行う。登録時と同じ引数を与える必要がある。kill() ですべてのイベントが解除されるので、途中で解除されるイベント以外は kill() に任せてしまってよい。\r
+ * イベントリスナの解除を行う。登録時と同じ引数を与える必要がある。kill() で自信に登録されたすべてのイベントが解除されるので、途中で解除されるイベント以外は kill() に任せてしまってよい。<br>\r
+ * 他人に登録したイベントを解除せずに kill するのは NG。\r
* @alias EventDispatcher.prototype.unlisten\r
* @return {EventDispatcher}\r
- * @param {string|number|Array.<string,number>} opt_type イベントID, イベント名、またはその配列\r
- * @param {listener|function|Array} opt_arg1\r
- * @param {function|Array} opt_arg2\r
- * @param {Array} opt_arg3\r
*/\r
function X_EventDispatcher_unlisten( opt_type, opt_arg1, opt_arg2, opt_arg3 ){\r
var listeners = this[ '_listeners' ],\r
\r
\r
// TODO ブラウザからの呼び出しの最後に登録された関数を呼び出す機能(例えば画面の更新)\r
-var X_EventDispatcher_CURRENT_EVENTS = [];\r
+var X_EventDispatcher_CURRENT_EVENTS = [];\r
+var X_EventDispatcher_ignoreActualEvent = '';\r
\r
// handleEvent を拡張可能にするために、クロージャに移動した\r
// Is this in regard to the Safari 1.x preventDefault bug on click/dblclick?\r
var X_EventDispatcher_actualHandleEvent =\r
X_UA_EVENT.IE4 || X_UA_EVENT.IE ? // ie45678 EVENT_IE & EVENT_DOM0 for ie4\r
(function(){\r
- var e = event, ret,\r
- ev = new X_DomEvent( e, this, this[ '_rawObject' ] );\r
+ var e = event,\r
+ elm = this[ '_rawObject' ],\r
+ ev, ret;\r
+ \r
+ /* if( e.type === X_EventDispatcher_ignoreActualEvent ){\r
+ e.cancelBubble = true;\r
+ return;\r
+ }; */\r
+ \r
+ ev = new X_DomEvent( e, this, elm );\r
\r
X_EventDispatcher_CURRENT_EVENTS[ X_EventDispatcher_CURRENT_EVENTS.length ] = ev;\r
\r
e.cancelBubble = true;\r
};\r
if( ret & X_CALLBACK_PREVENT_DEFAULT ){\r
- this[ '_tag' ] === 'A' && this[ '_rawObject' ].blur();\r
+ this[ '_tag' ] === 'A' && elm.blur();\r
return e.returnValue = false;\r
};\r
}) :\r
//X_UA_EVENT.W3C || X_UA_EVENT.DOM0\r
(function( e ){\r
- var ev = new X_DomEvent( e, this ),\r
- ret = X_CALLBACK_NONE,\r
- i, l;\r
+ var ret = X_CALLBACK_NONE,\r
+ ev, i, l;\r
+ \r
+ /* if( e.type === X_EventDispatcher_ignoreActualEvent ){\r
+ e.stopPropagation();\r
+ return;\r
+ }; */\r
\r
+ ev = new X_DomEvent( e, this );\r
X_EventDispatcher_CURRENT_EVENTS[ X_EventDispatcher_CURRENT_EVENTS.length ] = ev;\r
\r
// touch event -> pointer\r