OSDN Git Service

Version 0.6.12.
[pettanr/clientJs.git] / 0.6.x / js / dom / 14_XDomAttr.js
1 X.Dom.Attr = {\r
2         toName  : [],\r
3         toIndex : {\r
4                 id           : 0,\r
5                 className    : 1,\r
6                 'class'      : 1, //\r
7                 name         : 2,\r
8                 title        : 3,\r
9                 accessKey    : 4,\r
10                 accesskey    : 4, //\r
11                 tabIndex     : 5,\r
12                 tabindex     : 5, //\r
13                 dir          : 6,\r
14                 lang         : 7,\r
15                 'xml:lang'   : 8,\r
16                 'xml:space'  : 9,\r
17                 abbr         : 10,\r
18                 accept       : 11,\r
19                 acceptCharset : 12,\r
20                 'accept-charset' : 12,\r
21                 action       : 13,\r
22                 align        : 14,\r
23                 alink        : 15,\r
24                 alt          : 16,\r
25                 archive      : 17,\r
26                 axis         : 18,\r
27                 background   : 19,\r
28                 bgColor      : 20,\r
29                 bgcolor      : 20, //\r
30                 border       : 21,\r
31                 cellPadding  : 22,\r
32                 cellpadding  : 22, //\r
33                 cellSpacing  : 23,\r
34                 cellspacing  : 23, //\r
35                 ch           : 24,\r
36                 'char'       : 24, //\r
37                 chOff        : 25,\r
38                 charoff      : 25, //\r
39                 charset      : 26,\r
40                 checked      : 27,\r
41                 cite         : 28,\r
42                 classid      : 29,\r
43                 clear        : 30,\r
44                 code         : 31,\r
45                 codeBase     : 32,\r
46                 codebase     : 32, //\r
47                 codeType     : 33,\r
48                 codetype     : 33, //\r
49                 color        : 34,\r
50                 cols         : 35,\r
51                 colspan      : 36,\r
52                 colSpan      : 36,\r
53                 compact      : 37,\r
54                 content      : 38,\r
55                 coords       : 39,\r
56                 data         : 40,\r
57                 dateTime     : 41,\r
58                 datetime     : 41, //\r
59                 declare      : 42,\r
60                 defer        : 43,\r
61                 disabled     : 44,\r
62                 enctype      : 45,\r
63                 face         : 46,\r
64                 htmlFor      : 47,\r
65                 'for'        : 47, //\r
66                 frame        : 48,\r
67                 frameBorder  : 49,\r
68                 frameborder  : 49, //\r
69                 headers      : 50,\r
70                 height       : 51,\r
71                 href         : 52,\r
72                 hreflang     : 53,\r
73                 hspace       : 54,\r
74                 httpEquiv    : 55,\r
75                 'http-equiv' : 55, //\r
76                 ismap        : 56,\r
77                 isMap        : 56,\r
78                 label        : 57,\r
79                 language     : 58,\r
80                 longDesc     : 59,\r
81                 longdesc     : 59, //\r
82                 marginheight : 60,\r
83                 marginwidth  : 61,\r
84                 maxLength    : 62,\r
85                 maxlength    : 62, //\r
86                 media        : 63,\r
87                 method       : 64,\r
88                 multiple     : 65,\r
89                 noHref       : 66,\r
90                 nohref       : 66,\r
91                 noresize     : 67,\r
92                 noshade      : 68,\r
93                 nowrap       : 69,\r
94                 object       : 71,\r
95                 profile      : 72,\r
96                 prompt       : 73,\r
97                 readOnly     : 74,\r
98                 readonly     : 74,\r
99                 rel          : 75,\r
100                 rev          : 76,\r
101                 rows         : 77,\r
102                 rowspan      : 78,\r
103                 rowSpan      : 78,\r
104                 rules        : 79,\r
105                 scheme       : 80,\r
106                 scope        : 81,\r
107                 scrolling    : 82,\r
108                 selected     : 83,\r
109                 shape        : 84,\r
110                 size         : 85,\r
111                 span         : 86,\r
112                 src          : 87,\r
113                 standby      : 88,\r
114                 start        : 89,\r
115                 summary      : 90,\r
116                 target       : 91,\r
117                 text         : 92,\r
118                 type         : 93,\r
119                 useMap       : 94,\r
120                 usemap       : 94,\r
121                 valign       : 95,\r
122                 value        : 96,\r
123                 valueType    : 97,\r
124                 valuetype    : 97,\r
125                 version      : 98,\r
126                 vlink        : 99,\r
127                 vspace       : 100,\r
128                 width        : 101,\r
129                 wrap         : 102,\r
130                 xmlns        : 103\r
131         },\r
132         noValue : {\r
133                 checked  : 1,\r
134                 compact  : 1,\r
135                 declare  : 1,\r
136                 defer    : 1,\r
137                 disabled : 1,\r
138                 ismap    : 1,\r
139                 multiple : 1,\r
140                 nohref   : 1,\r
141                 noresize : 1,\r
142                 noshade  : 1,\r
143                 nowrap   : 1,\r
144                 readonly : 1,\r
145                 selected : 1\r
146         },\r
147         renameForDOM : {\r
148                 'class'          : 'className',\r
149                 accesskey        : 'accessKey',\r
150                 'accept-charset' : 'acceptCharset',\r
151                 bgcolor          : 'bgColor',\r
152                 cellpadding      : 'cellPadding',\r
153                 cellspacing      : 'cellSpacing',\r
154                 'char'           : 'ch',\r
155                 charoff          : 'chOff',\r
156                 codebase         : 'codeBase',\r
157                 codetype         : 'codeType',\r
158                 colspan          : 'colSpan',\r
159                 datetime         : 'dateTime',\r
160                 'for'            : 'htmlFor',\r
161                 frameborder      : 'frameBorder',\r
162                 'http-equiv'     : 'httpEquiv',\r
163                 ismap            : 'isMap',\r
164                 longdesc         : 'longDesc',\r
165                 maxlength        : 'maxLength',\r
166                 nohref           : 'noHref',\r
167                 readonly         : 'readOnly',\r
168                 rowspan          : 'rowSpan',\r
169                 tabindex         : 'tabIndex',\r
170                 usemap           : 'useMap',\r
171                 valuetype        : 'valueType',\r
172                 checked          : 'defaultChecked'\r
173         },\r
174         renameForTag : {},\r
175         objToAttrText : function( obj ){\r
176                 var attrs = [], noValue = X.Dom.Attr.noValue, p;\r
177                 for( p in obj ){\r
178                         attrs[ attrs.length ] = noValue[ p ] ? p : [ p, '="', obj[ p ], '"' ].join( '' );\r
179                 };\r
180                 return attrs.join( ' ' );\r
181         }\r
182 };\r
183 \r
184 (function( toIndex, toName, renameForDOM, renameForTag ){\r
185         var name, i;\r
186         for( name in toIndex ){\r
187                 if( typeof ( i = toIndex[ name ] ) === 'number' ){\r
188                         toName[ i ] = name;\r
189                 };\r
190         };\r
191         for( name in renameForDOM ){\r
192                 renameForTag[ renameForDOM[ name ] ] = name;\r
193         };\r
194 })( X.Dom.Attr.toIndex, X.Dom.Attr.toName, X.Dom.Attr.renameForDOM, X.Dom.Attr.renameForTag );\r
195 \r
196 \r
197 \r
198 /* --------------------------------------\r
199  *  attribute\r
200  *  X.Dom.Attr.toIndex に定義されている 属性の場合\r
201  * \r
202  * http://nanto.asablo.jp/blog/2005/10/29/123294\r
203  * className, onclick等 はここで設定しない\r
204  * \r
205  */\r
206 X.Dom.Node.prototype.attr = function( nameOrObj /* v */ ){\r
207         var attrs = this._attrs,\r
208                 node, v, name;\r
209         \r
210         if( this._nodeType !== 1 ) return this;\r
211         \r
212         if( nameOrObj && X.Type.isObject( nameOrObj ) ){\r
213                 if( !attrs ) attrs = this._attrs = {};\r
214                 node = this._ie4getRawNode ? this._ie4getRawNode() : this._rawNode;\r
215                 for( p in nameOrObj ){\r
216                         this.__attr( node, attrs, p, nameOrObj[ p ] );\r
217                 };\r
218                 this._attrText = X.Dom.Attr.objToAttrText( this._attrs );\r
219                 return this;\r
220         } else\r
221         if( 1 < arguments.length ){\r
222                 // setter\r
223                 // this._attrText use when Node.create()\r
224                 if( !attrs ) attrs = this._attrs = {};\r
225                 this.__attr(\r
226                         this._ie4getRawNode ? ( this._rawNode || this._ie4getRawNode() ) : this._rawNode,\r
227                         attrs, nameOrObj, arguments[ 1 ]\r
228                 );\r
229                 //if( !attrs[ name ] ){\r
230                 //      !this._attrText ? ( this._attrText = '' ) : ( this._attrText += ' ' );\r
231                 //      this._attrText += X.Dom.Attr.noValue[ name ] ? name : name + '="' + v + '"';\r
232                 //      attrs[ name ] = v;\r
233                 //} else {\r
234                 //      attrs[ name ] = v;\r
235                         this._attrText = X.Dom.Attr.objToAttrText( attrs );\r
236                 //};\r
237                 return this;\r
238         } else\r
239         if( typeof nameOrObj === 'string' ){\r
240                 // getter\r
241                 if( !attrs ) return;\r
242                 \r
243                 return attrs[ v ];\r
244         };\r
245 };\r
246 X.Dom.Node.prototype.__attr = function( node, attrs, name, v ){\r
247         name = X.Dom.Attr.renameForTag[ name ] || name;\r
248         \r
249         if( attrs[ name ] === v ) return;\r
250         if( name === 'style' ){\r
251                 return this.cssText( v );\r
252         };\r
253         if( name.indexOf( 'on' ) === 0 ){\r
254                 X.Notification.warn( 'xnode.attr("' + name + '") is wrong, xnode.listen() & xnode.unlisten().' );\r
255                 return;\r
256         };\r
257         // className\r
258         if( name === 'class' ) return this.className( v );\r
259         // update node\r
260         if( node ){\r
261                 this._ie4getRawNode ?\r
262                         v ? node.setAttribute( name, v ) : node.removeAttribute( name ) : // val\r
263                         ( node[ X.Dom.Attr.renameForDOM[ name ] || name ] = v || undefined ); // val\r
264         };\r
265         // id\r
266         if( name === 'id' ){\r
267                 this._id = v === 'ie4uid' + this._uid ? undefined : !v ? undefined : v;\r
268                 return;\r
269         };\r
270         // update this._attrs\r
271         if( !v ){\r
272                 delete attrs[ name ];\r
273         } else {\r
274                 attrs[ name ] = v;\r
275         };\r
276 };