X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=0.6.x%2Fjs%2F02_dom%2F06_XNodeCSS.js;h=6a87798a2d32790a459e885a9d6002a04e11af19;hb=a130cabd01fde8865990a59d849f5d5d08ed2119;hp=b185bdca99b1041a28d3d151cc5899a4caa52eea;hpb=dad4215398716c9913e80ec902c76db6762c1dce;p=pettanr%2FclientJs.git diff --git a/0.6.x/js/02_dom/06_XNodeCSS.js b/0.6.x/js/02_dom/06_XNodeCSS.js index b185bdc..6a87798 100644 --- a/0.6.x/js/02_dom/06_XNodeCSS.js +++ b/0.6.x/js/02_dom/06_XNodeCSS.js @@ -86,7 +86,7 @@ _GRNERAL */ X_Node_CSS_VENDER_PREFIX = {}, -X_Node_CSS__CLIP_SEPARATOR = X_UA.IE < 8 ? ' ' : ',', +X_Node_CSS__CLIP_SEPARATOR = X_UA[ 'IE' ] < 8 ? ' ' : ',', X_Node_CSS__UNIT_RATIO = {}, X_Node_CSS__FONT_SIZE_RATIO = {}, @@ -189,12 +189,12 @@ X_Node_CSS_COLOR = { function X_Node_CSS_parseColor( x ){ var rgb, r, g, b; - if( X.Type.isNumber( x ) ){ + if( X_Type_isNumber( x ) ){ return ( 0x0 <= x && x <= 0xFFFFFF ) ? x : undefined; } else - if( !X.Type.isString( x ) ) return; + if( !X_Type_isString( x ) ) return; - if( X.Type.isNumber( rgb = X_Node_CSS_COLOR[ x.toUpperCase() ] ) && 0x0 <= rgb && rgb <= 0xFFFFFF ){ + if( X_Type_isNumber( rgb = X_Node_CSS_COLOR[ x.toUpperCase() ] ) && 0x0 <= rgb && rgb <= 0xFFFFFF ){ return rgb; } else if( x.charAt( 0 ) === '#' ){ @@ -244,7 +244,7 @@ function X_Node_CSS_parseColor( x ){ return isFinite( r + b + g ) ? ( r << 16 ) + ( g << 8 ) + b : undefined; }; -function X_Node_CSS_objToCssText( that ){ +function X_Node_CSS_objToCssText( that, skipFilter ){ var obj = that._css, plain = X_EMPTY_OBJECT, css = [], @@ -276,10 +276,22 @@ function X_Node_CSS_objToCssText( that ){ }; }; - filterFix && ( css[ ++n ] = 'filter:' + X_Node_CSS_objToIEFilterText( that, filterFix ) ); + if( filterFix ){ + v = X_Node_CSS_objToIEFilterText( that, filterFix ); + if( v ) css[ ++n ] = 'filter:' + v; + skipFilter = skipFilter && v; + } else { + skipFilter = false; + }; if( 0 <= n ){ - return that._cssText = css.join( ';' ); + // cssText には完全なものを控えるが、戻すのは filter を抜いたもの + that._cssText = css.join( ';' ); + if( skipFilter ){ + --css.length; + return css.join( ';' ); + }; + return that._cssText; }; delete that._cssText; return ''; @@ -287,13 +299,14 @@ function X_Node_CSS_objToCssText( that ){ var X_Node_CSS_FILTER_FIX_PROPS = - X_UA.ActiveX && X_UA.IE < 9 && !X_UA.MacIE ? + X_UA[ 'ActiveX' ] && X_UA[ 'IE' ] < 9 && !X_UA[ 'MacIE' ] ? { opacity : 2, boxShadow : 3, - textShadow : 4 + textShadow : 4, + transform : 5 } : - X_UA.ActiveX && X_UA.IE9 ? // == 9 + X_UA[ 'ActiveX' ] && X_UA[ 'IE9' ] ? // == 9 { textShadow : 4 } : @@ -392,8 +405,11 @@ function X_Node_CSS_objToIEFilterText( that, opt_css ){ //glow(Color=yellow,Strength=10); //どうやらCSSのbackgroundプロパティと同時に使えないようです。 s break; - case 5 : //'backgroundImage' : + case 6 : //'backgroundImage' : // + + case 5 : // transform scale, matrix + }; }; return filters.join( ' ' ); @@ -436,7 +452,7 @@ X_Node_CSS_UNIT = { */ function X_Node_CSS__splitValueAndUnit( v ){ var num, _num, u; - if( X.Type.isNumber( v ) ) return [ v || 0, '' ]; + if( X_Type_isNumber( v ) ) return [ v || 0, '' ]; num = parseFloat( v ); if( num !== num ) return [ 0, '' ]; _num = '' + num; @@ -492,19 +508,20 @@ function X_Node_CSS__splitValueAndUnit( v ){ Node.prototype.css = function( nameOrObj /* orUnitID, valuOrUnitOrName */ ){ var args = arguments, css = this._css, - p, name, v, plain, camelize; - if( !this._tag ) return this; + p, name, v, plain, camelize, flags; + if( !this._tag || X_Dom_DTD_MOVE_TO_HEAD[ this._tag ] || this._tag === 'SCRIPT' ) return this; // setter:object - if( X.Type.isObject( nameOrObj ) ){ + if( X_Type_isObject( nameOrObj ) ){ if( !css ) css = this._css = {}; plain = X_EMPTY_OBJECT; camelize = X_Node_CSS_camelize; + flags = this._flags; for( p in nameOrObj ){ if( plain[ p ] ) continue; name = camelize( p ); v = nameOrObj[ p ]; if( css[ name ] === v ) continue; - this._flags = X_Node_CSS_setStyle( css, this._flags, name, v ); + flags = X_Node_CSS_setStyle( css, flags, name, v ); }; this._flags |= X_Node_State.DIRTY_CSS | X_Node_State.OLD_CSSTEXT; this._flags & X_Node_State.IN_TREE && X_Node_reserveUpdate(); @@ -554,7 +571,8 @@ function X_Node_CSS_setStyle( css, flags, name, newValue ){ case 'opacity' : // すでに visibility:hidden で invisible if( flags & X_Node_State.STYLE_IS_INVISIBLE && css[ 'visibility' ] === 'hidden' ) return flags; - newValue == 0 ? ( flags |= X_Node_State.STYLE_IS_INVISIBLE ) : ( flags &= ~X_Node_State.STYLE_IS_INVISIBLE ); + newValue == 0 ? // 0 or "0" + ( flags |= X_Node_State.STYLE_IS_INVISIBLE ) : ( flags &= ~X_Node_State.STYLE_IS_INVISIBLE ); return flags; case 'overflow' : @@ -603,16 +621,15 @@ Node.prototype.cssText = function( v ){ if( v === '' ){ delete this._css; delete this._cssText; - this._flags |= X_Node_State.DIRTY_CSS; - this._flags &= ~X_Node_State.OLD_CSSTEXT; // ~X_Node_State.DIRTY_IE_FILTER - this._flags &= X_Node_BITMASK_RESET_STYLE; + this._flags |= X_Node_State.DIRTY_CSS | X_Node_State.DIRTY_IE_FILTER; + this._flags &= ~X_Node_State.OLD_CSSTEXT; this._flags & X_Node_State.IN_TREE && X_Node_reserveUpdate(); return this; } else - if( X.Type.isString( v ) ){ + if( X_Type_isString( v ) ){ delete this._css; obj = {}; - v = v.split( ';' ); // TODO content ";" などにも対応 + v = v.split( ';' ); // TODO content ";" などにも対応 <- 不要 :before :after 疑似要素には触らない for( i = 0, l = v.length; i < l; ++i ){ attr = v[ i ].split( ':' ); ( name = attr[ 0 ] ) && ( obj[ name ] = attr[ 1 ] || true ); @@ -642,7 +659,7 @@ X_Node_CSS_getCharSize = return that._fontSize = parseFloat( X_node_CSS_getComputedStyle( that._rawObject, null ).fontSize ); }) : - 5.5 <= X_UA.IE ? + 5 <= X_UA[ 'IE' ] ? (function( that ){ var font, vu, v, u, _v; X_Node_updateTimerID && X_Node_startUpdate(); @@ -706,7 +723,7 @@ X_Node_CSS_getCharSize = }; } else { // 要素を生成して測定! - ( that._rawObject || X_Node__ie4getRawNode( that ) ).insertAdjacentHTML( 'BeforeEnd', '
X
' ); + ( that._rawObject || X_Node__ie4getRawNode( that ) ).insertAdjacentHTML( 'BeforeEnd', '
X
' ); elm = document.all[ 'ie4charsize' ]; v = elm.offsetHeight; elm.removeAttribute( 'id' ); // ? @@ -733,7 +750,7 @@ var X_Node_CSS_Support = {}, X_Node_CSS_SPECIAL_FIX_PROP = { - transitionDuration : X_UA.Android && !X_UA.Chrome && function( v ){ // bad Android + transitionDuration : X_UA[ 'Android' ] && !X_UA[ 'Chrome' ] && function( v ){ // bad Android return parseFloat( v ) === 0 ? '0.001s' : v; } @@ -762,7 +779,7 @@ X.CSS = { */ (function(){ - var testStyle = X_UA.IE4 ? {} : ( /*document.documentElement ||*/ document.createElement( 'div' ) ).style, + var testStyle = X_UA[ 'IE4' ] ? {} : ( /*document.documentElement ||*/ document.createElement( 'div' ) ).style, temp = testStyle.cssText, vendors = 'webkit,Webkit,Moz,moz,Ms,ms,O,o,khtml,Khtml'.split( ',' ), searches = (