- var rgb = '00000' + ( ( round( this.r ) << 16 ) + ( round( this.g ) << 8 ) + round( this.b ) ).toString( 16 );
- return '#' + rgb.substr( rgb.length - 6 );
- },
- _toPct : function(){
- if( this.pct === true ) return [ this.r, this.g, this.b ];
- return [ this.r / 2.55, this.g / 2.55, this.b / 2.55 ];
- },
- isValid : function( t ){
- var isFinite = window.isFinite;
- if( !isFinite( this.r ) || !isFinite( this.g ) || !isFinite( this.b ) ) return false;
- if( 0 > this.r || 0 > this.g || 0 > this.b ) return false;
- if( this.pct === true ) return this.r <= 100 && this.g <= 100 && this.b <= 100;
- return this.r <= 255 && this.g <= 255 && this.b <= 255;
- }
- }
- );
-
-function X_Node_CSS__getProperty( xnode, css, unit, p ){
-
- var me = X_Node_CSS__getProperty,
- PARAMS = X_Node_CSS_PARAMS,
- PropertyGroup = X_Node_CSS_PropertyGroup,
- Property = X_Node_CSS_Property,
- ColorProperty = X_Node_CSS_ColorProperty,
- name, width;
-
- if( PARAMS.special[ p ] === true || PARAMS.region[ p ] === true ){
- switch( p ){
- case 'clip' :
- // rect(...) クリップします。<top>, <bottom> は上端からの、 <right>, <left> は左端からのオフセットで指定します。Internet Explorer 4~7 では、カンマの代わりにスペースで区切る必要があります。
- // position:absolute または position:fixed を適用した要素に対してのみ有効です。
- var top = me( p + 'Top' ),
- right = me( p + 'Right' ),
- bottom = me( p + 'Bottom' ),
- left = me( p + 'Left' ),
- ret = new PropertyGroup( p, top, right, bottom, left ),
- all;
- if( ret.isValid() === true ) return ret;
- ret.kill();
- all = css[ p ].split( '(' )[ 1 ].split( ')' )[ 0 ].split( X_Node_CSS__CLIP_SEPARATOR );
- return
- new PropertyGroup(
- p,
- new Property( p + 'Top', all[ 0 ], 'px', xnode ),
- new Property( p + 'Right', all[ 1 ], 'px', xnode ),
- new Property( p + 'Bottom', all[ 2 ], 'px', xnode ),
- new Property( p + 'Left', all[ 3 ], 'px', xnode )
- );
-
- case 'margin' :
- case 'padding' :
- name = p;
- width = '';
- case 'borderWidth' :
- var props = '$1Top$2,$1Right$2,$1Bottom$2,$1Left$2'.split( '$1' ).join( name || 'border' ).split( '$2' ).join( width || 'Width' ).split( ',' ),
- top = me( props[ 0 ] ),
- right = me( props[ 1 ] ),
- bottom = me( props[ 2 ] ),
- left = me( props[ 3 ] ),
- ret = new PropertyGroup( p, top, right, bottom, left ),
- all, _0, _1, _2, _3, vu, v, u;
- if( ret.isValid() === true ) return ret;
- ret.kill();
- all = css[ p ].split( ' ' );
- _0 = all[ 0 ];
- _1 = all[ 1 ];
- _2 = all[ 2 ];
- _3 = all[ 3 ];
- vu = X_Node_CSS__splitValueAndUnit( _0 );
- v = vu[ 0 ];
- u = vu[ 1 ];
- switch( all.length ){
- case 1 :
- top = new Property( props[ 0 ], v, u, xnode );
- right = new Property( props[ 1 ], v, u, xnode );
- bottom = new Property( props[ 2 ], v, u, xnode );
- left = new Property( props[ 3 ], v, u, xnode );
- break;
- case 2 :
- top = new Property( props[ 0 ], v, u, xnode );
- bottom = new Property( props[ 2 ], v, u, xnode );
- vu = X_Node_CSS__splitValueAndUnit( _1 );
- v = vu[ 0 ];
- u = vu[ 1 ];
- right = new Property( props[ 1 ], v, u, xnode );
- left = new Property( props[ 3 ], v, u, xnode );
- break;
- case 3 :
- top = new Property( props[ 0 ], v, u, xnode );
- vu = X_Node_CSS__splitValueAndUnit( _1 );
- v = vu[ 0 ];
- u = vu[ 1 ];
- right = new Property( props[ 1 ], v, u, xnode );
- left = new Property( props[ 3 ], v, u, xnode );
- vu = X_Node_CSS__splitValueAndUnit( _2 );
- v = vu[ 0 ];
- u = vu[ 1 ];
- bottom = new Property( props[ 2 ], v, u, xnode );
- break;
- case 4 :
- top = new Property( props[ 0 ], v, u, xnode );
- vu = X_Node_CSS__splitValueAndUnit( _1 );
- v = vu[ 0 ];
- u = vu[ 1 ];
- right = new Property( props[ 1 ], v, u, xnode );
- vu = X_Node_CSS__splitValueAndUnit( _2 );
- v = vu[ 0 ];
- u = vu[ 1 ];
- bottom = new Property( props[ 2 ], v,u, xnode );
- vu = X_Node_CSS__splitValueAndUnit( _3 );
- v = vu[ 0 ];
- u = vu[ 1 ];
- left = new Property( props[ 3 ], v, u, xnode );
- break;
- };
- return new PropertyGroup( p, top, right, bottom, left );
-
- case 'borderColor' :
- var props = 'borderTopColor,borderRightColor,borderBottomColor,borderLeftColor'.split( ',' ),
- top = me( props[ 0 ] ),
- right = me( props[ 1 ] ),
- bottom = me( props[ 2 ] ),
- left = me( props[ 3 ] ),
- ret = new PropertyGroup( p, top, right, bottom, left ),
- all, _0, _1;
- if( ret.isValid() === true ) return ret;
- ret.kill();
- all = css[ p ].split( ' ' );
- _0 = all[ 0 ];
- _1 = all[ 1 ];
- switch( all.length ){
- case 1 :
- top = new ColorProperty( props[ 0 ], _0 );
- right = new ColorProperty( props[ 1 ], _0 );
- bottom = new ColorProperty( props[ 2 ], _0 );
- left = new ColorProperty( props[ 3 ], _0 );
- break;
- case 2 :
- top = new ColorProperty( props[ 0 ], _0 );
- right = new ColorProperty( props[ 1 ], _1 );
- bottom = new ColorProperty( props[ 2 ], _0 );
- left = new ColorProperty( props[ 3 ], _1 );
- break;
- case 3 :
- top = new ColorProperty( props[ 0 ], _0 );
- right = new ColorProperty( props[ 1 ], _1 );
- bottom = new ColorProperty( props[ 2 ], all[ 2 ] );
- left = new ColorProperty( props[ 3 ], _1 );
- break;
- case 4 :
- top = new ColorProperty( props[ 0 ], _0 );
- right = new ColorProperty( props[ 1 ], _1 );
- bottom = new ColorProperty( props[ 2 ], all[ 2 ] );
- left = new ColorProperty( props[ 3 ], all[ 3 ] );
- break;
- };
- return new PropertyGroup( p, top, right, bottom, left );
-
- case 'backgroundPosition' :
- var x = me( p + 'X' ),
- y = me( p + 'Y' ),
- ret = new PropertyGroup( p, x, y ),
- xy;
- if( ret.isValid() === true ) return ret;
- ret.kill();
- xy = css[ p ].split( ' ' );
- x = X_Node_CSS__splitValueAndUnit( xy[ 0 ] );
- y = X_Node_CSS__splitValueAndUnit( xy[ 1 ] );
- return
- new PropertyGroup(
- p,
- new Property( p + 'X', x[ 0 ], x[ 1 ], xnode ),
- new Property( p + 'Y', y[ 0 ], y[ 1 ], xnode )
- );
- };
- // opacity, zindex, lineHeight
- vu = X_Node_CSS__splitValueAndUnit( css[ p ] );
- return new Property( p, vu[ 0 ], vu[ 1 ], xnode );
- };
- var x = css[ p ], e, v, u;
- /*
- if( PARAMS.offset[ p ] === true ){
- return new Property( p, vu[ 0 ], vu[ 1 ], xnode );
-
- e = this.elm;
- if( p === 'width' ) v = e.offsetWidth;
- if( p === 'height' ) v = e.offsetHeight;
- if( p === 'top' ) v = e.offsetTop;
- if( p === 'bottom' ) v = e.offsetBottom;
- if( p === 'left' ) v = e.offsetLeft;
- if( p === 'right' ) v = e.offsetRight;
- u = _getUnit( x, p );
- // alert( p + X_Node_CSS__Util.pxTo( v, u ) + u )
- return new Property( p, X_Node_CSS__Util.pxTo( v, u ), u, xnode );
- }; */
- if( p === 'fontSize' && ( v = X_Node_CSS__FONT_SIZE_RATIO[ x ] ) ){ // xx-small 等
- return new Property( p, v, 'px', xnode );
- };
- if( PARAMS.offset[ p ] || PARAMS.percent[ p ] || PARAMS.size[ p ] ){
- vu = X_Node_CSS__splitValueAndUnit( x );
- return new Property( p, vu[ 0 ], vu[ 1 ], xnode );