You are viewing a plain text version of this content. The canonical link for it is here.
Posted to adffaces-commits@incubator.apache.org by jw...@apache.org on 2007/02/06 20:47:22 UTC

svn commit: r504286 - in /incubator/adffaces/branches/faces-1_2-070201/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal: renderkit/core/ style/ style/cache/ style/util/

Author: jwaldman
Date: Tue Feb  6 12:47:21 2007
New Revision: 504286

URL: http://svn.apache.org/viewvc?view=rev&rev=504286
Log:
Merge in checkin 503944
For issue http://issues.apache.org/jira/browse/ADFFACES-370
Need to avoid IE's number of CSS selectors limitation
In this checkin, I write out compressed or uncompressed, but not both unless it is a styleclass that doesn't have '|' in it.
I added getSkin to StyleContext.

Modified:
    incubator/adffaces/branches/faces-1_2-070201/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/StyleContextImpl.java
    incubator/adffaces/branches/faces-1_2-070201/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/style/StyleContext.java
    incubator/adffaces/branches/faces-1_2-070201/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/style/cache/FileSystemStyleCache.java
    incubator/adffaces/branches/faces-1_2-070201/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/style/util/CSSGenerationUtils.java

Modified: incubator/adffaces/branches/faces-1_2-070201/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/StyleContextImpl.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/faces-1_2-070201/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/StyleContextImpl.java?view=diff&rev=504286&r1=504285&r2=504286
==============================================================================
--- incubator/adffaces/branches/faces-1_2-070201/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/StyleContextImpl.java (original)
+++ incubator/adffaces/branches/faces-1_2-070201/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/StyleContextImpl.java Tue Feb  6 12:47:21 2007
@@ -80,6 +80,11 @@
     return ((CoreRenderingContext) _arc).getTrinidadAgent();
   }
 
