Comment by a.revolution.ultra.blue:

Guys, check the other post on client bundle, {...@nenchev / @shahidzaman}, I  
answered both your questions there. @whoever-asked-about-resetting-rules, I  
have some custom implementation that allows for dynamic / updateable rules.  
Remember that all IE browsers only allow a max of 31 stylesheets {inline or  
link}, even in IE8 {would 63 kill them, honestly?}. Also, there is no  
reliable way to remove style elements properly in all browsers, so instead  
I store and clear StyleElements manually. My implementation uses a few  
custom data classes and whatnot, but you can get the important bits you'll  
need from it.
{{{
String id,rule;
//Styles is a JS object that stores StyleElements like HashMap
if (styles.xHas( id )){
//If the rule named id already has an element, get it
StyleElement el = styles.xCast( id );
try{
//We start with a text node. I auto-wrap {braces}, but this can be confusing
     Text txt = Document.get().createTextNode( "."+id+"{" +rule+ "}" );
//Next, clear the style elements. Rules are text nodes
for(int o = el.getChildCount();o-->0;el.removeChild( el.getChild( o ) ));
//xRNA is my own js <--> java overlay type.
xRNA asRna = el.cast();
//If the style element does NOT have a styleSheet property
if (asRna.xFalse( "styleSheet" ))
//Just append the text node to create rule
     el.appendChild( txt );
else
  //Otherwise, we set use the browser <style/>.styleSheet object's cssText   
poperty
     asRna.xGetRna( "styleSheet" ).xSetStr( "cssText" , txt.getNodeValue() );
//You can do this in a jsni method if you like, just do  
el.styleSheet.cssText='a{rule:0;}'
}catch(Throwable e){GWT.log( "ack" , e );} }
//If there is no style element yet
else{
//Make and store one using the deprecated injectStylesheet method
     styles.xSet( id , StyleInjector.injectStylesheet( "."+id+"{" +rule+ "}"  
) ); }
}}}
If anyone finds this confusing, I can make a jar and upload somewhere. It  
actually uses Deferred binding to save the id, but that's not big deal.  Or  
you can wait a month when I release my full API in case I haven't tested  
well enough.

It would be very nice to StyleElement extended with a setStyle() method  
that does all this internally instead of my haxored static classes, but...  
What're you gonna do?



For more information:
http://code.google.com/p/google-web-toolkit/wiki/CssResource

-- 
http://groups.google.com/group/Google-Web-Toolkit-Contributors

Reply via email to