OSDN Git Service

Version 0.6.134, add comments for closure compiler.
[pettanr/clientJs.git] / 0.6.x / js / 20_ui / 02_XUI_Attr.js
1 X.UI.Attr = {\r
2         AUTO  : 1/0,//Number.POSITIVE_INFINITY,\r
3         FLOOR : new Function( 'v', 'return 0 <= v ? v | 0 : -( -v | 0 )' ),\r
4         \r
5         USER : {\r
6                 XNODE  : 0,\r
7                 UINODE : 1,\r
8                 LAYOUT : 2\r
9         },\r
10         \r
11         Type : {\r
12                 LIST              :    0,\r
13                 LENGTH            :    1, // '1.5em'\r
14                 MINUS_LENGTH      :    2,\r
15                 PERCENT           :    4, // '90%', 0.0 ~ 1.0 こういう指定はできない!\r
16                 MINUS_PERCENT     :    8,\r
17                 NUMERICAL         :   16, // 1.1 (lineHeight only)\r
18                 AUTO              :   32, // 'auto'\r
19                 COLOR             :   64, // 0x000000 ~ 0xFFFFFF, RED, #000000 ~ #FFFFFF, #000 ~ #FFF\r
20                 URL               :  128,\r
21                 STRING            :  128,\r
22                 FONT_NAME         :  256,\r
23                 BOOLEAN           :  512,\r
24                 COMBI             : 1024,\r
25                 QUARTET           : 2048,\r
26                 DEFAULT_ONLY      : 4096,\r
27                 INIT_ONLY         : 8192\r
28         },\r
29         \r
30         Option : {\r
31                 BORDER_STYLE      : X.UI.Util.createChecker( 'none,hidden,dotted,dashed,solid,double,groove,ridge,inset,outset' ),\r
32                 ALIGN             : X.UI.Util.createChecker( 'left,center,right,justify' ),\r
33                 TEXT_DECORATION   : X.UI.Util.createChecker( 'none,underline,overline,line-through,blink' ),\r
34                 TEXT_TRANSFORM    : X.UI.Util.createChecker( 'none,capitalize,lowercase,uppercase' ),\r
35                 BOX_SIZING        : X.UI.Util.createChecker( 'content,padding,border' ),\r
36                 CURSOR            : X.UI.Util.createChecker( 'pointer,wait' )\r
37         },\r
38         \r
39         createAttrDef : function( base, defs ){\r
40                 var F = base ? X_Object_clone( base ) : {},\r
41                         z = base ? base._last : 0,\r
42                         n = 1,\r
43                         p, def;\r
44                 \r
45                 // 属性定義の上書き\r
46                 for( p in defs ){\r
47                         if( X_EMPTY_OBJECT[ p ] ) continue;\r
48                         if( p === '_last' ) continue;\r
49                         if( !X_Type_isArray( def = defs[ p ] ) ) continue;\r
50                         F[ p ] = def;\r
51                         if( !base || !X_Type_isArray( base[ p ] ) ){\r
52                                 def.No = z += n;\r
53                                 // add\r
54                                 n = def[ 3 ] & X.UI.Attr.Type.QUARTET ? 4 :\r
55                                     def[ 3 ] & X.UI.Attr.Type.COMBI   ? 2 : 1;\r
56                         } else {\r
57                                 def.No = base[ p ].No;\r
58                         };\r
59                 };\r
60                 F._last = z;\r
61                 return F;\r
62         },\r
63         \r
64         CSS3 : {\r
65                 opacity         : true,\r
66                 bgColorAlpha    : true,\r
67                 bgGradient      : true,\r
68                 bgGradientAplha : true,\r
69                 cournerRadius   : true,\r
70                 boxShadowBlur   : true,\r
71                 boxShadowAlpha  : true,\r
72                 glowBlur        : true,\r
73                 glowAlpha       : true,\r
74                 textShadowBlur  : true,\r
75                 textShadowAlpha : true\r
76         },\r
77         \r
78         Rename : {\r
79                 bgColor       : 'background-color',\r
80                 fontColor     : 'color',\r
81                 fontBold      : 'fontWeight',\r
82                 fontItalic    : 'fontStyle',\r
83                 fontSmallCaps : 'fontVariant'\r
84         }\r
85 };\r
86 \r
87 /*\r
88  * 0: 初期値 : undefined は不可!\r
89  * 1: dirty\r
90  * 2: この attr を処理する人\r
91  * 3: 受け付けるデータ型\r
92  * 4: 選択方式の場合、その候補\r
93  */\r
94 X.UI.Attr.Support = X.UI.Attr.createAttrDef( false,\r
95 {\r
96         className         : [ null,           X.UI.Dirty.CLEAN,  X.UI.Attr.USER.UINODE, X.UI.Attr.Type.DEFAULT_ONLY | X.UI.Attr.Type.STRING ],\r
97         pointerHoverClass : [ null,           X.UI.Dirty.CLEAN,  X.UI.Attr.USER.UINODE, X.UI.Attr.Type.DEFAULT_ONLY | X.UI.Attr.Type.STRING ],\r
98         pointerDownClass  : [ null,           X.UI.Dirty.CLEAN,  X.UI.Attr.USER.UINODE, X.UI.Attr.Type.DEFAULT_ONLY | X.UI.Attr.Type.STRING ],\r
99         invalidLayoutColor: [ null,           X.UI.Dirty.CLEAN,  X.UI.Attr.USER.UINODE, X.UI.Attr.Type.DEFAULT_ONLY | X.UI.Attr.Type.COLOR ],\r
100         \r
101         role              : [ 0,              X.UI.Dirty.CLEAN,  X.UI.Attr.USER.UINODE, X.UI.Attr.Type.INIT_ONLY | X.UI.Attr.Type.LIST, 'none,chrome' ],\r
102         selectable        : [ false,          X.UI.Dirty.CLEAN,  X.UI.Attr.USER.UINODE, X.UI.Attr.Type.INIT_ONLY | X.UI.Attr.Type.BOOLEAN ],\r
103         \r
104         visible           : [ true,           X.UI.Dirty.LAYOUT, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.BOOLEAN ],\r
105         pointerEnabled    : [ false,          X.UI.Dirty.CLEAN,  X.UI.Attr.USER.UINODE, X.UI.Attr.Type.BOOLEAN ],\r
106         pointerChildren   : [ true,           X.UI.Dirty.CLEAN,  X.UI.Attr.USER.UINODE, X.UI.Attr.Type.BOOLEAN ],\r
107         cursor            : [ null,           X.UI.Dirty.CLEAN,  X.UI.Attr.USER.UINODE, X.UI.Attr.Type.LIST, X.UI.Attr.Option.CURSOR ],\r
108         tooltip           : [ null,           X.UI.Dirty.CLEAN,  X.UI.Attr.USER.UINODE, X.UI.Attr.Type.STRING ],\r
109         \r
110         borderWidth       : [ 0,              X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.QUARTET | X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT  ], // em [ top, right, bottom, left ]\r
111         padding           : [ 0,              X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.QUARTET | X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT ],\r
112         \r
113         width             : [ X.UI.Attr.AUTO, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT | X.UI.Attr.Type.AUTO ],\r
114         minWidth          : [ 0,              X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT ],\r
115         maxWidth          : [ X.UI.Attr.AUTO, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT | X.UI.Attr.Type.AUTO ],\r
116         height            : [ X.UI.Attr.AUTO, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT | X.UI.Attr.Type.AUTO ],\r
117         minHeight         : [ 0,              X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT ],\r
118         maxHeight         : [ X.UI.Attr.AUTO, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT | X.UI.Attr.Type.AUTO ],\r
119         sizing            : [ 0,              X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LIST, X.UI.Attr.Option.BOX_SIZING ],\r
120         left              : [ null,           X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT | X.UI.Attr.Type.MINUS_LENGTH | X.UI.Attr.Type.MINUS_PERCENT ],\r
121         top               : [ null,           X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT | X.UI.Attr.Type.MINUS_LENGTH | X.UI.Attr.Type.MINUS_PERCENT ],\r
122         bottom            : [ null,           X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT | X.UI.Attr.Type.MINUS_LENGTH | X.UI.Attr.Type.MINUS_PERCENT ],\r
123         right             : [ null,           X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT | X.UI.Attr.Type.MINUS_LENGTH | X.UI.Attr.Type.MINUS_PERCENT ],  \r
124 \r
125         borderColor       : [ 0x0,            X.UI.Dirty.PAINT,  X.UI.Attr.USER.XNODE,  X.UI.Attr.Type.QUARTET | X.UI.Attr.Type.COLOR   ], // color [ top, right, bottom, left ]\r
126         borderStyle       : [ 0,              X.UI.Dirty.PAINT,  X.UI.Attr.USER.XNODE,  X.UI.Attr.Type.QUARTET | X.UI.Attr.Type.LIST, X.UI.Attr.Option.BORDER_STYLE ], // string [ top, right, bottom, left ]\r
127         bgColor           : [ 0xFFFFFF,       X.UI.Dirty.PAINT,  X.UI.Attr.USER.XNODE,  X.UI.Attr.Type.COLOR     ], // color, none\r
128 \r
129         fontColor         : [ 0x0,            X.UI.Dirty.PAINT,  X.UI.Attr.USER.XNODE, X.UI.Attr.Type.COLOR     ],\r
130         fontFamily        : [ null,           X.UI.Dirty.FONT,   X.UI.Attr.USER.XNODE, X.UI.Attr.Type.FONT_NAME ],\r
131         fontSize          : [ 1,              X.UI.Dirty.FONT,   X.UI.Attr.USER.XNODE, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT ],\r
132         fontBold          : [ false,          X.UI.Dirty.FONT,   X.UI.Attr.USER.XNODE, X.UI.Attr.Type.BOOLEAN, 'bold'   ],\r
133         fontItalic        : [ false,          X.UI.Dirty.FONT,   X.UI.Attr.USER.XNODE, X.UI.Attr.Type.BOOLEAN, 'italic' ],\r
134         fontSmallCaps     : [ false,          X.UI.Dirty.FONT,   X.UI.Attr.USER.XNODE, X.UI.Attr.Type.BOOLEAN, 'small-caps' ],\r
135         lineHeight        : [ 1,              X.UI.Dirty.FONT,   X.UI.Attr.USER.XNODE, X.UI.Attr.Type.NUMERICAL ], // percent\r
136         letterSpacing     : [ 0,              X.UI.Dirty.FONT,   X.UI.Attr.USER.XNODE, X.UI.Attr.Type.LENGTH    ],\r
137         wordSpacing       : [ 0,              X.UI.Dirty.FONT,   X.UI.Attr.USER.XNODE, X.UI.Attr.Type.LENGTH    ],\r
138         textAlign         : [ 0,              X.UI.Dirty.FONT,   X.UI.Attr.USER.XNODE, X.UI.Attr.Type.LIST, X.UI.Attr.Option.ALIGN           ],\r
139         textDecoration    : [ 0,              X.UI.Dirty.FONT,   X.UI.Attr.USER.XNODE, X.UI.Attr.Type.LIST, X.UI.Attr.Option.TEXT_DECORATION ],\r
140         textTransform     : [ 0,              X.UI.Dirty.FONT,   X.UI.Attr.USER.XNODE, X.UI.Attr.Type.LIST, X.UI.Attr.Option.TEXT_TRANSFORM  ]\r
141 }\r
142 );\r
143 \r
144 /*\r
145  * 共通する attr 指定を prototype に設定しながら拡張できる、属性データ保持クラス\r
146  */\r
147 \r
148 X.UI.attrClassProto = null;\r
149 \r
150 X.UI.AttrClass = X_Class_create( 'X.UI.AttrClass', X.Class.POOL_OBJECT );\r
151 \r
152 \r
153 X.UI.Attr.copy = function( proto, supports ){\r
154         var support, p;\r
155         \r
156         for( p in supports ){\r
157                 if( X_EMPTY_OBJECT[ p ] ) continue;\r
158                 if( p === '_last' ) continue;\r
159                 support = supports[ p ];\r
160                 proto[ support.No ] = support[ 0 ];\r
161                 if( support[ 3 ] & X.UI.Attr.Type.QUARTET ){\r
162                         proto[ support.No + 1 ] = support[ 0 ];\r
163                         proto[ support.No + 2 ] = support[ 0 ];\r
164                         proto[ support.No + 3 ] = support[ 0 ];\r
165                 } else\r
166                 if( support[ 3 ] & X.UI.Attr.Type.COMBI ){\r
167                         proto[ support.No + 1 ] = support[ 0 ];\r
168                 };\r
169         };\r
170 };\r
171 \r
172 X.UI.Attr.copy( X.UI.AttrClass.prototype, X.UI.Attr.Support );\r
173 \r
174 X.UI.Attr.preset = function( baseKlass, opt_supports, opt_attrs ){\r
175         var klass = baseKlass.inherits(),\r
176                 proto = klass.prototype,\r
177                 p;\r
178         \r
179         // 属性プリセット\r
180         X.UI.Attr.copy( proto, opt_supports );\r
181         \r
182         // setAttr に書き換え\r
183         X.UI.attrClassProto = proto;\r
184         for( p in opt_attrs ){\r
185                 if( X_EMPTY_OBJECT[ p ] ) continue;\r
186                 opt_supports[ p ] && X.UI._AbstractUINode.prototype.setAttr( p, opt_supports[ p ], opt_attrs[ p ] );\r
187         };\r
188         X.UI.attrClassProto = null;\r
189         return klass;\r
190 };\r