You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by al...@apache.org on 2007/02/01 10:12:54 UTC

svn commit: r502165 - /incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/behavior/HeaderContributor.java

Author: almaw
Date: Thu Feb  1 01:12:53 2007
New Revision: 502165

URL: http://svn.apache.org/viewvc?view=rev&rev=502165
Log:
Relative URL fix for HeaderContributors that are relative to the context path.

Modified:
    incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/behavior/HeaderContributor.java

Modified: incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/behavior/HeaderContributor.java
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/behavior/HeaderContributor.java?view=diff&rev=502165&r1=502164&r2=502165
==============================================================================
--- incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/behavior/HeaderContributor.java (original)
+++ incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/behavior/HeaderContributor.java Thu Feb  1 01:12:53 2007
@@ -20,7 +20,6 @@
 import java.util.List;
 import java.util.regex.Pattern;
 
-import wicket.Application;
 import wicket.Component;
 import wicket.RequestCycle;
 import wicket.ResourceReference;
@@ -29,7 +28,6 @@
 import wicket.markup.html.IHeaderResponse;
 import wicket.markup.html.PackageResource;
 import wicket.model.AbstractReadOnlyModel;
-import wicket.protocol.http.WebRequestCycle;
 import wicket.util.string.AppendingStringBuffer;
 import wicket.util.string.JavascriptUtils;
 
@@ -198,27 +196,33 @@
 	
 	// Appends a path to the string buffer, adding the context path on the front if it's not
 	// a fully-qualified URL.
-	private static final void appendPathWithContext(AppendingStringBuffer b, String location)
+	private static final void appendPathWithPrependedContext(AppendingStringBuffer b, String location)
 	{
 		
 		// WICKET-59 allow external URLs.
 		if (!location.startsWith("http://") && !location.startsWith("https://"))
 		{
-			String contextPath = Application.get().getApplicationSettings()
-					.getContextPath();
-			if (contextPath == null)
+			String relativeUrl = RequestCycle.get().getRequest().getPath();
+			
+			// We need to effectively strip off any leading "/" here.
+			// However, we're just counting the slashes in relativeUrl, so rather
+			// than have substring overhead, we just change the position we start
+			// searching for / at to skip the leading one.
+			int start = 0;
+			if (relativeUrl.length() > 0 && relativeUrl.charAt(0) == '/')
 			{
-				contextPath = ((WebRequestCycle)RequestCycle.get()).getWebRequest()
-						.getContextPath();
-				if (contextPath == null)
-				{
-					contextPath = "";
-				}
+				start = 1;
 			}
-			b.append(contextPath);
-			if (!contextPath.endsWith("/") && !location.startsWith("/"))
+			for (int i = start; i < relativeUrl.length(); i++)
 			{
-				b.append("/");
+				if (relativeUrl.charAt(i) == '?')
+				{
+					break;
+				}
+				if (relativeUrl.charAt(i) == '/')
+				{
+					b.append("../");
+				}
 			}
 		}
 		b.append(location);
@@ -268,7 +272,7 @@
 						}
 						AppendingStringBuffer b = new AppendingStringBuffer();
 						b.append("<link rel=\"stylesheet\" type=\"text/css\" href=\"");
-						appendPathWithContext(b, location);
+						appendPathWithPrependedContext(b, location);
 						if (media != null)
 						{
 							b.append("\" media=\"");
@@ -373,7 +377,7 @@
 						}
 						AppendingStringBuffer b = new AppendingStringBuffer();
 						b.append("<script type=\"text/javascript\" src=\"");
-						appendPathWithContext(b, location);
+						appendPathWithPrependedContext(b, location);
 						b.append("\"></script>");
 						path = b.toString();
 					}