OSDN Git Service

Version 0.6.141, fix X.UI.ScrollBox.
[pettanr/clientJs.git] / 0.6.x / js / 20_ui / 02_XUI_Attr.js
index 846a2e2..4908ed3 100644 (file)
@@ -1,14 +1,11 @@
-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
+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
+               LAYOUT : 2  // \r
        },\r
-       \r
-       Type : {\r
+       XUI_Attr_Type = {\r
                LIST              : 16384,\r
                LENGTH            :     1, // '1.5em'\r
                MINUS_LENGTH      :     2,\r
@@ -26,8 +23,7 @@ X.UI.Attr = {
                DEFAULT_ONLY      :  4096,\r
                INIT_ONLY         :  8192\r
        },\r
-       \r
-       Option : {\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
@@ -35,8 +31,7 @@ X.UI.Attr = {
                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
@@ -49,15 +44,79 @@ X.UI.Attr = {
                textShadowBlur  : true,\r
                textShadowAlpha : true\r
        },\r
-       \r
-       Rename : {\r
+       XUI_Attr_Rename = {\r
                bgColor       : 'background-color',\r
                fontColor     : 'color',\r
                fontBold      : 'fontWeight',\r
                fontItalic    : 'fontStyle',\r
                fontSmallCaps : 'fontVariant'\r
-       }\r
-};\r
+       },\r
+\r
+/*\r
+ * 0: 初期値 : undefined は不可!\r
+ * 1: dirty\r
+ * 2: この attr を処理する人\r
+ * 3: 受け付けるデータ型\r
+ * 4: 選択方式の場合、その候補\r
+ */\r
+       XUI_Attr_Support = XUI_Attr_createAttrDef( 0,\r
+{\r
+       className         : [ null,           XUI_Dirty.CLEAN,  XUI_Attr_USER.UINODE, XUI_Attr_Type.DEFAULT_ONLY | XUI_Attr_Type.STRING ],\r
+       pointerHoverClass : [ null,           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              : [ 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
+       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           : [ null,           XUI_Dirty.CLEAN,  XUI_Attr_USER.UINODE, XUI_Attr_Type.STRING ],\r
+       \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,            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,            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
+ * 共通する attr 指定を prototype に設定しながら拡張できる、属性データ保持クラス\r
+ */\r
+\r
+XUI_attrClassProto = null,\r
+\r
+XUI_AttrClass = X_Class_create( 'XUI_AttrClass', X_Class.POOL_OBJECT );\r
+\r
 \r
        function XUI_Attr_createAttrDef( base, defs ){\r
                var F = base ? X_Object_clone( base ) : {},\r
@@ -74,12 +133,12 @@ X.UI.Attr = {
                        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
+                               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 ] & X.UI.Attr.Type.LIST && X_Type_isString( def[ 4 ] ) ){\r
+                       if( def[ 3 ] & XUI_Attr_Type.LIST && X_Type_isString( def[ 4 ] ) ){\r
                                def[ 4 ] = XUI_createChecker( def[ 4 ] );\r
                        };\r
                };\r
@@ -87,73 +146,7 @@ X.UI.Attr = {
                return F;\r
        };\r
 \r
-/*\r
- * 0: 初期値 : undefined は不可!\r
- * 1: dirty\r
- * 2: この attr を処理する人\r
- * 3: 受け付けるデータ型\r
- * 4: 選択方式の場合、その候補\r
- */\r
-X.UI.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
-       \r
-       role              : [ 1,              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
-       \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            : [ 1,              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
-       \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
-       \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            : [ 1,              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
-\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       : [ 1,              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
-\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         : [ 1,              X.UI.Dirty.FONT,   X.UI.Attr.USER.XNODE, X.UI.Attr.Type.LIST, X.UI.Attr.Option.ALIGN           ],\r
-       textDecoration    : [ 1,              X.UI.Dirty.FONT,   X.UI.Attr.USER.XNODE, X.UI.Attr.Type.LIST, X.UI.Attr.Option.TEXT_DECORATION ],\r
-       textTransform     : [ 1,              X.UI.Dirty.FONT,   X.UI.Attr.USER.XNODE, X.UI.Attr.Type.LIST, X.UI.Attr.Option.TEXT_TRANSFORM  ]\r
-}\r
-);\r
-\r
-/*\r
- * 共通する attr 指定を prototype に設定しながら拡張できる、属性データ保持クラス\r
- */\r
-\r
-X.UI.attrClassProto = null;\r
-\r
-X.UI.AttrClass = X_Class_create( 'X.UI.AttrClass', X_Class.POOL_OBJECT );\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
@@ -161,33 +154,33 @@ X.UI.Attr.copy = function( proto, supports ){
                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
                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
+               opt_supports[ p ] && XUI_AbstractUINode.prototype.setAttr( p, opt_supports[ p ], opt_attrs[ p ] );\r
        };\r
-       X.UI.attrClassProto = null;\r
+       XUI_attrClassProto = null;\r
        return klass;\r
 };\r