\r
<script type="text/javascript" src="js/import.js"></script>\r
\r
+\r
<script type="text/javascript" src="js/20_ui/00_XUI.js"></script>\r
<script type="text/javascript" src="js/20_ui/02_XUI_Attr.js"></script>\r
<script type="text/javascript" src="js/20_ui/04_XUI_Event.js"></script>\r
<script type="text/javascript" src="js/20_ui/17_Text.js"></script>\r
<script type="text/javascript" src="js/20_ui/20_PageRoot.js"></script>\r
\r
+<script type="text/javascript" src="js/onReachEndOfScript.js"></script>\r
+\r
<script type="text/javascript" src="js/main.js"></script>\r
\r
</head>\r
\r
var undefined,\r
X = new Function( 'return X._shortcut && X._shortcut.apply( X._shortcut, arguments )' ),\r
- X_TEMP = { onSystemReady : [] };\r
+ X_TEMP = { onSystemReady : [] },\r
+ X_shortcutFunction,\r
+ X_shortcutContext;\r
\r
X.VERSION = '0.6.89';\r
\r
var functionHash;\r
\r
X.Callback = {\r
- \r
NONE : X_Callback_NONE,\r
UN_LISTEN : X_Callback_UN_LISTEN,\r
STOP_PROPAGATION : X_Callback_STOP_PROPAGATION,\r
STOP_NOW : X_Callback_STOP_NOW,\r
PREVENT_DEFAULT : X_Callback_PREVENT_DEFAULT,\r
- MONOPOLY : X_Callback_MONOPOLY,\r
- \r
- create : X_Callback_create,\r
- \r
- sys_monitor : function(){\r
- return {\r
- 'Live callback' : X_Callback_LIVE_LIST.length,\r
- 'Pool callback' : X_Callback_POOL_LIST.length\r
- };\r
- },\r
- \r
- sys_gc : function(){\r
- var list = X_Callback_POOL_LIST,\r
- f;\r
- while( 0 < list.length ){\r
- f = list.shift();\r
- X_Callback_correct( f );\r
- delete f[ 'kill' ];\r
- delete f[ 'same' ];\r
- };\r
- }\r
+ MONOPOLY : X_Callback_MONOPOLY\r
};\r
\r
-X_TEMP.onSystemReady.push( X_Callback_handleSystemEvent );\r
-\r
// ------------------------------------------------------------------------- //\r
// --- implements ---------------------------------------------------------- //\r
// ------------------------------------------------------------------------- //\r
\r
-function X_Callback_handleSystemEvent( e ){\r
- switch( e ){\r
- case '':\r
- };\r
-};\r
-\r
function X_Callback_create( thisObject, opt_callback, opt_args /* [ listener || ( context + function ) || function ][ args... ] */ ){\r
var obj = X_Callback_classifyCallbackArgs( thisObject, opt_callback, opt_args ),\r
l, ret, _obj;\r
_obj.s = obj.s;\r
} else {\r
ret = X_Closure_actualClosure( obj );\r
- ret.kill = X_Callback_kill;\r
- ret.same = X_Callback_same;\r
};\r
X_Callback_LIVE_LIST[ X_Callback_LIVE_LIST.length ] = ret;\r
- return ret; \r
+ return ret;\r
};\r
\r
function X_Closure_actualClosure( obj ){\r
return X_Callback_NONE;\r
};\r
\r
-function X_Callback_same( arg1, arg2, arg3 ){\r
- var hash;\r
- \r
- if( arg1 && arg1[ 'kill' ] === X_Callback_kill ) return this === arg1;\r
- \r
- hash = X_Callback_classifyCallbackArgs( arg1, arg2, arg3 );\r
- \r
- return hash && this.k === hash.k && this.x === hash.x && this.f === hash.f && this.s === hash.s;\r
-};\r
-\r
-function X_Callback_kill(){\r
- X_Callback_correct( this );\r
-};\r
-\r
function X_Callback_correct( f ){\r
var i = X_Callback_LIVE_LIST.indexOf( f ),\r
obj;\r
};\r
\r
\r
+// sys\r
+X_TEMP.X_Callback_onSystemReady = function( sys ){\r
+ delete X_TEMP.X_Callback_onSystemReady;\r
+ sys.monitor( X_Callback_monitor );\r
+ sys.gc( X_Callback_gc );\r
+};\r
+\r
+function X_Callback_monitor(){\r
+ return {\r
+ 'Callback:Live' : X_Callback_LIVE_LIST.length,\r
+ 'Callback:Pool' : X_Callback_POOL_LIST.length\r
+ };\r
+};\r
+function X_Callback_gc(){\r
+ X_Callback_POOL_LIST.length = 0; // ?\r
+};\r
+\r
+X_TEMP.onSystemReady.push( X_TEMP.X_Callback_onSystemReady );\r
\r
\r
console.log( 'X.Core.Callback' );\r
X_Class_useObjectCreate = false, // !!Object.create, http://jsperf.com/prototype-vs-object-create-perf\r
X_Class_use_proto_ = !!X.emptyFunction.prototype.__proto__;\r
\r
+/* \r
+ * X.Class.create で作られたクラスのインスタンスが共通で備えるメソッド \r
+ */\r
+var X_Class_CommonProps = {\r
+ kill : function(){\r
+ var instance = this,\r
+ klass = X_Class_getClass( instance ),\r
+ def = X_Class_getClassDef( klass ),\r
+ data, p, i;\r
+ if( def.isPrivate && !X_Class_killPrivateFlag ){\r
+ X.Logger.critical( 'PrivateInstance.kill() work in PrivateUser.kill().' );\r
+ return;\r
+ };\r
+ X_Class_killPrivateFlag = false; // onKill 内で PrivateInstance.kill() を防ぐため\r
+ \r
+ // onKill() === false の場合、kill のキャンセル\r
+ // private は false での キャンセル は無視される\r
+ \r
+ if( this.instanceOf( X.EventDispatcher ) ){\r
+ //console.log( 'this.instanceOf( X.EventDispatcher )! ' + this._dispatching );\r
+ if( !def.isPrivate ){\r
+ if( this._dispatching ){\r
+ this.dispatch( X.Event.BEFORE_KILL_INSTANCE );\r
+ this._killReserved = true;\r
+ this.dispatch( X.Event.KILL_INSTANCE_CANCELED );\r
+ return;\r
+ } else\r
+ if( this.dispatch( X.Event.BEFORE_KILL_INSTANCE ) & X.Callback.PREVENT_DEFAULT ){\r
+ this.dispatch( X.Event.KILL_INSTANCE_CANCELED );\r
+ return;\r
+ };\r
+ } else {\r
+ this.dispatch( X.Event.BEFORE_KILL_INSTANCE ); \r
+ };\r
+ this.dispatch( X.Event.KILL_INSTANCE );\r
+ this._listeners && X_EventDispatcher_systemUnlisten( this ); //.unlisten();\r
+ } else\r
+ if( X.Type.isFunction( instance.onKill ) && instance.onKill() === false && !def.isPrivate ){\r
+ return;\r
+ };\r
+ \r
+ for( p in instance ){\r
+ if( instance.hasOwnProperty && !instance.hasOwnProperty( p ) ) continue;\r
+ delete instance[ p ];\r
+ };\r
+ if( def.pool ){\r
+ def.live && def.live.splice( def.live.indexOf( instance ), 1 );\r
+ def.pool[ def.pool.length ] = instance;\r
+ };\r
+ if( def.privateClass ){\r
+ i = def.userList.indexOf( instance );\r
+ if( i !== -1 ){\r
+ data = X_Class_getPrivate( instance );\r
+ X_Class_killPrivateFlag = true;\r
+ if( data._dispatching && data.instanceOf( X.EventDispatcher ) ){\r
+ data._killReserved = true;\r
+ } else {\r
+ data.kill();\r
+ };\r
+ def.dataList.splice( i, 1 );\r
+ def.userList.splice( i, 1 );\r
+ };\r
+ };\r
+ },\r
+ \r
+ // TODO Super\r
+ // superCall\r
+ \r
+ instanceOf : function( klass ){\r
+ var Super = this;\r
+ if( this.constructor === klass ) return true;\r
+ while( Super = X_Class_getClassDef( Super ).SuperClass ){\r
+ if( Super === klass ) return true;\r
+ };\r
+ return false;\r
+ }\r
+};\r
// ------------------------------------------------------------------------- //\r
// --- interface ----------------------------------------------------------- //\r
// ------------------------------------------------------------------------- //\r
\r
return klass;\r
};\r
-\r
-/* X.Class.create で作られたクラスのインスタンスが共通で備えるメソッド \r
- *\r
- *\r
- */\r
-var X_Class_CommonProps = {\r
- kill : function(){\r
- var instance = this,\r
- klass = X_Class_getClass( instance ),\r
- def = X_Class_getClassDef( klass ),\r
- data, p, i;\r
- if( def.isPrivate && !X_Class_killPrivateFlag ){\r
- X.Logger.critical( 'PrivateInstance.kill() work in PrivateUser.kill().' );\r
- return;\r
- };\r
- X_Class_killPrivateFlag = false; // onKill 内で PrivateInstance.kill() を防ぐため\r
- \r
- // onKill() === false の場合、kill のキャンセル\r
- // private は false での キャンセル は無視される\r
- \r
- if( this.instanceOf( X.EventDispatcher ) ){\r
- console.log( 'this.instanceOf( X.EventDispatcher )! ' + this._dispatching );\r
- if( !def.isPrivate ){\r
- if( this._dispatching ){\r
- this.dispatch( X.Event.BEFORE_KILL_INSTANCE );\r
- this._killReserved = true;\r
- this.dispatch( X.Event.KILL_INSTANCE_CANCELED );\r
- return;\r
- } else\r
- if( this.dispatch( X.Event.BEFORE_KILL_INSTANCE ) & X.Callback.PREVENT_DEFAULT ){\r
- this.dispatch( X.Event.KILL_INSTANCE_CANCELED );\r
- return;\r
- };\r
- } else {\r
- this.dispatch( X.Event.BEFORE_KILL_INSTANCE ); \r
- };\r
- console.log('kill ' + this._dispatching);\r
- this.dispatch( X.Event.KILL_INSTANCE );\r
- this._listeners && this.unlisten();\r
- } else\r
- if( X.Type.isFunction( instance.onKill ) && instance.onKill() === false && !def.isPrivate ){\r
- return;\r
- };\r
- \r
- for( p in instance ){\r
- if( instance.hasOwnProperty && !instance.hasOwnProperty( p ) ) continue;\r
- delete instance[ p ];\r
- };\r
- if( def.pool ){\r
- def.live && def.live.splice( def.live.indexOf( instance ), 1 );\r
- def.pool[ def.pool.length ] = instance;\r
- };\r
- if( def.privateClass ){\r
- i = def.userList.indexOf( instance );\r
- if( i !== -1 ){\r
- data = X_Class_getPrivate( instance );\r
- X_Class_killPrivateFlag = true;\r
- if( data._dispatching && data.instanceOf( X.EventDispatcher ) ){\r
- data._killReserved = true;\r
- } else {\r
- data.kill();\r
- };\r
- def.dataList.splice( i, 1 );\r
- def.userList.splice( i, 1 );\r
- };\r
- };\r
- },\r
- \r
- // TODO Super\r
- // superCall\r
- \r
- instanceOf : function( klass ){\r
- var Super = this;\r
- if( this.constructor === klass ) return true;\r
- while( Super = X_Class_getClassDef( Super ).SuperClass ){\r
- if( Super === klass ) return true;\r
- };\r
- return false;\r
- }\r
-};\r
\r
/*\r
* new の実体.コンストラクタの機能は instance.Constructor に書く.\r
\r
+var X_Event_last = 0,\r
+ X_Event_Rename = {},\r
+ X_Event_RenameTo = {},\r
+ \r
+ X_Event_toPointer = !X_UA_HID.POINTER && ( X_UA_HID.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
X_TEMP.SYSTEM_EVENT_PRE_INIT = 1;\r
X_TEMP.SYSTEM_EVENT_XTREE = 2;\r
X_TEMP.SYSTEM_EVENT_INIT = 3;\r
TIMEOUT : 12,\r
BEFORE_KILL_INSTANCE : 13,\r
KILL_INSTANCE_CANCELED : 14, \r
- KILL_INSTANCE : 15,\r
+ KILL_INSTANCE : 15\r
+};\r
+\r
+X_Event_last = 15;\r
\r
- _LAST_EVENT : 15\r
-};
\ No newline at end of file
+X_TEMP.onSystemReady.push(\r
+ function(){\r
+ var k, name, i;\r
+ for( k in X_Event_Rename ){\r
+ name = X_Event_Rename[ k ];\r
+ if( X.Type.isArray( name ) ){\r
+ for( i = name.length; i; ){\r
+ X_Event_RenameTo[ name[ --i ] ] = k;\r
+ };\r
+ } else {\r
+ X_Event_RenameTo[ name ] = k;\r
+ };\r
+ };\r
+ });\r
// ------------ local variables -------------------------------------------- //\r
// ------------------------------------------------------------------------- //\r
var X_EventDispatcher_once = false,\r
+ X_EventDispatcher_lock = false,\r
+ X_EventDispatcher_unlock = false,\r
X_EventDispatcher_needsIndex = false,\r
\r
X_EventDispatcher_safariPreventDefault = false; // Safari3-\r
// ------------------------------------------------------------------------- //\r
\r
/**\r
- * イベントターゲット(widnow, document, Image, XHR 等)をラップする場合、通常は new 時に渡します。参照:コンストラクタ実体 {@link X.EventDispatcher.Constructor}\r
+ * イベントターゲット(widnow, document, Image, XHR, Silverlight 等)をラップする場合、通常は new 時に渡します。参照:コンストラクタ実体 {@link X.EventDispatcher.Constructor}\r
* アプリケーション独自のイベントをやり取りしたいだけ、という場合、イベントターゲットは不要です。\r
* @class\r
* @classdesc EventTarget オブジェクトをラップしたり、アプリケーションで独自に定義したイベントを発信するためのクラスです。\r
* イベントターゲットオブジェクト(widnow, document, HTMLElement, XHR 等)が _rawObject に設定されていた場合に、それらへ実際のイベント登録・解除も行います。\r
* このイベントの登録・解除はクロスブラウザで、IE5~8 の独自イベントの差異を吸収し、DOM0 に対しても複数のコールバックを登録することができます。\r
* またコールバックに対して、this コンテキストや、追加の引数を指定もできます。 this コンテキストを指定しなかった場合、EventDispatcher インスタンスがコールバックの this になります。 \r
+ * unlisten() は、引数を指定しなかった場合、全てのイベントを解除します。ただし、systemListen 経由で登録されたハンドラは解除されません。\r
+ * systemListen, systemUnlisten は、ライブラリ内のコードからしかアクセスできません。\r
* @param {object=} opt_rawObject\r
*/\r
X.EventDispatcher =\r
* @this {X.EventDispatcher}\r
* @return {(number|boolean)}\r
* @param {(string|number)=} opt_type\r
- * @param {(listener|function|Array)=} opt_arg1\r
+ * @param {(listener|function|Array|callbackHash)=} opt_arg1\r
* @param {(function|Array=} opt_arg2\r
* @param {Array=} opt_arg3\r
*/ \r
};\r
for( i = list.length; i; ){\r
f = list[ --i ];\r
- if( f === hash || ( f.x === hash.x && f.f === hash.f && f.s === hash.s ) ) return X_EventDispatcher_needsIndex ? i : true;\r
+ if( f === hash || ( f.x === hash.x && f.f === hash.f && f.s === hash.s ) ){\r
+ // index を要求された場合、lock されていない、または unlock なら index を返す\r
+ return X_EventDispatcher_needsIndex ? ( X_EventDispatcher_unlock || !f.lock ? i : false ) : true;\r
+ };\r
};\r
return false;\r
},\r
* delay(ミリ秒)後にイベントを dispatch する。戻り値は uid = X.Timer.add() のタイマーID(数値)。X.Timer.remove(uid) でタイマーを解除して dispatch を中止できる。\r
* @this {X.EventDispatcher}\r
* @return {number}\r
- * @param {number=} delay\r
+ * @param {number=} delay ms 省略した場合は 0 として扱う asyncDispatch( 'myevent' ) -> asyncDispatch( 0, 'myevent' )\r
* @param {(eventHash|string|number)=} e\r
*/ \r
asyncDispatch : function( delay, e ){\r
+ if( delay && e === undefined ){\r
+ e = delay;\r
+ delay = 0;\r
+ console.log( 'lazy : ' + e );\r
+ };\r
return X.Timer.add( delay, 1, this, this.dispatch, [ e ] );\r
}\r
}\r
};\r
if( unlistens && unlistens.indexOf( f ) !== -1 ) continue;\r
\r
- r = X_Callback_NONE;\r
- if( f.k ){\r
- r = X_Callback_proxyCallback( f, args || ( args = [ e ] ) );\r
- } else {\r
- r = f.call( this, e );\r
- };\r
+ //if( f !== X.emptyFunction ){\r
+ // if( f.k ){\r
+ r = X_Callback_proxyCallback( f, args || ( args = [ e ] ) );\r
+ // } else {\r
+ // r = f.call( this, e );\r
+ // };\r
+ //};\r
\r
if( f.once || r & X_Callback_UN_LISTEN ){\r
// dispatch 中に unlisten が作られることがある\r
unlistens = this._unlistens;\r
delete this._dispatching;\r
delete this._unlistens; \r
- \r
+ // _unlistens に入っている callbackHash は、lock をクリアしている\r
+ X_EventDispatcher_unlock = true;\r
for( type in unlistens ){\r
list = unlistens[ type ];\r
for( i = list.length; i; ){\r
list.length = 0;\r
delete unlistens[ type ];\r
};\r
+ X_EventDispatcher_unlock = false;\r
\r
if( this._killReserved ){\r
this.kill();\r
for( i = 0, l = list.length; i < l; ++i ){\r
f = list[ i ];\r
X_EventDispatcher_once = f[ 4 ];\r
+ X_EventDispatcher_lock = f[ 5 ];\r
this.listen( f[ 0 ], f[ 1 ], f[ 2 ], f[ 3 ] );\r
X_EventDispatcher_once = false;\r
+ X_EventDispatcher_lock = false;\r
f.length = 0;\r
};\r
list.length = 0;\r
\r
if( this._dispatching ){\r
if( !this._reserves ) this._reserves = [];\r
- this._reserves[ this._reserves.length ] = [ type, opt_arg1, opt_arg2, opt_arg3, X_EventDispatcher_once ];\r
+ this._reserves[ this._reserves.length ] = [ type, opt_arg1, opt_arg2, opt_arg3, X_EventDispatcher_once, X_EventDispatcher_lock ];\r
return this;\r
};\r
\r
if( !list ) list = this._listeners = {};\r
if( !( list = list[ type ] ) ) list = this._listeners[ type ] = [];\r
\r
- add && X_EventDispatcher_actualAddEvent( this, type, raw, list );\r
+ add && X_EventDispatcher_addEvent( this, type, raw, list );\r
\r
f = X_Callback_classifyCallbackArgs( opt_arg1, opt_arg2, opt_arg3, this );\r
list[ list.length ] = f;\r
f.once = X_EventDispatcher_once;\r
+ f.lock = X_EventDispatcher_lock;\r
\r
return this;\r
};\r
\r
+/*\r
+ * X_EventDispatcher_systemUnlisten 経由でないと解除できないリスナの登録\r
+ */\r
+function X_EventDispatcher_systemListen( that, type, opt_arg1, opt_arg2, opt_arg3 ){\r
+ X_EventDispatcher_lock = true;\r
+ that.listen( type, opt_arg1, opt_arg2, opt_arg3 );\r
+ X_EventDispatcher_lock = false;\r
+};\r
+\r
/**\r
* \r
* @this {X.EventDispatcher}\r
if( i === false ) return this;\r
\r
f = ( _list = list[ opt_type ] )[ i ];\r
+ // _unlistens に入っている callbackHash は、lock をクリアしている\r
if( unlistens = this._unlistens ){\r
( unlistens = unlistens[ opt_type ] ) ?\r
( unlistens[ unlistens.length ] = f ) :\r
( this._unlistens[ opt_type ] = [ f ] );\r
} else {\r
delete f.once;\r
- // f.kill === X_Callback_kill && f.kill();\r
_list.splice( i, 1 );\r
if( !_list.length ){\r
raw = this._rawObject || this._ie4getRawNode && this._ie4getRawNode();\r
delete list[ opt_type ];\r
if( empty = X_Object_isEmpty( list ) ) delete this._listeners;\r
if( raw && '' + parseFloat( opt_type ) !== '' + opt_type ){ // 数字イベントの除外\r
- X_EventDispatcher_actualRemoveEvent( this, opt_type, raw, _list, !empty );\r
+ X_EventDispatcher_removeEvent( this, opt_type, raw, _list, !empty );\r
};\r
};\r
};\r
return this;\r
};\r
\r
+/*\r
+ * X_EventDispatcher_systemListen から登録したイベントの解除\r
+ */\r
+function X_EventDispatcher_systemUnlisten( that, type, opt_arg1, opt_arg2, opt_arg3 ){\r
+ X_EventDispatcher_unlock = true;\r
+ that.unlisten( type, opt_arg1, opt_arg2, opt_arg3 );\r
+ X_EventDispatcher_unlock = false;\r
+};\r
+\r
+function X_EventDispatcher_addEvent( that, type, raw, list ){\r
+ var i;\r
+ X_EventDispatcher_lock || ( type = X_Event_Rename[ type ] || type );\r
+ \r
+ if( X.Type.isArray( type ) ){\r
+ for( i = type.length; i; ){\r
+ X_EventDispatcher_systemListen( that, type[ --i ], X.emptyFunction );\r
+ console.log( 'X_EventDispatcher_systemListen ' + type[ i ] );\r
+ };\r
+ } else {\r
+ X_EventDispatcher_actualAddEvent( that, type, raw, list );\r
+ };\r
+};\r
\r
var X_EventDispatcher_actualAddEvent =\r
// Days on the Moon DOM Events とブラウザの実装 \r
// Safari 2 では関数オブジェクトしか EventListener として使えませんが、Safari のナイトリービルドでは handleEvent メソッドを持つオブジェクトも EventListener として使えるようです。\r
X_UA_EVENT.W3C /* && ( X.UA.WebKit < 525.13 || X.UA.Opera7 || X.UA.NetFront < 4 ) */ ? // Safari3-\r
(function( that, type, raw, list ){\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, list );\r
- };\r
- } else\r
if( that._isXHR && X.UA.Opera < 12 ){\r
// Opera11- の XHR は event オブジェクトが返らないため, eventType 毎に callback を指定する addEventListener もない\r
raw[ 'on' + type ] = X_Callback_create( that, X_EventDispatcher_dispatch, [ type ] );\r
}) :\r
X_UA_EVENT.IE ?\r
(function( that, type, raw, list ){\r
- var i;\r
- //if( type === 'load' && that._tag && X.Dom.Event._LOAD_FIX_TAGS[ that._tag ] ){\r
- // type = 'readystatechange';\r
- //};\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, list );\r
- };\r
- } else\r
if( that._isXHR ){\r
// ie8- の XHR は window.event が更新されないため, eventType 毎に callback を指定する\r
raw[ 'on' + type ] = X_Callback_create( that, X_EventDispatcher_dispatch, [ type ] );\r
};\r
}) :\r
(function( that, type, raw, list ){\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, list );\r
- };\r
- } else\r
if( that._isXHR ){\r
// ie4 mobile は XHR をサポート!\r
raw[ 'on' + type ] = X_Callback_create( that, X_EventDispatcher_dispatch, [ type ] );\r
} else\r
if( that._isSilverlight ){\r
+ // DOM0 で Silverlight ってあるの?\r
list.slcallback = X_Callback_create( that, X_EventDispatcher_sliverLightDispatch, [ type ] );\r
list.sltoken = raw.AddEventListener( type, list.slcallback );\r
} else {\r
return this.dispatch( type );\r
};\r
\r
+function X_EventDispatcher_removeEvent( that, type, raw, list, skip ){\r
+ var i;\r
+ X_EventDispatcher_unlock || ( type = X_Event_Rename[ type ] || type );\r
+ \r
+ if( X.Type.isArray( type ) ){\r
+ for( i = type.length; i; ){\r
+ X_EventDispatcher_systemUnlisten( that, type[ --i ], X.emptyFunction );\r
+ };\r
+ } else {\r
+ X_EventDispatcher_actualRemoveEvent( that, type, raw, list, skip );\r
+ };\r
+};\r
+\r
var X_EventDispatcher_actualRemoveEvent =\r
X_UA_EVENT.W3C /*&& ( X.UA.WebKit < 525.13 || X.UA.Opera7 || X.UA.NetFront < 4 )*/ ? // Safari3-\r
(function( that, type, raw, list, skip ){\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_actualRemoveEvent( that, type[ --i ], raw, list, i ? true : skip );\r
- };\r
- } else\r
if( that._isXHR && X.UA.Opera < 12 ){\r
X_Callback_correct( raw[ 'on' + type ] );\r
raw[ 'on' + type ] = '';\r
}) :\r
X_UA_EVENT.IE ?\r
(function( that, type, raw, list, skip ){\r
- var i;\r
- //if( type === 'load' && that._tag && X.Dom.Event._LOAD_FIX_TAGS[ that._tag ] ){\r
- // type = 'readystatechange';\r
- //};\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_actualRemoveEvent( that, type[ --i ], raw, list, i ? true : skip );\r
- };\r
- } else\r
if( that._isXHR ){\r
X_Callback_correct( raw[ 'on' + type ] );\r
raw[ 'on' + type ] = X.emptyFunction;\r
};\r
}) :\r
(function( that, type, raw, list, skip ){\r
- var i;\r
- type = X.Dom.Event.Rename[ type ] || type;\r
- if( X.Type.isArray( type ) ){\r
- for( i = type.length; i; ){\r
- X_EventDispatcher_actualRemoveEvent( that, type[ --i ], raw, list, i ? true : skip );\r
- };\r
- } else\r
if( that._isXHR ){\r
X_Callback_correct( raw[ 'on' + type ] );\r
raw[ 'on' + type ] = X.emptyFunction;\r
var ev = new X.Dom.Event( e, this ),\r
ret = X_Callback_NONE,\r
i, l;\r
- \r
+ console.log( '>>>>>>>>>> ' + e.type );\r
// touch event -> pointer\r
if( X.Type.isArray( ev ) ){\r
if( ev.length === 0 ){\r
ret = X.Callback.STOP_PROPAGATION | X.Callback.PREVENT_DEFAULT;\r
} else {\r
for( i = 0, l = ev.length; i < l; ++i ){\r
+ console.log( 'handleEvent ' + ev[ i ].type );\r
ret |= this.dispatch( ev[ i ] ) || 0;\r
}; \r
};\r
function X_EventDispatcher_toggleAllEvents( that, add ){\r
var list = that._listeners,\r
raw = that._rawObject || that._ie4getRawNode && that._ie4getRawNode(),\r
- f = add ? X_EventDispatcher_actualAddEvent : X_EventDispatcher_actualRemoveEvent,\r
+ f = add ? X_EventDispatcher_addEvent : X_EventDispatcher_removeEvent,\r
type;\r
if( !list || !raw ) return;\r
for( type in list ){\r
// 数字イベントの除外\r
if( '' + parseFloat( type ) !== type ){\r
+ // TODO type rename はここ\r
f( that, type, raw, list[ type ], true );\r
};\r
};\r
heavy,\r
q, f, c, r, uid;\r
\r
- console.log( '予定時間と発火時間の差:' + ( now - X_Timer_timeStamp - X_Timer_waitTime * X_Timer_INTERVAL_TIME ) + ' -:' + minus + ' next:' + X_Timer_waitTime );\r
+ //console.log( '予定時間と発火時間の差:' + ( now - X_Timer_timeStamp - X_Timer_waitTime * X_Timer_INTERVAL_TIME ) + ' -:' + minus + ' next:' + X_Timer_waitTime );\r
\r
if( X_Timer_busyTimeout ){\r
alert( 'X_Timer_busyTimeout フラグが立ったまま!エラーの可能性' );\r
--- /dev/null
+\r
+\r
+var X_System = X.Class._override(\r
+ new X.EventDispatcher(),\r
+ {\r
+ monitor : function(){\r
+ \r
+ },\r
+ \r
+ gc : function(){\r
+ \r
+ }\r
+ }\r
+);\r
+\r
+X_TEMP.onRearchEndOfScript = function(){\r
+ var cbs = X_TEMP.onSystemReady,\r
+ i = cbs.length;\r
+ delete X_TEMP.onRearchEndOfScript;\r
+ delete X_TEMP.onSystemReady;\r
+ \r
+ for( ; i; ){\r
+ cbs[ --i ]( X_System );\r
+ };\r
+};
\ No newline at end of file
/*\r
* X.Event.XDOM_READY 以後に listen した場合の対策\r
*/\r
- X.Dom.asyncDispatch( 0, { type : type, w : X_Dom_width, h : X_Dom_height } );\r
+ X.Dom.asyncDispatch( { type : type, w : X_Dom_width, h : X_Dom_height } );\r
};\r
return X_EventDispatcher_listen.apply( X.Dom, arguments );\r
},\r
getBaseFontSize : function(){\r
if( Node._body._updateTimerID ){\r
Node._body._startUpdate();\r
- return Node._fontSizeNode._rawObject.offsetHeight;\r
+ return X_Dom_baseFontSize = Node._fontSizeNode._rawObject.offsetHeight;\r
};\r
return X_Dom_baseFontSize;\r
}\r
\r
size = Node._fontSizeNode._rawObject.offsetHeight;\r
if( X_Dom_baseFontSize !== size ){\r
- X_Dom_baseFontSize && X.Dom.asyncDispatch( 0, { type : X.Dom.Event.BASE_FONT_RESIZED, fontSize : size, w : X_Dom_width, h : X_Dom_height } );\r
+ X_Dom_baseFontSize && X.Dom.asyncDispatch( { type : X.Dom.Event.BASE_FONT_RESIZED, fontSize : size, w : X_Dom_width, h : X_Dom_height } );\r
X_Dom_baseFontSize = size;\r
};\r
\r
function X_Dom_detectFinishResizing(){\r
var size = X_Dom_getWindowSize();\r
if( X_Dom_width !== size[ 0 ] || X_Dom_height !== size[ 1 ] ){\r
- X_Dom_width = size[ 0 ];\r
+ X_Dom_width = size[ 0 ];\r
X_Dom_height = size[ 1 ];\r
X.Timer.once( 100, X_Dom_detectFinishResizing );\r
} else {\r
console.log( '-- detectFinishResizing : ' + X_Timer_now() );\r
\r
- X.Dom.asyncDispatch( 0, { type : X.Dom.Event.VIEW_RESIZED, fontSize : size, w : X_Dom_width, h : X_Dom_height } );\r
+ X.Dom.asyncDispatch( { type : X.Dom.Event.VIEW_RESIZED, fontSize : X_Dom_baseFontSize, w : X_Dom_width, h : X_Dom_height } );\r
X_Dom_lock = false;\r
if( X_Dom_orientationFlag ){\r
X_Dom_orientationFlag = false;\r
X_Dom_readyState = X_TEMP.SYSTEM_EVENT_PRE_INIT;\r
\r
// DOMContentLoaded の無いブラウザで X_TEMP.onDomContentLoaded への参照が残り続けるのを回避\r
- Node._document.unlisten( 'DOMContentLoaded', X_TEMP.onDomContentLoaded );\r
+ X_TEMP.onDomContentLoaded && Node._document.unlisten( 'DOMContentLoaded', X_TEMP.onDomContentLoaded );\r
delete X_TEMP.onDomContentLoaded;\r
\r
elmHtml = document.documentElement ||\r
\r
X.Dom.listenOnce( X_TEMP.SYSTEM_EVENT_PRE_INIT, function(){\r
X_Dom_readyState = X_TEMP.SYSTEM_EVENT_XTREE;\r
- !X_TEMP.X_Dom_useBuilder && X.Dom.asyncDispatch( 0, X_TEMP.SYSTEM_EVENT_XTREE );\r
+ if( X_TEMP.X_Dom_useBuilder ) X_TEMP.X_Dom_useBuilder = !!document.body.children.length;\r
+ !X_TEMP.X_Dom_useBuilder && X.Dom.asyncDispatch( X_TEMP.SYSTEM_EVENT_XTREE );\r
} );\r
\r
X.Dom.listenOnce( X_TEMP.SYSTEM_EVENT_XTREE, function(){\r
Node._fontSizeNode = Node.create( 'div', { 'class' : 'hidden-system-node' } ).cssText( 'line-height:1;height:1em;' ).text( 'X' )\r
)._startUpdate();\r
\r
- X.Dom.asyncDispatch( 0, X_TEMP.SYSTEM_EVENT_INIT );\r
+ X.Dom.asyncDispatch( X_TEMP.SYSTEM_EVENT_INIT );\r
} );\r
\r
X.Dom.listenOnce( X_TEMP.SYSTEM_EVENT_INIT, function(){\r
X_Dom_baseFontSize = Node._fontSizeNode._rawObject.offsetHeight;\r
\r
X_Dom_readyState = X.Event.XDOM_READY;\r
- X.Dom.asyncDispatch( 0, { type : X.Event.XDOM_READY, w : X_Dom_width = size[ 0 ], h : X_Dom_height = size[ 1 ] } );\r
+ X.Dom.asyncDispatch( { type : X.Event.XDOM_READY, w : X_Dom_width = size[ 0 ], h : X_Dom_height = size[ 1 ] } );\r
} );\r
\r
- X.Dom.asyncDispatch( 0, X_TEMP.SYSTEM_EVENT_PRE_INIT ); \r
+ console.log( X.Dom.asyncDispatch( X_TEMP.SYSTEM_EVENT_PRE_INIT ) ); \r
\r
Node._window\r
.listen( 'beforeunload', X.Dom )\r
var X_Dom_detectFontSize = function(){\r
var size = Node._fontSizeNode._rawObject.offsetHeight;\r
if( X_Dom_baseFontSize !== size ){\r
- X_Dom_baseFontSize && X.Dom.asyncDispatch( 0, { type : X.Dom.Event.BASE_FONT_RESIZED, fontSize : size, w : X_Dom_width, h : X_Dom_height } );\r
+ X_Dom_baseFontSize && X.Dom.asyncDispatch( { type : X.Dom.Event.BASE_FONT_RESIZED, fontSize : size, w : X_Dom_width, h : X_Dom_height } );\r
X_Dom_baseFontSize = size;\r
};\r
};\r
break;\r
case X_Node_TYPE.HTML_STRING :\r
case X_Node_TYPE.STRING :\r
- if( xnodes = X.Dom.parse( v, true ) && 1 < xnodes.length ) return new X.Dom.NodeList( xnodes );\r
+ if( xnodes = X_HtmlParser_parse( v, true ) && 1 < xnodes.length ) return new X.Dom.NodeList( xnodes );\r
if( xnodes.length ) return xnodes[ 0 ];\r
return Node.none;\r
case X_Node_TYPE.IMAGE :\r
Node._newByTag = true;\r
return new Node( tag, opt_attrs, opt_css );\r
case X_Node_TYPE.HTML_STRING :\r
- list = X.Dom.parse( tag, true );\r
+ list = X_HtmlParser_parse( tag, true );\r
for( i = list.length; 1 < i; ){\r
list[ --i ].destroy();\r
};\r
break;\r
case X_Node_TYPE.HTML_STRING :\r
case X_Node_TYPE.STRING :\r
- return this.append.apply( this, X.Dom.parse( v, true ) );\r
+ return this.append.apply( this, X_HtmlParser_parse( v, true ) );\r
case X_Node_TYPE.XNODE :\r
if( v._xnodeType !== 1 && v._xnodeType !== 3 ) return this;\r
// 親の xnodes から v を消す\r
break;\r
case X_Node_TYPE.HTML_STRING :\r
case X_Node_TYPE.STRING :\r
- v = X.Dom.parse( v, true );\r
+ v = X_HtmlParser_parse( v, true );\r
for( i = v.length; i; ){\r
this.appendAt( start, v[ --i ] );\r
};\r
parent = new Node( parent );\r
break;\r
case X_Node_TYPE.HTML_STRING :\r
- parent = X.Dom.parse( parent, true );\r
+ parent = X_HtmlParser_parse( parent, true );\r
parent = parent[ 0 ] || parent;\r
case X_Node_TYPE.XNODE :\r
break;\r
// setter\r
if( html !== undefined ){ // String 以外に Number や false null なども許可\r
if( this._xnodeType === 3 ) return this.text( html );\r
- return html ? this.empty().append.apply( this, X.Dom.parse( html, true ) ) : this.empty();\r
+ return html ? this.empty().append.apply( this, X_HtmlParser_parse( html, true ) ) : this.empty();\r
};\r
\r
// getter\r
\r
if( !X.UA.IE || 9 <= X.UA.IE ){\r
X.Dom.Event = function( e, xnode ){\r
- var _type = e.type,\r
- type,\r
+ var originalType = e.type,\r
+ type, pointerType,\r
touches, events,\r
altKey, ctrlKey, metaKey, shiftKey, target, related,\r
elm, i, n, time, touch, ev;\r
\r
//this._event = e;\r
- this.type = type = X.Dom.Event.RenameTo[ _type ] || _type;\r
+ this.type = type = X_Event_RenameTo[ originalType ] || originalType;\r
\r
+ console.log( 'original : ' + originalType + ' > ' + type );\r
// http://msdn.microsoft.com/ja-jp/library/ie/dn304886%28v=vs.85%29.aspx\r
// ポインター イベントの更新\r
if( e.pointerType ){\r
//Y-Z 平面と、ペンの軸が含まれる平面の間の角度を返します。Y 軸の範囲は -90 ~ +90 です。X の傾きの正の方向は右方向です。\r
this.tiltX = e.tiltX;\r
this.tiltY = e.tiltY;\r
- if( _type === 'MSPointerHover' ){\r
+ if( originalType === 'MSPointerHover' ){\r
this.type = 'pointermove'; // ie10 には pointerhover と pointermoveがあり、ie11 で一本化。ie11 では buttons を見て hover 状態を判定\r
};\r
case 'touch' :\r
this.offsetX = e.offsetX;\r
this.offsetY = e.offsetY;\r
} else\r
- if( X.Dom.Event.toPointer[ _type ] ){\r
+ if( pointerType = X_Event_toPointer[ originalType ] ){\r
// Touch or Mouse\r
\r
/* e.constructor === window.TouchEvent -> e.touches for iOS3.13 */\r
- if( touches = e.changedTouches ){\r
+ if( touches = e.changedTouches ){\r
if( touches.length === 0 ){\r
alert( 'e.changedTouches.length === 0' );\r
};\r
- xnode._cancelMouse = type;\r
+ xnode._cancelMouse = pointerType;\r
\r
events = [];\r
altKey = e.altKey;\r
target = touch.target;\r
related = touch.relatedTarget;\r
events[ i ] = {\r
- type : type,\r
+ type : pointerType,\r
pointerType : 'touch',\r
target : X_Node_getXNode( target.nodeType === 3 ? target.parentNode : target ),// defeat Safari bug // xnodetouch.target,\r
currentTarget : xnode,\r
return events.length === 1 ? events[ 0 ] : events;\r
} else {\r
\r
- if( xnode._cancelMouse === type ){\r
+ if( xnode._cancelMouse === pointerType ){\r
delete xnode._cancelMouse;\r
+ console.log( '**** xnode._cancelMouse ' + xnode._cancelMouse );\r
return [];\r
};\r
\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.pageY = e.pageY;\r
this.offsetX = e.offsetX || e.layerX; // 要素上の座標を取得 \r
this.offsetY = e.offsetY || e.layerY;\r
+ \r
+ // http://www.programming-magic.com/20090127231544/\r
+ // Opera で button==2の場合、コンテキストメニューイベントを発火 「ツール」->「設定」->「詳細設定」->「コンテンツ」->「Javascriptオプション」で「右クリックを制御するスクリプトを許可する」\r
+ if( originalType === 'mousedown' && this.button === 2 && X.UA.Opera ){\r
+ events = [ X.Object.clone( this ), X.Object.clone( this ) ];\r
+ events[ 1 ].type = 'contextmenu';\r
+ return events;\r
+ };\r
};\r
} else {\r
// Other\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
+ this.deltaY = originalType === 'MozMousePixelScroll' ? e.detail / 45 : e.detail / 3; // 3\r
} else {\r
this.deltaX = this.deltaY = this.deltaZ = 0;\r
};\r
- }; \r
+ };\r
};\r
\r
this.currentTarget = xnode; // xnode\r
};\r
} else {\r
X.Dom.Event = function( e, xnode, element ){\r
- var _type = e.type, btn, type;\r
+ var originalType = e.type, btn, type;\r
\r
- this.type = X.Dom.Event.RenameTo[ _type ] || _type;\r
+ this.type = X_Event_RenameTo[ originalType ] || originalType;\r
this.target = X_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.shiftKey = e.shiftKey; \r
\r
// http://www.programming-magic.com/20090127231544/\r
- switch( _type ){\r
+ switch( originalType ){\r
case 'click' :\r
case 'dblclick' :\r
this.button = 0;\r
};\r
this.buttons = e.button;\r
\r
- if( type = X.Dom.Event.toPointer[ _type ] ){\r
+ if( type = X_Event_toPointer[ originalType ] ){\r
this.type = type;\r
this.clientX = e.clientX;\r
this.clientY = e.clientY;\r
};\r
};\r
\r
-X.Dom.Event.VIEW_ACTIVATE = ++X.Event._LAST_EVENT;\r
-X.Dom.Event.VIEW_DEACTIVATE = ++X.Event._LAST_EVENT;\r
-X.Dom.Event.VIEW_RESIZED = ++X.Event._LAST_EVENT;\r
-X.Dom.Event.VIEW_TURNED = ++X.Event._LAST_EVENT;\r
-X.Dom.Event.BASE_FONT_RESIZED = ++X.Event._LAST_EVENT;\r
+X.Dom.Event.VIEW_ACTIVATE = ++X_Event_last;\r
+X.Dom.Event.VIEW_DEACTIVATE = ++X_Event_last;\r
+X.Dom.Event.VIEW_RESIZED = ++X_Event_last;\r
+X.Dom.Event.VIEW_TURNED = ++X_Event_last;\r
+X.Dom.Event.BASE_FONT_RESIZED = ++X_Event_last;\r
// same_page_jump\r
// on_screen_keyboard_show\r
// on_screen_keyboard_hide\r
-// X.Dom.Event.BEFORE_UPDATE = ++X.Event._LAST_EVENT; // このイベントで要素のサイズを取得すると無限ループに!\r
-X.Dom.Event.AFTER_UPDATE = ++X.Event._LAST_EVENT;\r
+// X.Dom.Event.BEFORE_UPDATE = ++X_Event_last; // このイベントで要素のサイズを取得すると無限ループに!\r
+X.Dom.Event.AFTER_UPDATE = ++X_Event_last;\r
// hash_change\r
-X.Dom.Event.BEFORE_UNLOAD = ++X.Event._LAST_EVENT;\r
-X.Dom.Event.UNLOAD = ++X.Event._LAST_EVENT;\r
+X.Dom.Event.BEFORE_UNLOAD = ++X_Event_last;\r
+X.Dom.Event.UNLOAD = ++X_Event_last;\r
+\r
+X.Dom.Event.ANIME_BEFORE_START = ++X_Event_last;\r
+X.Dom.Event.ANIME_START = ++X_Event_last;\r
+X.Dom.Event.ANIME = ++X_Event_last;\r
+X.Dom.Event.ANIME_END = ++X_Event_last;\r
+X.Dom.Event.ANIME_BEFORE_STOP = ++X_Event_last; // xnode.stop() のみ、指定時間による停止では呼ばれない\r
+X.Dom.Event.ANIME_STOP = ++X_Event_last;\r
\r
-X.Dom.Event.ANIME_BEFORE_START = ++X.Event._LAST_EVENT;\r
-X.Dom.Event.ANIME_START = ++X.Event._LAST_EVENT;\r
-X.Dom.Event.ANIME = ++X.Event._LAST_EVENT;\r
-X.Dom.Event.ANIME_END = ++X.Event._LAST_EVENT;\r
-X.Dom.Event.ANIME_BEFORE_STOP = ++X.Event._LAST_EVENT; // xnode.stop() のみ、指定時間による停止では呼ばれない\r
-X.Dom.Event.ANIME_STOP = ++X.Event._LAST_EVENT;\r
-X.Dom.Event._LAST_EVENT = X.Event._LAST_EVENT; // ここに書いてあるイベントの最後の値 X.Dom.Event.ANIME_STOP と同じ値\r
\r
// TODO load -> readystatechange this.readyState === "loaded" || this.readyState === "complete"\r
X.Dom.Event._LOAD_FIX_TAGS = {\r
//LINK : true\r
};\r
\r
-X.Dom.Event.Rename = {};\r
-X.Dom.Event.RenameTo = {};\r
-X.Dom.Event.toPointer = !X_UA_HID.POINTER && ( X_UA_HID.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( 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( 'wheel <= MozMousePixelScroll' );\r
- X.Dom.Event.Rename[ 'wheel' ] = 'MozMousePixelScroll';\r
+ X_Event_Rename[ 'wheel' ] = 'MozMousePixelScroll';\r
} else\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
+ X_Event_Rename[ 'wheel' ] = 'DOMMouseScroll';\r
};\r
} else {\r
- X.Dom.Event.Rename[ 'wheel' ] = 'mousewheel';\r
+ X_Event_Rename[ 'wheel' ] = 'mousewheel';\r
};\r
//if( document.onmousewheel !== undefined ){ // Opera で判定失敗する\r
- // X.Dom.Event.Rename[ 'wheel' ] = 'mousewheel';\r
+ // X_Event_Rename[ 'wheel' ] = 'mousewheel';\r
//};\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.Rename[ 'animationstart' ] = 'webkitAnimationStart';\r
- X.Dom.Event.Rename[ 'animationiteration' ] = 'webkitAnimationIteration';\r
+ X_Event_Rename[ 'animationend' ] = 'webkitAnimationEnd';\r
+ X_Event_Rename[ 'animationstart' ] = 'webkitAnimationStart';\r
+ X_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.Rename[ 'animationstart' ] = 'oAnimationStart';\r
- X.Dom.Event.Rename[ 'animationiteration' ] = 'oAnimationIteration';\r
+ X_Event_Rename[ 'animationend' ] = 'oAnimationEnd';\r
+ X_Event_Rename[ 'animationstart' ] = 'oAnimationStart';\r
+ X_Event_Rename[ 'animationiteration' ] = 'oAnimationIteration';\r
} else\r
/*\r
if( window.onmozanimationend !== undefined && window.onanimationend === undefined ){\r
- X.Dom.Event.Rename[ 'animationend' ] = 'mozAnimationEnd';\r
- X.Dom.Event.RenameTo[ 'mozAnimationEnd' ] = 'animationend';\r
- X.Dom.Event.Rename[ 'animationstart' ] = 'mozAnimationStart';\r
- X.Dom.Event.RenameTo[ 'mozAnimationStart' ] = 'animationstart';\r
- X.Dom.Event.Rename[ 'animationiteration' ] = 'mozAnimationIteration';\r
- X.Dom.Event.RenameTo[ 'mozAnimationIteration' ] = 'animationiteration';\r
+ X_Event_Rename[ 'animationend' ] = 'mozAnimationEnd';\r
+ X_Event_RenameTo[ 'mozAnimationEnd' ] = 'animationend';\r
+ X_Event_Rename[ 'animationstart' ] = 'mozAnimationStart';\r
+ X_Event_RenameTo[ 'mozAnimationStart' ] = 'animationstart';\r
+ X_Event_Rename[ 'animationiteration' ] = 'mozAnimationIteration';\r
+ X_Event_RenameTo[ 'mozAnimationIteration' ] = 'animationiteration';\r
} 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.Rename[ 'animationstart' ] = 'MSAnimationStart';\r
- X.Dom.Event.Rename[ 'animationiteration' ] = 'MSAnimationIteration';\r
+ X_Event_Rename[ 'animationend' ] = 'MSAnimationEnd';\r
+ X_Event_Rename[ 'animationstart' ] = 'MSAnimationStart';\r
+ X_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_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_Event_Rename[ 'transitionend' ] = 'oTransitionEnd';\r
} else {\r
console.log( 'transitionend <= otransitionEnd|ver.' + X.UA.Opera );\r
- X.Dom.Event.Rename[ 'transitionend' ] = 'otransitionEnd';\r
+ X_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_Event_Rename[ 'transitionend' ] = 'mozTransitionEnd';\r
};\r
\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
+ X_Event_Rename[ 'pointerdown' ] = 'MSPointerDown';\r
+ X_Event_Rename[ 'pointerup' ] = 'MSPointerUp';\r
+ X_Event_Rename[ 'pointermove' ] = [ 'MSPointerMove', 'MSPointerHover' ];// ie10 と ie11 でペンのhoverevent の値が異なる\r
+ X_Event_Rename[ 'pointercancel' ] = 'MSPointerCancel';\r
// http://msdn.microsoft.com/ja-jp/library/ie/dn304886%28v=vs.85%29.aspx\r
} else\r
if( X_UA_HID.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
+ X_Event_Rename[ 'pointerdown' ] = [ 'touchdown', 'mousedown' ];\r
+ X_Event_Rename[ 'pointerup' ] = [ 'touchup', 'mouseup' ];\r
+ X_Event_Rename[ 'pointermove' ] = [ 'touchmove', 'mousemove' ];\r
+ X_Event_Rename[ 'pointercancel' ] = 'touchcancel';\r
+ // X_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
+ X_Event_Rename[ 'pointerdown' ] = 'mousedown';\r
+ X_Event_Rename[ 'pointerup' ] = 'mouseup';\r
+ X_Event_Rename[ 'pointermove' ] = 'mousemove';\r
+ X_Event_Rename[ 'pointercancel' ] = 'mouseleave';//??\r
+ \r
+ // Opera は ブラウザ設定から右クリックの通知を許可すると mousedown で e.button==2 が返る,キャンセルは可能??\r
+ X.UA.Opera && (\r
+ X_Event_Rename[ 'contextmenu' ] = 'mousedown' );\r
};\r
};\r
\r
-\r
-(function( rename, renameTo ){\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
-\r
/* -----------------------------------------------\r
* Document Ready\r
* Dean Edwards/Matthias Miller/John Resig\r
\r
/* for other browsers */\r
Node._window.listenOnce( 'load', X_TEMP.onDomContentLoaded );\r
-//\r
-X.Dom.listenOnce( X.Event.XDOM_READY, function(e){\r
- console.log( 'X.Dom XDomReady ' + X_Dom_readyState );\r
-} );\r
-\r
-X.Dom.listen( X.Dom.Event.VIEW_RESIZED, function(e){ console.log( 'X.Dom VIEW_RESIZED ' + e.w + ' x ' + e.h ); } );\r
\r
*\r
*/\r
\r
-var X_Dom_Parser = {\r
+var X_Dom_Parser = { // HTMLParser\r
CHARS : {\r
A:1,B:1,C:1,D:1,E:1,F:1,G:1,H:1,I:1,J:1,K:1,L:1,M:1,N:1,O:1,P:1,Q:1,R:1,S:1,T:1,U:1,V:1,W:1,X:1,Y:1,Z:1,\r
a:2,b:2,c:2,d:2,e:2,f:2,g:2,h:2,i:2,j:2,k:2,l:2,m:2,n:2,o:2,p:2,q:2,r:2,s:2,t:2,u:2,v:2,w:2,x:2,y:2,z:2,\r
\r
};\r
\r
-X.Dom._htmlStringToXNode = {\r
+var X_HTMLParser_htmlStringToXNode = {\r
flat : null,\r
nest : [],\r
err : function( html ){\r
- X.Dom._htmlStringToXNode.flat.length = 0;\r
- X.Dom._htmlStringToXNode.ignoreError !== true && X.Logger.warn( 'X_Dom_Parser() error ' + html );\r
+ X_HTMLParser_htmlStringToXNode.flat.length = 0;\r
+ X_HTMLParser_htmlStringToXNode.ignoreError !== true && X.Logger.warn( 'X_Dom_Parser() error ' + html );\r
},\r
start : function( tagName, attrs, noChild, length ){\r
var xnode,\r
- nest = X.Dom._htmlStringToXNode.nest,\r
- flat = X.Dom._htmlStringToXNode.flat,\r
+ nest = X_HTMLParser_htmlStringToXNode.nest,\r
+ flat = X_HTMLParser_htmlStringToXNode.flat,\r
l = nest.length,\r
attr, name, i, _attrs; //, toIndex;\r
if( l ){\r
_attrs = {};\r
for( ; i; ){\r
if( attr = attrs[ --i ] ){\r
- if( typeof attr === 'string' ){\r
+ if( X.Type.isString( attr ) ){\r
name = attr;\r
_attrs[ name ] = true;\r
} else {\r
};\r
},\r
end : function(){\r
- 0 < X.Dom._htmlStringToXNode.nest.length && ( --X.Dom._htmlStringToXNode.nest.length );\r
+ 0 < X_HTMLParser_htmlStringToXNode.nest.length && ( --X_HTMLParser_htmlStringToXNode.nest.length );\r
},\r
chars : function( text ){\r
- if( X.Dom._htmlStringToXNode.nest.length ){\r
- X.Dom._htmlStringToXNode.nest[ X.Dom._htmlStringToXNode.nest.length - 1 ].createText( text );\r
+ if( X_HTMLParser_htmlStringToXNode.nest.length ){\r
+ X_HTMLParser_htmlStringToXNode.nest[ X_HTMLParser_htmlStringToXNode.nest.length - 1 ].createText( text );\r
} else {\r
- X.Dom._htmlStringToXNode.flat[ X.Dom._htmlStringToXNode.flat.length ] = X.Dom.Node.createText( text );\r
+ X_HTMLParser_htmlStringToXNode.flat[ X_HTMLParser_htmlStringToXNode.flat.length ] = X.Dom.Node.createText( text );\r
};\r
},\r
comment : X.emptyFunction\r
};\r
\r
-X.Dom.parse = function( html, ignoreError ){\r
- var worker = X.Dom._htmlStringToXNode, ret;\r
+function X_HtmlParser_parse( html, ignoreError ){\r
+ var worker = X_HTMLParser_htmlStringToXNode, ret;\r
worker.flat = [];\r
worker.nest.length = 0;\r
worker.ignoreError = ignoreError;\r
return ret;\r
};\r
\r
-X.Dom._asyncHtmlStringToXNode = {\r
+var X_HTMLParser_asyncHtmlStringToXNode = {\r
err : function( html ){\r
- X.Dom._htmlStringToXNode.err( html );\r
- this.asyncDispatch( 0, { type : X.Event.ERROR } );\r
+ X_HTMLParser_htmlStringToXNode.err( html );\r
+ this.asyncDispatch( X.Event.ERROR );\r
},\r
- start : X.Dom._htmlStringToXNode.start,\r
- end : X.Dom._htmlStringToXNode.end,\r
- chars : X.Dom._htmlStringToXNode.chars,\r
+ start : X_HTMLParser_htmlStringToXNode.start,\r
+ end : X_HTMLParser_htmlStringToXNode.end,\r
+ chars : X_HTMLParser_htmlStringToXNode.chars,\r
comment : X.emptyFunction,\r
\r
progress : function( pct ){\r
- this.asyncDispatch( 0, { type : X.Event.PROGRESS, percent : pct } );\r
+ this.asyncDispatch( { type : X.Event.PROGRESS, percent : pct } );\r
},\r
complete : function(){\r
- var ret = X.Dom._htmlStringToXNode.flat;\r
- delete X.Dom._htmlStringToXNode.flat;\r
- this.asyncDispatch( 0, { type : X.Event.SUCCESS, xnodes : ret } );\r
+ var ret = X_HTMLParser_htmlStringToXNode.flat;\r
+ delete X_HTMLParser_htmlStringToXNode.flat;\r
+ this.asyncDispatch( { type : X.Event.SUCCESS, xnodes : ret } );\r
}\r
};\r
\r
-X.Dom.asyncParse = function( html, ignoreError ){\r
- var dispatcher = X.Class._override( new X.EventDispatcher(), X.Dom._asyncHtmlStringToXNode ),\r
- worker = X.Dom._htmlStringToXNode;\r
+function X_HTMLParser_asyncParse( html, ignoreError ){\r
+ var dispatcher = X.Class._override( new X.EventDispatcher(), X_HTMLParser_asyncHtmlStringToXNode ),\r
+ worker = X_HTMLParser_htmlStringToXNode;\r
dispatcher.listenOnce( X.Event.SUCCESS, dispatcher, dispatcher.kill );\r
worker.flat = [];\r
worker.nest.length = 0;\r
case 'abort' :\r
if( this.finish ) return;\r
this.finish = true;\r
- this.timerID = this.asyncDispatch( 0, { type : X.Event.ERROR } );\r
+ this.timerID = this.asyncDispatch( { type : X.Event.ERROR } );\r
break;\r
case 'load' :\r
// if( finish === true ) return; // これがあると firefox3.6 で駄目、、、\r
this.finish = true;\r
this.timerID && X.Timer.remove( this.timerID );\r
if( window.opera && !this.xnode._rawObject.complete ){\r
- this.timerID = this.asyncDispatch( 0, { type : X.Event.ERROR } );\r
+ this.timerID = this.asyncDispatch( { type : X.Event.ERROR } );\r
return;\r
};\r
size = X.Dom.Image.getActualDimension( X.UA.IE < 9 ? this.abspath : this.xnode );\r
- this.timerID = this.asyncDispatch( 0, {\r
+ this.timerID = this.asyncDispatch( {\r
type : X.Event.SUCCESS,\r
src : this.abspath,\r
w : size[ 0 ],\r
if( this.xnode._rawObject && this.xnode._rawObject.complete ){\r
this.finish = true;\r
if( this.xnode._rawObject.width ) return;\r
- this.timerID = this.asyncDispatch( 0, { type : X.Event.ERROR } );\r
+ this.timerID = this.asyncDispatch( { type : X.Event.ERROR } );\r
return;\r
};\r
if( ( this.tick += this.delay ) > this.timeout ){\r
this.finish = true;\r
- this.timerID = this.asyncDispatch( 0, { type : X.Event.ERROR, msg : 'timeout' } );\r
+ this.timerID = this.asyncDispatch( { type : X.Event.ERROR, msg : 'timeout' } );\r
return;\r
};\r
this.timerID = X.Timer.once( this.delay, this, this._detect );\r
body = r._rawObject,\r
copy, i, l, node, html,\r
elmProgress;\r
+ \r
+ if( !X_TEMP.X_Dom_useBuilder ) return;\r
+ \r
// TODO\r
// textarea の内容を控えて、消す。xnode tree 構築後に復帰。でないと、html パースでこける\r
//X.UA.MacIE && alert( body.innerHTML );\r
elmProgress.style.cssText = 'position:absolute;top:0;left:0;z-index:9999;width:0;height:0.5em;background:#00f;overflow:hidden;';\r
elmProgress.setAttribute( 'style', 'position:absolute;top:0;left:0;z-index:9999;width:0;height:0.5em;background:#00f;overflow:hidden;' );\r
\r
- X.Dom.asyncParse( html, true )\r
+ X_HTMLParser_asyncParse( html, true )\r
.listen( X.Event.PROGRESS,\r
function(e){\r
elmProgress.style.width = ( e.percent * 100 | 0 ) + '%';\r
elmProgress = '_xdom_builder_progress',\r
html;\r
\r
+ \r
+ if( !X_TEMP.X_Dom_useBuilder ) return;\r
+\r
/*\r
* http://support.microsoft.com/kb/812417/ja\r
* PRB: outerHTML の HTML 要素のプロパティは、既定の属性は表示されません。\r
body.insertAdjacentHTML( 'BeforeEnd', '<div id="' + elmProgress + '" style="position:absolute;top:0;left:0;z-index:9999;width:0;height:0.5em;background:#00f;overflow:hidden;"></div>' );\r
elmProgress = document.all[ elmProgress ];\r
\r
- X.Dom.asyncParse( html, true )\r
+ X_HTMLParser_asyncParse( html, true )\r
.listen( X.Event.PROGRESS,\r
function( e ){\r
elmProgress.style.width = ( e.percent * 100 | 0 ) + '%';\r
delete X_TEMP.asyncCreateTree;\r
delete X_TEMP.bindElementToXnode;\r
delete X_TEMP.X_Dom_useBuilder;\r
+ delete X_TEMP._isCleanupTarget;\r
};\r
\r
X_TEMP.bindElementToXnode =\r
// onload\r
case 'load' :\r
console.log( 'iframe load.' );\r
- this.asyncDispatch( 0, X.Event.SUCCESS );\r
+ this.asyncDispatch( X.Event.SUCCESS );\r
break;\r
case 'error' :\r
- this.asyncDispatch( 0, X.Event.ERROR );\r
+ this.asyncDispatch( X.Event.ERROR );\r
break;\r
};\r
\r
var i = X_NET_QUEUE_LIST.indexOf( this );\r
if( i !== -1 ){\r
X_NET_QUEUE_LIST.splice( i, 1 );\r
- this.asyncDispatch( 0, { type : X.Event.CANCELED } );\r
+ this.asyncDispatch( { type : X.Event.CANCELED } );\r
} else\r
if( this === X_NET_currentQueue ){\r
X_NET_currentWrapper.cancel();\r
case X.Event.CANCELED :\r
console.log( 'q: ' + e.type );\r
this.dispatch( e );\r
- this.asyncDispatch( 0, { type : X.Event.COMPLETE } );\r
+ this.asyncDispatch( { type : X.Event.COMPLETE } );\r
break;\r
case X.Event.COMPLETE :\r
console.log( 'complete. then kill()' );\r
case 1 :\r
return;\r
case 2 : // 0% ajaxstart\r
- live && this.asyncDispatch( 0, { type : X.Event.PROGRESS, percent : 0 } );\r
+ live && this.asyncDispatch( { type : X.Event.PROGRESS, percent : 0 } );\r
return;\r
case 3 :\r
- live && this.asyncDispatch( 0, { type : X.Event.PROGRESS, percent : this._percent < 99.9 ? 99.9 : ( this._percent + 100 ) / 2 } );\r
+ live && this.asyncDispatch( { type : X.Event.PROGRESS, percent : this._percent < 99.9 ? 99.9 : ( this._percent + 100 ) / 2 } );\r
// 99.9%\r
return;\r
case 4 :\r
break;\r
};\r
\r
- this.asyncDispatch( 0, { type : X.Event.SUCCESS, status : status || 200, data : data } ); \r
+ this.asyncDispatch( { type : X.Event.SUCCESS, status : status || 200, data : data } ); \r
} else {\r
- live && this.asyncDispatch( 0, { type : X.Event.ERROR, status : raw.status || 0, percent : 100 } );\r
+ live && this.asyncDispatch( { type : X.Event.ERROR, status : raw.status || 0, percent : 100 } );\r
};\r
break;\r
\r
// TODO X.Dom.Event でコピーしていないのでまだ動かない、、、\r
if( e.lengthComputable ){\r
this._percent = e.loaded / e.total;\r
- live && this.asyncDispatch( 0, { type : X.Event.PROGRESS, percent : this._percent } );\r
+ live && this.asyncDispatch( { type : X.Event.PROGRESS, percent : this._percent } );\r
};\r
break;\r
\r
case 'error' :\r
//console.dir( e );\r
this._busy = false;\r
- live && this.asyncDispatch( 0, { type : X.Event.ERROR, status : raw.status } );\r
+ live && this.asyncDispatch( { type : X.Event.ERROR, status : raw.status } );\r
break;\r
\r
//case 'abort' :\r
// this._busy = false;\r
- // this.asyncDispatch( 0, { type : X.Event.ERROR, status : raw.status } );\r
+ // this.asyncDispatch( { type : X.Event.ERROR, status : raw.status } );\r
// break;\r
case 'timeout' : // Gecko 12.0 https://developer.mozilla.org/ja/docs/XMLHttpRequest/Synchronous_and_Asynchronous_Requests\r
this._busy = false;\r
- live && this.asyncDispatch( 0, { type : X.Event.ERROR, status : raw.status } );\r
+ live && this.asyncDispatch( { type : X.Event.ERROR, status : raw.status } );\r
break;\r
};\r
},\r
*/\r
\r
var X_Net_Image_hasImage = !!window[ 'Image' ],\r
- X_Net_Image_image = X_Net_Image_hasImage && new window[ 'Image' ](),\r
+ X_Net_Image_image = X_Net_Image_hasImage && new Image(),\r
X_Net_Image_isElement = X.Type.isHTMLElement( X_Net_Image_image );\r
\r
\r
if( this.finish ) return;\r
this.finish = true;\r
this.timerID && X.Timer.remove( this.timerID );\r
- this.timerID = this.asyncDispatch( 0, { type : X.Event.ERROR } );\r
+ this.timerID = this.asyncDispatch( { type : X.Event.ERROR } );\r
break;\r
case 'load' :\r
// if( finish === true ) return; // これがあると firefox3.6 で駄目、、、\r
this.finish = true;\r
this.timerID && X.Timer.remove( this.timerID );\r
if( X.UA.Opera && !this._rawObject.complete ){\r
- this.timerID = this.asyncDispatch( 0, { type : X.Event.ERROR } );\r
+ this.timerID = this.asyncDispatch( { type : X.Event.ERROR } );\r
return;\r
};\r
size = X.Dom.Image.getActualDimension( !X_Net_Image_isElement ? this.abspath : this );\r
- this.timerID = this.asyncDispatch( 0, {\r
+ this.timerID = this.asyncDispatch( {\r
type : X.Event.SUCCESS,\r
src : this.abspath,\r
w : size[ 0 ],\r
case X.Event.ERROR :\r
case X.Event.TIMEOUT :\r
this.timerID && X.Timer.remove( this.timerID );\r
- this.timerID = this.asyncDispatch( 0, X.Event.COMPLETE );\r
+ this.timerID = this.asyncDispatch( X.Event.COMPLETE );\r
break;\r
case X.Event.KILL_INSTANCE :\r
this.reset();\r
this.finish = true;\r
if( this._rawObject.width ) return;\r
X.Timer.remove( this.timerID );\r
- this.timerID = this.asyncDispatch( 0, X.Event.ERROR );\r
+ this.timerID = this.asyncDispatch( X.Event.ERROR );\r
} else\r
if( this.timeout < ( this.tick += this.delay ) ){\r
this.finish = true;\r
X.Timer.remove( this.timerID );\r
- this.timerID = this.asyncDispatch( 0, X.Event.TIMEOUT );\r
+ this.timerID = this.asyncDispatch( X.Event.TIMEOUT );\r
};\r
},\r
cancel : function(){\r
ok = X_Audio_rawAudio.canPlayType( mineType );\r
};\r
\r
- this.asyncDispatch( 0, ok ? 'support' : 'nosupport' );\r
+ this.asyncDispatch( ok ? 'support' : 'nosupport' );\r
\r
return this;\r
},\r
detect : function( source, ext ){\r
var ok = ext === 'mp3' || ext === 'wma';\r
\r
- this.asyncDispatch( 0, ok ? 'support' : 'nosupport' );\r
+ this.asyncDispatch( ok ? 'support' : 'nosupport' );\r
\r
return this;\r
},\r
this._callback.kill();\r
delete this._callback;\r
\r
- if( sender.findName('media') ) alert( 'exist' );\r
+ //if( sender.findName('media') ) alert( 'exist' );\r
\r
sender.children.add(\r
sender.GetHost().\r
\r
X.UI.Event = {\r
\r
- INIT : ++X.Dom.Event._LAST_EVENT,\r
- ADDED : ++X.Dom.Event._LAST_EVENT,\r
- CREATION_COMPLETE : ++X.Dom.Event._LAST_EVENT,\r
- REMOVED : ++X.Dom.Event._LAST_EVENT,\r
+ INIT : ++X_Event_last,\r
+ ADDED : ++X_Event_last,\r
+ CREATION_COMPLETE : ++X_Event_last,\r
+ REMOVED : ++X_Event_last,\r
\r
// http://d.hatena.ne.jp/edvakf/20100205/1265338487\r
// http://d.hatena.ne.jp/uupaa/20100401/1270097629\r
- ENTER_VIEW : ++X.Dom.Event._LAST_EVENT, // 要素が視界に入った\r
- OUT_VIEW : ++X.Dom.Event._LAST_EVENT,\r
+ ENTER_VIEW : ++X_Event_last, // 要素が視界に入った\r
+ OUT_VIEW : ++X_Event_last,\r
\r
- POINTER_OUT : ++X.Dom.Event._LAST_EVENT,\r
- POINTER_IN : ++X.Dom.Event._LAST_EVENT,\r
+ POINTER_OUT : ++X_Event_last,\r
+ POINTER_IN : ++X_Event_last,\r
\r
// FOCUS\r
// DISABLED\r
// BASE_FONT_SIZE_CHANGE\r
\r
/* -- Pointing Device Event -- */\r
- _START_POINTER : X.Dom.Event._LAST_EVENT + 0.5,\r
+ _START_POINTER : X_Event_last + 0.5,\r
\r
- CONTEXT_MENU : ++X.Dom.Event._LAST_EVENT, // rightclick or longtouch or menukey or ctrl + click\r
+ CONTEXT_MENU : ++X_Event_last, // rightclick or longtouch or menukey or ctrl + click\r
\r
/* -- ここよりあとはノード上をバブルアップ -- */\r
- _START_BUBLEUP : X.Dom.Event._LAST_EVENT + 0.5, \r
+ _START_BUBLEUP : X_Event_last + 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
- _POINTER_CANCEL : ++X.Dom.Event._LAST_EVENT,\r
- _TOUCH_START : ++X.Dom.Event._LAST_EVENT,\r
- _TOUCH_END : ++X.Dom.Event._LAST_EVENT,\r
- _TOUCH_MOVE : ++X.Dom.Event._LAST_EVENT,\r
- _TOUCH_CANCEL : ++X.Dom.Event._LAST_EVENT,\r
- _MOUSE_DOWN : ++X.Dom.Event._LAST_EVENT,\r
- _MOUSE_UP : ++X.Dom.Event._LAST_EVENT,\r
- _MOUSE_MOVE : ++X.Dom.Event._LAST_EVENT,\r
- _MOUSE_CANCEL : ++X.Dom.Event._LAST_EVENT,\r
+ _POINTER_DOWN : ++X_Event_last,\r
+ _POINTER_UP : ++X_Event_last,\r
+ _POINTER_MOVE : ++X_Event_last,\r
+ _POINTER_CANCEL : ++X_Event_last,\r
+ _TOUCH_START : ++X_Event_last,\r
+ _TOUCH_END : ++X_Event_last,\r
+ _TOUCH_MOVE : ++X_Event_last,\r
+ _TOUCH_CANCEL : ++X_Event_last,\r
+ _MOUSE_DOWN : ++X_Event_last,\r
+ _MOUSE_UP : ++X_Event_last,\r
+ _MOUSE_MOVE : ++X_Event_last,\r
+ _MOUSE_CANCEL : ++X_Event_last,\r
\r
- FILE_DRAG : ++X.Dom.Event._LAST_EVENT,\r
- FILE_DRAG_START : ++X.Dom.Event._LAST_EVENT,\r
- FILE_DRAG_END : ++X.Dom.Event._LAST_EVENT,\r
- FILE_HOLD : ++X.Dom.Event._LAST_EVENT,\r
- FILE_HOLD_END : ++X.Dom.Event._LAST_EVENT,\r
- FILE_DROP_BEFORE : ++X.Dom.Event._LAST_EVENT,\r
- FILE_DROP : ++X.Dom.Event._LAST_EVENT,\r
- FILE_DROP_CANCEL : ++X.Dom.Event._LAST_EVENT,\r
+ FILE_DRAG : ++X_Event_last,\r
+ FILE_DRAG_START : ++X_Event_last,\r
+ FILE_DRAG_END : ++X_Event_last,\r
+ FILE_HOLD : ++X_Event_last,\r
+ FILE_HOLD_END : ++X_Event_last,\r
+ FILE_DROP_BEFORE : ++X_Event_last,\r
+ FILE_DROP : ++X_Event_last,\r
+ FILE_DROP_CANCEL : ++X_Event_last,\r
\r
/* -- ここより後は X.UI 用のイベント -- */\r
- _START_XUI_EVENT : X.Dom.Event._LAST_EVENT + 0.5,\r
+ _START_XUI_EVENT : X_Event_last + 0.5,\r
\r
/* -- Mouse & Floating touch(Xperia sola)?? -- */\r
- HOVER_MOVE : ++X.Dom.Event._LAST_EVENT,\r
- HOVER_STAY : ++X.Dom.Event._LAST_EVENT,\r
- HOVER_STAY_END : ++X.Dom.Event._LAST_EVENT,\r
- WHEEL : ++X.Dom.Event._LAST_EVENT,\r
+ HOVER_MOVE : ++X_Event_last,\r
+ HOVER_STAY : ++X_Event_last,\r
+ HOVER_STAY_END : ++X_Event_last,\r
+ WHEEL : ++X_Event_last,\r
\r
/* -- Gesuture Event -- */\r
- HOLD : ++X.Dom.Event._LAST_EVENT,\r
- HOLD_END : ++X.Dom.Event._LAST_EVENT,\r
- TAP : ++X.Dom.Event._LAST_EVENT,\r
- DOUBLE_TAP : ++X.Dom.Event._LAST_EVENT,\r
- DRAG : ++X.Dom.Event._LAST_EVENT,\r
- DRAG_START : ++X.Dom.Event._LAST_EVENT,\r
- DRAG_END : ++X.Dom.Event._LAST_EVENT,\r
- DRAG_UP : ++X.Dom.Event._LAST_EVENT,\r
- DRAG_RIGHT : ++X.Dom.Event._LAST_EVENT,\r
- DRAG_LEFT : ++X.Dom.Event._LAST_EVENT,\r
- DRAG_DOWN : ++X.Dom.Event._LAST_EVENT,\r
- SWIP : ++X.Dom.Event._LAST_EVENT,\r
- SWIP_UP : ++X.Dom.Event._LAST_EVENT,\r
- SWIP_RIGHT : ++X.Dom.Event._LAST_EVENT,\r
- SWIP_LEFT : ++X.Dom.Event._LAST_EVENT, \r
- SWIP_DOWN : ++X.Dom.Event._LAST_EVENT,\r
- TRANSFORM : ++X.Dom.Event._LAST_EVENT,\r
- TRANSFORM_START : ++X.Dom.Event._LAST_EVENT,\r
- TRANSFORM_END : ++X.Dom.Event._LAST_EVENT,\r
- PINCH : ++X.Dom.Event._LAST_EVENT,\r
- PINCH_IN : ++X.Dom.Event._LAST_EVENT,\r
- PINCH_OUT : ++X.Dom.Event._LAST_EVENT,\r
- ROTATE : ++X.Dom.Event._LAST_EVENT,\r
+ HOLD : ++X_Event_last,\r
+ HOLD_END : ++X_Event_last,\r
+ TAP : ++X_Event_last,\r
+ DOUBLE_TAP : ++X_Event_last,\r
+ DRAG : ++X_Event_last,\r
+ DRAG_START : ++X_Event_last,\r
+ DRAG_END : ++X_Event_last,\r
+ DRAG_UP : ++X_Event_last,\r
+ DRAG_RIGHT : ++X_Event_last,\r
+ DRAG_LEFT : ++X_Event_last,\r
+ DRAG_DOWN : ++X_Event_last,\r
+ SWIP : ++X_Event_last,\r
+ SWIP_UP : ++X_Event_last,\r
+ SWIP_RIGHT : ++X_Event_last,\r
+ SWIP_LEFT : ++X_Event_last, \r
+ SWIP_DOWN : ++X_Event_last,\r
+ TRANSFORM : ++X_Event_last,\r
+ TRANSFORM_START : ++X_Event_last,\r
+ TRANSFORM_END : ++X_Event_last,\r
+ PINCH : ++X_Event_last,\r
+ PINCH_IN : ++X_Event_last,\r
+ PINCH_OUT : ++X_Event_last,\r
+ ROTATE : ++X_Event_last,\r
\r
- _END_XUI_EVENT : X.Dom.Event._LAST_EVENT + 0.5,\r
+ _END_XUI_EVENT : X_Event_last + 0.5,\r
\r
- _END_POINTER : X.Dom.Event._LAST_EVENT + 0.5,\r
+ _END_POINTER : X_Event_last + 0.5,\r
/* -- Pointing Device Event -- */\r
\r
- KEY_DOWN : ++X.Dom.Event._LAST_EVENT,\r
- KEY_UP : ++X.Dom.Event._LAST_EVENT,\r
- KEY_HOLD : ++X.Dom.Event._LAST_EVENT,\r
- KEY_CANCEL : ++X.Dom.Event._LAST_EVENT,\r
+ KEY_DOWN : ++X_Event_last,\r
+ KEY_UP : ++X_Event_last,\r
+ KEY_HOLD : ++X_Event_last,\r
+ KEY_CANCEL : ++X_Event_last,\r
\r
- SCROLL_BEFORE_START : ++X.Dom.Event._LAST_EVENT, // cancelable\r
- SCROLL_START : ++X.Dom.Event._LAST_EVENT,\r
- SCROLL_BEFORE_MOVE : ++X.Dom.Event._LAST_EVENT,\r
- SCROLL_MOVE : ++X.Dom.Event._LAST_EVENT,\r
- SCROLL_END : ++X.Dom.Event._LAST_EVENT,\r
- SCROLL_REFRESH : ++X.Dom.Event._LAST_EVENT,\r
+ SCROLL_BEFORE_START : ++X_Event_last, // cancelable\r
+ SCROLL_START : ++X_Event_last,\r
+ SCROLL_BEFORE_MOVE : ++X_Event_last,\r
+ SCROLL_MOVE : ++X_Event_last,\r
+ SCROLL_END : ++X_Event_last,\r
+ SCROLL_REFRESH : ++X_Event_last,\r
\r
- ANIME_BEFORE_START : ++X.Dom.Event._LAST_EVENT,\r
- ANIME_START : ++X.Dom.Event._LAST_EVENT,\r
- ANIME : ++X.Dom.Event._LAST_EVENT,\r
- ANIME_END : ++X.Dom.Event._LAST_EVENT,\r
- ANIME_BEFORE_STOP : ++X.Dom.Event._LAST_EVENT, // before cancel\r
- ANIME_STOP : ++X.Dom.Event._LAST_EVENT,\r
+ ANIME_BEFORE_START : ++X_Event_last,\r
+ ANIME_START : ++X_Event_last,\r
+ ANIME : ++X_Event_last,\r
+ ANIME_END : ++X_Event_last,\r
+ ANIME_BEFORE_STOP : ++X_Event_last, // before cancel\r
+ ANIME_STOP : ++X_Event_last,\r
\r
- PAGE_BEFORE_SHOW : ++X.Dom.Event._LAST_EVENT,\r
- PAGE_SHOW : ++X.Dom.Event._LAST_EVENT,\r
- PAGE_AFTER_SHOW : ++X.Dom.Event._LAST_EVENT,\r
- PAGE_BEFORE_HIDE : ++X.Dom.Event._LAST_EVENT,\r
- PAGE_HIDE : ++X.Dom.Event._LAST_EVENT,\r
- PAGE_AFTER_HIDE : ++X.Dom.Event._LAST_EVENT,\r
+ PAGE_BEFORE_SHOW : ++X_Event_last,\r
+ PAGE_SHOW : ++X_Event_last,\r
+ PAGE_AFTER_SHOW : ++X_Event_last,\r
+ PAGE_BEFORE_HIDE : ++X_Event_last,\r
+ PAGE_HIDE : ++X_Event_last,\r
+ PAGE_AFTER_HIDE : ++X_Event_last,\r
\r
// X.UI.Form\r
- CHANGE : ++X.Dom.Event._LAST_EVENT,\r
- SUBMIT : ++X.Dom.Event._LAST_EVENT,\r
- SELECT : ++X.Dom.Event._LAST_EVENT, // click or tap or enterkey\r
+ CHANGE : ++X_Event_last,\r
+ SUBMIT : ++X_Event_last,\r
+ SELECT : ++X_Event_last, // click or tap or enterkey\r
\r
IdToName : {},\r
NameToID : {}\r
content : null,\r
\r
Constructor : function( content ){\r
- if( !( this.User.instanceOf( Text ) ) ){\r
- //throw new Error( 'Text を継承したインスタンスだけが _Text のオーナーになれます' );\r
+ if( !( this.User.instanceOf( X.UI.Text ) ) ){\r
+ alert( 'Text を継承したインスタンスだけが _Text のオーナーになれます' );\r
};\r
this.xnode = X.Dom.Node.create( 'div' );\r
\r
-document.write( [\r
+document.write( [\r
'<script src="' +\r
'js/01_core/00_builtin.js',\r
'js/01_core/01_X.js',\r
'js/01_core/13_XEventDispatcher.js', \r
'js/01_core/14_XTimer.js',\r
\r
- //'js/01_core/15_XSystem.js',\r
- //'js/01_core/16_XView.js', \r
+ 'js/01_core/15_XSystem.js',\r
+ //'js/01_core/16_XView.js', \r
'js/01_core/17_XLogger.js',\r
\r
\r
--- /dev/null
+/*\r
+ * \r
+ */\r
+X_TEMP.onRearchEndOfScript();
\ No newline at end of file