OSDN Git Service

Version 0.6.23, remove AbstractBox(AbstractDisplayContainer), working ie-filter-fix.
[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         // http://nanto.asablo.jp/blog/2005/10/29/123294\r
176         // checked -> defaultChecked\r
177         // 動的に生成した input 要素を文書ツリーに挿入する前に設定した checked 属性は反映されず、defaultChecked だと反映される\r
178         objToAttrText : function( obj ){\r
179                 var noValue = X.Dom.Attr.noValue, attrs = [], n = -1, p;\r
180                 for( p in obj ){\r
181                         attrs[ ++n ] = noValue[ p ] ? p : [ p, '="', obj[ p ], '"' ].join( '' );\r
182                 };\r
183                 return attrs.join( ' ' );\r
184         }\r
185 };\r
186 \r
187 (function( toIndex, toName, renameForDOM, renameForTag ){\r
188         var name, i;\r
189         for( name in toIndex ){\r
190                 if( typeof ( i = toIndex[ name ] ) === 'number' ){\r
191                         toName[ i ] = name;\r
192                 };\r
193         };\r
194         for( name in renameForDOM ){\r
195                 renameForTag[ renameForDOM[ name ] ] = name;\r
196         };\r
197 })( X.Dom.Attr.toIndex, X.Dom.Attr.toName, X.Dom.Attr.renameForDOM, X.Dom.Attr.renameForTag );\r
198 \r
199 \r
200 \r
201 /* --------------------------------------\r
202  *  attribute\r
203  *  X.Dom.Attr.toIndex に定義されている 属性の場合\r
204  * \r
205  * http://nanto.asablo.jp/blog/2005/10/29/123294\r
206  * className, onclick等 はここで設定しない\r
207  * \r
208  */\r
209 X.Dom.Node.prototype.attr = function( nameOrObj /* v */ ){\r
210         var attrs = this._attrs, newAttrs, f;\r
211         \r
212         if( this._xnodeType !== 1 ) return this;\r
213         \r
214         if( nameOrObj && X.Type.isObject( nameOrObj ) ){\r
215                 attrs || ( attrs = this._attrs = {} );\r
216                 newAttrs = this._newAttrs || ( this._newAttrs = {} );\r
217                 \r
218                 for( p in nameOrObj ){\r
219                         if( this._setAttr( attrs, newAttrs, p, nameOrObj[ p ] ) === true ) f = true;\r
220                 };\r
221                 if( f ){\r
222                         delete this._attrText;\r
223                         this._dirty |= X.Dom.Dirty.ATTR;\r
224                         this._root && this._reserveUpdate();                    \r
225                 };\r
226                 return this;\r
227         } else\r
228         if( 1 < arguments.length ){\r
229                 // setter\r
230                 if( this._setAttr( attrs || ( this._attrs = {} ), this._newAttrs || ( this._newAttrs = {} ), nameOrObj, arguments[ 1 ] ) === true ){\r
231                         delete this._attrText;\r
232                         this._dirty |= X.Dom.Dirty.ATTR;\r
233                         this._root && this._reserveUpdate();\r
234                 };\r
235                 return this;\r
236         } else\r
237         if( typeof nameOrObj === 'string' && attrs ){\r
238                 // getter\r
239                 return attrs[ nameOrObj ];\r
240         };\r
241 };\r
242 X.Dom.Node.prototype._setAttr = function( attrs, newAttrs, name, v ){\r
243         if( name === 'UID' ) return;\r
244         if( name === 'id' ){\r
245                 v = v !== 'ie4uid' + this._uid ? v : undefined;\r
246                 if( v !== this._id ){\r
247                         this._id = v;\r
248                         this._dirty |= X.Dom.Dirty.ID;\r
249                         this._root && this._reserveUpdate();\r
250                 };\r
251                 return;\r
252         };      \r
253         if( name === 'class' ) return this.className( v );      \r
254         if( name === 'style' ) return this.cssText( v );\r
255         \r
256         if( name.indexOf( 'on' ) === 0 ){\r
257                 X.Notification.warn( 'xnode.attr("' + name + '") is wrong, xnode.listen() & xnode.unlisten().' );\r
258                 return;\r
259         };\r
260         \r
261         name = X.Dom.Attr.renameForTag[ name ] || name;\r
262         if( attrs[ name ] === v ) return;\r
263         \r
264         if( v == null ){\r
265                 newAttrs[ name ] = undefined;\r
266                 if( attrs.hasOwnProperty( name ) ) delete attrs[ name ];\r
267         } else {\r
268                 newAttrs[ name ] = attrs[ name ] = v;\r
269         };\r
270         return true;\r
271 };\r
272 \r