1 var _NodeStyle = X.Class.create(
\r
3 X.Class.PRIVATE_DATA | Class.POOL_OBJECT,
\r
7 layoutCssText : null,
\r
8 Constructor : function(){
\r
12 register : function( node ){
\r
13 var root = node.__root,
\r
14 roots = this.rootList,
\r
15 nodes = this.nodeList;
\r
17 this.rootList = [ root ];
\r
19 if( roots.indexOf( root ) === -1 ) roots[ roots.length ] = root;
\r
22 this.nodeList = [ node ];
\r
25 if( nodes.indexOf( node ) === -1 ) nodes[ nodes.length ] = node;
\r
27 unRegister : function( node ){
\r
28 var nodes = this.nodeList,
\r
29 i = nodes.indexOf( node ),
\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
37 var styleClass = Class.getClass( this.User ),
\r
38 dataClass = Class.getClass( this );
\r
41 * opt_unit は getter のみ
\r
43 attr : function( prop, v, opt_unit ){
\r
44 var update = prop[ 0 ],
\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
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
71 if( Type.isBoolean( v ) === true ){
\r
72 if( flag === false ) throw new Error( '' );
\r
74 if( Type.isString( v ) === true ){
\r
75 if( url === false && fontName === false ){
\r
76 if( v.indexOf( ' ' ) !== -1 ){
\r
79 if( length === false && percent === false && color === false ) throw new Error( '' );
\r
83 if( Type.isArray( v ) === true ){
\r
84 if( v.length <= 4 && quartet === true ){
\r
85 type ^= X.Css.Type.QUARTET;
\r
87 if( v.length === 2 && combi === true ){
\r
88 type ^= X.Css.Type.COMBI;
\r
90 throw new Error( '' );
\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
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
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
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
122 case X.Css.Dirty.REFLOW :
\r
123 delete this.layoutCssText;
\r
125 case X.Css.Dirty.PAINT :
\r
126 delete this.colorCssText;
\r
128 case X.Css.Dirty.FONT :
\r
129 delete this.fontCssText;
\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
137 if( root.dirty < update ) root.dirty = update;
\r
141 if( list ) _v = list.indexOf( v );
\r
142 data[ propID ] = _v !== -1 ? _v : v;
\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
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
153 case X.Css.AttrNo.width :
\r
154 this.autoWidth = v === AUTO;
\r
155 this.prctWidth = v === FULL || v < 1;
\r
157 case X.Css.AttrNo.height :
\r
158 this.autoHeight = v === AUTO;
\r
159 this.prctHeight = v === FULL || v < 1;
\r
167 v = data[ propID ];
\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
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
180 createFontCssText : function(){
\r
181 var data = this.data,
\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
195 createColorCssText : function(){
\r
196 var data = this.data,
\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
214 css[ css.length ] = 'background-repeat:repeat';
\r
217 css[ css.length ] = 'background-repeat:repeat-x';
\r
220 css[ css.length ] = 'background-repeat:repeat-y';
\r
222 x = data[ X.Css.AttrNo.bgImgPositionX ];
\r
223 y = data[ X.Css.AttrNo.bgImgPositionY ];
\r
225 css[ css.length ] = 'background-position:' + x + ' ' + y;
\r
228 css[ css.length ] = 'background-position:' + x + ' 0';
\r
231 css[ css.length ] = 'background-position:0 ' + y;
\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
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
252 createBoxShadowCssText : function(){
\r
255 createBGAlphaCssText : function(){
\r
258 createTextShadowCssText : function(){
\r
261 createLayoutCssText : function(){
\r
267 var NodeStyle = X.Class.create(
\r
269 X.Class.POOL_OBJECT,
\r
272 Constructor : function(){
\r
273 X.Class._newPrivate( this );
\r
275 borderWidth : function( v ){
\r
276 return X.Class._getPrivate( this ).attr( X.Css.Attr.borderWidth, v );
\r
278 borderColor : function( v ){
\r
279 return X.Class._getPrivate( this ).attr( X.Css.Attr.borderColor, v );
\r
281 borderStyle : function( v ){
\r
282 return X.Class._getPrivate( this ).attr( X.Css.Attr.borderStyle, v );
\r
284 cornerRadius : function( v ){
\r
285 return X.Class._getPrivate( this ).attr( X.Css.Attr.cornerRadius, v );
\r
287 bgColor : function( v ){
\r
288 return X.Class._getPrivate( this ).attr( X.Css.Attr.bgColor, v );
\r
290 bgAlpha : function( v ){
\r
291 return X.Class._getPrivate( this ).attr( X.Css.Attr.bgAlpha, v );
\r
293 bgImgUrl : function( v ){
\r
294 return X.Class._getPrivate( this ).attr( X.Css.Attr.bgImgUrl, v );
\r
296 bgImgRepeatX : function( v ){
\r
297 return X.Class._getPrivate( this ).attr( X.Css.Attr.bgImgRepeatX, v );
\r
299 bgImgRepeatY : function( v ){
\r
300 return X.Class._getPrivate( this ).attr( X.Css.Attr.bgImgRepeatY, v );
\r
302 bgImgPositionX : function( v ){
\r
303 return X.Class._getPrivate( this ).attr( X.Css.Attr.bgImgPositionX, v );
\r
305 bgImgPositionY : function( v ){
\r
306 return X.Class._getPrivate( this ).attr( X.Css.Attr.bgImgPositionY, v );
\r
308 shadowColor : function( v ){
\r
309 return X.Class._getPrivate( this ).attr( X.Css.Attr.shadowColor, v );
\r
311 shadowAlpha : function( v ){
\r
312 return X.Class._getPrivate( this ).attr( X.Css.Attr.shadowAlpha, v );
\r
314 shadowOffsetX : function( v ){
\r
315 return X.Class._getPrivate( this ).attr( X.Css.Attr.shadowOffsetX, v );
\r
317 shadowOffsetY : function( v ){
\r
318 return X.Class._getPrivate( this ).attr( X.Css.Attr.shadowOffsetY, v );
\r
320 shadowBlur : function( v ){
\r
321 return X.Class._getPrivate( this ).attr( X.Css.Attr.shadowBlur, v );
\r
323 shadowSpread : function(){
\r
324 return X.Class._getPrivate( this ).attr( X.Css.Attr.shadowSpread, v );
\r
326 shadowInset : function(){
\r
327 return X.Class._getPrivate( this ).attr( X.Css.Attr.shadowInset, v );
\r
329 color : function( v ){
\r
330 return X.Class._getPrivate( this ).attr( X.Css.Attr.color, v );
\r
332 fontFamily : function( v ){
\r
333 return X.Class._getPrivate( this ).attr( X.Css.Attr.fontFamily, v );
\r
335 fontSize : function( v ){
\r
336 return X.Class._getPrivate( this ).attr( X.Css.Attr.fontSize, v );
\r
338 bold : function( v ){
\r
339 return X.Class._getPrivate( this ).attr( X.Css.Attr.bold, v );
\r
341 italic : function( v ){
\r
342 return X.Class._getPrivate( this ).attr( X.Css.Attr.italic, v );
\r
344 lineHeight : function( v ){
\r
345 return X.Class._getPrivate( this ).attr( X.Css.Attr.lineHeight, v );
\r
347 letterSpacing : function( v ){
\r
348 return X.Class._getPrivate( this ).attr( X.Css.Attr.letterSpacing, v );
\r
350 wordSpacing : function( v ){
\r
351 return X.Class._getPrivate( this ).attr( X.Css.Attr.wordSpacing, v );
\r
353 align : function( v ){
\r
354 return X.Class._getPrivate( this ).attr( X.Css.Attr.align, v );
\r
356 decoration : function( v ){
\r
357 return X.Class._getPrivate( this ).attr( X.Css.Attr.decoration, v );
\r
359 transform : function( v ){
\r
360 return X.Class._getPrivate( this ).attr( X.Css.Attr.transform, v );
\r
362 textShadowColor : function( v ){
\r
363 return X.Class._getPrivate( this ).attr( X.Css.Attr.textShadowColor, v );
\r
365 textShadowOffsetX : function( v ){
\r
366 return X.Class._getPrivate( this ).attr( X.Css.Attr.textShadowOffsetX, v );
\r
368 textShadowOffsetY : function( v ){
\r
369 return X.Class._getPrivate( this ).attr( X.Css.Attr.textShadowOffsetY, v );
\r
371 shadowBlur : function( v ){
\r
372 return X.Class._getPrivate( this ).attr( X.Css.Attr.shadowBlur, v );
\r
374 cssText : function(){
\r
375 return X.Class._getPrivate( this ).cssText();
\r