myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Anand V Nath (JIRA)" <...@myfaces.apache.org>
Subject [jira] [Commented] (TRINIDAD-2399) support css client side rules in skinning framework
Date Fri, 05 Jul 2013 07:01:52 GMT

    [ https://issues.apache.org/jira/browse/TRINIDAD-2399?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13700488#comment-13700488
] 

Anand V Nath commented on TRINIDAD-2399:
----------------------------------------

The proposal is to add bottom up support for client side css rules. All rules which are not
processed currently will be rendered out as 

@rule {
  selector {
     property: value;
     ...
  } 
}

Only exception is @page and @font-face which will be rendered as selector rules:

@rule { property: value; ... }

1. org.apache.myfaces.trinidadinternal.skin.SkinCSSDocumentHandler - To add logic to parse
css rule store it locally and make it available for org.apache.myfaces.trinidadinternal.skin.SkinStyleSheetNode.

// holds the parsed value of client side css rules
// Eg: "@media foo1 {"
private String _clientRule;

// existing inner class
private static class CompleteSelectorNode {
  // modify this to contain _clientRule
}
  
// existing method
private List <SkinStyleSheetNode> _createSkinStyleSheetNodes(...)
{
  ...
  // pass the _clientRule for SkinStyleSheetNode creation
}

/**
 * parses the special client side rules which are to be rendered as selectors
 * and not rules
 * @param atRule - client side rule content
 * e.g. - @page:first { margin: 1in; }
 * e.g. - @font-face { font-family: MyHelvetica; font-weight: bold; }
 */
private void _parseClientSideSelector(String atRule) 
{
  // process the @page and @font-face client rules separately so that they are rendered as
selectors
}

2. org.apache.myfaces.trinidadinternal.skin.SkinStyleSheetNode - To capture the client side
css rules, like we do for @agent etc

// member variable to store client side css rules
private final String _clientRule;

// existing method
public boolean matches(...) {
  // Compare the client side css rules also for deciding matching SkinStyleSheetNodes
  // This ensures that same client side css rules are getting merged in skin hierarchy 
  // Also, makes the nested rules work.
}
  
// provide getter for client side css rules so that it can be accessed later.
public String getClientRule()
{
  return _clientRule;
}

3. org.apache.myfaces.trinidadinternal.style.xml.parse.StyleNode - add client side css rules
support into this

private final String _clientRule;

public String getClientRule() {
  return _clientRule;
}

/**
 * util method to determine is a StyleNode has clientRule or not
 * @return true if clientRule exists
 */
public boolean hasClientRule()
{
  return _clientRule != null && !_clientRule.isEmpty();
}

/**
 * utility method to generate the cache id for a StyleNode.
 * cache id is used in StyleSheetDocument object while resolving StyleNodes.
 * cache id helps in distinguishing same selectors wrapped in different clientRules.
 *
 * @return cacheId - clientRule if exists + selector or name whichever exist.
 */
String getCacheId()
{
  // return the cache id as clientRule if exists + selector or name whichever exist.
}

4. org.apache.myfaces.trinidadinternal.style.xml.parse.StyleSheetDocument - change the resolution
logic because there is a cache based on selector name, now the cache should also honor client
side css rules as well.

// existing method
public Iterator<StyleNode> getStyles(StyleContext context) {
  // make sure the the iterator returned here has the resolved StyleNodes  containing same
_clientRule .
}

// existing method
public Iterator<IconNode> getIcons(StyleContext context) {
  // make sure the the iterator returned here has the resolved StyleNodes within the IconNodes
containing same _clientRule.
}


// existing inner class
private static class StyleEntry {
  // This class needs to be made clientRule aware so that it generates the StyleNode objects
with the clientRule
}

5. org.apache.myfaces.trinidadinternal.style.util.CSSGenerationUtils - rendering of skin should
take care of grouping org.apache.myfaces.trinidadinternal.style.xml.parse.StyleNode having
same css rule and render it under one rule.

// existing method
public static void writeCSS(...) {
  // Any StyleNode having same property string is grouped together.
  // eg; a {color:red }, b {color:red}
  // will be grouped as [color:red, {a , b}]
  // this grouping now needs to be done after an extra check for client side css rules
  // eg; a {color:red }, b {color:red}, @media { c {color:red} }
  // should be grouped as [color:red, {a , b}], {"@media", [color:red, {c}]}
  // so that they are rendered separately
  // selectors containing same properties within the same clientRule needs to be rendered
together
  // eg; @media only screen { myStyleA { color:red; } }, @media only screen { myStyleB { color:red;
} }
  // should be rended as @media only screen { myStyleA, myStyleB { color: red; } }


  // when writing out StyleNodes check for client side css rules
  // render the client side css rules followed by the property string and 
  // close with an extra brace for the client side css rules 
}
                
> support css client side rules in skinning framework
> ---------------------------------------------------
>
>                 Key: TRINIDAD-2399
>                 URL: https://issues.apache.org/jira/browse/TRINIDAD-2399
>             Project: MyFaces Trinidad
>          Issue Type: New Feature
>          Components: Skinning
>    Affects Versions: 2.1.0-core
>            Reporter: Anand V Nath
>
> This ER is for introducing client side css rule support in skinning framework.
> Here's a list of known CSS at-rules:
>     @document - uses nested selectors that need to be resolved
>     @font-face - probably safe to blindly pass through
>     @keyframes - probably safe to blindly pass through
>     @media - uses nested selectors that need to be resolved
>     @page - probably safe to blindly pass through
>     @supports - uses nested selectors that need to be resolved
> These rules can be split into two based on its usage:
> @document, @keyframes, @media, @support uses following syntax:
> @rule {
>   selector 
>   { 
>     property : value; 
>     property : value; 
>     property : value; 
>   }
> }
> @font-face and @page uses following syntax:
> @rule {
>   property : value; 
>   property : value; 
>   property : value; 
> }

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message