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


Reply via email to