OSDN Git Service

Version 0.6.109, fix X.Node.Anime.js.
[pettanr/clientJs.git] / 0.6.x / js / 02_dom / 05_XNodeAttr.js
index 2ff418f..5a5f16f 100644 (file)
@@ -1,5 +1,4 @@
-var X_Node_Attr = {\r
-       noValue : {\r
+var X_Node_Attr_noValue = {\r
                checked  : 1,\r
                compact  : 1,\r
                declare  : 1,\r
@@ -13,8 +12,8 @@ var X_Node_Attr = {
                nowrap   : 1,\r
                readonly : 1,\r
                selected : 1\r
-       },\r
-       renameForDOM : {\r
+},\r
+X_Node_Attr_renameForDOM = {\r
                'class'          : 'className',\r
                accesskey        : 'accessKey',\r
                'accept-charset' : 'acceptCharset',\r
@@ -40,22 +39,24 @@ var X_Node_Attr = {
                usemap           : 'useMap',\r
                valuetype        : 'valueType',\r
                checked          : 'defaultChecked'\r
-       },\r
-       \r
-       HAS_VALUE : {\r
+},\r
+\r
+X_Node_Attr_HAS_VALUE = {\r
                INPUT    : true,\r
                TEXTAREA : true,\r
                SELECT   : true,\r
-               BUTTON   : true\r
-       },\r
-       \r
-       renameForTag : {},\r
+               BUTTON   : true,\r
+               OBJECT   : true,\r
+               PARAM    : true // FlashVars が flash 側から書き換えられるケースがある\r
+},\r
+\r
+X_Node_Attr_renameForTag = {};\r
        // http://nanto.asablo.jp/blog/2005/10/29/123294\r
        // checked -> defaultChecked\r
        // 動的に生成した input 要素を文書ツリーに挿入する前に設定した checked 属性は反映されず、defaultChecked だと反映される\r
        // 先頭にスペース\r
-       objToAttrText : function( obj ){\r
-               var noValue = X_Node_Attr.noValue,\r
+function X_Node_Attr_objToAttrText( obj ){\r
+               var noValue = X_Node_Attr_noValue,\r
                        attrs = [ '' ], n = 0, p, v;\r
                if( !obj ) return ''; // Opera7\r
                for( p in obj ){\r
@@ -66,7 +67,6 @@ var X_Node_Attr = {
                        attrs[ ++n ] = noValue[ p ] ? p : [ p, '="', v, '"' ].join( '' );\r
                };\r
                return 0 < n ? attrs.join( ' ' ) : '';\r
-       }\r
 };\r
 \r
 (function( renameForDOM, renameForTag ){\r
@@ -74,19 +74,19 @@ var X_Node_Attr = {
        for( name in renameForDOM ){\r
                renameForTag[ renameForDOM[ name ] ] = name;\r
        };\r
-})( X_Node_Attr.renameForDOM, X_Node_Attr.renameForTag );\r
+})( X_Node_Attr_renameForDOM, X_Node_Attr_renameForTag );\r
 \r
 \r
 \r
 /* --------------------------------------\r
  *  attribute\r
- *  X_Node_Attr.toIndex に定義されている 属性の場合\r
+ *  X_Node_Attr_toIndex に定義されている 属性の場合\r
  * \r
  * http://nanto.asablo.jp/blog/2005/10/29/123294\r
  * className, onclick等 はここで設定しない\r
  * \r
  */\r
-X.Dom.Node.prototype.attr = function( nameOrObj /* v */ ){\r
+Node.prototype.attr = function( nameOrObj /* v */ ){\r
        var attrs = this._attrs, newAttrs, f, p, elm, v;\r
        \r
        if( this._xnodeType !== 1 ) return this;\r
@@ -96,21 +96,21 @@ X.Dom.Node.prototype.attr = function( nameOrObj /* v */ ){
                newAttrs = this._newAttrs || ( this._newAttrs = {} );\r
                \r
                for( p in nameOrObj ){\r
-                       if( this._setAttr( attrs, newAttrs, p, nameOrObj[ p ] ) === true ) f = true;\r
+                       if( X_Node_Attr_setAttr( this, attrs, newAttrs, p, nameOrObj[ p ] ) === true ) f = true;\r
                };\r
                if( f ){\r
                        this._attrText = false;\r
                        this._dirty |= X_Node_Dirty.ATTR;\r
-                       this._root && this._reserveUpdate();                    \r
+                       this._root && X_Node_reserveUpdate();                   \r
                };\r
                return this;\r
        } else\r
        if( 1 < arguments.length ){\r
                // setter\r
-               if( this._setAttr( attrs || ( this._attrs = {} ), this._newAttrs || ( this._newAttrs = {} ), nameOrObj, arguments[ 1 ] ) === true ){\r
+               if( X_Node_Attr_setAttr( this, attrs || ( this._attrs = {} ), this._newAttrs || ( this._newAttrs = {} ), nameOrObj, arguments[ 1 ] ) === true ){\r
                        this._attrText = false;\r
                        this._dirty |= X_Node_Dirty.ATTR;\r
-                       this._root && this._reserveUpdate();\r
+                       this._root && X_Node_reserveUpdate();\r
                };\r
                return this;\r
        } else\r
@@ -128,24 +128,32 @@ X.Dom.Node.prototype.attr = function( nameOrObj /* v */ ){
                        case 'style' :\r
                        case 'cssText' :\r
                                return this.cssText();\r
+                       case 'text' :\r
+                               return this.text();\r
+                       case 'html' :\r
+                               return this.html();\r
+                       case 'selected' :\r
+                               // kquery.js : safariのバグ対策\r
+                               // if ($.browser.safari && key === "selected" && tmp) tmp.selectedIndex;\r
+                               // 親ノードの selectedIndex の getter を呼んでおくと値が正しくなる、ということ?( by itozyun )\r
+                               if( X_UA.WebKit ) this._rawObject.parentNode.selectedIndex;\r
                        case 'value' :\r
                        case 'checked' :\r
-                       case 'selected' :\r
                        case 'disabled' :                       \r
                        case 'selectedIndex' :\r
-                               if( X_Node_Attr.HAS_VALUE[ this._tag ] ){\r
+                               if( X_Node_Attr_HAS_VALUE[ this._tag ] ){\r
                                        if( this._newAttrs && X_Object_inObject( nameOrObj, this._newAttrs ) ) return this._newAttrs[ nameOrObj ];\r
-                                       if( elm = X_UA_DOM.IE4 ? this._rawObject || this._ie4getRawNode() : this._rawObject ){\r
+                                       if( elm = X_UA_DOM.IE4 ? this._rawObject || X_Node__ie4getRawNode( this ) : this._rawObject ){\r
                                                if( !attrs ) attrs = this._attrs = {};\r
                                                return attrs[ nameOrObj ] = elm[ nameOrObj ]; // getAttribute( nameOrObj )?\r
                                        };\r
                                };\r
                                break;\r
                };\r
-               return attrs && attrs[ X_Node_Attr.renameForTag[ nameOrObj ] || nameOrObj ];\r
+               return attrs && attrs[ X_Node_Attr_renameForTag[ nameOrObj ] || nameOrObj ];\r
        };\r
 };\r
-X.Dom.Node.prototype._setAttr = function( attrs, newAttrs, name, v ){\r
+function X_Node_Attr_setAttr( that, attrs, newAttrs, name, v ){\r
        switch( name ){\r
                // case 'type' : TODO IE は input, button, object に対して type の再設定が出来ない _state が要素生成済なら不可\r
                case 'UID' :\r
@@ -153,19 +161,23 @@ X.Dom.Node.prototype._setAttr = function( attrs, newAttrs, name, v ){
                case 'tagName' :\r
                        return;\r
                case 'id' :\r
-                       v = ( v !== 'ie4uid' + this._uid ) ? v : undefined;\r
-                       if( v !== this._id ){\r
-                               this._id = v;\r
-                               this._dirty |= X_Node_Dirty.ID;\r
-                               this._root && this._reserveUpdate();\r
+                       v = ( v !== 'ie4uid' + that._uid ) ? v : undefined;\r
+                       if( v !== that._id ){\r
+                               that._id = v;\r
+                               that._dirty |= X_Node_Dirty.ID;\r
+                               that._root && X_Node_reserveUpdate();\r
                        };\r
                        return; \r
                case 'class' :\r
                case 'className' :\r
-                       return this.className( v );\r
+                       return that.className( v );\r
                case 'style' :\r
                case 'cssText' :\r
-                       return this.cssText( v );\r
+                       return that.cssText( v );\r
+               case 'text' :\r
+                       return that.text( v );\r
+               case 'html' :\r
+                       return that.html( v );\r
        };\r
        // debug\r
        if( name.indexOf( 'on' ) === 0 ){\r
@@ -173,7 +185,7 @@ X.Dom.Node.prototype._setAttr = function( attrs, newAttrs, name, v ){
                return;\r
        };\r
        \r
-       name = X_Node_Attr.renameForTag[ name ] || name;\r
+       name = X_Node_Attr_renameForTag[ name ] || name;\r
        if( attrs[ name ] === v ) return;\r
        \r
        if( v == null ){\r