You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Jeanne Waldman (JIRA)" <de...@myfaces.apache.org> on 2009/09/01 23:39:32 UTC

[jira] Resolved: (TRINIDAD-1561) compressed style class map can yield corrupted css file

     [ https://issues.apache.org/jira/browse/TRINIDAD-1561?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jeanne Waldman resolved TRINIDAD-1561.
--------------------------------------

       Resolution: Fixed
    Fix Version/s: 1.2.13-core 

Fixed in trunk. Will be fixed in 1.2.13 release (just missed getting into 1.2.12)

> compressed style class map can yield corrupted css file
> -------------------------------------------------------
>
>                 Key: TRINIDAD-1561
>                 URL: https://issues.apache.org/jira/browse/TRINIDAD-1561
>             Project: MyFaces Trinidad
>          Issue Type: Bug
>          Components: Skinning
>            Reporter: Jeanne Waldman
>            Assignee: Jeanne Waldman
>             Fix For: 1.2.13-core 
>
>
> Overview:
> The compressed styleclass map stored in FileSystemStyleCache gets created once based on the current StyleContext.
> If the StyleContext changes, it's possible that the css will get corrupted.
> You'll see something like
> . .AFFoo {color: black}
> instead of
> .x10 .AFFoo {color: black}
> This can lead to really strange skinning errors, and it has been hard to track down in the past, but now I know what is going on.
> Steps to Reproduce:
> 1. Set skin-family in trinidad-config.xml to purple
> 2. In demo's purpleSkin.css add
> @agent ie
> {
>   af|panelLabelAndMessage .Foo {
>     -tr-rule-ref: selector(".AFPanelFormLayoutHorizontalPadding:alias");
>     -tr-rule-ref: selector(".AFStartTextAlign:alias");
>     vertical-align: top;
>     padding-top: 3px;
>     padding-bottom: 0px;
>     -tr-rule-ref: selector(".AFDefaultFontFamily:alias");
>     color: purple;
>     background-color: red;
>   }
>   
>   af|panelLabelAndMessage af|inputText::content {
>     background-color: yellow;
>   }
> }
> af|panelLabelAndMessage {}
> 3. Run in gecko
> 4. Then run in IE
> 5. In IE, view the generated css file
> 6. At the end you will see something like: 
> . .AFFoo{color: purple; background-color: red; etc.}
> 7. You should see a compressed style instead of a blank '.'
> .xd0 .AFFoo {color: purple; background-color: red; etc}
> Details:
> All this happens in FileSystemStyleCache:
> 1. We get the styleSheetDocument - ALL selectors in the skinning file
> 2. We get the shortenedStyleMap using the styleSheetDocument pared down for
> the specific StyleContext (gecko, for example)
> 3. There is an optimization to use "" as the shortened key if the style
> selector has no properties
> e.g., af|bar{} as opposed to af|bar{color:black}
> 4. Now when we switch to another context (internet explorer from gecko, or a different locale), we are using the original shortenedStyleMap
> which had "" for af|barsince for gecko there was no styling
> 5. BUT for the new context, af|bar has styling.
> 6. We do not render af|bar on the dom element (bug)
> 7. We render '.' in the css, so you see something like . .AFFoo
> {blah blah blah} (bug)
> Fix:
> The fix is to simply create the compressed styleclass map using all styles, not just the styles that match the StyleContext. Then even if we switch the context, the styleclass will be in the map.
> This is a one line fix.
> In _getShortStyleClassMap change
> document.getStyleSheets(context); to
> document.getStyleSheets()

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.