+  public Skin getSkin()
+  {
+    return ((CoreRenderingContext) _arc).getSkin();
+  }
+
   public boolean checkStylesModified()
   {
     // =-=AEW Expose a configuration option if this

Modified: incubator/adffaces/branches/faces-1_2-070201/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/style/StyleContext.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/faces-1_2-070201/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/style/StyleContext.java?view=diff&rev=504286&r1=504285&r2=504286
==============================================================================
--- incubator/adffaces/branches/faces-1_2-070201/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/style/StyleContext.java (original)
+++ incubator/adffaces/branches/faces-1_2-070201/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/style/StyleContext.java Tue Feb  6 12:47:21 2007
@@ -20,6 +20,7 @@
 
 import org.apache.myfaces.trinidadinternal.agent.TrinidadAgent;
 import org.apache.myfaces.trinidad.context.LocaleContext;
+import org.apache.myfaces.trinidad.skin.Skin;
 
 /**
  * The StyleContext interface is used to provide information
@@ -40,6 +41,7 @@
    * Returns the end user's Agent.
    */
   public TrinidadAgent getAgent();
+  public Skin getSkin();
 
   public String getGeneratedFilesPath();
   public boolean checkStylesModified();

Modified: incubator/adffaces/branches/faces-1_2-070201/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/style/cache/FileSystemStyleCache.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/faces-1_2-070201/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/style/cache/FileSystemStyleCache.java?view=diff&rev=504286&r1=504285&r2=504286
==============================================================================
--- incubator/adffaces/branches/faces-1_2-070201/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/style/cache/FileSystemStyleCache.java (original)
+++ incubator/adffaces/branches/faces-1_2-070201/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/style/cache/FileSystemStyleCache.java Tue Feb  6 12:47:21 2007
@@ -38,6 +38,8 @@
 import java.util.Set;
 import java.util.Vector;
 
+import javax.faces.context.FacesContext;
+
 import org.apache.myfaces.trinidad.logging.TrinidadLogger;
 import org.apache.myfaces.trinidadinternal.agent.TrinidadAgent;
 import org.apache.myfaces.trinidadinternal.renderkit.core.CoreRenderingContext;
@@ -47,6 +49,8 @@
 import org.apache.myfaces.trinidadinternal.share.io.InputStreamProvider;
 import org.apache.myfaces.trinidadinternal.share.io.NameResolver;
 import org.apache.myfaces.trinidad.context.LocaleContext;
+import org.apache.myfaces.trinidad.context.RenderingContext;
+import org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.StyleSheetRenderer;
 import org.apache.myfaces.trinidadinternal.share.xml.JaxpXMLProvider;
 import org.apache.myfaces.trinidadinternal.share.xml.XMLProvider;
 import org.apache.myfaces.trinidadinternal.style.CSSStyle;
@@ -700,9 +704,22 @@
       return null;
 
     // Write out the style sheet
+    // First figure out whether or not we need to compress the style classes.
+    // We don't compress the style classes if the content compression flag is disabled or
+    // if the skin's styleClassMap does not match our shortStyleClassMap.
+    
+    Map skinsStyleClassMap = context.getSkin().getStyleClassMap(
+                                RenderingContext.getCurrentInstance());
+    String disableContentCompression = 
+      FacesContext.getCurrentInstance().getExternalContext().
+      getInitParameter(StyleSheetRenderer.DISABLE_CONTENT_COMPRESSION);
+    boolean compressStyles = (skinsStyleClassMap == shortStyleClassMap) && 
+                             !"true".equals(disableContentCompression);
+
     CSSGenerationUtils.writeCSS(context,
                                 styles,
                                 out,
+                                compressStyles,
                                 shortStyleClassMap,
                                 namespacePrefixes,
                                 _STYLE_KEY_MAP

Modified: incubator/adffaces/branches/faces-1_2-070201/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/style/util/CSSGenerationUtils.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/faces-1_2-070201/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/style/util/CSSGenerationUtils.java?view=diff&rev=504286&r1=504285&r2=504286
==============================================================================
--- incubator/adffaces/branches/faces-1_2-070201/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/style/util/CSSGenerationUtils.java (original)
+++ incubator/adffaces/branches/faces-1_2-070201/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/style/util/CSSGenerationUtils.java Tue Feb  6 12:47:21 2007
@@ -32,6 +32,7 @@
 import java.util.Vector;
 
 import org.apache.myfaces.trinidad.logging.TrinidadLogger;
+import org.apache.myfaces.trinidadinternal.agent.TrinidadAgent;
 import org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.SkinSelectors;
 import org.apache.myfaces.trinidadinternal.style.StyleContext;
 import org.apache.myfaces.trinidadinternal.style.xml.parse.PropertyNode;
@@ -50,11 +51,13 @@
 
 
   /**
-   * Converts the specified set of StyleNodes to CSS.
+    * Converts the specified set of StyleNodes to CSS. We output either full styleclass names or 
+    * compressed styleclass names.
    *
    * @param context The current StyleContext
    * @param styles The style nodes to convert
    * @param out The PrintWriter to write to
+   * @param compressStyles This tells us whether or not we want to output the short names.
    * @param shortStyleClassMap A Map which maps style
    *   class names to short names.
    * @param namespacePrefixArray an array with the namespace prefixes of our
@@ -66,6 +69,7 @@
     StyleContext        context,
     StyleNode[]         styles,
     PrintWriter         out,
+    boolean             compressStyles,
     Map<String, String> shortStyleClassMap,
     String[]            namespacePrefixArray,
     Map<String, String> afSelectorMap
@@ -103,6 +107,9 @@
     // during this pass, since we need these strings during the second
     // pass to find matching StyleNodes.
     String[] propertyStrings = new String[styles.length];
+     // Keep track of the number of selectors written out. The reason? IE has a 4095 limit, 
+     // and we want to warn when we get to that limit.
+     int numberSelectorsWritten = 0;
 
     for (int i = 0; i < styles.length; i++)
     {
@@ -188,11 +195,22 @@
                                                        selector,
                                                        false);
 
-          // write out the full selector
-          String validFullNameSelector =
-            _getValidFullNameSelector(mappedSelector, namespacePrefixArray);
-          if (validFullNameSelector != null)
-            out.print(validFullNameSelector);
+          String validFullNameSelector = null;
+
+          if (!compressStyles || (mappedSelector.indexOf('|') == -1))
+          {
+            // write out the full selector if we aren't compressing styles or
+            // it doesn't have a '|' in the name which means it may be a user's public styleclass
+            // and we don't want to compress those.
+            validFullNameSelector =
+              _getValidFullNameSelector(mappedSelector, namespacePrefixArray);
+             
+            if (validFullNameSelector != null)
+            {
+              out.print(validFullNameSelector);
+              numberSelectorsWritten++;
+            }
+          }
 
 
           // shorten all the css-2 style class selectors (those that start with 
@@ -204,29 +222,47 @@
           // e.g., selector of af|foo.Bar will shorten the '.Bar' piece 
           // af|foo.xz
           // e.g., .Foo:hover -> .x0:hover
-          String shortenedSelector = _getShortSelector(mappedSelector,
-                                                       shortStyleClassMap);
+          if (compressStyles)
+          {
+            String shortenedSelector = _getShortSelector(mappedSelector,
+                                                        shortStyleClassMap);
 
-          // run it through a shortener one more time to shorten any
-          // of the af component selectors.
-          // e.g., 'af|menuPath' is shortened to '.x11'
-          String shortSelector =
-            _getMappedNSSelector(shortStyleClassMap,
-                                 namespacePrefixArray,
-                                 shortenedSelector,
-                                 true);
-
-          // if the transformed full name is different than the shortSelector
-          // then write out the shortSelector, too.
-          if (shortSelector != null)
-          {          
-            String validShortSelector =
-              _getValidFullNameSelector(shortSelector, namespacePrefixArray);
-            if (!validFullNameSelector.equals(validShortSelector))
-            {
-              out.print(",");
-              out.print(validShortSelector);
-  
+            // run it through a shortener one more time to shorten any
+            // of the af component selectors.
+            // e.g., 'af|menuPath' is shortened to '.x11'
+            String shortSelector =
+              _getMappedNSSelector(shortStyleClassMap,
+                                   namespacePrefixArray,
+                                   shortenedSelector,
+                                   true);
+
+            // if the transformed full name is different than the shortSelector
+            // then write out the shortSelector, too.
+            if (shortSelector != null)
+            {          
+              String validShortSelector =
+                _getValidFullNameSelector(shortSelector, namespacePrefixArray);
+                    
+              // if we wrote out a full style, check to see if we need to write out the short, too.
+              // if it is something different, write out the short, too.
+              if (validFullNameSelector != null)
+              {
+                //Since validFullNameSelector is not null, we know we wrote out a full style
+                // we write out a short style too in this case if it is different
+                // example: .PublicStyleClass is written out fully even in compressed mode, but
+                // it is different in compressed mode, so we write that out, too.
+                if (!validFullNameSelector.equals(validShortSelector))
+                {
+                  out.print(',');
+                  out.print(validShortSelector);
+                  numberSelectorsWritten++;
+                }
+              }
+              else
+              {
+                out.print(validShortSelector);
+                numberSelectorsWritten++;
+              }
             }
           }
 
@@ -272,6 +308,21 @@
         out.println("}");
       }
     }
+    out.println("/* The number of CSS selectors in this file is " + numberSelectorsWritten + " */");
+    if (numberSelectorsWritten > 4095 && 
+      (TrinidadAgent.APPLICATION_IEXPLORER == context.getAgent().getAgentApplication()))
+    {
+      
+      out.println("/* ERROR: The number of CSS selectors is more than IE's limit of 4095. " +
+      "The selectors after that will be ignored. */");
+      if (_LOG.isWarning())
+      {
+        _LOG.warning("The css file has hit IE's limit of 4095 CSS selectors. It has " +
+        numberSelectorsWritten + " selectors. " +
+        "The selectors after that will be ignored. ");
+      }
+    }
+
   }
 
   /**