OSDN Git Service

Version 0.6.182, fix X.UA.
[pettanr/clientJs.git] / 0.6.x / js / 20_ui / 02_XUI_Attr.js
index 0ae487f..447c496 100644 (file)
@@ -1,67 +1,38 @@
-X.UI.Attr = {\r
-       AUTO  : 1/0,//Number.POSITIVE_INFINITY,\r
-       FLOOR : new Function( 'v', 'return 0 <= v ? v | 0 : -( -v | 0 )' ),\r
-       \r
-       USER : {\r
-               XNODE  : 0,\r
-               UINODE : 1,\r
-               LAYOUT : 2\r
-       },\r
-       \r
-       Type : {\r
-               LIST              :    0,\r
-               LENGTH            :    1, // '1.5em'\r
-               MINUS_LENGTH      :    2,\r
-               PERCENT           :    4, // '90%', 0.0 ~ 1.0 こういう指定はできない!\r
-               MINUS_PERCENT     :    8,\r
-               NUMERICAL         :   16, // 1.1 (lineHeight only)\r
-               AUTO              :   32, // 'auto'\r
-               COLOR             :   64, // 0x000000 ~ 0xFFFFFF, RED, #000000 ~ #FFFFFF, #000 ~ #FFF\r
-               URL               :  128,\r
-               STRING            :  128,\r
-               FONT_NAME         :  256,\r
-               BOOLEAN           :  512,\r
-               COMBI             : 1024,\r
-               QUARTET           : 2048,\r
-               DEFAULT_ONLY      : 4096,\r
-               INIT_ONLY         : 8192\r
+var XUI_Attr_AUTO = 1/0,//Number.POSITIVE_INFINITY,\r
+       XUI_Attr_FLOOR = new Function( 'v', 'return 0 <= v ? v | 0 : -( -v | 0 )' ),\r
+       XUI_Attr_USER = {\r
+               XNODE  : 0, // 値は xnode.css にコピーされます。\r
+               UINODE : 1, // 値は _uinode にコピーされます。\r
+               LAYOUT : 2  // \r
        },\r
-       \r
-       Option : {\r
-               BORDER_STYLE      : X.UI.Util.createChecker( 'none,hidden,dotted,dashed,solid,double,groove,ridge,inset,outset' ),\r
-               ALIGN             : X.UI.Util.createChecker( 'left,center,right,justify' ),\r
-               TEXT_DECORATION   : X.UI.Util.createChecker( 'none,underline,overline,line-through,blink' ),\r
-               TEXT_TRANSFORM    : X.UI.Util.createChecker( 'none,capitalize,lowercase,uppercase' ),\r
-               BOX_SIZING        : X.UI.Util.createChecker( 'content,padding,border' ),\r
-               CURSOR            : X.UI.Util.createChecker( 'pointer,wait' )\r
+       XUI_Attr_Type = {\r
+               LIST              : 16384,\r
+               LENGTH            :     1, // '1.5em'\r
+               MINUS_LENGTH      :     2,\r
+               PERCENT           :     4, // '90%', 0.0 ~ 1.0 こういう指定はできない!\r
+               MINUS_PERCENT     :     8,\r
+               NUMERICAL         :    16, // 1.1 (lineHeight only)\r
+               AUTO              :    32, // 'auto'\r
+               COLOR             :    64, // 0x000000 ~ 0xFFFFFF, RED, #000000 ~ #FFFFFF, #000 ~ #FFF\r
+               URL               :   128,\r
+               STRING            :   128,\r
+               FONT_NAME         :   256,\r
+               BOOLEAN           :   512,\r
+               COMBI             :  1024,\r
+               QUARTET           :  2048,\r
+               DEFAULT_ONLY      :  4096,\r
+               INIT_ONLY         :  8192,\r
+               OBJECT            : 32768\r
        },\r
-       \r
-       createAttrDef : function( base, defs ){\r
-               var F = base ? X_Object_clone( base ) : {},\r
-                       z = base ? base._last : 0,\r
-                       n = 1,\r
-                       p, def;\r
-               \r
-               // 属性定義の上書き\r
-               for( p in defs ){\r
-                       if( X_EMPTY_OBJECT[ p ] ) continue;\r
-                       if( p === '_last' ) continue;\r
-                       if( !X_Type_isArray( def = defs[ p ] ) ) continue;\r
-                       F[ p ] = def;\r
-                       if( !base || !X_Type_isArray( base[ p ] ) ){\r
-                               def.No = z += n;\r
-                               // add\r
-                               n = def[ 3 ] & X.UI.Attr.Type.QUARTET ? 4 :\r
-                                   def[ 3 ] & X.UI.Attr.Type.COMBI   ? 2 : 1;\r
-                       } else {\r
-                               def.No = base[ p ].No;\r
-                       };\r
-               };\r
-               F._last = z;\r
-               return F;\r
+       XUI_Attr_Option = {\r
+               BORDER_STYLE      : 'none,hidden,dotted,dashed,solid,double,groove,ridge,inset,outset',\r
+               ALIGN             : 'left,center,right,justify',\r
+               TEXT_DECORATION   : 'none,underline,overline,line-through,blink',\r
+               TEXT_TRANSFORM    : 'none,capitalize,lowercase,uppercase',\r
+               BOX_SIZING        : 'content,padding,border',\r
+               CURSOR            : 'pointer,wait'\r
        },\r
-       \r
-       CSS3 : {\r
+       XUI_Attr_CSS3 = {\r
                opacity         : true,\r
                bgColorAlpha    : true,\r
                bgGradient      : true,\r
@@ -74,15 +45,13 @@ X.UI.Attr = {
                textShadowBlur  : true,\r
                textShadowAlpha : true\r
        },\r
-       \r
-       Rename : {\r
-               bgColor       : 'background-color',\r
+       XUI_Attr_Rename = {\r
+               bgColor       : 'backgroundColor',\r
                fontColor     : 'color',\r
                fontBold      : 'fontWeight',\r
                fontItalic    : 'fontStyle',\r
                fontSmallCaps : 'fontVariant'\r
-       }\r
-};\r
+       },\r
 \r
 /*\r
  * 0: 初期値 : undefined は不可!\r
@@ -91,100 +60,154 @@ X.UI.Attr = {
  * 3: 受け付けるデータ型\r
  * 4: 選択方式の場合、その候補\r
  */\r
-X.UI.Attr.Support = X.UI.Attr.createAttrDef( false,\r
+       XUI_Attr_Support = XUI_Attr_createAttrDef( 0,\r
 {\r
-       className         : [ null,           X.UI.Dirty.CLEAN,  X.UI.Attr.USER.UINODE, X.UI.Attr.Type.DEFAULT_ONLY | X.UI.Attr.Type.STRING ],\r
-       pointerHoverClass : [ null,           X.UI.Dirty.CLEAN,  X.UI.Attr.USER.UINODE, X.UI.Attr.Type.DEFAULT_ONLY | X.UI.Attr.Type.STRING ],\r
-       pointerDownClass  : [ null,           X.UI.Dirty.CLEAN,  X.UI.Attr.USER.UINODE, X.UI.Attr.Type.DEFAULT_ONLY | X.UI.Attr.Type.STRING ],\r
-       invalidLayoutColor: [ null,           X.UI.Dirty.CLEAN,  X.UI.Attr.USER.UINODE, X.UI.Attr.Type.DEFAULT_ONLY | X.UI.Attr.Type.COLOR ],\r
+       className         : [ '',             XUI_Dirty.CLEAN,  XUI_Attr_USER.UINODE, XUI_Attr_Type.DEFAULT_ONLY | XUI_Attr_Type.STRING ],\r
+       pointerHoverClass : [ '',             XUI_Dirty.CLEAN,  XUI_Attr_USER.UINODE, XUI_Attr_Type.DEFAULT_ONLY | XUI_Attr_Type.STRING ],\r
+       pointerDownClass  : [ null,           XUI_Dirty.CLEAN,  XUI_Attr_USER.UINODE, XUI_Attr_Type.DEFAULT_ONLY | XUI_Attr_Type.STRING ],\r
+       invalidLayoutColor: [ null,           XUI_Dirty.CLEAN,  XUI_Attr_USER.UINODE, XUI_Attr_Type.DEFAULT_ONLY | XUI_Attr_Type.COLOR ],\r
        \r
-       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
-       selectable        : [ false,          X.UI.Dirty.CLEAN,  X.UI.Attr.USER.UINODE, X.UI.Attr.Type.INIT_ONLY | X.UI.Attr.Type.BOOLEAN ],\r
+       dataFeild         : [ '',             XUI_Dirty.CLEAN,  XUI_Attr_USER.UINODE, XUI_Attr_Type.INIT_ONLY | XUI_Attr_Type.STRING ],\r
        \r
-       visible           : [ true,           X.UI.Dirty.LAYOUT, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.BOOLEAN ],\r
-       pointerEnabled    : [ false,          X.UI.Dirty.CLEAN,  X.UI.Attr.USER.UINODE, X.UI.Attr.Type.BOOLEAN ],\r
-       pointerChildren   : [ true,           X.UI.Dirty.CLEAN,  X.UI.Attr.USER.UINODE, X.UI.Attr.Type.BOOLEAN ],\r
-       cursor            : [ null,           X.UI.Dirty.CLEAN,  X.UI.Attr.USER.UINODE, X.UI.Attr.Type.LIST, X.UI.Attr.Option.CURSOR ],\r
-       tooltip           : [ null,           X.UI.Dirty.CLEAN,  X.UI.Attr.USER.UINODE, X.UI.Attr.Type.STRING ],\r
+       role              : [ 1,              XUI_Dirty.CLEAN,  XUI_Attr_USER.UINODE, XUI_Attr_Type.INIT_ONLY | XUI_Attr_Type.LIST, 'none,chrome' ],\r
+       selectable        : [ false,          XUI_Dirty.CLEAN,  XUI_Attr_USER.UINODE, XUI_Attr_Type.INIT_ONLY | XUI_Attr_Type.BOOLEAN ],\r
        \r
-       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
-       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
+       visible           : [ true,           XUI_Dirty.LAYOUT, XUI_Attr_USER.UINODE, XUI_Attr_Type.BOOLEAN ],\r
+       pointerEnabled    : [ false,          XUI_Dirty.CLEAN,  XUI_Attr_USER.UINODE, XUI_Attr_Type.BOOLEAN ],\r
+       pointerChildren   : [ true,           XUI_Dirty.CLEAN,  XUI_Attr_USER.UINODE, XUI_Attr_Type.BOOLEAN ],\r
+       cursor            : [ 1,              XUI_Dirty.CLEAN,  XUI_Attr_USER.UINODE, XUI_Attr_Type.LIST, XUI_Attr_Option.CURSOR ],\r
+       tooltip           : [ '',           XUI_Dirty.CLEAN,  XUI_Attr_USER.UINODE, XUI_Attr_Type.STRING ],\r
        \r
-       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
-       minWidth          : [ 0,              X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT ],\r
-       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
-       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
-       minHeight         : [ 0,              X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT ],\r
-       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
-       sizing            : [ 0,              X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LIST, X.UI.Attr.Option.BOX_SIZING ],\r
-       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
-       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
-       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
-       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
+       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
+       padding           : [ 0,              XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.QUARTET | XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT ],\r
+       \r
+       width             : [ XUI_Attr_AUTO,  XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],\r
+       minWidth          : [ 0,              XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT ],\r
+       maxWidth          : [ XUI_Attr_AUTO,  XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],\r
+       height            : [ XUI_Attr_AUTO,  XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],\r
+       minHeight         : [ 0,              XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT ],\r
+       maxHeight         : [ XUI_Attr_AUTO,  XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],\r
+       sizing            : [ 1,              XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LIST, XUI_Attr_Option.BOX_SIZING ],\r
+       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
+       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
+       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
+       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
 \r
-       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
-       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
-       bgColor           : [ 0xFFFFFF,       X.UI.Dirty.PAINT,  X.UI.Attr.USER.XNODE,  X.UI.Attr.Type.COLOR     ], // color, none\r
+       borderColor       : [ 0x0,            XUI_Dirty.PAINT,  XUI_Attr_USER.XNODE,  XUI_Attr_Type.QUARTET | XUI_Attr_Type.COLOR   ], // color [ top, right, bottom, left ]\r
+       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
+       bgColor           : [ 0xFFFFFF,       XUI_Dirty.PAINT,  XUI_Attr_USER.XNODE,  XUI_Attr_Type.COLOR     ], // color, none\r
 \r
-       fontColor         : [ 0x0,            X.UI.Dirty.PAINT,  X.UI.Attr.USER.XNODE, X.UI.Attr.Type.COLOR     ],\r
-       fontFamily        : [ null,           X.UI.Dirty.FONT,   X.UI.Attr.USER.XNODE, X.UI.Attr.Type.FONT_NAME ],\r
-       fontSize          : [ 1,              X.UI.Dirty.FONT,   X.UI.Attr.USER.XNODE, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT ],\r
-       fontBold          : [ false,          X.UI.Dirty.FONT,   X.UI.Attr.USER.XNODE, X.UI.Attr.Type.BOOLEAN, 'bold'   ],\r
-       fontItalic        : [ false,          X.UI.Dirty.FONT,   X.UI.Attr.USER.XNODE, X.UI.Attr.Type.BOOLEAN, 'italic' ],\r
-       fontSmallCaps     : [ false,          X.UI.Dirty.FONT,   X.UI.Attr.USER.XNODE, X.UI.Attr.Type.BOOLEAN, 'small-caps' ],\r
-       lineHeight        : [ 1,              X.UI.Dirty.FONT,   X.UI.Attr.USER.XNODE, X.UI.Attr.Type.NUMERICAL ], // percent\r
-       letterSpacing     : [ 0,              X.UI.Dirty.FONT,   X.UI.Attr.USER.XNODE, X.UI.Attr.Type.LENGTH    ],\r
-       wordSpacing       : [ 0,              X.UI.Dirty.FONT,   X.UI.Attr.USER.XNODE, X.UI.Attr.Type.LENGTH    ],\r
-       textAlign         : [ 0,              X.UI.Dirty.FONT,   X.UI.Attr.USER.XNODE, X.UI.Attr.Type.LIST, X.UI.Attr.Option.ALIGN           ],\r
-       textDecoration    : [ 0,              X.UI.Dirty.FONT,   X.UI.Attr.USER.XNODE, X.UI.Attr.Type.LIST, X.UI.Attr.Option.TEXT_DECORATION ],\r
-       textTransform     : [ 0,              X.UI.Dirty.FONT,   X.UI.Attr.USER.XNODE, X.UI.Attr.Type.LIST, X.UI.Attr.Option.TEXT_TRANSFORM  ]\r
+       fontColor         : [ 0x0,            XUI_Dirty.PAINT,  XUI_Attr_USER.XNODE, XUI_Attr_Type.COLOR     ],\r
+       fontFamily        : [ null,           XUI_Dirty.FONT,   XUI_Attr_USER.XNODE, XUI_Attr_Type.FONT_NAME ],\r
+       fontSize          : [ 1,              XUI_Dirty.FONT,   XUI_Attr_USER.XNODE, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT ],\r
+       fontBold          : [ false,          XUI_Dirty.FONT,   XUI_Attr_USER.XNODE, XUI_Attr_Type.BOOLEAN, 'bold'   ],\r
+       fontItalic        : [ false,          XUI_Dirty.FONT,   XUI_Attr_USER.XNODE, XUI_Attr_Type.BOOLEAN, 'italic' ],\r
+       fontSmallCaps     : [ false,          XUI_Dirty.FONT,   XUI_Attr_USER.XNODE, XUI_Attr_Type.BOOLEAN, 'small-caps' ],\r
+       lineHeight        : [ 1,              XUI_Dirty.FONT,   XUI_Attr_USER.XNODE, XUI_Attr_Type.NUMERICAL ], // percent\r
+       letterSpacing     : [ 0,              XUI_Dirty.FONT,   XUI_Attr_USER.XNODE, XUI_Attr_Type.LENGTH    ],\r
+       wordSpacing       : [ 0,              XUI_Dirty.FONT,   XUI_Attr_USER.XNODE, XUI_Attr_Type.LENGTH    ],\r
+       textAlign         : [ 1,              XUI_Dirty.FONT,   XUI_Attr_USER.XNODE, XUI_Attr_Type.LIST, XUI_Attr_Option.ALIGN           ],\r
+       textDecoration    : [ 1,              XUI_Dirty.FONT,   XUI_Attr_USER.XNODE, XUI_Attr_Type.LIST, XUI_Attr_Option.TEXT_DECORATION ],\r
+       textTransform     : [ 1,              XUI_Dirty.FONT,   XUI_Attr_USER.XNODE, XUI_Attr_Type.LIST, XUI_Attr_Option.TEXT_TRANSFORM  ]\r
 }\r
-);\r
+),\r
 \r
 /*\r
  * 共通する attr 指定を prototype に設定しながら拡張できる、属性データ保持クラス\r
  */\r
 \r
-X.UI.attrClassProto = null;\r
+XUI_attrClassProto = null,\r
 \r
-X.UI.AttrClass = X_Class_create( 'X.UI.AttrClass', X_Class.POOL_OBJECT );\r
+XUI_AttrClass = X_Class_create( 'XUI_AttrClass', X_Class.POOL_OBJECT );\r
 \r
+/*\r
+ * 'none,chrome,container' を受け取ったら、\r
+ * {\r
+ *     'none' : 1,\r
+ *  'chrome' : 2,\r
+ *  'container' : 3,\r
+ *  1 : 'none',\r
+ *  2 : 'chrome',\r
+ *  3 : 'container'\r
+ * } こんな object を返す。\r
+ */\r
+function XUI_createChecker( str ){\r
+       var ret = {},\r
+               ary = str.split( ',' ),\r
+               l   = ary.length,\r
+               i   = 0, v;\r
+       for( ; i < l; ){\r
+               v = ary[ i ];\r
+               ret[ v ] = ++i;\r
+               ret[ i ] = v;\r
+       };\r
+       return ret;\r
+};\r
+\r
+       function XUI_Attr_createAttrDef( base, defs ){\r
+               var F = base ? X_Object_copy( base ) : {},\r
+                       z = base ? base._last : 0,\r
+                       n = 1,\r
+                       p, def;\r
+               \r
+               // 属性定義の上書き\r
+               for( p in defs ){\r
+                       if( X_EMPTY_OBJECT[ p ] ) continue;\r
+                       if( p === '_last' ) continue;\r
+                       if( !X_Type_isArray( def = defs[ p ] ) ) continue;\r
+                       F[ p ] = def;\r
+                       if( !base || !X_Type_isArray( base[ p ] ) ){\r
+                               def.No = z += n;\r
+                               // add\r
+                               n = def[ 3 ] & XUI_Attr_Type.QUARTET ? 4 :\r
+                                   def[ 3 ] & XUI_Attr_Type.COMBI   ? 2 : 1;\r
+                       } else {\r
+                               def.No = base[ p ].No;\r
+                       };\r
+                       if( def[ 3 ] & XUI_Attr_Type.LIST && X_Type_isString( def[ 4 ] ) ){\r
+                               def[ 4 ] = XUI_createChecker( def[ 4 ] );\r
+                       };\r
+               };\r
+               F._last = z;\r
+               return F;\r
+       };\r
 \r
-X.UI.Attr.copy = function( proto, supports ){\r
+function XUI_Attr_copy( proto, supports ){\r
        var support, p;\r
        \r
        for( p in supports ){\r
-               if( X_EMPTY_OBJECT[ p ] ) continue;\r
+               //if( X_EMPTY_OBJECT[ p ] ) continue;\r
                if( p === '_last' ) continue;\r
                support = supports[ p ];\r
                proto[ support.No ] = support[ 0 ];\r
-               if( support[ 3 ] & X.UI.Attr.Type.QUARTET ){\r
+               if( support[ 3 ] & XUI_Attr_Type.QUARTET ){\r
                        proto[ support.No + 1 ] = support[ 0 ];\r
                        proto[ support.No + 2 ] = support[ 0 ];\r
                        proto[ support.No + 3 ] = support[ 0 ];\r
                } else\r
-               if( support[ 3 ] & X.UI.Attr.Type.COMBI ){\r
+               if( support[ 3 ] & XUI_Attr_Type.COMBI ){\r
                        proto[ support.No + 1 ] = support[ 0 ];\r
                };\r
        };\r
 };\r
 \r
-X.UI.Attr.copy( X.UI.AttrClass.prototype, X.UI.Attr.Support );\r
+XUI_Attr_copy( XUI_AttrClass.prototype, XUI_Attr_Support );\r
 \r
-X.UI.Attr.preset = function( baseKlass, opt_supports, opt_attrs ){\r
+function XUI_Attr_preset( baseKlass, opt_supports, opt_attrs ){\r
        var klass = baseKlass.inherits(),\r
                proto = klass.prototype,\r
+               supports = proto.usableAttrs || opt_supports,\r
                p;\r
        \r
        // 属性プリセット\r
-       X.UI.Attr.copy( proto, opt_supports );\r
+       XUI_Attr_copy( proto, opt_supports );\r
        \r
        // setAttr に書き換え\r
-       X.UI.attrClassProto = proto;\r
+       XUI_attrClassProto = proto;\r
        for( p in opt_attrs ){\r
-               if( X_EMPTY_OBJECT[ p ] ) continue;\r
-               opt_supports[ p ] && X.UI._AbstractUINode.prototype.setAttr( p, opt_supports[ p ], opt_attrs[ p ] );\r
+               //if( X_EMPTY_OBJECT[ p ] ) continue;\r
+               supports[ p ] && XUI_AbstractUINode.prototype.setAttr( p, supports[ p ], opt_attrs[ p ] );\r
        };\r
-       X.UI.attrClassProto = null;\r
+       XUI_attrClassProto = null;\r
        return klass;\r
 };\r