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
27 BORDER_STYLE : 'none,hidden,dotted,dashed,solid,double,groove,ridge,inset,outset',
\r
28 ALIGN : 'left,center,right,justify',
\r
29 TEXT_DECORATION : 'none,underline,overline,line-through,blink',
\r
30 TEXT_TRANSFORM : 'none,capitalize,lowercase,uppercase',
\r
31 BOX_SIZING : 'content,padding,border',
\r
32 CURSOR : 'pointer,wait'
\r
36 bgColorAlpha : true,
\r
38 bgGradientAplha : true,
\r
39 cournerRadius : true,
\r
40 boxShadowBlur : true,
\r
41 boxShadowAlpha : true,
\r
44 textShadowBlur : true,
\r
45 textShadowAlpha : true
\r
48 bgColor : 'background-color',
\r
49 fontColor : 'color',
\r
50 fontBold : 'fontWeight',
\r
51 fontItalic : 'fontStyle',
\r
52 fontSmallCaps : 'fontVariant'
\r
56 * 0: 初期値 : undefined は不可!
\r
62 XUI_Attr_Support = XUI_Attr_createAttrDef( 0,
\r
64 className : [ null, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.DEFAULT_ONLY | XUI_Attr_Type.STRING ],
\r
65 pointerHoverClass : [ null, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.DEFAULT_ONLY | XUI_Attr_Type.STRING ],
\r
66 pointerDownClass : [ null, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.DEFAULT_ONLY | XUI_Attr_Type.STRING ],
\r
67 invalidLayoutColor: [ null, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.DEFAULT_ONLY | XUI_Attr_Type.COLOR ],
\r
69 role : [ 1, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.INIT_ONLY | XUI_Attr_Type.LIST, 'none,chrome' ],
\r
70 selectable : [ false, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.INIT_ONLY | XUI_Attr_Type.BOOLEAN ],
\r
72 visible : [ true, XUI_Dirty.LAYOUT, XUI_Attr_USER.UINODE, XUI_Attr_Type.BOOLEAN ],
\r
73 pointerEnabled : [ false, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.BOOLEAN ],
\r
74 pointerChildren : [ true, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.BOOLEAN ],
\r
75 cursor : [ 1, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.LIST, XUI_Attr_Option.CURSOR ],
\r
76 tooltip : [ null, XUI_Dirty.CLEAN, XUI_Attr_USER.UINODE, XUI_Attr_Type.STRING ],
\r
78 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
79 padding : [ 0, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.QUARTET | XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT ],
\r
81 width : [ XUI_Attr_AUTO, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],
\r
82 minWidth : [ 0, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT ],
\r
83 maxWidth : [ XUI_Attr_AUTO, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],
\r
84 height : [ XUI_Attr_AUTO, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],
\r
85 minHeight : [ 0, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT ],
\r
86 maxHeight : [ XUI_Attr_AUTO, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],
\r
87 sizing : [ 1, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LIST, XUI_Attr_Option.BOX_SIZING ],
\r
88 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
89 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
90 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
91 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
93 borderColor : [ 0x0, XUI_Dirty.PAINT, XUI_Attr_USER.XNODE, XUI_Attr_Type.QUARTET | XUI_Attr_Type.COLOR ], // color [ top, right, bottom, left ]
\r
94 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
95 bgColor : [ 0xFFFFFF, XUI_Dirty.PAINT, XUI_Attr_USER.XNODE, XUI_Attr_Type.COLOR ], // color, none
\r
97 fontColor : [ 0x0, XUI_Dirty.PAINT, XUI_Attr_USER.XNODE, XUI_Attr_Type.COLOR ],
\r
98 fontFamily : [ null, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.FONT_NAME ],
\r
99 fontSize : [ 1, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT ],
\r
100 fontBold : [ false, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.BOOLEAN, 'bold' ],
\r
101 fontItalic : [ false, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.BOOLEAN, 'italic' ],
\r
102 fontSmallCaps : [ false, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.BOOLEAN, 'small-caps' ],
\r
103 lineHeight : [ 1, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.NUMERICAL ], // percent
\r
104 letterSpacing : [ 0, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.LENGTH ],
\r
105 wordSpacing : [ 0, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.LENGTH ],
\r
106 textAlign : [ 1, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.LIST, XUI_Attr_Option.ALIGN ],
\r
107 textDecoration : [ 1, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.LIST, XUI_Attr_Option.TEXT_DECORATION ],
\r
108 textTransform : [ 1, XUI_Dirty.FONT, XUI_Attr_USER.XNODE, XUI_Attr_Type.LIST, XUI_Attr_Option.TEXT_TRANSFORM ]
\r
113 * 共通する attr 指定を prototype に設定しながら拡張できる、属性データ保持クラス
\r
116 XUI_attrClassProto = null,
\r
118 XUI_AttrClass = X_Class_create( 'XUI_AttrClass', X_Class.POOL_OBJECT );
\r
121 * 'none,chrome,container' を受け取ったら、
\r
129 * } こんな object を返す。
\r
131 function XUI_createChecker( str ){
\r
133 ary = str.split( ',' ),
\r
144 function XUI_Attr_createAttrDef( base, defs ){
\r
145 var F = base ? X_Object_clone( base ) : {},
\r
146 z = base ? base._last : 0,
\r
152 if( X_EMPTY_OBJECT[ p ] ) continue;
\r
153 if( p === '_last' ) continue;
\r
154 if( !X_Type_isArray( def = defs[ p ] ) ) continue;
\r
156 if( !base || !X_Type_isArray( base[ p ] ) ){
\r
159 n = def[ 3 ] & XUI_Attr_Type.QUARTET ? 4 :
\r
160 def[ 3 ] & XUI_Attr_Type.COMBI ? 2 : 1;
\r
162 def.No = base[ p ].No;
\r
164 if( def[ 3 ] & XUI_Attr_Type.LIST && X_Type_isString( def[ 4 ] ) ){
\r
165 def[ 4 ] = XUI_createChecker( def[ 4 ] );
\r
172 function XUI_Attr_copy( proto, supports ){
\r
175 for( p in supports ){
\r
176 if( X_EMPTY_OBJECT[ p ] ) continue;
\r
177 if( p === '_last' ) continue;
\r
178 support = supports[ p ];
\r
179 proto[ support.No ] = support[ 0 ];
\r
180 if( support[ 3 ] & XUI_Attr_Type.QUARTET ){
\r
181 proto[ support.No + 1 ] = support[ 0 ];
\r
182 proto[ support.No + 2 ] = support[ 0 ];
\r
183 proto[ support.No + 3 ] = support[ 0 ];
\r
185 if( support[ 3 ] & XUI_Attr_Type.COMBI ){
\r
186 proto[ support.No + 1 ] = support[ 0 ];
\r
191 XUI_Attr_copy( XUI_AttrClass.prototype, XUI_Attr_Support );
\r
193 function XUI_Attr_preset( baseKlass, opt_supports, opt_attrs ){
\r
194 var klass = baseKlass.inherits(),
\r
195 proto = klass.prototype,
\r
199 XUI_Attr_copy( proto, opt_supports );
\r
202 XUI_attrClassProto = proto;
\r
203 for( p in opt_attrs ){
\r
204 if( X_EMPTY_OBJECT[ p ] ) continue;
\r
205 opt_supports[ p ] && XUI_AbstractUINode.prototype.setAttr( p, opt_supports[ p ], opt_attrs[ p ] );
\r
207 XUI_attrClassProto = null;
\r