From: itozyun Date: Wed, 9 Mar 2016 00:59:26 +0000 (+0900) Subject: Version 0.6.215, bug fixes X.Net.Image & X.HTMLAudio. X-Git-Url: http://git.osdn.net/view?p=pettanr%2FclientJs.git;a=commitdiff_plain;h=bfca1aa94da405643253af65c421f6665d6e6262 Version 0.6.215, bug fixes X.Net.Image & X.HTMLAudio. --- diff --git a/0.6.x/js/01_core/07_XString.js b/0.6.x/js/01_core/07_XString.js index 788654d..530bd9b 100644 --- a/0.6.x/js/01_core/07_XString.js +++ b/0.6.x/js/01_core/07_XString.js @@ -158,7 +158,7 @@ function X_String_whiteSpaceToTag( text ){ * @return {string} html文字列 */ function X_String_chrReferanceTo( str ){ - var refs, i, l, ref; + var refs, i, l, ref, k; if( str == null || str === '' ) return ''; if( str.indexOf( '&' ) === -1 ) return str; diff --git a/0.6.x/js/01_core/13_XClass.js b/0.6.x/js/01_core/13_XClass.js index a0b15cc..24ed3eb 100644 --- a/0.6.x/js/01_core/13_XClass.js +++ b/0.6.x/js/01_core/13_XClass.js @@ -15,7 +15,7 @@ var * クラス名 * @type {string} */ - name : '' + NAME : '' }, X_Class_CLASS_LIST = [], @@ -481,7 +481,7 @@ X[ 'Class' ] = /** @lends X.Class */ { klass.prototype.constructor = klass; }; - klass[ 'name' ] = displayName; + klass[ 'NAME' ] = displayName; if( opt_abstract ){ classDef.isAbstract = true; diff --git a/0.6.x/js/02_dom/06_XNodeCSS.js b/0.6.x/js/02_dom/06_XNodeCSS.js index 3719b43..77bb067 100644 --- a/0.6.x/js/02_dom/06_XNodeCSS.js +++ b/0.6.x/js/02_dom/06_XNodeCSS.js @@ -277,9 +277,10 @@ function X_Node_CSS_objToCssText( that, skipFilter ){ }; if( filterFix ){ - v = X_Node_CSS_objToIEFilterText( that, filterFix /* , css */ ); + v = X_Node_CSS_objToIEFilterText( that, filterFix, css ); + n = css.length; /* css が変更されている場合あり */ if( v ){ - css[ ++n /* css.length */ ] = 'filter:' + v; + css[ ++n ] = 'filter:' + v; }; skipFilter = skipFilter && v; } else { @@ -289,6 +290,7 @@ function X_Node_CSS_objToCssText( that, skipFilter ){ if( 0 <= n ){ // cssText には完全なものを控えるが、戻すのは filter を抜いたもの that[ '_cssText' ] = css.join( ';' ); + //console.log( that[ '_cssText' ] ); if( skipFilter ){ --css.length; return css.join( ';' ); @@ -334,9 +336,10 @@ function X_Node_CSS_objToIEFilterText( that, opt_css, opt_cssList ){ filters[ ++n ] = v; break; case 2 : //'opacity' : - //if( v === 0 ){ - // opt_cssList && ( opt_cssList[ opt_cssList.length ] = 'visibility:hidden' ); - //} else + if( v === 0 ){ + console.log( '@opacity:0 ' + !!opt_cssList ); + opt_cssList && ( opt_cssList[ opt_cssList.length ] = 'visibility:hidden' ); + } else if( v < 1 ) filters[ ++n ] = 'alpha(opacity=' + ( v * 100 | 0 ) +')'; break; case 3 : //'boxShadow' : @@ -422,7 +425,7 @@ function X_Node_CSS_objToIEFilterText( that, opt_css, opt_cssList ){ break; }; }; - return filters.join( ' ' ); + return filters.join( ' ' );//n !== -1 ? filters.join( ' ' ) : ''; }; diff --git a/0.6.x/js/02_dom/20_XNode.js b/0.6.x/js/02_dom/20_XNode.js index db671a1..0a0adf7 100644 --- a/0.6.x/js/02_dom/20_XNode.js +++ b/0.6.x/js/02_dom/20_XNode.js @@ -291,7 +291,7 @@ var Node = X[ 'Node' ] = X_EventDispatcher[ 'inherits' ]( 'toggleClass' : X_Node_toggleClass, 'hasClass' : X_Node_hasClass, - 'html' : X_Node_html, + 'html' : X_Node__html, 'text' : X_Node_text, 'call' : X_Node_call, 'each' : X_Node_each @@ -1114,7 +1114,7 @@ function X_Node_hasClass( v ){ * @return {string|Node} * @example node.html( '' ); */ -function X_Node_html( html ){ +function X_Node__html( html ){ var _ = '', q = '"', xnodes, n, i, l; // setter if( html !== undefined ){ // String 以外に Number や false null なども許可 @@ -1419,7 +1419,7 @@ function X_Node_startUpdate( time ){ removal.length = 0; }; - + // X_UA[ 'IE5' ] && ( X_elmBody.style.visibility = 'hidden' ); if( X_Node_html[ '_flags' ] & X_Node_BitMask_IS_DIRTY ){ @@ -1816,7 +1816,7 @@ var X_Node__updateRawNode = elm.setAttribute( 'class', that[ '_className' ] ) : ( elm.className = that[ '_className' ] ) ) : - ( elm.className && elm.removeAttribute( X_UA[ 'IE' ] < 8 ? 'className' : 'class' ) ); // className は ie7- + ( elm.className && elm.removeAttribute( X_UA[ 'IE' ] < 8 ? 'className' : 'class' ) ); // className は ie7- }; // attr diff --git a/0.6.x/js/06_net/04_XNetImage.js b/0.6.x/js/06_net/04_XNetImage.js index 9611900..e93c46b 100644 --- a/0.6.x/js/06_net/04_XNetImage.js +++ b/0.6.x/js/06_net/04_XNetImage.js @@ -67,7 +67,7 @@ X_TEMP.X_ImgLoader_params = { //console.log( '/ X.Net.Image:reset ' + this.abspath + ' timerID:' + this.timerID ); this.timerID && X_Timer_remove( this.timerID ); - this.timerID = 0; + this.timerID = this.tick = 0; this.finish = false; this.abspath = ''; @@ -111,7 +111,7 @@ function X_ImgLoader_handleEvent( e ){ // ie11(10,9 開発モード)で mineType 不正の場合、画像取得に成功してもエラーイベントが起こるのを無視する。 if( X_ImgLoader_0forError && raw.width ) return; if( this.finish ) return; - this.finish = true; + this.finish = true; this.timerID && X_Timer_remove( this.timerID ); //console.log( '* X.Net.Image:ERROR @handle ' + this.abspath + X.Timer.now() ); //console.dir( raw ); diff --git a/0.6.x/js/07_audio/02_XHTMLAudio.js b/0.6.x/js/07_audio/02_XHTMLAudio.js index b5abcd2..ca59f5f 100644 --- a/0.6.x/js/07_audio/02_XHTMLAudio.js +++ b/0.6.x/js/07_audio/02_XHTMLAudio.js @@ -54,6 +54,8 @@ var // Opera Mobile 12 は 2回目以降の currentTime へのセットで currentTime が更新されなくなるため、タイマーを使用する X_HTMLAudio_currentTimeFix = !!X_UA[ 'OperaMobile' ] || !!X_UA[ 'OperaTablet' ], + // Firefox44.0.2 で音声の再生開始に難あり... + X_HTMLAudio_playStartFix = X_UA[ 'Windows' ] && X_UA[ 'Gecko' ] === 44, X_HTMLAudio_volumeFix = X_UA[ 'Chrome' ], /* @@ -107,7 +109,7 @@ if( X_Audio_constructor ){ // 8:duration 取得済 // :timeupdate イベントで durationFixは完了 _durationFixPhase : X_HTMLAudio_durationFix ? 1 : 0, - _lastCurrentTime : 0, + _lastCurrentTime : 0, // ms _shortPlayFixON : false, _shortPlayFixTime : 0, @@ -203,7 +205,7 @@ if( X_Audio_constructor ){ if( !raw ) return; - //e.type !== 'timeupdate' && console.log( ' > ' + e.type ); + // e.type !== 'timeupdate' && console.log( ' > ' + e.type ); switch( e.type ){ @@ -278,11 +280,18 @@ if( X_Audio_constructor ){ if( ( now = this.getActualCurrentTime() ) === this._lastCurrentTime ){ eventType = X_EVENT_MEDIA_WAITING; } else + if( X_HTMLAudio_playStartFix && ( now < this._lastCurrentTime ) ){ + eventType = X_EVENT_MEDIA_WAITING; + //console.log( '@Firefox44.0.2 !! ' + now + ' / ' + this._lastCurrentTime ); + // Firefox44.0.2 で音声の再生開始に難あり... + // 20回程度 currentTime の更新に失敗する.... + this.actualPlay(); + } else if( this.playing ){ end = X_Audio_getEndTime( this ) + this._shortPlayFixTime; - - console.log( now + ' / ' + end );// Firefox44.0.2 で音声の再生開始に難あり... - + + //console.log( '@ ' + now + ' / ' + this._lastCurrentTime + ' / ' + end );// Firefox44.0.2 で音声の再生開始に難あり... + if( ( 0 + end <= 0 + now ) || // 0+ なぜか iem9 で必要,,, ( now < this._lastCurrentTime && now < 2000 ) ){ //( ( X_HTMLAudio_endedFixAOSP2 || X_HTMLAudio_endedFixAOSP4 ) && ( now < this._lastCurrentTime && now < 1000 ) ) ){ @@ -438,7 +447,7 @@ if( X_Audio_constructor ){ end = X_Audio_getEndTime( this ); begin = X_Audio_getStartTime( this, end, true ); - this._lastCurrentTime = begin / 1000; + this._lastCurrentTime = begin; if( this._shortPlayFixON ){ this._shortPlayFixTime = ( 1000 < end - begin ) ? 200 : 400; @@ -469,7 +478,7 @@ if( X_Audio_constructor ){ // iOS で duration が 0 の時に触ると error // 0 or 8 - if( !( this._durationFixPhase % 8 ) && this.duration ) raw.currentTime = this._lastCurrentTime; + if( !( this._durationFixPhase % 8 ) && this.duration ) raw.currentTime = this._lastCurrentTime / 1000; console.log( '[HTMLAudio] play ' + begin + ' -> ' + end + ' crt:' + ( raw.currentTime | 0 ) + ' last:' + this._lastCurrentTime ); @@ -509,7 +518,7 @@ if( X_Audio_constructor ){ getActualCurrentTime : function(){ return ( X_HTMLAudio_currentTimeFix ? X_Timer_now() - this._currentFixStart + this._currentFixBegin : - this._seekingFixON ? this._lastCurrentTime * 1000 : + this._seekingFixON ? this._lastCurrentTime : this[ '_rawObject' ].currentTime * 1000 | 0 ); }, /*