From a502d96a860456ec5e8c96761db70f7cabb74751 Mon Sep 17 00:00:00 2001
From: Paul Martin <paul@paulsputer.com>
Date: Sat, 30 Apr 2016 04:19:14 -0400
Subject: [PATCH] Merge pull request #1073 from gitblit/1062-DocEditorUpdates

---
 src/main/java/com/gitblit/wicket/SessionlessForm.java |   43 +++++++++++++++++++++++++++----------------
 1 files changed, 27 insertions(+), 16 deletions(-)

diff --git a/src/main/java/com/gitblit/wicket/SessionlessForm.java b/src/main/java/com/gitblit/wicket/SessionlessForm.java
index 484e85e..6f79071 100644
--- a/src/main/java/com/gitblit/wicket/SessionlessForm.java
+++ b/src/main/java/com/gitblit/wicket/SessionlessForm.java
@@ -22,6 +22,7 @@
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.MarkupStream;
 import org.apache.wicket.markup.html.form.StatelessForm;
+import org.apache.wicket.protocol.http.RequestUtils;
 import org.apache.wicket.protocol.http.WicketURLDecoder;
 import org.apache.wicket.protocol.http.request.WebRequestCodingStrategy;
 import org.apache.wicket.util.string.AppendingStringBuffer;
@@ -35,35 +36,35 @@
  * This class is used to create a stateless form that can POST or GET to a
  * bookmarkable page regardless of the pagemap and even after session expiration
  * or a server restart.
- * 
+ *
  * The trick is to embed "wicket:bookmarkablePage" as a hidden field of the form.
  * Wicket already has logic to extract this parameter when it is trying
  * to determine which page should receive the request.
- * 
+ *
  * The parameters of the containing page can optionally be included as hidden
- * fields in this form.  Note that if a page parameter's name collides with any 
+ * fields in this form.  Note that if a page parameter's name collides with any
  * child's wicket:id in this form then the page parameter is excluded.
- * 
+ *
  * @author James Moger
  *
  */
 public class SessionlessForm<T> extends StatelessForm<T> {
-	
+
 	private static final long serialVersionUID = 1L;
 
 	private static final String HIDDEN_DIV_START = "<div style=\"width:0px;height:0px;position:absolute;left:-100px;top:-100px;overflow:hidden\">";
-	
-	private final Class<? extends BasePage> pageClass;
-	
-	private final PageParameters pageParameters;
-	
+
+	protected final Class<? extends BasePage> pageClass;
+
+	protected final PageParameters pageParameters;
+
 	private final Logger log = LoggerFactory.getLogger(SessionlessForm.class);
 
 	/**
 	 * Sessionless forms must have a bookmarkable page class.  A bookmarkable
 	 * page is defined as a page that has only a default and/or a PageParameter
 	 * constructor.
-	 * 
+	 *
 	 * @param id
 	 * @param bookmarkablePageClass
 	 */
@@ -75,7 +76,7 @@
 	 * Sessionless forms must have a bookmarkable page class.  A bookmarkable
 	 * page is defined as a page that has only a default and/or a PageParameter
 	 * constructor.
-	 * 
+	 *
 	 * @param id
 	 * @param bookmarkablePageClass
 	 * @param pageParameters
@@ -87,12 +88,12 @@
 		this.pageParameters = pageParameters;
 	}
 
-	
+
 	/**
 	 * Append an additional hidden input tag that forces Wicket to correctly
 	 * determine the destination page class even after a session expiration or
 	 * a server restart.
-	 * 
+	 *
 	 * @param markupStream
 	 *            The markup stream
 	 * @param openTag
@@ -133,10 +134,10 @@
 		getResponse().write(buffer);
 		super.onComponentTagBody(markupStream, openTag);
 	}
-	
+
 	/**
 	 * Take URL-encoded query string value, unencode it and return HTML-escaped version
-	 * 
+	 *
 	 * @param s
 	 *            value to reencode
 	 * @return reencoded value
@@ -145,4 +146,14 @@
 		String un = WicketURLDecoder.QUERY_INSTANCE.decode(s);
 		return Strings.escapeMarkup(un).toString();
 	}
+
+	protected String getAbsoluteUrl() {
+		return getAbsoluteUrl(pageClass, pageParameters);
+	}
+
+	protected String getAbsoluteUrl(Class<? extends BasePage> pageClass, PageParameters pageParameters) {
+		String relativeUrl = urlFor(pageClass, pageParameters).toString();
+		String absoluteUrl = RequestUtils.toAbsolutePath(relativeUrl);
+		return absoluteUrl;
+	}
 }

--
Gitblit v1.9.1