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