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));

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

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:

Reply via email to