First of all, thanks again Lance!
On Wed, Mar 28, 2012 at 11:25 AM, Lance Java <lance.j...@googlemail.com>wrote: > Perhaps this would work > > Create an environmental object called Mode > > public interface Mode { > public String getMode(); // facebook or normal > } > > Use tapestry's URL rewriting to rewrite http://myapp/facebook/page to > http://myapp/page (see > http://blog.tapestry5.de/index.php/2010/09/06/new-url-rewriting-api/) > > As the URL is rewritten, it pushes a mode onto the environment (either > "facebook" or "normal") > > @Inject > Environment environment > > String mode = getModeFromURL(); > environment.push(Mode.class, new ModeImpl(mode)); > This is great and I think that I'd got it. The problem is with this second part: > When rendering links, use Environment.peek() to get the Mode from the > environment and add the mode to each link URL if necessary. > > Components and Pages can then use the @Environmental annotation to inject > the mode to determine which styles to include > > Then you get normal browsers to access http://myapp/page and facebook to > access http://myapp/facebook/page > > My web app is using a lot of webLibs (almost one per section). If I do this, I will have to change all the web app, and all the web libs to build the links correctly? It seems to be a huge re-factoring. I am getting the idea right? Thanks. > On Wednesday, 28 March 2012, Juan Alba <juan.a...@condortech.com.ar> > wrote: > > Thanks Bob and Lance for the ideas and recomendations. > > I think that Lance understood better my problem. The mode to change the > css > > I have it already solved with Thiago's suggestion. > > Now my problem is that I can't define which stylesheet to use from > server's > > side because the only way to define it is knowing if the app is running > on > > an iframe or not. > > > > Before sending the mail with my problems I tried to use either > suggestions > > "Parameter" and "Cookies or Session". > > > > *Parameter:* > > If I have the parameter I have to change every class in the webapp to add > > the parameter if is set and don't loose it after the first link hit. > > > > *Cookies or Session:* > > If they are set, It seems to work fine until I close the application > > running in the iframe and open it in a new browser. It keeps all the > > session or cookies and will use the wrong stylesheet. > > > > Any other idea? > > > > Thanks guys. > > > > On Wed, Mar 28, 2012 at 4:31 AM, Lance Java <lance.j...@googlemail.com > >wrote: > > > >> All of the solutions mentioned on this thread assume that there is a way > >> ofdetermining which "mode" your pages/components need to include styles > >> for. > >> > >> From what you have said, it seems that you currently only know the > "mode" > >> clientside in javascript. > >> > >> I get the feeling that you may need to re-think your design slightly so > >> that the "mode" is known on the serverside. This can be done by > activation > >> context, request parameter, URL, cookie, session attribute etc. > >> > >> On Tuesday, 27 March 2012, Juan Alba <juan.a...@condortech.com.ar> > wrote: > >> > Thanks for your help guys, now I am realizing that my real problem is > >> > another one. It concerns more with the logic to know what style to > load. > >> > > >> > My app can be used in the browser (regular way) or also as a Facebook > >> App. > >> > This means an iframe where everything is smaller, and the backgrounds > >> need > >> > to be similar to the one in Facebook (so it looks nicer). > >> > I have done something in javascript to realize if the app is being > used > >> > embebed or used "regular way". But this is reloading all the styles so > I > >> > have a first sight of the default tapestry styles and then the new > ones > >> > (not nice at all), and there are some problems with the components > >> styles, > >> > so the solution is not really a good one. > >> > > >> > I am wondering if there is a css strategy or some way to load the > style > >> > according to where from I am visiting the app, regular way or > facebook. > >> > > >> > > >> > Thanks in advance for all your help. > >> > > >> > > >> > > >> > > >> > On Tue, Mar 27, 2012 at 4:52 AM, Lance Java < > lance.j...@googlemail.com > >> >wrote: > >> > > >> >> Tapestry uses the ImportWorker to process @Import annotations > >> >> > >> >> > >> > >> > > http://tapestry.apache.org/5.3/apidocs/src-html/org/apache/tapestry5/internal/transform/ImportWorker.html > >> >> > >> >> You could quite easily write your own annotation (and worker) to do a > >> >> similar job with your custom logic > >> >> > >> >> On Monday, 26 March 2012, Thiago H. de Paula Figueiredo < > >> >> thiag...@gmail.com> > >> >> wrote: > >> >> > On Mon, 26 Mar 2012 12:00:03 -0300, kado < > juan.a...@condortech.com.ar > >> > > >> >> wrote: > >> >> > > >> >> >> Hi, > >> >> > > >> >> > Hi! > >> >> > > >> >> >> My webapp now is loading the stylesheets in the Layout component > in > >> this > >> >> >> way: > >> >> > >> >> > >> > >> > > @IncludeStylesheet({"context:css/mainLayout.css","context:css/components.css"}) > >> >> >> I have been looking for a solution in the mailing list and didn't > >> find > >> >> >> anything. I read something about contributing in the AppModule, > but I > >> >> don't know how to use it with my working scheme. > >> >> > > >> >> > Just @Inject JavaScriptSupport and use its importStylesheet(Asset > >> >> stylesheet) method inside afterRender(). AssetSource provides Asset > >> >> instances to you. > >> >> > > >> >> > -- > >> >> > Thiago H. de Paula Figueiredo > >> >> > Independent Java, Apache Tapestry 5 and Hibernate consultant, > >> developer, > >> >> and instructor > >> >> > Owner, Ars Machina Tecnologia da Informação Ltda. > >> >> > http://www.arsmachina.com.br > >> >> > > >> >> > > --------------------------------------------------------------------- > >> >> > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > >> >> > For additional commands, e-mail: >