font-family: 'MS Pゴシック',sans-serif;\r
}\r
\r
-.PageRoot {\r
+.Root {\r
height : 100%;\r
}\r
\r
-.PageRoot,\r
-.PageRoot div {\r
+.Root,\r
+.Root div {\r
/* 要素は絶対配置される */\r
position : absolute;\r
top : 0;\r
white-space : -moz-pre-wrap; /* Mozilla */\r
/* white-space : -hp-pre-wrap; HP Printers */ \r
}\r
-.IE5x .PageRoot, .IE5x .PageRoot div,\r
-.IE6 .PageRoot, .IE6 .PageRoot div,\r
-.IE7 .PageRoot, .IE7 .PageRoot div, {\r
+.IE5x .Root, .IE5x .Root div,\r
+.IE6 .Root, .IE6 .Root div,\r
+.IE7 .Root, .IE7 .Root div, {\r
word-break : break-all; /* ie5+ */\r
}\r
-.IE .PageRoot, .IE .PageRoot div {\r
+.IE .Root, .IE .Root div {\r
white-space : normal/* ie系では、 float要素へ回り込みする、 white-space の効いているテキストの位置が狂う */\r
}\r
\r
<script type="text/javascript" src="js/20_ui/16_Repeater.js"></script>\r
<script type="text/javascript" src="js/20_ui/17_List.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
+<script type="text/javascript" src="js/20_ui/20_Root.js"></script>\r
\r
<script type="text/javascript" src="js/onReachEndOfScript.js"></script>\r
\r
* @type {number}\r
*/\r
X_UA[ 'AndroidWebkit' ] = i;\r
- alert( 'AudioSprite調査:Android標準ブラウザ Webkit Version ' + i );\r
+ //alert( 'AudioSprite調査:Android標準ブラウザ Webkit Version ' + i );\r
\r
} else\r
if( i = parseFloat(dua.split('WebKit\/')[1]) ){\r
};\r
\r
if( this[ 'instanceOf' ]( Node ) ){\r
- console.log( 'KILL : ' + this.call( 'outerHTML' ) );\r
+ // console.log( 'KILL : ' + this.call( 'outerHTML' ) );\r
X_Node_onKill( this );\r
};\r
\r
* <dd>dispatch 中か?さらにインスタンス自身の dispatch がネストした場合、その深さを記憶します。\r
* <dt>2:RESERVES Array\r
* <dd>イベント発火中に listen() が呼ばれた場合に引数を蓄え、完了時(DISPATCHING===0)に再度 listen() するための一時ストアです。\r
- * <dt>3:UNLISTENS Array\r
+ * <dt>3:UNLISTENS Object\r
* <dd>イベント発火中に unlisten() が呼ばれた場合に対象リスナを記憶し、リスナが呼ばれないようにします。完了時(DISPATCHING===0)に再度 unlisten() します。\r
* <dt>4:KILL_RESERVED boolean\r
* <dd>dispatch 中に kill() が呼ばれた場合に一旦 kill をキャンセルし、完了時(DISPATCHING===0)に再度 kill() するためのフラグです。\r
if( !listeners || !( list = listeners[ opt_type ] ) ) return false;\r
if( opt_arg1 === undefined ) return X_EventDispatcher_needsIndex ? 0 : true;\r
\r
- // TODO callbackHash か?判定が不十分!\r
+ // TODO callbackHash か?判定が不十分! skipConvertion\r
if( opt_arg1.kind ){\r
cbHash = opt_arg1;\r
} else {\r
if( f === cbHash || ( f.context === cbHash.context && f.func === cbHash.func && f.name === cbHash.name && f.supplement === cbHash.supplement && f.lock === lock ) ) return false;\r
};\r
};\r
+ \r
for( i = list.length; i; ){\r
f = list[ --i ];\r
if( f === cbHash || ( f.context === cbHash.context && f.func === cbHash.func && f.name === cbHash.name && f.supplement === cbHash.supplement && f.lock === lock ) ){\r
e = delay;\r
delay = 0;\r
};\r
+ //{+dev\r
+ delay === undefined && eval( 'throw "asyncDispatch で undefined イベントが指定されました"' );\r
+ //}+dev\r
timerID = X_Timer_add( delay, 1, this, X_EventDispatcher_dispatch, [ e ] );\r
X_EventDispatcher_LAZY_TIMERS[ timerID ] = this;\r
return timerID;\r
} else {\r
listeners[ X_LISTENERS_DISPATCHING ] = 1;\r
};\r
- \r
- // todo:\r
- // type も保存\r
- listeners[ X_LISTENERS_UNLISTENS ] = listeners[ X_LISTENERS_UNLISTENS ] || {};\r
- unlistens = listeners[ X_LISTENERS_UNLISTENS ][ type ];\r
+\r
+ //listeners[ X_LISTENERS_UNLISTENS ] = listeners[ X_LISTENERS_UNLISTENS ] || {};\r
+ //unlistens = listeners[ X_LISTENERS_UNLISTENS ][ type ];\r
\r
for( i = 0; i < list.length; ++i ){\r
f = list[ i ];\r
+ // TODO removed フラグは?\r
+ if( f.removed ) continue;\r
+ /*\r
if( !unlistens ){\r
unlistens = listeners[ X_LISTENERS_UNLISTENS ][ type ];\r
};\r
if( unlistens && unlistens.indexOf( f ) !== -1 ) continue;\r
+ */\r
\r
- r = X_Closure_proxyCallback( f, args || ( args = [ e ] ) ) || 0;\r
+ r = X_Closure_proxyCallback( f, args || ( args = [ e ] ) );\r
\r
- if( f.once || r & X_CALLBACK_UN_LISTEN ){\r
+ if( f.once || ( r & X_CALLBACK_UN_LISTEN ) ){\r
// dispatch 中に unlisten が作られることがある\r
if( !unlistens ){\r
unlistens = listeners[ X_LISTENERS_UNLISTENS ] || ( listeners[ X_LISTENERS_UNLISTENS ] = {} );\r
\r
f = ( list = listeners[ opt_type ] )[ i ];\r
\r
- if( unlistens = listeners[ X_LISTENERS_UNLISTENS ] ){\r
+ if( listeners[ X_LISTENERS_DISPATCHING ] ){\r
+ unlistens = listeners[ X_LISTENERS_UNLISTENS ] || ( listeners[ X_LISTENERS_UNLISTENS ] = {} );\r
// _unlistens に入っている callbackHash は、lock のチェックは済んでいる\r
( unlistens = unlistens[ opt_type ] ) ?\r
( unlistens[ unlistens.length ] = f ) :\r
( listeners[ X_LISTENERS_UNLISTENS ][ opt_type ] = [ f ] );\r
+ f.removed = true;\r
} else {\r
- delete f.once;\r
+ //delete f.once;\r
+ X_Object_clear( f );\r
+ \r
if( list.length !== 1 ){\r
list.splice( i, 1 );\r
} else {\r
\r
X_Node_Anime_hasTransform = !!X_Node_CSS_VENDER_PREFIX[ 'transform' ],\r
/* Opera mobile で translateZ(0) が有効だと XY が 0 0 になる */\r
- /* GPUレイヤーにいる間に要素のコンテンツを変更をすると transitionend が動かなくなるっぽい Mac safari と firefox, 手当てが済むまでここは常に false */\r
+ /* GPUレイヤーにいる間に要素のコンテンツを変更をすると transitionend が動かなくなるっぽい Mac safari と firefox */\r
X_Node_Anime_translateZ = X_Node_CSS_VENDER_PREFIX[ 'perspective' ] && !X_UA[ 'OperaMobile' ] && !X_UA[ 'OperaTablet' ] ? ' translateZ(0)' : '',\r
/* Opera12(XP,8.1) 切った方がスムース, win Safari3 で、たまに動作が止まってしまう、、、 */\r
X_Node_Anime_hasTransition = !!X_Node_CSS_VENDER_PREFIX[ 'transitionDelay' ] && !X_UA[ 'Opera' ], // && !( X_UA[ 'Webkit' ] <= 528.16 ),\r
X_Node_Anime_needsDetection = false;\r
};\r
\r
-/* TODO\r
- * 0:無, 1:子のGPU解除待 2:GPU予約, 3:GPU now!, 4:GPU解除予約\r
- */\r
function X_Node_Anime_updateAnimation( xnode ){\r
var obj = xnode[ '_anime' ],\r
phase = obj.phase,\r
//console.log( 'duration = 0 の場合、アニメーションの解除' );\r
// duration = 0 の場合、アニメーションの解除\r
\r
- case 3 : // アニメーションの解除\r
+ case 3 : // TransitionEnd -> アニメーションの解除\r
obj.phase = obj.gpuParent ? 10 : 4;\r
\r
console.log( '#### アニメーションの解除 ' + obj.phase );\r
\r
// このタイミングで animation 関連の css を削除したところ(X_Node_Anime_clearTransition)、iOS3、4 で再描画忘れが度々起きるように、、、\r
if( !obj.gpuParent ) X_Node_Anime_clearTransition( xnode );\r
- //xnode[ 'dispatch' ]( { type : X_EVENT_ANIME_END, 'gpu' : obj.gpuParent } );\r
break;\r
\r
case 4 :\r
\r
case 10 :\r
// アニメーションは停止・GPUレイヤーは解除していない(再アニメーションに備えて待機)\r
- //X_Node_Anime_clearTransition( xnode ); // TODO X_Node_Anime_releaseGPULayer に移動?\r
if( !obj.gpuTimerID ){\r
console.log( '#### アニメーションは停止 ' + obj.wait );\r
if( obj.wait ){\r
X_Net_XHR_msXMLVer = 0, \r
X_Net_XHR_msXML = X_Net_XHR_createMSXML && X_Net_XHR_createMSXML( true ),\r
\r
- X_Net_XHR_neverReuse = X_UA[ 'IE' ] < 9, // ie7,8 の xhr はリユース不可。msxml はリユース可能。\r
+ X_Net_XHR_neverReuse = X_UA[ 'IE' ] < 9 || X_UA[ 'iOS' ] || X_UA[ 'Android' ], // ie7,8 の xhr はリユース不可。msxml はリユース可能。\r
\r
X_Net_XHR_TYPE_FLASH = 8,\r
X_Net_XHR_TYPE_GADGET = 16;\r
data = raw[ 'response' ] || raw[ 'responseText' ]; // とりあえず\r
break;\r
};\r
-\r
X_NET_XHRWrapper[ 'asyncDispatch' ]( 32, { type : X_EVENT_SUCCESS, status : status || 200, response : data, 'headers' : headers || null } );\r
} else {\r
X_NET_XHRWrapper[ 'asyncDispatch' ]( 32, { type : X_EVENT_ERROR, status : status || 400, 'headers' : headers || null } );\r
\r
case 'progress' :\r
if( e.lengthComputable ){\r
- X_NET_XHRWrapper._percent = e.loaded / e.total;\r
- live && X_NET_XHRWrapper[ 'asyncDispatch' ]( { type : X_EVENT_PROGRESS, 'percent' : X_NET_XHRWrapper._percent } );\r
+ X_NET_XHRWrapper._percent = e.loaded / e.total * 100;\r
+ live && X_NET_XHRWrapper._percent < 100 && X_NET_XHRWrapper[ 'asyncDispatch' ]( { type : X_EVENT_PROGRESS, 'percent' : X_NET_XHRWrapper._percent } );\r
};\r
break;\r
\r
},\r
\r
onUploadProgress : X_Net_XHR_upload && function( e ){\r
- var raw = X_NET_XHRWrapper[ '_rawObject' ].upload,\r
- live = !X_NET_XHRWrapper._canceled,\r
- states, data;\r
- live && X_NET_XHRWrapper[ 'asyncDispatch' ]( { type : X_EVENT_PROGRESS, 'percent' : X_NET_XHRWrapper._percent, 'uploadPercent' : ( e.loaded / e.total ) } );\r
+ !X_NET_XHRWrapper._canceled &&\r
+ X_NET_XHRWrapper[ 'asyncDispatch' ]( {\r
+ type : X_EVENT_PROGRESS,\r
+ 'percent' : X_NET_XHRWrapper._percent,\r
+ 'uploadPercent' : e.loaded / e.total * 100\r
+ } );\r
}\r
};\r
// 同期リクエストでなければならない場合, unload, beforeunload時\r
play : function( startTime, endTime, loop, loopStartTime, loopEndTime ){\r
if( 0 <= startTime ){\r
this.setState( {\r
- currentTime : startTime,\r
- startTime : startTime,\r
- endTime : endTime,\r
- loop : loop,\r
- loopStartTime : loopStartTime,\r
- loopEndTime : loopEndTime\r
+ 'currentTime' : startTime,\r
+ 'startTime' : startTime,\r
+ 'endTime' : endTime,\r
+ 'loop' : loop,\r
+ 'loopStartTime' : loopStartTime,\r
+ 'loopEndTime' : loopEndTime\r
} );\r
};\r
this.actualPlay();\r
\r
seek : function( seekTime ){\r
if( seekTime < X_AudioWrapper_getEndTime( this ) ){\r
- this.setState( { currentTime : seekTime } );\r
+ this.setState( { 'currentTime' : seekTime } );\r
};\r
},\r
\r
if( v === undefined ){\r
return this.autoLoop;\r
};\r
- this.setState( { loop : v } );\r
+ this.setState( { 'loop' : v } );\r
},\r
\r
volume : function( v ){\r
if( v === undefined ){\r
return this.gain;\r
};\r
- this.setState( { volume : v } );\r
+ this.setState( { 'volume' : v } );\r
},\r
\r
currentTime : function( v ){\r
if( v === undefined ){\r
return this.playing ? this.getActualCurrentTime() : this.seekTime;\r
};\r
- this.setState( { currentTime : v } );\r
+ this.setState( { 'currentTime' : v } );\r
},\r
\r
getState : function(){\r
};\r
};\r
break;\r
+ default :\r
+ throw 'bad arg';\r
};\r
};\r
\r
var X_Audio_WebAudio_context = !X_UA[ 'iPhone_4s' ] && !X_UA[ 'iPad_2Mini1' ] && !X_UA[ 'iPod_4' ] &&
+ // TODO なんで fennec を禁止?
!( X_UA[ 'Gecko' ] && X_UA[ 'Android' ] ) &&
- ( window.AudioContext || window.webkitAudioContext ),
+ ( window[ 'AudioContext' ] || window[ 'webkitAudioContext' ] ),
X_Audio_BUFFER_LIST = [],
X_Audio_WebAudioWrapper,
X_Audio_BufferLoader;
X_Audio_WebAudio_context = new X_Audio_WebAudio_context;
X_Audio_BufferLoader = X_EventDispatcher[ 'inherits' ](
- 'X.AV.WebAudioBufferLoader',
+ 'X.WebAudio.BufferLoader',
X_Class.POOL_OBJECT,
{
url : '',
error : 0,
webAudioList : null,
- Constructor : function( webAudio, url ){
+ 'Constructor' : function( webAudio, url ){
this.webAudioList = [ webAudio ];
this.url = url;
- this.xhr = X.Net( { 'xhr' : url, 'dataType' : 'arraybuffer' } )
+ this.xhr = X[ 'Net' ]( { 'xhr' : url, 'dataType' : 'arraybuffer' } )
[ 'listen' ]( X_EVENT_PROGRESS, this )
[ 'listenOnce' ]( [ X_EVENT_SUCCESS, X_EVENT_COMPLETE ], this );
},
// iOS 7.1 で decodeAudioData に処理が入った瞬間にスクリーンを長押しする(スクロールを繰り返す)と
// decoeAudioData の処理がキャンセルされることがある(エラーやコールバックの発火もなく、ただ処理が消滅する)。
// ただし iOS 8.1.2 では エラーになる
- if( X_Audio_WebAudio_context.createBuffer && X_UA[ 'iOS' ] < 8 ){
- this._onDecodeSuccess( X_Audio_WebAudio_context.createBuffer( e.response, false ) );
+ if( X_UA[ 'iOS' ] < 8 || !X_Audio_WebAudio_context[ 'decodeAudioData' ] ){
+ this._onDecodeSuccess( X_Audio_WebAudio_context[ 'createBuffer' ]( e.response, false ) );
} else
- if( X_Audio_WebAudio_context.decodeAudioData ){
- X_Audio_WebAudio_context.decodeAudioData( e.response,
+ if( X_Audio_WebAudio_context[ 'decodeAudioData' ] ){
+ X_Audio_WebAudio_context[ 'decodeAudioData' ]( e.response,
this.onDecodeSuccess = X_Closure_create( this, this._onDecodeSuccess ),
this.onDecodeError = X_Closure_create( this, this._onDecodeError ) );
- } else {
- this._onDecodeSuccess( X_Audio_WebAudio_context.createBuffer( e.response, false ) );
};
break;
X_Audio_WebAudioWrapper = X_Audio_AbstractAudioBackend[ 'inherits' ](
- 'X.AV.WebAudioWrapper',
+ 'X.WebAudio',
X_Class.POOL_OBJECT,
{
_timerID : 0,
_interval : 0,
buffer : null,
- source : null,
+ bufferSource : null,
gainNode : null,
_onended : null,
- Constructor : function( target, url, option ){
+ 'Constructor' : function( target, url, option ){
var i = 0,
l = X_Audio_BUFFER_LIST.length,
loader;
delete this.buffer;
- this.playing && this.actualPause();
- this.source && this._sourceDispose();
+ this.playing && this.actualPause();
+ this.bufferSource && this._sourceDispose();
- this._onended && X_Closure_correct( this._onended );
+ this._onended && X_Closure_correct( this._onended );
- this.gainNode && this.gainNode.disconnect();
+ this.gainNode && this.gainNode.disconnect();
},
_onLoadBufferComplete : function( e ){
var loader = this.loader,
this.target[ 'asyncDispatch' ]( X_EVENT_READY );
+ console.log( 'WebAudio buffer ready' );
+
this.autoplay && X_Timer_once( 16, this, this.play );
},
console.log( '[WebAudio] play ' + begin + ' -> ' + end );
- if( this.source ) this._sourceDispose();
+ if( this.bufferSource ) this._sourceDispose();
if( !this.gainNode ){
- this.gainNode = X_Audio_WebAudio_context.createGain ? X_Audio_WebAudio_context.createGain() : X_Audio_WebAudio_context.createGainNode();
- this.gainNode.connect( X_Audio_WebAudio_context.destination );
+ this.gainNode = X_Audio_WebAudio_context[ 'createGain' ] ? X_Audio_WebAudio_context[ 'createGain' ]() : X_Audio_WebAudio_context[ 'createGainNode' ]();
+ this.gainNode[ 'connect' ]( X_Audio_WebAudio_context[ 'destination' ] );
};
- this.source = X_Audio_WebAudio_context.createBufferSource();
- this.source.buffer = this.buffer;
- this.source.connect( this.gainNode );
+ this.bufferSource = X_Audio_WebAudio_context[ 'createBufferSource' ]();
+ this.bufferSource.buffer = this.buffer;
+ this.bufferSource[ 'connect' ]( this.gainNode );
- this.gainNode.gain.value = this.gain;
+ this.gainNode[ 'gain' ].value = this.gain;
// おかしい、stop 前に外していても呼ばれる、、、@Firefox33.1
// 破棄された X.Callback が呼ばれて、obj.proxy() でエラーになる。Firefox では、onended は使わない
- if( false && this.source.onended !== undefined ){
+ if( false && this.bufferSource.onended !== undefined ){
//console.log( '> use onended' );
- this.source.onended = this._onended || ( this._onended = X_Closure_create( this, this._onEnded ) );
+ this.bufferSource.onended = this._onended || ( this._onended = X_Closure_create( this, this._onEnded ) );
} else {
this._timerID && X_Timer_remove( this._timerID );
this._timerID = X_Timer_once( end - begin, this, this._onEnded );
};
- if( this.source.start ){
- this.source.start( 0, begin / 1000, end / 1000 );
+ if( this.bufferSource.start ){
+ this.bufferSource.start( 0, begin / 1000, end / 1000 );
} else {
- this.source.noteGrainOn( 0, begin / 1000, end / 1000 );
+ this.bufferSource[ 'noteGrainOn' ]( 0, begin / 1000, end / 1000 );
};
this.playing = true;
},
_sourceDispose : function(){
- this.source.disconnect();
- delete this.source.onended;
- delete this.source;
+ this.bufferSource.disconnect();
+ delete this.bufferSource.onended;
+ delete this.bufferSource;
},
_onInterval : function(){
delete this._timerID;
delete this.playing;
- if( this.source ){
- if( this.source.onended ) delete this.source.onended;
+ if( this.bufferSource ){
+ if( this.bufferSource.onended ) delete this.bufferSource.onended;
- this.source.stop ?
- this.source.stop( 0 ) : this.source.noteOff( 0 );
+ this.bufferSource.stop ?
+ this.bufferSource.stop( 0 ) : this.bufferSource[ 'noteOff' ]( 0 );
};
},
this.actualPlay();
} else
if( result & 4 ){
- this.gainNode.gain.value = this.gain;
+ this.gainNode[ 'gain' ].value = this.gain;
};
}
_lastCurrentTime : 0,\r
_src : '',\r
\r
- Constructor : function( target, source, option ){\r
+ 'Constructor' : function( target, source, option ){\r
var raw;\r
\r
this.target = target || this;\r
\r
X_Audio_HTMLAudioWrapper_badOperaAndroid && alert( e.type );\r
\r
- X_Audio_HTMLAudioWrapper_ieMobile9Fix && e.type !== 'timeupdate' && console.log( e.type );\r
+ // global に公開\r
+ window[ '__rawAudio' ] = this[ '_rawObject' ];\r
+ \r
+ /* X_Audio_HTMLAudioWrapper_ieMobile9Fix && */ e.type !== 'timeupdate' && console.log( e.type );\r
\r
switch( e.type ){\r
case 'loadstart' : // ブラウザがコンテンツの検索を開始した場合に発生\r
delete this.playing;\r
break;\r
\r
+ // TODO firefox で 短い音声でtimeupdate, ended が発火しない\r
case 'timeupdate' : // 通常の再生が行われ現在の再生位置の変化が起こった場合に発生\r
if( X_Audio_HTMLAudioWrapper_ieMobile9Fix ){\r
if( this._playForDuration === 1 ){\r
if( this.playing ){\r
end = X_AudioWrapper_getEndTime( this );\r
now = this.getActualCurrentTime();\r
- console.log( end + ' / ' + now );\r
+ console.log( now + ' / ' + end );\r
if( 0 + end <= 0 + now ){ // なぜか iem9 で必要,,,\r
if( this.autoLoop ){\r
if( !( this.target[ 'dispatch' ]( X_EVENT_MEDIA_BEFORE_LOOP ) & X_CALLBACK_PREVENT_DEFAULT ) ){\r
begin = this._beginTime = X_AudioWrapper_getStartTime( this, end, true );\r
\r
if( X_Audio_HTMLAudioWrapper_shortPlayFix ){\r
- begin -= end - begin > 1000 ? 200 : 400;\r
+ begin -= ( end - begin > 1000 ) ? 200 : 400;\r
begin = begin < 0 ? 0 : begin;\r
};\r
\r
};\r
this[ '_rawObject' ].play();\r
this.playing = true;\r
+ } else\r
+ if( X_UA[ 'Gecko' ] ){\r
+ // Gecko PC + Android でseek時に再生がしばしば止まる問題の修正\r
+ this[ '_rawObject' ].play();\r
};\r
+ \r
//http://himaxoff.blog111.fc2.com/blog-entry-97.html\r
//Firefox3.6では一度も play() していない状態で currentTime = 0 を実行するとエラーになる。\r
//また、GoogleChrome7 では currentTime = 0 直後に play() すると、pause()した位置前後の音が混ざることがある。(少なくとも自分の環境では)\r
- this[ '_rawObject' ].currentTime = this._lastCurrentTime = begin / 1000;\r
+ this[ '_rawObject' ].currentTime = this._lastCurrentTime = begin / 1000 | 0;\r
\r
console.log( '[HTMLAudio] play ' + begin + ' -> ' + end );\r
\r
_lastState : '',\r
_interval : 0, // setInterval timer id\r
\r
- Constructor : function( target, source, option ){\r
+ 'Constructor' : function( target, source, option ){\r
!X_Audio_SLAudio_uid && X_TEMP.slaudioInit();\r
\r
/*\r
this[ 'source' ] = src = e[ 'source' ];\r
this[ 'backendName' ] = name = backend.backendName;\r
\r
+ console.log( i + ' / ' + X_Audio_Sprite_numTracks );\r
+ \r
for( i = 0; i < X_Audio_Sprite_numTracks; ++i ){\r
if( X_Audio_Sprite_useVideo || ( i === 1 && X_Audio_Sprite_useVideoForMulti ) ){\r
option[ 'useVideo' ] = true;\r
};\r
// Audiobackend の owner として null を渡すとAudioBackend 自身へ dispatch する\r
X_Audio_Sprite_TEMP.tracks.push( last = backend.klass( null, e[ 'source' ], option ) );\r
+ \r
+ \r
+ console.dir( backend );\r
+ console.dir( last );\r
};\r
\r
_e = {\r
};\r
this[ 'asyncDispatch' ]( _e );\r
\r
+ console.log( 'AudioSprite - X_EVENT_BACKEND_READY' );\r
+ \r
last[ 'listenOnce' ]( X_EVENT_READY, this, X_AudioSprite_backendHandler );\r
\r
// READY, needTouchForPlay, needTouchForLoad\r
for( i = 0; i < X_Audio_Sprite_TEMP.tracks.length; ++i ){\r
this[ 'pause' ]( i );\r
};\r
- e.target[ 'listenOnce' ]( X_EVENT_MEDIA_PLAYING, this, this.asyncDispatch, [ X_EVENT_READY ] ); // Android 標準ブラウザ\r
+ e.target[ 'listenOnce' ]( X_EVENT_MEDIA_PLAYING, this, this[ 'asyncDispatch' ], [ X_EVENT_READY ] ); // Android 標準ブラウザ\r
return;\r
};\r
this[ 'asyncDispatch' ]( X_EVENT_READY );\r
if( X_Audio_Sprite_TEMP.bgmPlaying && !X_Audio_Sprite_TEMP.bgmTrack ){\r
X_Audio_Sprite_TEMP.bgmTrack = e.target;\r
this.play( X_Audio_Sprite_TEMP.bgmName );\r
- return X.Callback.PREVENT_DEFAULT;\r
+ return X_CALLBACK_PREVENT_DEFAULT;\r
};\r
};\r
break;\r
* 背景画像を読み終える onload で活動開始
*/
-var XUI_PageRoot = XUI_Box.inherits(
- '_PageRoot',
+var XUI_Root = XUI_Box.inherits(
+ '_Root',
X_Class.FINAL,
{
layout : XUI_Layout_Canvas,
X_Timer_once( 0, this, this.afterAddToView );
},
afterAddToView : function(){
- this.xnode[ 'className' ]( 'PageRoot' );
+ this.xnode[ 'className' ]( 'Root' );
this.creationComplete();
- X_Timer_once( 0, this, XUI_PageRoot_do1stCalculate );
+ X_Timer_once( 0, this, XUI_Root_do1stCalculate );
},
reserveCalc : function(){
this.calcReserved = false;
- X_ViewPort[ 'listenOnce' ]( X_EVENT_AFTER_UPDATE, this, XUI_PageRoot_onViewUpdate );
+ X_ViewPort[ 'listenOnce' ]( X_EVENT_AFTER_UPDATE, this, XUI_Root_onViewUpdate );
return X_CALLBACK_NONE;
},
}
);
-function XUI_PageRoot_do1stCalculate(){
+function XUI_Root_do1stCalculate(){
this.calculate();
this.phase = 4;
X.ViewPort
[ 'listen' ]( X_EVENT_BASE_FONT_RESIZED, this, this.calculate );
};
-function XUI_PageRoot_onViewUpdate( e ){
+function XUI_Root_onViewUpdate( e ){
this[ 'dispatch' ]( XUI_Event.LAYOUT_COMPLETE );
};
-//var XUI_PageRoot;
+//var XUI_Root;
// TODO singleton
-X.UI.PageRoot = X.UI.Box.inherits(
- 'PageRoot',
+X.UI.Root = X.UI.Box.inherits(
+ 'Root',
X_Class.NONE,
{
Constructor : function(){
var supports;
- //if( !XUI_PageRoot ){
+ //if( !XUI_Root ){
supports = XUI_Attr_createAttrDef( XUI_Box.prototype.usableAttrs, XUI_Layout_Canvas.overrideAttrsForSelf );
- XUI_PageRoot.prototype.layout = XUI_Layout_Canvas;
- XUI_PageRoot.prototype.usableAttrs = supports;
- XUI_PageRoot.prototype.attrClass = XUI_Attr_preset( XUI_Box.prototype.attrClass, supports, {
+ XUI_Root.prototype.layout = XUI_Layout_Canvas;
+ XUI_Root.prototype.usableAttrs = supports;
+ XUI_Root.prototype.attrClass = XUI_Attr_preset( XUI_Box.prototype.attrClass, supports, {
width : '100%',
height : '100%'
} );
//};
- X_Pair_create( this, XUI_PageRoot( this, XUI_Layout_Canvas, arguments ) );
+ X_Pair_create( this, XUI_Root( this, XUI_Layout_Canvas, arguments ) );
}
});
/*
-X.UI.PageRoot = X.UI.Box.presets(
- 'PageRoot',
- XUI_PageRoot,
+X.UI.Root = X.UI.Box.presets(
+ 'Root',
+ XUI_Root,
{
width : '100%',
height : '100%'
var scroll;\r
\r
with( X.UI ){\r
- PageRoot(\r
+ Root(\r
scroll = ScrollBox(\r
Layout.Canvas,\r
{\r