OSDN Git Service

9df17ecde9122673def2e14cb4937d1fd12698f9
[pettanr/clientJs.git] / 0.6.x / js / _old / NodeStyle.js
1 var _NodeStyle = X.Class.create(\r
2         '_NodeStyle',\r
3         X.Class.PRIVATE_DATA | Class.POOL_OBJECT,\r
4         {\r
5                 fontCssText   : null,\r
6                 colorCssText  : null,\r
7                 layoutCssText : null,\r
8                 Constructor : function(){\r
9                         this.data  = [];\r
10                         this.dirty = 0;\r
11                 },\r
12                 register : function( node ){\r
13                         var root  = node.__root,\r
14                                 roots = this.rootList,\r
15                                 nodes = this.nodeList;\r
16                         if( !roots ){\r
17                                 this.rootList = [ root ];\r
18                         } else\r
19                         if( roots.indexOf( root ) === -1 ) roots[ roots.length ] = root;\r
20                         \r
21                         if( !nodes ){\r
22                                 this.nodeList = [ node ];\r
23                                 return;\r
24                         };\r
25                         if( nodes.indexOf( node ) === -1 ) nodes[ nodes.length ] = node;\r
26                 },\r
27                 unRegister : function( node ){\r
28                         var nodes = this.nodeList,\r
29                                 i     = nodes.indexOf( node ),\r
30                                 root  = node._root,\r
31                                 roots = this.rootList,\r
32                                 j     = roots.indexOf( root );\r
33                         if( i !== -1 && nodes.splice( i, 1 ) && nodes.length === 0 ) delete this.nodeList;\r
34                         if( j !== -1 && roots.splice( j, 1 ) && roots.length === 0 ) delete this.rootList;\r
35                 },\r
36                 clone : function(){\r
37                         var styleClass = Class.getClass( this.User ),\r
38                                 dataClass  = Class.getClass( this );\r
39                 },\r
40                 /*\r
41                  * opt_unit は getter のみ\r
42                  */\r
43                 attr : function( prop, v, opt_unit ){\r
44                         var update    = prop[ 0 ],\r
45                                 propID    = prop[ 1 ],\r
46                                 type      = prop[ 2 ],\r
47                                 list      = prop[ 3 ],\r
48                                 length    = !!( type & X.Css.Type.LENGTH    ),\r
49                                 percent   = !!( type & X.Css.Type.PERCENT   ),\r
50                                 color     = !!( type & X.Css.Type.COLOR     ),\r
51                                 uDecimal  = !!( type & X.Css.Type.U_DECIMAL ),\r
52                                 numerical = !!( type & X.Css.Type.NUMERICAL ),\r
53                                 flag      = !!( type & X.Css.Type.BOOLEAN   ),\r
54                                 quartet   = !!( type & X.Css.Type.QUARTET   ),\r
55                                 url       = !!( type & X.Css.Type.URL       ),\r
56                                 fontName  = !!( type & X.Css.Type.FONT_NAME ),\r
57                                 //list      = !!( type & X.Css.Type.LIST      ),\r
58                                 combi     = !!( type & X.Css.Type.COMBI     ),\r
59                                 data      = this.data,\r
60                                 _v        = -1,\r
61                                 i, l, nodes, root;\r
62                 /*\r
63                  * Setter\r
64                  */\r
65                         if( v !== undefined ){\r
66                                 if( Type.isNumber( v ) === true ){\r
67                                         if( numerical === false ){\r
68                                                 if( uDecimal === false || v < 0 || 1 < v ) throw new Error( '' );\r
69                                         };\r
70                                 } else\r
71                                 if( Type.isBoolean( v ) === true ){\r
72                                         if( flag === false ) throw new Error( '' );\r
73                                 } else\r
74                                 if( Type.isString( v ) === true ){\r
75                                         if( url === false && fontName === false ){\r
76                                                 if( v.indexOf( ' ' ) !== -1 ){\r
77                                                         v = v.split( ' ' );\r
78                                                 } else {\r
79                                                         if( length === false && percent === false && color === false ) throw new Error( '' );\r
80                                                 };\r
81                                         };\r
82                                 };                                      \r
83                                 if( Type.isArray( v ) === true ){\r
84                                         if( v.length <= 4 && quartet === true ){\r
85                                                 type ^= X.Css.Type.QUARTET;\r
86                                         } else\r
87                                         if( v.length === 2 && combi === true ){\r
88                                                 type ^= X.Css.Type.COMBI;\r
89                                         } else {\r
90                                                 throw new Error( '' );\r
91                                         };\r
92                                         switch( v.length ){\r
93                                                 case 1 :\r
94                                                         this.attr( [ propID  , type, list ], v[ 0 ] );\r
95                                                         this.attr( [ ++propID, type, list ], v[ 0 ] );\r
96                                                         this.attr( [ ++propID, type, list ], v[ 0 ] );\r
97                                                         this.attr( [ ++propID, type, list ], v[ 0 ] );\r
98                                                         break;\r
99                                                 case 2 :\r
100                                                         this.attr( [ propID  , type, list ], v[ 0 ] );\r
101                                                         this.attr( [ ++propID, type, list ], v[ 1 ] );\r
102                                                         this.attr( [ ++propID, type, list ], v[ 0 ] );\r
103                                                         this.attr( [ ++propID, type, list ], v[ 1 ] );\r
104                                                         break;\r
105                                                 case 3 :\r
106                                                         this.attr( [ propID  , type, list ], v[ 0 ] );\r
107                                                         this.attr( [ ++propID, type, list ], v[ 1 ] );\r
108                                                         this.attr( [ ++propID, type, list ], v[ 2 ] );\r
109                                                         this.attr( [ ++propID, type, list ], v[ 1 ] );\r
110                                                         break;\r
111                                                 case 4 :\r
112                                                         this.attr( [ propID  , type, list ], v[ 0 ] );\r
113                                                         this.attr( [ ++propID, type, list ], v[ 1 ] );\r
114                                                         this.attr( [ ++propID, type, list ], v[ 2 ] );\r
115                                                         this.attr( [ ++propID, type, list ], v[ 3 ] );\r
116                                                         break;\r
117                                                 default :\r
118                                         };\r
119                                         return this.User;\r
120                                 };\r
121                                 switch( update ){\r
122                                         case X.Css.Dirty.REFLOW :\r
123                                                 delete this.layoutCssText;\r
124                                                 break;\r
125                                         case X.Css.Dirty.PAINT :\r
126                                                 delete this.colorCssText;\r
127                                                 break;\r
128                                         case X.Css.Dirty.FONT :\r
129                                                 delete this.fontCssText;\r
130                                 };\r
131 \r
132                                 if( this.dirty < update ){\r
133                                         this.dirty = update;\r
134                                         roots = this.rootList;\r
135                                         for( i = 0, l = roots.length; i < l; ++i ){\r
136                                                 root = roots[ i ];\r
137                                                 if( root.dirty < update ) root.dirty = update;\r
138                                         };\r
139                                 };\r
140                                 \r
141                                 if( list ) _v = list.indexOf( v );\r
142                                 data[ propID ] = _v !== -1 ? _v : v;\r
143                                 \r
144                                 switch( propID ){\r
145                                         case X.Css.AttrNo.left  :\r
146                                         case X.Css.AttrNo.right :\r
147                                                 this.constraintW = Type.isNumber( data[ X.Css.AttrNo.left ] ) || Type.isNumber( data[ X.Css.AttrNo.right ] );\r
148                                                 break;\r
149                                         case X.Css.AttrNo.top    :\r
150                                         case X.Css.AttrNo.bottom :\r
151                                                 this.constraintH = Type.isNumber( data[ X.Css.AttrNo.top ] ) || Type.isNumber( data[ X.Css.AttrNo.bottom ] );\r
152                                                 break;\r
153                                         case X.Css.AttrNo.width :\r
154                                                 this.autoWidth = v === AUTO;\r
155                                                 this.prctWidth = v === FULL || v < 1;\r
156                                                 break;\r
157                                         case X.Css.AttrNo.height :\r
158                                                 this.autoHeight = v === AUTO;\r
159                                                 this.prctHeight = v === FULL || v < 1;\r
160                                                 break;\r
161                                 };                                      \r
162                                 return this.User;\r
163                         };\r
164                 /*\r
165                  * Getter\r
166                  */\r
167                         v = data[ propID ];\r
168                         // Unit\r
169                         if( quartet === true ) return [ v, data[ ++propID ], data[ ++propID ], data[ ++propID ] ];\r
170                         if( combi   === true ) return [ v, data[ ++propID ] ];\r
171                         if( list && Type.isNumber( v ) === true ) return list[ v ];\r
172                         return v;\r
173                 },\r
174                 cssText : function(){\r
175                         if( this.fontCssText   === null ) this.fontCssText   = this.createFontCssText();\r
176                         if( this.layoutCssText === null ) this.layoutCssText = this.createLayoutCssText();\r
177                         if( this.colorCssText  === null ) this.colorCssText  = this.createColorCssText();\r
178                         return [ this.fontCssText, this.colorCssText, this.layoutCssText ].join( ';' );\r
179                 },\r
180                 createFontCssText : function(){\r
181                         var data = this.data,\r
182                                 css  = [],\r
183                                 v;\r
184                         if( v = data[ X.Css.AttrNo.fontFamily    ] ) css[ 0 ] = 'font-family:' + v;\r
185                         if( v = data[ X.Css.AttrNo.fontSize      ] ) css[ css.length ] = 'font-size:' + v;\r
186                         if( v = data[ X.Css.AttrNo.bold          ] ) css[ css.length ] = 'font-weight:bold';\r
187                         if( v = data[ X.Css.AttrNo.italic        ] ) css[ css.length ] = 'font-style:italic';\r
188                         if( v = data[ X.Css.AttrNo.lineHeight    ] ) css[ css.length ] = 'line-height:' + v;\r
189                         if( v = data[ X.Css.AttrNo.letterSpacing ] ) css[ css.length ] = 'letter-spacing:' + v;\r
190                         if( v = data[ X.Css.AttrNo.wordSpacing   ] ) css[ css.length ] = 'word-spacing:' + v;\r
191                         if( v = data[ X.Css.AttrNo.align         ] ) css[ css.length ] = 'text-align:' + X.Css.Option.ALIGN[ v ];\r
192                         if( v = data[ X.Css.AttrNo.transform     ] ) css[ css.length ] = 'text-transform:' + X.Css.Option.TEXT_TRANSFORM[ v ];\r
193                         return css.join( ',' );\r
194                 },\r
195                 createColorCssText : function(){\r
196                         var data = this.data,\r
197                                 css  = [],\r
198                                 v, x, y, c, b;\r
199                         if( v = data[ X.Css.AttrNo.borderColor ]      ) css[ 0 ] = 'border-color:' + v;\r
200                         if( v = data[ X.Css.AttrNo.borderStyle + 0 ]  ) css[ css.length ] = 'border-top-style:' + X.Css.Option.BORDER_STYLE[ v ];\r
201                         if( v = data[ X.Css.AttrNo.borderStyle + 1 ]  ) css[ css.length ] = 'border-right-style:' + X.Css.Option.BORDER_STYLE[ v ];\r
202                         if( v = data[ X.Css.AttrNo.borderStyle + 2 ]  ) css[ css.length ] = 'border-bottom-style:' + X.Css.Option.BORDER_STYLE[ v ];\r
203                         if( v = data[ X.Css.AttrNo.borderStyle + 3 ]  ) css[ css.length ] = 'border-left-style:' + X.Css.Option.BORDER_STYLE[ v ];\r
204                         if( v = data[ X.Css.AttrNo.cornerRadius + 0 ] ) css[ css.length ] = 'corner-radius-top:' + v;\r
205                         if( v = data[ X.Css.AttrNo.cornerRadius + 1 ] ) css[ css.length ] = 'corner-radius-right:' + v;\r
206                         if( v = data[ X.Css.AttrNo.cornerRadius + 2 ] ) css[ css.length ] = 'border-radius-bottom:' + v;\r
207                         if( v = data[ X.Css.AttrNo.cornerRadius + 3 ] ) css[ css.length ] = 'border-radius-left:' + v;\r
208                         if( v = data[ X.Css.AttrNo.bgColor          ] ) css[ css.length ] = 'background-color:' + v;\r
209                         // X.Css.AttrNo.bgAlpha\r
210                         if( v = data[ X.Css.AttrNo.bgImgUrl         ] ) css[ css.length ] = 'background-image:url(' + v + ')';\r
211                         x = data[ X.Css.AttrNo.bgImgRepeatX ];\r
212                         y = data[ X.Css.AttrNo.bgImgRepeatY ];\r
213                         if( x && y ){\r
214                                 css[ css.length ] = 'background-repeat:repeat';\r
215                         } else\r
216                         if( x ){\r
217                                 css[ css.length ] = 'background-repeat:repeat-x';\r
218                         } else \r
219                         if( y ){\r
220                                 css[ css.length ] = 'background-repeat:repeat-y';\r
221                         };\r
222                         x = data[ X.Css.AttrNo.bgImgPositionX ];\r
223                         y = data[ X.Css.AttrNo.bgImgPositionY ];\r
224                         if( x && y ){\r
225                                 css[ css.length ] = 'background-position:' + x + ' ' + y;\r
226                         } else\r
227                         if( x ){\r
228                                 css[ css.length ] = 'background-position:' + x + ' 0';\r
229                         } else \r
230                         if( y ){\r
231                                 css[ css.length ] = 'background-position:0 ' + y;\r
232                         };\r
233                         if( v = data[ X.Css.AttrNo.color ]      ) css[ css.length ] = 'color:' + v;\r
234                         if( v = data[ X.Css.AttrNo.decoration ] ) css[ css.length ] = 'text-decoration:' + X.Css.Option.TEXT_DECORATION[ v ];\r
235                         x = data[ X.Css.AttrNo.textShadowOffsetX ];\r
236                         y = data[ X.Css.AttrNo.textShadowOffsetY ];\r
237                         b = data[ X.Css.AttrNo.textShadowBlur ];\r
238                         c = data[ X.Css.AttrNo.textShadowColor ];\r
239                         if( c || x || y || b ){\r
240                                 css[ css.length ] = 'text-shadow:' + x + ' ' + y + ' ' + b + ' ' + c;\r
241                         };\r
242                         /*\r
243 X.Css.AttrNo.shadowColor    = [ X.Css.Dirty.PAINT,  23, X.Css.Type.COLOR     ]; // color\r
244 X.Css.AttrNo.shadowAlpha    = [ X.Css.Dirty.PAINT,  24, X.Css.Type.U_DECIMAL ]; // 0 - 1\r
245 X.Css.AttrNo.shadowOffsetX  = [ X.Css.Dirty.PAINT,  25, X.Css.Type.LENGTH    ]; // em\r
246 X.Css.AttrNo.shadowOffsetY  = [ X.Css.Dirty.PAINT,  26, X.Css.Type.LENGTH    ]; // em\r
247 X.Css.AttrNo.shadowBlur     = [ X.Css.Dirty.PAINT,  27, X.Css.Type.LENGTH    ]; // em\r
248 X.Css.AttrNo.shadowSpread   = [ X.Css.Dirty.PAINT,  28, X.Css.Type.LENGTH    ]; // em\r
249 X.Css.AttrNo.shadowInset    = [ X.Css.Dirty.PAINT,  29, X.Css.Type.BOOLEAN   ]; // true / false\r
250                         */\r
251                 },\r
252                 createBoxShadowCssText : function(){\r
253                         \r
254                 },\r
255                 createBGAlphaCssText : function(){\r
256                         \r
257                 },\r
258                 createTextShadowCssText : function(){\r
259                         \r
260                 },\r
261                 createLayoutCssText : function(){\r
262                         \r
263                 }\r
264         }\r
265 );\r
266 \r
267 var NodeStyle = X.Class.create(\r
268         'NodeStyle',\r
269         X.Class.POOL_OBJECT,\r
270         _NodeStyle,\r
271         {\r
272                 Constructor : function(){\r
273                         X.Class._newPrivate( this );\r
274                 },\r
275                 borderWidth : function( v ){\r
276                         return X.Class._getPrivate( this ).attr( X.Css.Attr.borderWidth, v );\r
277                 },\r
278                 borderColor : function( v ){\r
279                         return X.Class._getPrivate( this ).attr( X.Css.Attr.borderColor, v );\r
280                 },\r
281                 borderStyle : function( v ){\r
282                         return X.Class._getPrivate( this ).attr( X.Css.Attr.borderStyle, v );\r
283                 },\r
284                 cornerRadius : function( v ){\r
285                         return X.Class._getPrivate( this ).attr( X.Css.Attr.cornerRadius, v );\r
286                 },\r
287                 bgColor : function( v ){\r
288                         return X.Class._getPrivate( this ).attr( X.Css.Attr.bgColor, v );\r
289                 },\r
290                 bgAlpha : function( v ){\r
291                         return X.Class._getPrivate( this ).attr( X.Css.Attr.bgAlpha, v );\r
292                 },\r
293                 bgImgUrl : function( v ){\r
294                         return X.Class._getPrivate( this ).attr( X.Css.Attr.bgImgUrl, v );\r
295                 },\r
296                 bgImgRepeatX : function( v ){\r
297                         return X.Class._getPrivate( this ).attr( X.Css.Attr.bgImgRepeatX, v );\r
298                 },\r
299                 bgImgRepeatY : function( v ){\r
300                         return X.Class._getPrivate( this ).attr( X.Css.Attr.bgImgRepeatY, v );\r
301                 },\r
302                 bgImgPositionX : function( v ){\r
303                         return X.Class._getPrivate( this ).attr( X.Css.Attr.bgImgPositionX, v );\r
304                 },\r
305                 bgImgPositionY : function( v ){\r
306                         return X.Class._getPrivate( this ).attr( X.Css.Attr.bgImgPositionY, v );\r
307                 },\r
308                 shadowColor : function( v ){\r
309                         return X.Class._getPrivate( this ).attr( X.Css.Attr.shadowColor, v );\r
310                 },\r
311                 shadowAlpha : function( v ){\r
312                         return X.Class._getPrivate( this ).attr( X.Css.Attr.shadowAlpha, v );\r
313                 },\r
314                 shadowOffsetX : function( v ){\r
315                         return X.Class._getPrivate( this ).attr( X.Css.Attr.shadowOffsetX, v );\r
316                 },\r
317                 shadowOffsetY : function( v ){\r
318                         return X.Class._getPrivate( this ).attr( X.Css.Attr.shadowOffsetY, v );\r
319                 },\r
320                 shadowBlur : function( v ){\r
321                         return X.Class._getPrivate( this ).attr( X.Css.Attr.shadowBlur, v );\r
322                 },\r
323                 shadowSpread : function(){\r
324                         return X.Class._getPrivate( this ).attr( X.Css.Attr.shadowSpread, v );\r
325                 },\r
326                 shadowInset : function(){\r
327                         return X.Class._getPrivate( this ).attr( X.Css.Attr.shadowInset, v );\r
328                 },\r
329                 color : function( v ){\r
330                         return X.Class._getPrivate( this ).attr( X.Css.Attr.color, v );\r
331                 },\r
332                 fontFamily : function( v ){\r
333                         return X.Class._getPrivate( this ).attr( X.Css.Attr.fontFamily, v );\r
334                 },\r
335                 fontSize : function( v ){\r
336                         return X.Class._getPrivate( this ).attr( X.Css.Attr.fontSize, v );\r
337                 },\r
338                 bold : function( v ){\r
339                         return X.Class._getPrivate( this ).attr( X.Css.Attr.bold, v );\r
340                 },\r
341                 italic : function( v ){\r
342                         return X.Class._getPrivate( this ).attr( X.Css.Attr.italic, v );\r
343                 },\r
344                 lineHeight : function( v ){\r
345                         return X.Class._getPrivate( this ).attr( X.Css.Attr.lineHeight, v );\r
346                 },\r
347                 letterSpacing : function( v ){\r
348                         return X.Class._getPrivate( this ).attr( X.Css.Attr.letterSpacing, v );\r
349                 },\r
350                 wordSpacing : function( v ){\r
351                         return X.Class._getPrivate( this ).attr( X.Css.Attr.wordSpacing, v );\r
352                 },\r
353                 align : function( v ){\r
354                         return X.Class._getPrivate( this ).attr( X.Css.Attr.align, v );\r
355                 },\r
356                 decoration : function( v ){\r
357                         return X.Class._getPrivate( this ).attr( X.Css.Attr.decoration, v );\r
358                 },\r
359                 transform : function( v ){\r
360                         return X.Class._getPrivate( this ).attr( X.Css.Attr.transform, v );\r
361                 },\r
362                 textShadowColor : function( v ){\r
363                         return X.Class._getPrivate( this ).attr( X.Css.Attr.textShadowColor, v );\r
364                 },\r
365                 textShadowOffsetX : function( v ){\r
366                         return X.Class._getPrivate( this ).attr( X.Css.Attr.textShadowOffsetX, v );\r
367                 },\r
368                 textShadowOffsetY : function( v ){\r
369                         return X.Class._getPrivate( this ).attr( X.Css.Attr.textShadowOffsetY, v );\r
370                 },\r
371                 shadowBlur : function( v ){\r
372                         return X.Class._getPrivate( this ).attr( X.Css.Attr.shadowBlur, v );\r
373                 },\r
374                 cssText : function(){\r
375                         return X.Class._getPrivate( this ).cssText();\r
376                 }\r
377         }\r
378 );