adding TRINIDAD to the subject.
Jeanne Waldman wrote, On 3/27/2009 4:36 PM PT:
Hi
everyone,
I want to propose some new public apis for Trinidad.
*Overview*
We need a public API to get the CSS style properties (e.g., color: red)
on the server in our renderers. We work around the lack of apis by
using skinning custom style properties instead (e.g., -tr-color: red)
because skinning style properties are stored on the server as an
attribute of a Skin Object. This is definitely a kludgy workaround and
makes it harder for a user to skin.
We will also need the APIs for an emailable page mode we are
implementing soon so that we can limit the css that we write in the
page to only the css needed by the components on the page. Email cannot
handle external css files.
In summary, the APIS we need will do this:
1) For a given selector, return its style definition
2) For a given simple (no compound selectors) selector like
"af|inputText", return all of the style definitions that it is used in
like "af|foo af|inputText", "af|inputText::content", etc.
*API Proposal*
We will assume the style map we get from the RenderingContext will
contain only the styles for the StyleContext, that is, the styles have
already been 'resolved'. Therefore there will be no need to pass in the
StyleContext parameter when we get styles from the style map.
*Public APIs*
*Style*
This class exists, but will need to be made public and only the public
parts of it moved to the public api, and the rest stay with the private
implementation.
public Map<String, String> getProperties();
public String toInlineString();
*Styles*
A new class that wraps 2 methods. This class is similar to
the
current StyleMap private class which isn't a Map at all. I plan to
delete StyleMap and use Styles instead.
Map<String, Style> getSelectorStyleMap()
List<String> getSelectorsForSimpleSelector(String selector) uses
resolved styles from StyleProvider.
*RenderingContext*
already exists
add
public Styles getStyles();
*Private APIs*
*CoreRenderingContext*
already exists
Implements the new method on RenderingContext
*StyleContext*
This class already exists and is private.
public Styles getStyles();
*StyleContextImpl*
already exists
add
getStyles() calls getStyleProvider().getStyles(this);
*StyleProvider*
already exists
add
public Styles getStyles(StyleContext context); // resolves the styles
first
*FileSystemStyleCache* extends StyleProvider
already exists
add
public Styles getStyles(StyleContext)
static inner class StylesImpl which takes a resolved styles in its
constructor.
this is where the work is done to create the selectorStyleMap.
*StyleMap*
remove. It's not a map for one thing and it is such old code and it
isn't being used at all so it is cluttering the api.
*API Usage:*
Styles styles = renderingContext.getStyles(); // renderingContext
contains a styleContext
Map<String, Style> selectorStyleMap =
styles.getSelectorStyleMap();
Style style = selectorStyleMap.get("af|graph");
String color = style.getProperties("color");
I coded this up in my branch
https://svn.apache.org/repos/asf/myfaces/trinidad/branches/jwaldman_StyleMap
(not cleaned up yet)
I still need to create a JIRA issue.
Let me know if you have any comments.
Thanks!
Jeanne
|