OSDN Git Service

Version 0.6.131, cleanup X.EventDispatcher.
[pettanr/clientJs.git] / 0.6.x / js / 02_dom / 05_XNodeAttr.js
index cd9a1ff..cd04236 100644 (file)
@@ -61,57 +61,77 @@ X_Node_Attr_STATIC_VALUE_TYPES = {
        checkbox : true\r
 },\r
 \r
+// 自由な内容が入るため、参照文字への変換が必要\r
+X_Node_Attr_toChrReferance = {\r
+       value : true,\r
+       title : true,\r
+       alt   : true\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
        //  -> src (img, iframe, ), link の href, <param name="movie" src=>\r
-function X_Node_Attr_objToAttrText( that, skipNetwork, escape ){ // TODO value の escape " -> &quot;\r
+       // \r
+function X_Node_Attr_objToAttrText( that, skipNetworkForElmCreation ){\r
        var obj     = that._attrs,\r
                noValue = X_Node_Attr_noValue,\r
                attrs   = [ '' ], // 先頭にスペース\r
                plain   = X_EMPTY_OBJECT,\r
-               n = 0, k, hasNetwork;\r
-\r
-       that._flags &= ~X_Node_State.OLD_ATTRTEXT;\r
+               n = 0, k, check;\r
 \r
+       if( skipNetworkForElmCreation ){\r
+               delete that._newAttrs;\r
+               // このあとで _newAttr にネットワーク系の属性を控える, attrText には加えない\r
+       } else {\r
+               that._flags &= ~X_Node_State.OLD_ATTRTEXT;\r
+               // 完全な attrText\r
+       };\r
+       \r
        if( !obj ){ // Opera7\r
                delete that._attrText;\r
                return '';\r
        };\r
+       \r
        for( k in obj ){\r
                if( plain[ k ] ) continue;\r
                \r
-               if( skipNetwork ){\r
-                       switch( k ){\r
-                               case 'value' :\r
-                                       if( that._tag === 'LINK' && that._attr && that._attr.name === 'movie' ){\r
-                                               hasNetwork = true;\r
-                                               continue;\r
-                                       };\r
-                                       break;\r
+               if( skipNetworkForElmCreation ){\r
+                       check = false;\r
+                       switch( that._tag + k ){\r
+                               case 'PARAMvalue' :\r
+                                       check = obj[ 'name' ] !== 'movie';\r
+                               case 'INPUTsrc'  :\r
+                                       check = check || ( obj[ 'type' ] !== 'image' );\r
+                               case 'LINKhref' :\r
+                                       check = check || ( obj[ 'rel' ] !== 'stylesheet' );\r
                                        \r
-                               case 'src' :\r
-                                       hasNetwork = true;\r
+                                       if( !check ) break;\r
+\r
+                               case 'IMGsrc'     :\r
+                               case 'IFRAMEsrc'  :\r
+                               case 'FRAMEsrc'   :\r
+                               case 'SCRIPTsrc'  :\r
+                               case 'EMBEDsrc'   :\r
+                               case 'OBJECTdata' :\r
+                               case 'BGSOUNDsrc' :\r
+                               case 'APPLETcode' :\r
+                               //case 'AUDIOsrc' :\r
+                               //case 'VIDEOsrc' :\r
+                                       if( !that._newAttrs ) that._newAttrs = {};\r
+                                       that._newAttrs[ k ] = obj[ k ];\r
                                        continue;\r
-                                       \r
-                               case 'href' :\r
-                                       if( that._tag === 'LINK' ){\r
-                                               hasNetwork = true;\r
-                                               continue;\r
-                                       };\r
                        };\r
                };\r
 \r
                attrs[ ++n ] = noValue[ k ] ? k : [\r
                        k, '="',\r
-                       k === 'value' ? X_String_toChrReferance( obj[ k ] ) : obj[ k ],\r
+                       X_Node_Attr_toChrReferance[ k ] ? X_String_toChrReferance( obj[ k ] ) : obj[ k ],\r
                        '"' ].join( '' );\r
        };\r
        \r
-       //if( hasNetwork ) that._flags |= X_Node_State.IE_NETWORK_ATTR\r
-       \r
        if( 0 < n ){\r
                return that._attrText = attrs.join( ' ' );\r
        };\r