tapestry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Howard M. Lewis Ship (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (TAP5-1470) Group CSS together to avoid IE's restriction of 31 external css files
Date Thu, 25 Jul 2013 21:15:48 GMT

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

Howard M. Lewis Ship commented on TAP5-1470:
--------------------------------------------

I'm thinking about some CSS aggregation for JavaScriptStacks (wow, a better name for them
might be ClientResourceStack, but that ship has sailed).
                
> Group CSS together to avoid IE's restriction of 31 external css files
> ---------------------------------------------------------------------
>
>                 Key: TAP5-1470
>                 URL: https://issues.apache.org/jira/browse/TAP5-1470
>             Project: Tapestry 5
>          Issue Type: Improvement
>          Components: tapestry-core
>    Affects Versions: 5.2, 5.1
>            Reporter: Michael Wyraz
>
> IE is restricted to load 31 external CSS per page. All other are ignored.
> Also the number of @import declarations are restricted to 30 per css declaration.
> The following change to DocumentLinkerImpl beraks the imported css into blocks. A new
block starts when more than 30 @import occured of when the "media" attribute changes.
>     protected void addStylesheetsToHead(Element root, List<IncludedStylesheet>
stylesheets)
>     {
>         int count = stylesheets.size();
>         if (count == 0) return;
>         // This only applies when the document is an HTML document. This may need to
change in the
>         // future, perhaps configurable, to allow for html and xhtml and perhaps others.
Does SVG
>         // use stylesheets?
>         String rootElementName = root.getName();
>         // Not an html document, don't add anything. 
>         if (!rootElementName.equals("html")) return;
>         Element head = findOrCreateElement(root, "head", true);
>         Element existing = findExistingElement(head, "link");
>         // Create a temporary container element.
>         Element tempContainer = head.element("temp-container");
>         for (int i = 0; i < count; i++)
>             stylesheets.get(i).add(tempContainer);
>         tempContainer.remove();
>         
>         Element container = head.element("css-container");
>         // Fix für IE: Immer wenn der "media" Typ wechselt oder 30 CSS erreicht sind,
wird ein neues CSS-Tag aufgemacht
>         Element style=null;
>         int cssCount=Integer.MAX_VALUE;
>         String lastMedia="all";
>         
>         for (Node _css: tempContainer.getChildren())
>         {
>             if (!(_css instanceof Element)) continue;
>             Element css=(Element) _css;
>             String href=css.getAttribute("href");
>             String media=css.getAttribute("media");
>             if (media==null) media="all";
>             
>             if (cssCount>30 || !media.equalsIgnoreCase(lastMedia))
>             {
>             	style=container.element("style", "type","text/css", "media",media);
>             	lastMedia=media;
>             	cssCount=0;
>             }
>             style.text("@import url("+href+");");
>             cssCount++;
>         }
>         if (existing != null)
>             container.moveBefore(existing);
>         container.pop();
>     }

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