From a5e762ba4ab82f0c6ef71d853c5103f19bbf8e22 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 11 Oct 2012 08:10:20 -0400
Subject: [PATCH] Tweak canFork description

---
 src/com/gitblit/wicket/PageRegistration.java |   61 +++++++++++++++++++++++++-----
 1 files changed, 51 insertions(+), 10 deletions(-)

diff --git a/src/com/gitblit/wicket/PageRegistration.java b/src/com/gitblit/wicket/PageRegistration.java
index 6c13b82..e8eeaba 100644
--- a/src/com/gitblit/wicket/PageRegistration.java
+++ b/src/com/gitblit/wicket/PageRegistration.java
@@ -49,6 +49,24 @@
 	}
 
 	/**
+	 * Represents a page link to a non-Wicket page. Might be external.
+	 * 
+	 * @author James Moger
+	 * 
+	 */
+	public static class OtherPageLink extends PageRegistration {
+
+		private static final long serialVersionUID = 1L;
+
+		public final String url;
+
+		public OtherPageLink(String translationKey, String url) {
+			super(translationKey, null);
+			this.url = url;
+		}
+	}
+
+	/**
 	 * Represents a DropDownMenu for the topbar
 	 * 
 	 * @author James Moger
@@ -76,19 +94,17 @@
 
 		private static final long serialVersionUID = 1L;
 
-		final PageParameters params;
+		final PageParameters parameters;
 		final String displayText;
 		final String parameter;
 		final String value;
+		final boolean isSelected;
 
 		/**
 		 * Divider constructor.
 		 */
 		public DropDownMenuItem() {
-			displayText = null;
-			parameter = null;
-			value = null;
-			params = null;
+			this(null, null, null, null);
 		}
 
 		/**
@@ -114,16 +130,37 @@
 			this.displayText = displayText;
 			this.parameter = parameter;
 			this.value = value;
+
 			if (params == null) {
-				this.params = new PageParameters();
+				// no parameters specified
+				parameters = new PageParameters();
+				setParameter(parameter, value);
+				isSelected = false;
 			} else {
-				this.params = new PageParameters(params);
+				parameters = new PageParameters(params);
+				if (parameters.containsKey(parameter)) {
+					isSelected = params.getString(parameter).equals(value);
+					if (isSelected) {
+						// already selected, so remove this enables toggling
+						parameters.remove(parameter);
+					} else {
+						// set the new selection value
+						setParameter(parameter, value);
+					}
+				} else {
+					// not currently selected
+					isSelected = false;
+					setParameter(parameter, value);
+				}
 			}
+		}
+
+		private void setParameter(String parameter, String value) {
 			if (!StringUtils.isEmpty(parameter)) {
 				if (StringUtils.isEmpty(value)) {
-					this.params.remove(parameter);
+					this.parameters.remove(parameter);
 				} else {
-					this.params.put(parameter, value);	
+					this.parameters.put(parameter, value);
 				}
 			}
 		}
@@ -136,13 +173,17 @@
 		}
 
 		public PageParameters getPageParameters() {
-			return params;
+			return parameters;
 		}
 
 		public boolean isDivider() {
 			return displayText == null && value == null && parameter == null;
 		}
 
+		public boolean isSelected() {
+			return isSelected;
+		}
+
 		@Override
 		public int hashCode() {
 			if (isDivider()) {

--
Gitblit v1.9.1