.ActiveX-enabled .mouse-operation-catcher {\r
background-color : #fff;\r
filter : alpha( opacity=0 );\r
- -ms-filter : alpha( opacity=0 );\r
}\r
/*\r
* ie では、背景を設定しないと、 mousemove が働かない。\r
left : 0;\r
top : 0;\r
visibility : hidden;\r
- z-index : 99;\r
+ /*z-index : 99;*/\r
}\r
\r
/* Scrollbox\r
i, j, v;\r
\r
console.log( ' userAgent : ' + dua );\r
+ console.log( '-' );\r
console.log( ' appVersion : ' + dav );\r
+ console.log( '-' );\r
console.log( ' platform : ' + n.platform );\r
- \r
+ console.log( '-' );\r
+ \r
if( window.opera ){\r
i = dua.indexOf( 'Opera' ); // Opera/\r
j = dua.indexOf( 'Version/' );\r
acme.WebKit = i = parseFloat(dua.split("WebKit\/")[1]) || undefined;\r
acme.Chrome = parseFloat(dua.split("Chrome\/")[1]) || undefined;\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
\r
// Mozilla/5.0 (Android; Linux armv7l; rv:9.0) Gecko/20111216 Firefox/9.0 Fennec/9.0\r
if( ( i = dua.toLowerCase().indexOf( 'android' ) ) !== -1 ){\r
- acme.Android = parseFloat( ua.substr( i + 8 ) ) || 1.5;\r
+ acme.Android = parseFloat( dua.substr( i + 8 ) ) || 1.5;\r
console.log( '>> Android : ' + acme.Android );\r
} else\r
if( dua.indexOf( 'iPhone;' ) !== -1 || dua.indexOf( 'iPad;' ) !== -1 || dua.indexOf( 'iPod;' ) !== -1 ){\r
MONOPOLY : 16, // move event を独占する\r
SYS_CANCEL : 32 | 4 | 2,\r
\r
+ _USE_CLOSURE : false,\r
+ \r
_LIVE_LIST : [],\r
_POOL_LIST : [],\r
\r
+ _THIS_FUNC : 1,\r
+ _HANDLEEVENT : 2,\r
+ _FUNC_ONLY : 3,\r
+ \r
create : function( arg0, arg1, arg2 /* [ listener || ( context + function ) || function ][ args... ] */ ){\r
- var self = X.Callback,\r
- live = self._LIVE_LIST,\r
- f, listener, context, callback;\r
+ var live = X.Callback._LIVE_LIST,\r
+ hash = X.Callback._checkCallbackArgs( arg0, arg1, arg2 ),\r
+ f;\r
\r
- if( typeof arg1 === 'function' ){\r
- context = arg0;\r
- callback = arg1;\r
- } else\r
- if( typeof arg0 === 'function' ){\r
- callback = arg0;\r
- if( !( arg2 = arg1 ) ) return callback; // function のみの場合 callback オブジェクトを作らない\r
- } else\r
- if( arg0 && typeof arg0.handleEvent === 'function' ){\r
- listener = arg0;\r
- arg2 = arg1;\r
- } else {\r
- var v = '';\r
- for( var k in arg0 ){\r
- v += k + '=' + arg0[ k ] + ' ';\r
- };\r
- alert( 'Callback.create() fail! ' + v );\r
- };\r
+ if( !hash.k ) return hash;\r
\r
- f = self._POOL_LIST.pop();\r
+ f = X.Callback._POOL_LIST.pop();\r
if( !f ){\r
- f = new Function( 'var a=arguments,f=a.callee;f.a=a;return f.c()' ); // f.t=this;\r
- f.kill = self._kill;\r
- f.same = self._same;\r
+ f = new Function( 'var a=arguments,f=a.callee;f.a=a;return f._(f)' ); // f.x=this;\r
+ f[ 'kill' ] = X.Callback._kill;\r
+ f[ 'same' ] = X.Callback._same;\r
+ f._ = X.Callback._proxyCallback;\r
};\r
+ \r
live[ live.length ] = f;\r
- if( listener ){\r
- f.c = self._contextCallback;\r
- f.listener = listener;\r
- f.context = listener;\r
- f.callback = listener.handleEvent;\r
- } else\r
- if( context ){\r
- f.c = self._contextCallback;\r
- f.context = context;\r
- f.callback = callback;\r
- } else {\r
- f.c = self._generalCallback;\r
- f.callback = callback;\r
+ \r
+ switch( f.k = hash.k ){\r
+ case X.Callback._THIS_FUNC :\r
+ f.x = hash.x;\r
+ f.f = hash.f;\r
+ 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
+ break;\r
};\r
\r
- if( X.Type.isArray( arg2 ) ){\r
- f.add = arg2;\r
- };\r
+ if( hash.s ) f.s = hash.s;\r
return f;\r
},\r
\r
- _contextCallback : function(){\r
- var f = this,\r
- a = f.a,\r
- s = f.add,\r
- c = f.callback,\r
- x = f.context,\r
- i = 0,\r
- ary, r;\r
- //s && s.push.apply( a, s );\r
- if( s && s.length ){\r
- ary = [];\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
+ _createClosure : function( obj ){\r
+ return function(){\r
+ obj.a = arguments;\r
+ return obj._( obj );\r
+ };\r
+ },\r
+ \r
+ _checkCallbackArgs : function( arg1, arg2, arg3, alt_context ){\r
+ var obj;\r
+ \r
+ if( arg1 && X.Type.isFunction( arg2 ) ){\r
+ obj = { x : arg1, f : arg2, k : X.Callback._THIS_FUNC };\r
+ } else\r
+ if( arg1 && X.Type.isFunction( arg1[ 'handleEvent' ] ) ){\r
+ obj = { x : arg1, f : arg1[ 'handleEvent' ], k : X.Callback._HANDLEEVENT };\r
+ arg3 = arg2;\r
+ } else\r
+ if( X.Type.isFunction( arg1 ) ){\r
+ arg3 = arg2;\r
+ if( alt_context ){\r
+ obj = { x : alt_context, f : arg1, k : X.Callback._THIS_FUNC };\r
+ } else {\r
+ obj = { f : arg1, k : X.Callback._FUNC_ONLY };\r
+ };\r
+ } else\r
+ if( X.Type.isFunction( arg2 ) ){\r
+ console.log( 'X.Callback._checkCallbackArgs : arg1 が ' + arg1 + 'です' );\r
+ if( alt_context ){\r
+ obj = { x : alt_context, f : arg2, k : X.Callback._THIS_FUNC };\r
+ } else {\r
+ obj = { f : arg2, k : X.Callback._FUNC_ONLY };\r
+ };\r
+ } else\r
+ if( alt_context && X.Type.isFunction( alt_context[ 'handleEvent' ] ) ){\r
+ obj = { x : alt_context, f : alt_context[ 'handleEvent' ], k : X.Callback._HANDLEEVENT };\r
+ arg3 = arg1;\r
+ } else {\r
+ console.log( '不正 ' + arg1 );\r
+ console.dir( arg1 );\r
+ return;\r
+ };\r
+ \r
+ if( X.Type.isArray( arg3 )){\r
+ obj.s = arg3;\r
};\r
- r = a.length === 0 ? c.call( x ) : c.apply( x, a );\r
- delete f.a;\r
- //delete f.t;\r
- return r;\r
+ return ( obj.x || obj.s ) ? obj : arg1;\r
},\r
- _generalCallback : function(){\r
- var f = this,\r
- a = f.a,\r
- s = f.add,\r
- c = f.callback,\r
- i = 0,\r
- ary, r;\r
- //s && s.push.apply( a, s );\r
- if( s && s.length ){\r
- ary = [];\r
- a.length &&\r
+ \r
+ _proxyCallback : function( xfunc ){\r
+ var args = xfunc.a || [],\r
+ thisObj = xfunc.x,\r
+ func = xfunc.f,\r
+ supp = xfunc.s,\r
+ temp, ret;\r
+ \r
+ delete xfunc.a; \r
+ \r
+ if( supp && supp.length ){\r
+ temp = [];\r
+ args.length &&\r
(\r
- a.length === 1 ?\r
- ( ary[ 0 ] = a[ 0 ] ) :\r
- ary.push.apply( ary, a )\r
+ args.length === 1 ?\r
+ ( temp[ 0 ] = args[ 0 ] ) :\r
+ temp.push.apply( temp, args )\r
);\r
- s.length === 1 ?\r
- ( ary[ ary.length ] = s[ 0 ] ) :\r
- ary.push.apply( ary, s );\r
- a = ary;\r
+ supp.length === 1 ?\r
+ ( temp[ temp.length ] = supp[ 0 ] ) :\r
+ temp.push.apply( temp, supp );\r
+ args = temp;\r
+ };\r
+ \r
+ switch( xfunc.k ){\r
+\r
+ case X.Callback._THIS_FUNC :\r
+ return args.length === 0 ? func.call( thisObj ) : func.apply( thisObj, args );\r
+ \r
+ case X.Callback._HANDLEEVENT :\r
+ temp = thisObj[ 'handleEvent' ];\r
+ if( temp !== func && X.Type.isFunction( temp ) ){\r
+ return args.length === 0 ? thisObj[ 'handleEvent' ]() : temp.apply( thisObj, args );\r
+ } else\r
+ if( X.Type.isFunction( thisObj ) ){\r
+ return args.length === 0 ? thisObj.call( thisObj ) : thisObj.apply( thisObj, args );\r
+ };\r
+ return args.length === 0 ? func.call( thisObj ) : func.apply( thisObj, args );\r
+ \r
+ case X.Callback._FUNC_ONLY :\r
+ return args.length === 0 ?\r
+ func() :\r
+ args.length === 1 ?\r
+ func( args[ 0 ] ) :\r
+ func.apply( null, args );\r
};\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
},\r
+ \r
_kill : function(){\r
X.Callback._correct( this );\r
},\r
_same : function( arg0, arg1, arg2 ){\r
- var listener, context, callback,\r
- f = this;\r
- \r
- if( arg0.kill === X.Callback._kill ){ // arg0 === X.Callback toString() で判定は?\r
- return this === arg0;\r
- } else\r
- if( typeof arg1 === 'function' ){\r
- context = arg0;\r
- callback = arg1;\r
- } else\r
- if( typeof arg0 === 'function' ){\r
- callback = arg0;\r
- arg2 = arg1;\r
- } else\r
- if( arg0 && typeof arg0.handleEvent === 'function' ){\r
- listener = arg0;\r
- arg2 = arg1;\r
- };\r
+ var hash, kind;\r
\r
- if( arg2 && f.add !== arg2 ){\r
- return false;\r
- };\r
+ if( arg0 && arg0[ 'kill' ] === X.Callback._kill ) return this === arg0;\r
\r
- if( listener && f.listener === listener ){\r
- return true;\r
- } else\r
- if( context && f.context === context && f.callback === callback ){\r
- return true;\r
- } else \r
- if( f.callback === callback ){\r
- return true;\r
+ hash = X.Callback._checkCallbackArgs( arg0, arg1, arg2 ),\r
+ kind = hash.k;\r
+ \r
+ if( this.k !== kind ) return false;\r
+ \r
+ switch( kind ){\r
+ case X.Callback._THIS_FUNC :\r
+ return this.x === hash.x && this.f === hash.f && this.s === hash.s;\r
+\r
+ case X.Callback._HANDLEEVENT :\r
+ return this.x === hash.x && this.f === hash.f && this.s === hash.s;\r
+\r
+ case X.Callback._FUNC_ONLY :\r
+ return this.f === hash.f && this.s === hash.s;\r
};\r
return false;\r
},\r
_correct : function( f ){\r
- var self = X.Callback,\r
- i = self._LIVE_LIST.indexOf( f );\r
- if( f.c ) delete f.c;\r
- if( f.listener ) delete f.listener;\r
- if( f.context ) delete f.context;\r
- if( f.callback ) delete f.callback;\r
- if( f.add ) delete f.add;\r
+ var i = X.Callback._LIVE_LIST.indexOf( f );\r
+ //delete f._;\r
+ delete f.k;\r
+ if( f.x ) delete f.x;\r
+ if( f.f ) delete f.f;\r
+ if( f.s ) delete f.s;\r
if( i === -1 ) return;\r
- self._LIVE_LIST.splice( i, 1 );\r
- self._POOL_LIST.push( f );\r
+ X.Callback._LIVE_LIST.splice( i, 1 );\r
+ X.Callback._POOL_LIST.push( f );\r
},\r
+ \r
sys_monitor : function(){\r
return {\r
'Live callback' : X.Callback._LIVE_LIST.length,\r
};\r
},\r
sys_gc : function(){\r
- var self = X.Callback,\r
- list = self._POOL_LIST, f;\r
+ var list = X.Callback._POOL_LIST,\r
+ f;\r
while( 0 < list.length ){\r
f = list.shift();\r
- self._correct( f );\r
- delete f.kill;\r
- delete f.same;\r
+ X.Callback._correct( f );\r
+ delete f[ '_' ];\r
+ delete f[ 'kill' ];\r
+ delete f[ 'same' ];\r
};\r
}\r
};\r
next : 0,\r
busy : false, // for Opera7\r
\r
- REQUEST_FRAME_LIST : [],\r
- requestID : 0,\r
+ REQ_FRAME_LIST : [],\r
+ requestID : 0,\r
\r
_loop : function(){\r
var next = X.Timer.next,\r
\r
for( ; i; ){\r
q = list[ --i ];\r
- if( 0 < ( q.l -= next ) ) continue;\r
- f = q.f;\r
- c = q.c;\r
- if( f() & X.Callback.UN_LISTEN || c === 1 ){\r
+ if( 0 < ( q.last -= next ) ) continue;\r
+ c = q.count;\r
+ \r
+ if( q.k ){\r
+ q.a = [];\r
+ r = X.Callback._proxyCallback( q );\r
+ } else {\r
+ r = q.f();\r
+ };\r
+ \r
+ if( r & X.Callback.UN_LISTEN || c === 1 ){\r
list.splice( i, 1 );\r
- f.kill && f.kill();\r
- //queue.length = 0;\r
+ //f.kill && f.kill();\r
continue;\r
} else\r
- if( 1 < c ) --q.c;\r
- q.l = q.t;\r
+ if( 1 < c ) --q.count;\r
+ q.last = q.time;\r
};\r
X.Timer.timerId = 0;\r
X.Timer.busy = false;\r
return;\r
};\r
for( ; i; ){\r
- ( l = list[ --i ].l ) < n && ( n = l );\r
+ ( l = list[ --i ].last ) < n && ( n = l );\r
};\r
if( n < X.Timer.next || X.Timer.timerId === 0 ){\r
X.Timer.timerId && window.clearTimeout( X.Timer.timerId );\r
},\r
\r
_onEnterFrame : function ( time ){\r
- var list = X.Timer.REQUEST_FRAME_LIST,\r
+ var list = X.Timer.REQ_FRAME_LIST,\r
i = list.length,\r
- f;\r
+ q;\r
time = time || ( Date.now ? Date.now() : +new Date );\r
for( ; i; ){\r
- ( f = list[ --i ] )( time );\r
- delete f.uid;\r
- f.kill && f.kill();\r
+ q = list[ --i ];\r
+ \r
+ if( q.k ){\r
+ q.a = [ time ];\r
+ X.Callback._proxyCallback( q );\r
+ } else {\r
+ q.f( time );\r
+ };\r
+ //delete f.uid;\r
+ //f.kill && f.kill();\r
};\r
list.length = 0;\r
},\r
\r
add : function( time, opt_count, args1, args2, args3 ){\r
- var list = X.Timer.TICKET_LIST;\r
- time = time < X.Timer.INTERVAL_TIME ? 1 : ( time / X.Timer.INTERVAL_TIME ) | 0; // 正の数で使える「Math.floor(x)」を「(x | 0)」に;\r
+ var list = X.Timer.TICKET_LIST,\r
+ hash, obj;\r
+ time = time < X.Timer.INTERVAL_TIME ? 1 : time / X.Timer.INTERVAL_TIME | 0; // 正の数で使える「Math.floor(x)」を「(x | 0)」に;\r
\r
- if( typeof opt_count !== 'number' ){\r
+ if( !X.Type.isNumber( opt_count ) ){\r
args3 = args2;\r
args2 = args1;\r
args1 = opt_count;\r
opt_count = 0;\r
};\r
-\r
- list[ list.length ] = {\r
- t : time,\r
- l : time,\r
- c : opt_count,\r
- f : X.Callback.create( args1, args2, args3 ),\r
- u : ++X.Timer.uid\r
- };\r
+ \r
+ hash = X.Callback._checkCallbackArgs( args1, args2, args3 );\r
+ if( !hash.k ) hash = { f : hash };\r
+ hash.time = time;\r
+ hash.last = time;\r
+ hash.count = opt_count;\r
+ hash.uid = ++X.Timer.uid;\r
+ list[ list.length ] = hash;\r
+ \r
!X.Timer.busy && X.Timer._update();\r
return X.Timer.uid;\r
},\r
for( ; i; ){\r
// TODO\r
// fire 中の cancel\r
- if( ( q = list[ --i ] ).u === uid ){\r
+ if( ( q = list[ --i ] ).uid === uid ){\r
list.splice( i, 1 );\r
- f = q.f;\r
- f.kill && f.kill();\r
+ //f = q.f;\r
+ //f.kill && f.kill();\r
!X.Timer.busy && ( /* q[ INDEX_COUNT ] <= next || */ l === 1 ) && X.Timer._update();\r
//q.length = 0;\r
break;\r
\r
requestFrame : _enterFrame ?\r
(function( args1, args2, args3 ){\r
- var i = X.Timer.REQUEST_FRAME_LIST.length,\r
+ var i = X.Timer.REQ_FRAME_LIST.length,\r
f;\r
i === 0 && ( X.Timer.requestID = _enterFrame( X.Timer._onEnterFrame ) );\r
- f = X.Timer.REQUEST_FRAME_LIST[ i ] = X.Callback.create( args1, args2, args3 );\r
+ f = X.Timer.REQ_FRAME_LIST[ i ] = X.Callback._checkCallbackArgs( args1, args2, args3 );\r
return f.uid = ++X.Timer.uid;\r
}) :\r
(function( args1, args2, args3 ){\r
- var i = X.Timer.REQUEST_FRAME_LIST.length,\r
+ var i = X.Timer.REQ_FRAME_LIST.length,\r
f;\r
i === 0 && ( X.Timer.requestID = X.Timer.add( 0, 1, X.Timer._onEnterFrame ) );\r
- f = X.Timer.REQUEST_FRAME_LIST[ i ] = X.Callback.create( args1, args2, args3 );\r
+ f = X.Timer.REQ_FRAME_LIST[ i ] = X.Callback._checkCallbackArgs( args1, args2, args3 );\r
return f.uid = ++X.Timer.uid;\r
}),\r
\r
cancelFrame : _cancelFrame ?\r
(function( uid ){\r
- var list = X.Timer.REQUEST_FRAME_LIST,\r
+ var list = X.Timer.REQ_FRAME_LIST,\r
l = list.length,\r
i = l,\r
f;\r
// TODO\r
// fire 中の cancel\r
list.splice( i, 1 );\r
- delete f.uid;\r
- f.kill && f.kill();\r
+ //delete f.uid;\r
+ //f.kill && f.kill();\r
l === 1 && _cancelFrame( X.Timer.requestID );\r
break;\r
};\r
};\r
}) :\r
(function( uid ){\r
- var list = X.Timer.REQUEST_FRAME_LIST,\r
+ var list = X.Timer.REQ_FRAME_LIST,\r
l = list.length,\r
i = l,\r
f;\r
if( ( f = list[ --i ] ).uid < uid ) break;\r
if( f.uid === uid ){\r
list.splice( i, 1 );\r
- delete f.uid;\r
- f.kill && f.kill();\r
+ //delete f.uid;\r
+ //f.kill && f.kill();\r
l === 1 && X.Timer.remove( X.Timer.requestID );\r
break;\r
};\r
// http://havelog.ayumusato.com/develop/javascript/e528-ios6_scrolling_timer_notcall.html\r
// iOS6 スクロール中のタイマー発火絡みのバグ備忘\r
if( X.UA.iOS ){\r
- window.addEventListener( 'scroll', function(){\r
- if( X.Timer.timerId ){\r
- window.clearTimeout( X.Timer.timerId );\r
- X.Timer.timerId = window.setTimeout( X.Timer._loop, Math.max( 0, X.Timer.endTime - X.getTime() ) );\r
- };\r
- } );\r
+ window.addEventListener( 'scroll', function(){\r
+ if( X.Timer.timerId ){\r
+ window.clearTimeout( X.Timer.timerId );\r
+ X.Timer.timerId = window.setTimeout( X.Timer._loop, Math.max( 0, X.Timer.endTime - X.getTime() ) );\r
+ };\r
+ });\r
};\r
\r
-if( X.UA.IE && ( X.UA.IE < 5 || X.UA.MacIE ) ){\r
+if( X.UA.IE < 5 || X.UA.MacIE ){\r
X.Timer[ '_ie_loop' ] = X.Timer._loop;\r
X.Timer._loop = 'X.Timer._ie_loop()';\r
};\r
var list = this._listeners,\r
r, f;\r
if( this._dispatching ){\r
- // todo\r
- // reserve\r
if( !this._reserves ) this._reserves = [];\r
this._reserves[ this._reserves.length ] = [ type, arg1, arg2, arg3, X.EventDispatcher._once ];\r
return this;\r
\r
if( !list ) list = this._listeners = {};\r
if( !( list = list[ type ] ) ) list = this._listeners[ type ] = [];\r
- list[ list.length ] = f =\r
- ( arg1 && !arg2 ) ?\r
- arg1 :\r
- X.Callback.create( arg1, arg2, arg3 ); // TODO create しないで、arg1~arg3 を保持\r
+ \r
+ f = X.Callback._checkCallbackArgs( arg1, arg2, arg3 );\r
+ if( !f.k ){\r
+ f = X.Callback._checkCallbackArgs( this, arg1 );\r
+ } else\r
+ if( f.k === X.Callback._FUNC_ONLY ){\r
+ f = X.Callback._checkCallbackArgs( this, f.f, f.s );\r
+ };\r
+ list[ list.length ] = f;\r
f.once = X.EventDispatcher._once;\r
+ \r
return this;\r
},\r
listenOnce : function( type, arg1, arg2, arg3 ){\r
return this;\r
},\r
listening : function( type, arg1, arg2, arg3 ){\r
- var list = this._listeners, unlistens, i, f;\r
+ var list = this._listeners, unlistens, i, f, hash;\r
if( type === undefined ) return !!list;\r
if( !list || !( list = list[ type ] ) ) return false;\r
if( arg1 === undefined ) return true;\r
+ \r
+ if( arg1.k ){\r
+ hash = arg1;\r
+ } else {\r
+ hash = X.Callback._checkCallbackArgs( arg1, arg2, arg3 );\r
+ if( !hash.k ){\r
+ hash = X.Callback._checkCallbackArgs( this, arg1 );\r
+ } else\r
+ if( hash.k === X.Callback._FUNC_ONLY ){\r
+ hash = X.Callback._checkCallbackArgs( this, hash.f, hash.s );\r
+ };\r
+ };\r
+ \r
if( ( unlistens = this._unlistens ) && ( unlistens = unlistens[ type ] ) ){\r
for( i = unlistens.length; i; ){\r
f = unlistens[ --i ];\r
- if( f === arg1 || ( f.same && f.same( arg1, arg2, arg3 ) ) ) return false;\r
+ if( f === hash || ( f.x === hash.x && f.f === hash.f && f.s === hash.s ) ) return false;\r
};\r
};\r
for( i = list.length; i; ){\r
f = list[ --i ];\r
- if( f === arg1 || ( f.same && f.same( arg1, arg2, arg3 ) ) ) return this._needsIndex ? i : true;\r
+ if( f === hash || ( f.x === hash.x && f.f === hash.f && f.s === hash.s ) ) return this._needsIndex ? i : true;\r
};\r
return false;\r
},\r
unlistens = this._unlistens[ type ];\r
};\r
if( unlistens && unlistens.indexOf( f ) !== -1 ) continue;\r
-\r
- r = typeof f === 'function' ? f( e ) : f.handleEvent( e ); // dispatch 中に unlisten が作られることがある\r
+ \r
+ if( f.k ){\r
+ f.a = [ e ];\r
+ r = X.Callback._proxyCallback( f );\r
+ } else {\r
+ r = f.call( this, e );\r
+ };\r
\r
if( f.once || r & X.Callback.UN_LISTEN ){\r
+ // dispatch 中に unlisten が作られることがある\r
if( !unlistens ){\r
unlistens = this._unlistens || ( this._unlistens = {} );\r
unlistens = unlistens[ type ] || ( unlistens[ type ] = [] );\r
},\r
\r
asyncDispatch : function( delay, e ){\r
- return X.Timer.once( delay, this, this.dispatch, [ e ] );\r
+ return X.Timer.add( delay, 1, this, this.dispatch, [ e ] );\r
}\r
}\r
);\r
\r
}) :\r
(function( e ){\r
+ 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.PREVENT_DEFAULT | X.Callback.STOP_PROPAGATION;\r
}),\r
X.Dom.h = size[ 1 ];\r
X.Timer.once( 100, X.Dom._detectFinishResizing );\r
} else {\r
+ console.log( '-- detectFinishResizing : ' + X.getTime() );\r
+ \r
X.Dom.asyncDispatch( 0, { type : X.Dom.Event.VIEW_RESIZED, w : X.Dom.w, h : X.Dom.h } );\r
X.Dom._lock = false;\r
+ if( X.Dom._orientationFlag ){\r
+ X.Dom._orientationFlag = false;\r
+ X.Dom.asyncDispatch( 100, { type : X.Dom.Event.VIEW_TURNED, orientation : window.orientation } );\r
+ };\r
};\r
},\r
\r
null;\r
\r
r = Node._body = new Node( document.body );\r
+ \r
+ Node.root = r; // 後方互換\r
+ \r
h.appendTo = h.appendToRoot = h.before = h.after = h.clone = h.remove = h.destroy = h.prevNode = h.nextNode = h.createText = h.append = h.appendAt = h.empty = h.html = h.text =\r
r.appendTo = r.appendToRoot = r.before = r.after = r.clone = r.remove = r.destroy = r.prevNode = r.nextNode = new Function( 'return this' );\r
\r
\r
X.Dom.listenOnce( X.Dom.Event.DOM_INIT, function(){\r
var size = X.Dom._getSize();\r
-\r
+ \r
+ if( X.Dom._orientationchange ){\r
+ X.Dom.Node._window.listen( 'orientationchange', X.Dom._orientationchange );\r
+ };\r
+ \r
if( X.Dom._detectFontSize ){\r
X.Dom.Node._window.listen( 'resize', X.Dom._resize );\r
X.Timer.add( 333, X.Dom._detectFontSize );\r
return [ _ary[ 0 ], ss, ary.join( s ), s, path ].join( '' );\r
};\r
\r
+if( window[ 'orientation' ] !== undefined ){\r
+ X.Dom._orientationchange = function( e ){\r
+ X.Dom._orientationFlag = true;\r
+ console.log( '-- orientationchange : ' + X.getTime() );\r
+ };\r
+};\r
+\r
+\r
console.log( 'X.Dom dom:w3c=' + X.Dom.DOM_W3C + ' ev:w3c=' + X.Dom.EVENT_W3C );\r
return this;\r
};\r
if( !text ) return this.empty();\r
+ if( ( xnodes = this._xnodes ) && xnodes.length === 1 && xnodes[ 0 ]._xnodeType === 3 ){\r
+ xnodes[ 0 ].text( text );\r
+ return this;\r
+ };\r
this.empty().createText( text );\r
return this;\r
};\r
removal.length = 0;\r
};\r
\r
- console.log( 'start _startUpdate().' );\r
+ //console.log( 'start _startUpdate().' );\r
\r
Node._html._dirty ? Node._html._commitUpdate() : this._commitUpdate();\r
\r
\r
if( X.Dom.EVENT_W3C ){\r
X.Dom.Event = function( e, xnode ){\r
+ var touch0;\r
//this._event = e;\r
this.type = X.Dom.Event.RenameTo[ e.type ] || e.type;\r
\r
this.targetTouches = e.targetTouches;\r
this.metaKey = e.metaKey;\r
this.force = e.force || e.webkitForce || 0;\r
+ //\r
+ if( this.touches.length ){\r
+ touch0 = this.touches[ 0 ];\r
+ this.clientX = touch0.clientX;\r
+ this.clientY = touch0.clientY;\r
+ this.pageX = touch0.pageX;\r
+ this.pageY = touch0.pageY;\r
+ this.offsetX = touch0.offsetX || touch0.layerX;\r
+ this.offsetY = touch0.offsetY || touch0.layerY;\r
+ };\r
} else\r
if( e.constructor === window.PointerEvent ){\r
// PointerEvent;\r
this.tiltY = e.tiltY;\r
};\r
};\r
+ if( !window.PointerEvent && window.MSPointerEvent ){\r
+ window.PointerEvent = window.MSPointerEvent;\r
+ };\r
} else {\r
X.Dom.Event = function( e, xnode, element ){\r
var btn;\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
// same_page_jump\r
// on_screen_keyboard_show\r
// https://github.com/georgeadamson/jQuery.prefixfree-events/blob/master/jQuery.prefixfree-events.js\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[ 'webkitAnimationIteration' ] = 'animationiteration';\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[ '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.RenameTo[ 'MSAnimationEnd' ] = 'animationend';\r
X.Dom.Event.Rename[ 'animationstart' ] = 'MSAnimationStart';\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
} 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
} 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
};\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
};\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
\r
\r
\r
-X.Dom.Node.prototype.listen = function( type, arg1, arg2, arg3 /* [ listener || ( context + function ) || function ][ arguments ] */ ){\r
- var elm;\r
- \r
- if( this._xnodeType === 0 || this._xnodeType === 3 || !arg1 ) return this;\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
\r
( !this._listeners || !this._listeners[ type ] ) && X.Type.isString( type ) && this._addEvent( type );\r
\r
- return typeof arg1 === 'function' ?\r
- X.EventDispatcher.prototype.listen.call( this, type, this, arg1, arg2 ) :\r
- X.EventDispatcher.prototype.listen.apply( this, arguments );\r
+ return X.EventDispatcher.prototype.listen.apply( this, arguments );\r
};\r
\r
X.Dom.Node.prototype._addEvent =\r
\r
function _onClick( e ){\r
alert( e.type );\r
+ console.log( e.type + ' -----------' );\r
};\r
pointerType, i, l, touches, ret, active, gesture, startEv,\r
hammer, deltaTime, deltaX, deltaY, velocity;\r
\r
+ //console.log( 'Hammer@handleEvent ' + X.UI.Event.IdToName[ e.type ] + ' ' + e.pointerType );\r
if( !type ) return;\r
\r
if( e.pointerType ){\r
// only when the instance options have enabled this gesture\r
active[ gesture.name ] &&\r
// if a handler returns false, we stop with the detection\r
- ( ret |= ( gesture.handler.call( gesture, e, hammer ) || X.Callback.NONE ) );\r
+ ( ret |= ( gesture.handler( e, hammer ) || X.Callback.NONE ) );\r
};\r
\r
// endevent, but not the last touch, so dont stop\r
\r
// detect touchevents\r
Hammer.HAS_POINTEREVENTS = navigator.pointerEnabled || navigator.msPointerEnabled;\r
+ Hammer.HAS_POINTEREVENTS && console.log( 'Hammer.HAS_POINTEREVENTS : true' );\r
+\r
\r
// eventtypes per touchevent (start, move, end)\r
// are filled by HamEvent.determineEventTypes on setup\r
this.dispatch( { type : X.UI.Event.INIT } );\r
},\r
\r
- addToParent : function( parentElement ){\r
- parentElement && parentElement.append( this.xnode );\r
+ addToParent : function( xnodeParent ){\r
+ xnodeParent && xnodeParent.append( this.xnode );\r
\r
this.phase = 2;\r
this.dispatch( { type : X.UI.Event.ADDED } );\r
y -= this.boxY;\r
\r
if( 0 <= x && x < this.boxWidth && 0 <= y && y < this.boxHeight ){\r
- \r
!this.hovering && ( this.rootData.hoverList[ this.rootData.hoverList.length ] = this );\r
this.rootData.targetNodeData = this;\r
return true;\r
\r
\r
listen : function( type, arg1, arg2, arg3 ){\r
- var root, events, counter;\r
+ var root, events, counter, f;\r
if( X.UI.Event._START_POINTER <= type && type <= X.UI.Event._END_POINTER ){\r
if( this.phase < 3 ){\r
if( !( events = this.reserveEvents ) ) this.reserveEvents = events = [];\r
};\r
if( X.UI.Event._START_XUI_EVENT < type && type < X.UI.Event._END_XUI_EVENT ){\r
if( !this.gesture ){\r
- this.gesture = new X.UI.Gesture( this.root, this, type );\r
+ this.gesture = new X.UI.Gesture( this.rootData, this, type );\r
} else {\r
this.gesture.listen( type );\r
};\r
} else {\r
- console.log( type )\r
+ console.log( type );\r
root = this.rootData;\r
counter = root.eventCounter;\r
if( counter[ type ] ){\r
};\r
};\r
};\r
- if( typeof arg1 === 'function' ){\r
- return X.EventDispatcher.prototype.listen.apply( this, [ type, this.User, arg1, arg2 ] );\r
+ f = X.Callback._checkCallbackArgs( arg1, arg2, arg3 );\r
+ if( !f.k ){\r
+ return X.EventDispatcher.prototype.listen.apply( this, [ type, this.User, f ] );\r
+ } else\r
+ if( f.k === X.Callback._FUNC_ONLY ){\r
+ return X.EventDispatcher.prototype.listen.apply( this, [ type, this.User, f.f, f.s ] );\r
};\r
- return X.EventDispatcher.prototype.listen.apply( this, [ type, arg1 || this.User, arg2 || arg1, arg3 || arg2 ] );\r
+ return X.EventDispatcher.prototype.listen.apply( this, arguments );\r
},\r
unlisten : function( type, arg1, arg2, arg3 ){\r
var root, events, i, ev, counter;\r
};\r
};\r
};\r
- if( typeof arg1 === 'function' ){\r
- return X.EventDispatcher.prototype.unlisten.apply( this, [ type, this.User, arg1, arg2 ] );\r
+ f = X.Callback._checkCallbackArgs( arg1, arg2, arg3 );\r
+ if( !f.k ){\r
+ return X.EventDispatcher.prototype.unlisten.apply( this, [ type, this.User, f ] );\r
+ } else\r
+ if( f.k === X.Callback._FUNC_ONLY ){\r
+ return X.EventDispatcher.prototype.unlisten.apply( this, [ type, this.User, f.f, f.s ] );\r
};\r
- return X.EventDispatcher.prototype.unlisten.apply( this, [ type, arg1 || this.User, arg2 || arg1, arg3 || arg2 ] );\r
+ return X.EventDispatcher.prototype.unlisten.apply( this, arguments );\r
},\r
\r
dispatch : function( e ){\r
X.Class._getPrivate( this ).listenOnce( type, arg1, arg2, arg3 );\r
return this;\r
},\r
+ listening : function( type, arg1, arg2, arg3 ){\r
+ return X.Class._getPrivate( this ).listening( type, arg1, arg2, arg3 );\r
+ },\r
unlisten : function( type, arg1, arg2, arg3 ){\r
X.Class._getPrivate( this ).unlisten( type, arg1, arg2, arg3 );\r
return this;\r
data._eventBusy = true;
if( type !== '' + X.UI.Event._POINTER_MOVE && type !== '' + X.UI.Event._TOUCH_MOVE && type !== '' + X.UI.Event._MOUSE_MOVE ){
- // console.log( e.type + ' ' + type + ' x:' + x + ', y:' + y );
+ //console.log( e.type + ' ' + type + ' x:' + x + ', y:' + y );
};
e.type = type;
if( data && ( data = data.monopolyNodeData ) && ( ret = data.dispatch( e ) ) & X.Callback.MONOPOLY ){
delete X.UI.currentRootData._eventBusy;
- return ret;
+ return ret | X.Callback.PREVENT_DEFAULT;
};
list = X.UI.currentRootData.hoverList;
};
};
delete X.UI.currentRootData._eventBusy;
- return ret;
+ return ret | X.Callback.PREVENT_DEFAULT;
};
/*
font-weight : bold;\r
z-index : 999;\r
cursor : pointer;\r
+ -webkit-tap-highlight-color : rgba(0,0,0,0);\r
}\r
.toggle_close #log,\r
.toggle_none #toggle {\r
body.className = toggleOpen ? 'toggle_open' : 'toggle_close';\r
};\r
};\r
- btn.innerHTML = toggleOpen ? '►' : '▼';\r
+ btn.innerHTML = toggleOpen ? '▶' : '▼';//►▸\r
};\r
function __readyTrans(){\r
var body = document.body,\r
</noscript>\r
</head>\r
<body onload="__resize()" onresize="__resize()" scroll="no"><div id="log">-- console.log() --</div><iframe src="index.html" width="500" height="100%" scrolling="yes" frameborder="0"></iframe><div id="toggle" onclick="__ontoggle();"></div></body>\r
-</html>
\ No newline at end of file
+</html>\r
+<xmp class="cleanup-target" style="display:none"><plaintext style="display:none"><!-- plainetext は nds 用 -->
\ No newline at end of file