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/04/02 19:52:45 UTC

svn commit: r524856 - /incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/markup/html/link/ExternalLink.java

Author: almaw
Date: Mon Apr  2 10:52:44 2007
New Revision: 524856

URL: http://svn.apache.org/viewvc?view=rev&rev=524856
Log:
Add contextRelative option to external links.

Modified:
    incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/markup/html/link/ExternalLink.java

Modified: incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/markup/html/link/ExternalLink.java
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/markup/html/link/ExternalLink.java?view=diff&rev=524856&r1=524855&r2=524856
==============================================================================
--- incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/markup/html/link/ExternalLink.java (original)
+++ incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/markup/html/link/ExternalLink.java Mon Apr  2 10:52:44 2007
@@ -22,6 +22,7 @@
 import wicket.markup.html.WebMarkupContainer;
 import wicket.model.IModel;
 import wicket.model.Model;
+import wicket.util.string.PrependingStringBuffer;
 import wicket.util.string.Strings;
 
 /**
@@ -39,6 +40,8 @@
 
 	/** this links' label. */
 	private final IModel label;
+	
+	private boolean contextRelative = false;
 
 	/**
 	 * The popup specification. If not-null, a javascript on-click event handler
@@ -150,6 +153,30 @@
 			if (hrefValue != null)
 			{
 				String url = hrefValue.toString();
+				
+				if (contextRelative)
+				{
+					if (url.length() > 0 && url.charAt(0) == '/')
+					{
+						url = url.substring(1);
+					}
+					PrependingStringBuffer prepender = new PrependingStringBuffer(url.toString());
+					String relativeUrl = getRequest().getRelativeURL();
+					
+					for (int i = 0; i < relativeUrl.length(); i++)
+					{
+						if (relativeUrl.charAt(i) == '?')
+						{
+							break;
+						}
+						if (relativeUrl.charAt(i) == '/')
+						{
+							prepender.prepend("../");
+						}
+					}
+					url = prepender.toString();
+				}
+				
 				// if the tag is an anchor proper
 				if (tag.getName().equalsIgnoreCase("a") || tag.getName().equalsIgnoreCase("link")
 						|| tag.getName().equalsIgnoreCase("area"))
@@ -214,5 +241,22 @@
 		{
 			super.onComponentTagBody(markupStream, openTag);
 		}
+	}
+
+	/**
+	 * @return True if this link is automatically prepended with ../ to make it relative to the context root.
+	 */
+	public boolean isContextRelative()
+	{
+		return contextRelative;
+	}
+
+	/**
+	 * Set to true if this link should be automatically prepended with ../ to make it relative to the context root.
+	 * @param contextRelative
+	 */
+	public void setContextRelative(boolean contextRelative)
+	{
+		this.contextRelative = contextRelative;
 	}
 }



Re: svn commit: r524856 - /incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/markup/html/link/ExternalLink.java

Posted by Jean-Baptiste Quenot <jb...@apache.org>.
* almaw@apache.org:
> Author: almaw
> Date: Mon Apr  2 10:52:44 2007
> New Revision: 524856
> 
> URL: http://svn.apache.org/viewvc?view=rev&rev=524856
> Log:
> Add contextRelative option to external links.
> 
> Modified:
>     incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/markup/html/link/ExternalLink.java
> 
> Modified: incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/markup/html/link/ExternalLink.java
> URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/markup/html/link/ExternalLink.java?view=diff&rev=524856&r1=524855&r2=524856
> ==============================================================================
> --- incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/markup/html/link/ExternalLink.java (original)
> +++ incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/markup/html/link/ExternalLink.java Mon Apr  2 10:52:44 2007
> @@ -150,6 +153,30 @@
>  			if (hrefValue != null)
>  			{
>  				String url = hrefValue.toString();
> +				
> +				if (contextRelative)
> +				{
> +					if (url.length() > 0 && url.charAt(0) == '/')
> +					{
> +						url = url.substring(1);
> +					}
> +					PrependingStringBuffer prepender = new PrependingStringBuffer(url.toString());
> +					String relativeUrl = getRequest().getRelativeURL();
> +					
> +					for (int i = 0; i < relativeUrl.length(); i++)
> +					{
> +						if (relativeUrl.charAt(i) == '?')
> +						{
> +							break;
> +						}
> +						if (relativeUrl.charAt(i) == '/')
> +						{
> +							prepender.prepend("../");
> +						}
> +					}
> +					url = prepender.toString();
> +				}
> +				
>  				// if the tag is an anchor proper
>  				if (tag.getName().equalsIgnoreCase("a") || tag.getName().equalsIgnoreCase("link")
>  						|| tag.getName().equalsIgnoreCase("area"))

Hello AlMaw,

I wonder  if we can try  centralizing the relative URL  stuff in a
common helper method  rather than spreading the  rewriting code in
many  places?  Or  is  it completely  unrelated?   What about  the
reusable rewriteRelativeURL()  method that  we discussed  would be
great to use from anywhere in the code?

Cheers,
-- 
     Jean-Baptiste Quenot
aka  John Banana   Qwerty
http://caraldi.com/jbq/