1 var XUI_Attr_AUTO = 1/0,//Number.POSITIVE_INFINITY,
\r
2 XUI_Attr_FLOOR = new Function( 'v', 'return 0 <= v ? v | 0 : -( -v | 0 )' ),
\r
4 XNODE : 0, // 値は xnode.css にコピーされます。
\r
5 UINODE : 1, // 値は _uinode にコピーされます。
\r
10 LENGTH : 1, // '1.5em'
\r
12 PERCENT : 4, // '90%', 0.0 ~ 1.0 こういう指定はできない!
\r
14 NUMERICAL : 16, // 1.1 (lineHeight only)
\r
15 AUTO : 32, // 'auto'
\r
16 COLOR : 64, // 0x000000 ~ 0xFFFFFF, RED, #000000 ~ #FFFFFF, #000 ~ #FFF
\r
23 DEFAULT_ONLY : 4096,
\r
28 BORDER_STYLE : 'none,hidden,dotted,dashed,solid,double,groove,ridge,inset,outset',
\r
29 ALIGN : 'left,center,right,justify',
\r
30 TEXT_DECORATION : 'none,underline,overline,line-through,blink',
\r
31 TEXT_TRANSFORM : 'none,capitalize,lowercase,uppercase',
\r
32 BOX_SIZING : 'content,padding,border',
\r
33 CURSOR : 'pointer,wait'
\r
37 bgColorAlpha : true,
\r
39 bgGradientAplha : true,
\r
40 cournerRadius : true,
\r
41 boxShadowBlur : true,
\r
42 boxShadowAlpha : true,
\r
45 textShadowBlur : true,
\r
46 textShadowAlpha : true
\r
49 bgColor : 'background-color',
\r
50 fontColor : 'color',
\r
51 fontBold : 'fontWeight',
\r
52 fontItalic : 'fontStyle',
\r
53 fontSmallCaps : 'fontVariant'
\r
57 * 0: 初期値 : undefined は不可!
\r
63 XUI_Attr_Support = XUI_Attr_createAttrDef( 0,
\r
65 className : [ null, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.DEFAULT_ONLY | XUI_Attr_Type.STRING ],
\r
66 pointerHoverClass : [ null, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.DEFAULT_ONLY | XUI_Attr_Type.STRING ],
\r
67 pointerDownClass : [ null, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.DEFAULT_ONLY | XUI_Attr_Type.STRING ],
\r
68 invalidLayoutColor: [ null, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.DEFAULT_ONLY | XUI_Attr_Type.COLOR ],
\r
70 dataFeild : [ null, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.DEFAULT_ONLY | XUI_Attr_Type.STRING ],
\r
72 role : [ 1, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.INIT_ONLY | XUI_Attr_Type.LIST, 'none,chrome' ],
\r
73 selectable : [ false, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.INIT_ONLY | XUI_Attr_Type.BOOLEAN ],
\r
75 visible : [ true, XUI_Dirty.LAYOUT, XUI_Attr_USER.UINODE, XUI_Attr_Type.BOOLEAN ],
\r
76 pointerEnabled : [ false, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.BOOLEAN ],
\r
77 pointerChildren : [ true, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.BOOLEAN ],
\r
78 cursor : [ 1, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.LIST, XUI_Attr_Option.CURSOR ],
\r
79 tooltip : [ null, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.STRING ],
\r
81 borderWidth : [ 0, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.QUARTET | XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT ], // em [ top, right, bottom, left ]
\r
82 padding : [ 0, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.QUARTET | XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT ],
\r
84 width : [ XUI_Attr_AUTO, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],
\r
85 minWidth : [ 0, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT ],
\r
86 maxWidth : [ XUI_Attr_AUTO, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],
\r
87 height : [ XUI_Attr_AUTO, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],
\r
88 minHeight : [ 0, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT ],
\r
89 maxHeight : [ XUI_Attr_AUTO, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],
\r
90 sizing : [ 1, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LIST, XUI_Attr_Option.BOX_SIZING ],
\r
91 left : [ null, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.MINUS_LENGTH | XUI_Attr_Type.MINUS_PERCENT ],
\r
92 top : [ null, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.MINUS_LENGTH | XUI_Attr_Type.MINUS_PERCENT ],
\r
93 bottom : [ null, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.MINUS_LENGTH | XUI_Attr_Type.MINUS_PERCENT ],
\r
94 right : [ null, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.MINUS_LENGTH | XUI_Attr_Type.MINUS_PERCENT ],
\r
96 borderColor : [ 0x0, XUI_Dirty.PAINT, XUI_Attr_USER.XNODE, XUI_Attr_Type.QUARTET | XUI_Attr_Type.COLOR ], // color [ top, right, bottom, left ]
\r
97 borderStyle : [ 1, XUI_Dirty.PAINT, XUI_Attr_USER.XNODE, XUI_Attr_Type.QUARTET | XUI_Attr_Type.LIST, XUI_Attr_Option.BORDER_STYLE ], // string [ top, right, bottom, left ]
\r
98 bgColor : [ 0xFFFFFF, XUI_Dirty.PAINT, XUI_Attr_USER.XNODE, XUI_Attr_Type.COLOR ], // color, none
\r
100 fontColor : [ 0x0, XUI_Dirty.PAINT, XUI_Attr_USER.XNODE, XUI_Attr_Type.COLOR ],
\r
101 fontFamily : [ null, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.FONT_NAME ],
\r
102 fontSize : [ 1, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT ],
\r
103 fontBold : [ false, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.BOOLEAN, 'bold' ],
\r
104 fontItalic : [ false, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.BOOLEAN, 'italic' ],
\r
105 fontSmallCaps : [ false, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.BOOLEAN, 'small-caps' ],
\r
106 lineHeight : [ 1, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.NUMERICAL ], // percent
\r
107 letterSpacing : [ 0, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.LENGTH ],
\r
108 wordSpacing : [ 0, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.LENGTH ],
\r
109 textAlign : [ 1, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.LIST, XUI_Attr_Option.ALIGN ],
\r
110 textDecoration : [ 1, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.LIST, XUI_Attr_Option.TEXT_DECORATION ],
\r
111 textTransform : [ 1, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.LIST, XUI_Attr_Option.TEXT_TRANSFORM ]
\r
116 * 共通する attr 指定を prototype に設定しながら拡張できる、属性データ保持クラス
\r
119 XUI_attrClassProto = null,
\r
121 XUI_AttrClass = X_Class_create( 'XUI_AttrClass', X_Class.POOL_OBJECT );
\r
124 * 'none,chrome,container' を受け取ったら、
\r
132 * } こんな object を返す。
\r
134 function XUI_createChecker( str ){
\r
136 ary = str.split( ',' ),
\r
147 function XUI_Attr_createAttrDef( base, defs ){
\r
148 var F = base ? X_Object_clone( base ) : {},
\r
149 z = base ? base._last : 0,
\r
155 if( X_EMPTY_OBJECT[ p ] ) continue;
\r
156 if( p === '_last' ) continue;
\r
157 if( !X_Type_isArray( def = defs[ p ] ) ) continue;
\r
159 if( !base || !X_Type_isArray( base[ p ] ) ){
\r
162 n = def[ 3 ] & XUI_Attr_Type.QUARTET ? 4 :
\r
163 def[ 3 ] & XUI_Attr_Type.COMBI ? 2 : 1;
\r
165 def.No = base[ p ].No;
\r
167 if( def[ 3 ] & XUI_Attr_Type.LIST && X_Type_isString( def[ 4 ] ) ){
\r
168 def[ 4 ] = XUI_createChecker( def[ 4 ] );
\r
175 function XUI_Attr_copy( proto, supports ){
\r
178 for( p in supports ){
\r
179 if( X_EMPTY_OBJECT[ p ] ) continue;
\r
180 if( p === '_last' ) continue;
\r
181 support = supports[ p ];
\r
182 proto[ support.No ] = support[ 0 ];
\r
183 if( support[ 3 ] & XUI_Attr_Type.QUARTET ){
\r
184 proto[ support.No + 1 ] = support[ 0 ];
\r
185 proto[ support.No + 2 ] = support[ 0 ];
\r
186 proto[ support.No + 3 ] = support[ 0 ];
\r
188 if( support[ 3 ] & XUI_Attr_Type.COMBI ){
\r
189 proto[ support.No + 1 ] = support[ 0 ];
\r
194 XUI_Attr_copy( XUI_AttrClass.prototype, XUI_Attr_Support );
\r
196 function XUI_Attr_preset( baseKlass, opt_supports, opt_attrs ){
\r
197 var klass = baseKlass.inherits(),
\r
198 proto = klass.prototype,
\r
199 supports = proto.usableAttrs || opt_supports,
\r
203 XUI_Attr_copy( proto, opt_supports );
\r
206 XUI_attrClassProto = proto;
\r
207 for( p in opt_attrs ){
\r
208 if( X_EMPTY_OBJECT[ p ] ) continue;
\r
209 supports[ p ] && XUI_AbstractUINode.prototype.setAttr( p, supports[ p ], opt_attrs[ p ] );
\r
211 XUI_attrClassProto = null;
\r