Issue added as a New Feature. https://issues.apache.org/jira/browse/WICKET-3813
Thanks *Bruno Borges* www.brunoborges.com.br +55 21 76727099 On Thu, Jun 16, 2011 at 7:15 PM, Bruno Borges <[email protected]>wrote: > I didn't want to open the request before talk to you and discuss this. > > There are two options here: > > A) support a fallback style > Maybe a setFallbackStyle in the Session class, together with the style > property. Then ResourceStreamLocator would check for this in the iterator > loop to check for resources with the fallback style. > > B) add a new resource locator schema > Keep the style the way it is, adding a new option: > This way, nothing regardling the style feature would have to be changed. > > resource[_variation][_style][_locale][.device].extension > > The RSL I've sent you before does exactly this, because there's already an > extra loop for an array of extensions. So, in other words, what the code > does is to continue using the same schema that exists today, but adding > extra extensions. > > resource[_variation][_style][_locale].extension > > Where "extension" can be: ".android.html" or ".m.html" for generic mobile > version. > > What do you think? > > *Bruno Borges* > www.brunoborges.com.br > +55 21 76727099 > > > > On Thu, Jun 16, 2011 at 6:32 PM, Juergen Donnerstag < > [email protected]> wrote: > >> Hi Bruno, >> >> please open a jira feature/improvement request. I'll have a look. Thanks. >> >> -Juergen >> >> On Thu, Jun 16, 2011 at 10:20 PM, Bruno Borges <[email protected]> >> wrote: >> > I came once with this but I don't remember what happend. >> > >> > Anyway, I want to share the idea with you again: >> > >> > We are building mobile web apps and a common scenario that came to us is >> > that mobile web applications often must have specific styles per >> devices. >> > >> > We have a MobileFilter configured in the web.xml to intercept the >> request >> > and identify the device, adding the device's name/type/other info to the >> > user's session. >> > >> > When the Wicket Session is created, we get the device name and set it as >> a >> > style, like "android", "iphone" or "blackberry". >> > >> > But the application has tons of HTMLs which are already for desktop >> browser >> > access. >> > >> > So here is what I'm are thinking about: >> > >> > Say there's a HomePage: >> > - HomePage.html >> > - HomePage_android.html >> > - HomePage_iphone.html >> > - HomePage_blackberry.html >> > >> > If a desktop user comes in, HomePage.html is rendered. If an Android >> user >> > comes in, HomePage_android.html loads fine. >> > >> > The problem is that we often don't have to code specific versions per >> > device. Some pages can have a more generic "mobile" version, like >> rendering >> > a list with <li> instead of <table>. >> > >> > But there's no fallback style. >> > >> > So what we want is that this scenario could work: >> > >> > - ListItems.html (desktop version) >> > - ListItems_android.html (android's specific version) >> > - ListItems_mobile.html (any other mobile devie) >> > >> > If a user from blackberry/iphone/nokia or anything comes in, and based >> on >> > rules we identify him as a mobile device, we set the fallback style as >> to >> > "mobile" and the specific style as "his_device". >> > >> > I've come with a ResourceStreamLocator that does this, but not using >> styles. >> > The streamLocator does not accept a list of styles to test, but it >> accepts a >> > list of extensions. >> > >> > So what I did was to have HTML files like such: >> > Page[.device].html (with dot instead of underscore). >> > >> > The whole variation/style/locale would still work without any problem. >> > >> > ## Here is the code: >> > >> > package com.myproject; >> > >> > import java.util.Locale; >> > >> > import org.apache.wicket.Session; >> > import org.apache.wicket.util.resource.IResourceStream; >> > import org.apache.wicket.util.resource.locator.IResourceStreamLocator; >> > import org.apache.wicket.util.resource.locator.ResourceStreamLocator; >> > >> > import com.myproject.Device; >> > >> > /** >> > * @author Bruno Borges >> > */ >> > public class MobileStreamLocator extends ResourceStreamLocator >> implements >> > IResourceStreamLocator { >> > >> > @Override >> > public IResourceStream locate(final Class<?> clazz, String path, final >> > String style, final Locale locale, >> > final String extension) { >> > >> > StringBuilder newExtensions = new StringBuilder(); >> > newExtensions.append(extension); >> > >> > if ("html".equals(extension) && Session.get() instanceof >> > MobileWicketSession) { >> > MobileWicketSession ms = (MobileWicketSession) Session.get(); >> > Device device = ms.getDevice(); >> > if (device.isMobile()) { >> > newExtensions = new StringBuilder(); >> > >> > // add specific device name >> > >> newExtensions.append(device.getDeviceType()).append(".").append(extension).append(","); >> > >> > // add generic mobile extension >> > newExtensions.append("m.").append(extension).append(","); >> > newExtensions.append(extension); >> > } >> > } >> > >> > return super.locate(clazz, path, style, locale, >> newExtensions.toString()); >> > } >> > } >> > >> > *Bruno Borges* >> > www.brunoborges.com.br >> > +55 21 76727099 >> > >> > >
