X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=0.6.x%2Fjs%2F02_dom%2F06_XNodeCSS.js;h=9bcfdfd6319b9f8aa6079b2523b5ed4282089ff3;hb=d5cd3943f09c2e3ca76ddb2959c911e6ff4a38d7;hp=22b3e025564f7938bd098f88d06b499975a8bae2;hpb=b28fd52ddc41a1c927f92fa7eeeb6891c41e55d9;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 22b3e02..9bcfdfd 100644 --- a/0.6.x/js/02_dom/06_XNodeCSS.js +++ b/0.6.x/js/02_dom/06_XNodeCSS.js @@ -190,7 +190,7 @@ function X_Node_CSS_parseColor( x ){ var rgb, r, g, b; if( X_Type_isNumber( x ) ){ - return ( 0x0 <= x && x <= 0xFFFFFF ) ? x : undefined; + return ( 0x0 <= x && x <= 0xFFFFFF ) ? x : NaN; } else if( !X_Type_isString( x ) ) return; @@ -239,14 +239,14 @@ function X_Node_CSS_parseColor( x ){ b *= 2.55; }; } else { - return undefined; + return NaN; }; - return X_Type_isFinite( r + b + g ) ? ( r << 16 ) + ( g << 8 ) + b : undefined; + return X_Type_isFinite( r + b + g ) ? ( r << 16 ) + ( g << 8 ) + b : NaN; }; function X_Node_CSS_objToCssText( that, skipFilter ){ var obj = that[ '_css' ], - plain = X_EMPTY_OBJECT, + //plain = X_EMPTY_OBJECT, css = [], n = -1, p, v, specialFix, filterFix; @@ -260,7 +260,7 @@ function X_Node_CSS_objToCssText( that, skipFilter ){ for( p in obj ){ // object の拡張に備えて plain なオブジェクトを用意し、そのメンバーと一致するものは処理の対象外。 - if( plain[ p ] ) continue; + //if( plain[ p ] ) continue; v = obj[ p ]; @@ -277,8 +277,10 @@ function X_Node_CSS_objToCssText( that, skipFilter ){ }; if( filterFix ){ - v = X_Node_CSS_objToIEFilterText( that, filterFix ); - if( v ) css[ ++n ] = 'filter:' + v; + v = X_Node_CSS_objToIEFilterText( that, filterFix, css ); + if( v ){ + css[ ++n ] = 'filter:' + v; + }; skipFilter = skipFilter && v; } else { skipFilter = false; @@ -312,13 +314,15 @@ X_Node_CSS_FILTER_FIX_PROPS = } : null; -function X_Node_CSS_objToIEFilterText( that, opt_css ){ +function X_Node_CSS_objToIEFilterText( that, opt_css, opt_cssList ){ var obj = opt_css || that[ '_css' ], test = X_Node_CSS_FILTER_FIX_PROPS, + css = {}, filters = [], n = -1, p, id, v, num, ary, params, i, l, dir, afterUpdate, impossible; + for( p in obj ){ if( X_EMPTY_OBJECT[ p ] ) continue; @@ -330,7 +334,10 @@ function X_Node_CSS_objToIEFilterText( that, opt_css ){ filters[ ++n ] = v; break; case 2 : //'opacity' : - filters[ ++n ] = 'alpha(opacity=' + ( v * 100 | 0 ) +')'; + //if( v === 0 ){ + // opt_cssList && ( opt_cssList[ opt_cssList.length ] = 'visibility:hidden' ); + //} else + if( v < 1 ) filters[ ++n ] = 'alpha(opacity=' + ( v * 100 | 0 ) +')'; break; case 3 : //'boxShadow' : // TODO カンマ区切りの複数指定 @@ -526,11 +533,11 @@ function X_Node_css( nameOrObj /* value */ ){ // setter:object if( X_Type_isObject( nameOrObj ) ){ if( !css ) css = this[ '_css' ] = {}; - plain = X_EMPTY_OBJECT; + //plain = X_EMPTY_OBJECT; camelize = X_Node_CSS_camelize; flags = this[ '_flags' ]; for( p in nameOrObj ){ - if( plain[ p ] ) continue; + //if( plain[ p ] ) continue; name = camelize( p ); v = nameOrObj[ p ]; if( css[ name ] === v ) continue; @@ -584,6 +591,7 @@ function X_Node_CSS_setStyle( css, flags, name, newValue ){ return flags; case 'opacity' : + flags |= X_NodeFlags_IE8_OPACITY_FIX; // すでに visibility:hidden で invisible if( flags & X_NodeFlags_STYLE_IS_INVISIBLE && css[ 'visibility' ] === 'hidden' ) return flags; newValue == 0 ? // 0 or "0" @@ -789,11 +797,14 @@ var X_Node_CSS_Support = {}, * @namespace X.CSS */ X[ 'CSS' ] = { - + /** + * @alias X.CSS.VENDER_PREFIX + */ 'VENDER_PREFIX' : X_Node_CSS_VENDER_PREFIX, - // iscroll で使用 - 'uncamelize' : X_Node_CSS_uncamelize, - + + /** + * @alias X.CSS.Support + */ 'Support' : X_Node_CSS_Support }; @@ -825,7 +836,7 @@ X[ 'CSS' ] = { for( j = vendors.length; j; ){ v = vendors[ --j ]; if( testStyle[ v + prop ] !== undefined ){ - if( v === 'ms' ) v = 'Ms';// for ie9 + if( v === 'ms'/* && !( 10 <= X_UA[ 'IEHost' ] )*/ ) v = 'Ms';// for ie9, 但し ie11 のieには不要 if( v === 'o' ) v = 'O';//for opera12 X_Node_CSS_VENDER_PREFIX[ search ] = v + prop; break; @@ -837,41 +848,62 @@ X[ 'CSS' ] = { }; testStyle.cssText = 'background:rgba(0,0,0,0.5);border-color:transparent'; +/** + * 色指定に rgba() が使用できるか? + * @alias X.CSS.Support.rgba + * @type {boolean} + */ X_Node_CSS_Support[ 'rgba' ] = !!testStyle[ 'background' ]; + +/** + * 色指定に transparent が使用できるか? + * @alias X.CSS.Support.transparent + * @type {boolean} + */ X_Node_CSS_Support[ 'transparent' ] = !!testStyle[ 'borderColor' ]; // TODO border による三角形の可否 // 2:完全、 1:透過に非対応(IE7-) 0:borderの描画が非標準で三角形が作れない - - /* - * chrome 1+, ff3.5(1.9.1), ie9+, opera10.5+, Safari3+(522) - */ + if( prop = X_Node_CSS_VENDER_PREFIX[ 'boxShadow' ] ){ testStyle.cssText = X_Node_CSS_uncamelize( prop ) + ':0 0'; + + /** + * boxShadow が使用できるか? + * chrome 1+, ff3.5(1.9.1), ie9+, opera10.5+, Safari3+(522) + * @alias X.CSS.Support.boxShadow + * @type {boolean} + */ X_Node_CSS_Support[ 'boxShadow' ] = !!testStyle[ prop ]; - /* + testStyle.cssText = X_Node_CSS_uncamelize( prop ) + ':0 0, 0 0'; + + /** + * boxShadow の複数指定が使用できるか?
* chrome 4+, ff3.5(1.9.1), ie9+, opera10.5+, Safari5+(533) + * @alias X.CSS.Support.boxShadowMulti + * @type {boolean} */ - testStyle.cssText = X_Node_CSS_uncamelize( prop ) + ':0 0, 0 0'; X_Node_CSS_Support[ 'boxShadowMulti' ] = !!testStyle[ prop ]; - /* - * https://developer.mozilla.org/ja/docs/Web/CSS/box-shadow - * この値を用いる場合には、spread-radius を省略出来ません。box-shadow が効かないケースに遭遇した時はこの事を思い出して下さい。 - * chrome 4+, ff3.5(1.9.1), ie9+, opera10.5+, Safari5+(533) + testStyle.cssText = X_Node_CSS_uncamelize( prop ) + ':0 0 inset'; + + /** + * https://developer.mozilla.org/ja/docs/Web/CSS/box-shadow
+ * この値を用いる場合には、spread-radius を省略出来ません。box-shadow が効かないケースに遭遇した時はこの事を思い出して下さい。
+ * chrome 4+, ff3.5(1.9.1), ie9+, opera10.5+, Safari5+(533)
* - * http://unformedbuilding.com/articles/considerations-when-using-the-box-shadow/ - * box-shadow:inset と border-radius を指定しているときの Google Chrome の表示 - * このバグは Windows と Linux で発生するようです。 - * Windows 版 Chrome 10.0.648.127 で修正されているのを確認しました。 + * http://unformedbuilding.com/articles/considerations-when-using-the-box-shadow/
+ * box-shadow:inset と border-radius を指定しているときの Google Chrome の表示
+ * このバグは Windows と Linux で発生するようです。
+ * Windows 版 Chrome 10.0.648.127 で修正されているのを確認しました。
+ * @alias X.CSS.Support.boxShadowInset + * @type {boolean} */ - testStyle.cssText = X_Node_CSS_uncamelize( prop ) + ':0 0 inset'; X_Node_CSS_Support[ 'boxShadowInset' ] = testStyle[ prop ] && testStyle[ prop ].indexOf( 'inset' ) !== -1; }; - testStyle.cssText = temp; })();