OSDN Git Service

Version 0.6.133, fix for closure compiler - ADVANCED_OPTIMIZATIONS
[pettanr/clientJs.git] / 0.6.x / js / 02_dom / 06_XNodeCSS.js
index b185bdc..6a87798 100644 (file)
@@ -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', '<div id="ie4charsize" style="position:absolute;top:0;left:0;">X</div>' );
+                               ( that._rawObject || X_Node__ie4getRawNode( that ) ).insertAdjacentHTML( 'BeforeEnd', '<div id="ie4charsize" style="position:absolute;top:0;left:0;visivility:hidden;line-height:1;height:1em;">X</div>' );
                                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  = (