You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by jd...@apache.org on 2011/06/03 23:01:40 UTC

svn commit: r1131240 - /wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderContainer.java

Author: jdonnerstag
Date: Fri Jun  3 21:01:39 2011
New Revision: 1131240

URL: http://svn.apache.org/viewvc?rev=1131240&view=rev
Log:
applied patch provided: Allow filtering and grouping of resources in the <head>
Issue: WICKET-3728

Modified:
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderContainer.java

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderContainer.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderContainer.java?rev=1131240&r1=1131239&r2=1131240&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderContainer.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderContainer.java Fri Jun  3 21:01:39 2011
@@ -120,6 +120,7 @@ public class HtmlHeaderContainer extends
 
 		try
 		{
+			// Create a (string) response for all headers contributed by any component on the Page.
 			final StringResponse response = new StringResponse();
 			getRequestCycle().setResponse(response);
 
@@ -129,51 +130,33 @@ public class HtmlHeaderContainer extends
 				getRequestCycle().setResponse(headerResponse.getResponse());
 			}
 
-			// In any case, first render the header section directly associated
-			// with the markup
+			// Render the header sections of all components on the page
+			AbstractHeaderRenderStrategy.get().renderHeader(this, getPage());
+
+			// Close the header response before rendering the header container itself
+			// See https://issues.apache.org/jira/browse/WICKET-3728
+			headerResponse.close();
+
+			// Create a separate (string) response for the header container itself
+			final StringResponse bodyResponse = new StringResponse();
+			getRequestCycle().setResponse(bodyResponse);
+
+			// render the header section directly associated with the markup
 			super.onComponentTagBody(markupStream, openTag);
 
-			// Render all header sections of all components on the page
-			AbstractHeaderRenderStrategy.get().renderHeader(this, getPage());
-			getHeaderResponse().close();
+			// Cleanup extraneous CR and LF from the response
+			CharSequence output = getCleanResponse(response);
+			CharSequence bodyOutput = getCleanResponse(bodyResponse);
 
 			// Automatically add <head> if necessary
-			CharSequence output = response.getBuffer();
-			if (output.length() > 0)
-			{
-				if (output.charAt(0) == '\r')
-				{
-					for (int i = 2; i < output.length(); i += 2)
-					{
-						char ch = output.charAt(i);
-						if (ch != '\r')
-						{
-							output = output.subSequence(i - 2, output.length());
-							break;
-						}
-					}
-				}
-				else if (output.charAt(0) == '\n')
-				{
-					for (int i = 1; i < output.length(); i++)
-					{
-						char ch = output.charAt(i);
-						if (ch != '\n')
-						{
-							output = output.subSequence(i - 1, output.length());
-							break;
-						}
-					}
-				}
-			}
-
-			if (output.length() > 0)
+			if ((output.length() > 0) || (bodyOutput.length() > 0))
 			{
 				if (renderOpenAndCloseTags())
 				{
 					webResponse.write("<head>");
 				}
 
+				webResponse.write(bodyOutput);
 				webResponse.write(output);
 
 				if (renderOpenAndCloseTags())
@@ -191,6 +174,44 @@ public class HtmlHeaderContainer extends
 
 	/**
 	 * 
+	 * @param response
+	 * @return Cleaned up response
+	 */
+	private CharSequence getCleanResponse(final StringResponse response)
+	{
+		CharSequence output = response.getBuffer();
+		if (output.length() > 0)
+		{
+			if (output.charAt(0) == '\r')
+			{
+				for (int i = 2; i < output.length(); i += 2)
+				{
+					char ch = output.charAt(i);
+					if (ch != '\r')
+					{
+						output = output.subSequence(i - 2, output.length());
+						break;
+					}
+				}
+			}
+			else if (output.charAt(0) == '\n')
+			{
+				for (int i = 1; i < output.length(); i++)
+				{
+					char ch = output.charAt(i);
+					if (ch != '\n')
+					{
+						output = output.subSequence(i - 1, output.length());
+						break;
+					}
+				}
+			}
+		}
+		return output;
+	}
+
+	/**
+	 * 
 	 * @return True if open and close tag are to be rendered.
 	 */
 	protected boolean renderOpenAndCloseTags()