From 1e83907b001a2df3f14a35fc36c47ea8f49155c4 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Mon, 25 Apr 2011 21:52:38 -0400
Subject: [PATCH] Sprinkled some icons throughout ui. Centralized icon retrieval.

---
 src/com/gitblit/wicket/resources/book_16x16.png      |    0 
 src/com/gitblit/wicket/pages/RepositoriesPage.java   |   34 ++++++
 src/com/gitblit/wicket/panels/PageLinksPanel.html    |    2 
 src/com/gitblit/wicket/panels/RefsPanel.java         |    2 
 src/com/gitblit/wicket/panels/TagsPanel.java         |    5 
 gitblit.properties                                   |   16 +-
 src/com/gitblit/GitBlit.java                         |   10 +
 src/com/gitblit/wicket/GitBlitWebApp.properties      |    6 +
 src/com/gitblit/wicket/WicketUtils.java              |   34 ++++++
 src/com/gitblit/wicket/pages/RepositoriesPage.html   |    8 +
 src/com/gitblit/wicket/pages/EditRepositoryPage.html |   14 +-
 src/com/gitblit/utils/JGitUtils.java                 |   20 +++
 src/com/gitblit/wicket/resources/file_16x16.png      |    0 
 src/com/gitblit/wicket/pages/EditRepositoryPage.java |   17 ++
 src/com/gitblit/wicket/resources/bug_16x16.png       |    0 
 src/com/gitblit/wicket/RepositoryPage.java           |   12 +-
 src/com/gitblit/wicket/pages/TreePage.java           |    3 
 src/com/gitblit/wicket/models/RepositoryModel.java   |    3 
 src/com/gitblit/wicket/resources/pixel.png           |    0 
 src/com/gitblit/wicket/pages/TreePage.html           |    1 
 src/com/gitblit/wicket/resources/folder_16x16.png    |    0 
 src/com/gitblit/wicket/resources/lock_16x16.png      |    0 
 src/com/gitblit/wicket/resources/gitblit.css         |   36 ++++++-
 src/com/gitblit/wicket/panels/BasePanel.java         |    4 
 src/com/gitblit/wicket/panels/HistoryPanel.java      |    9 -
 src/com/gitblit/wicket/panels/PageLinksPanel.java    |   37 +++++--
 src/com/gitblit/wicket/panels/SearchPanel.java       |    9 -
 src/com/gitblit/wicket/panels/LogPanel.java          |    9 -
 src/com/gitblit/wicket/pages/SummaryPage.java        |    3 
 29 files changed, 211 insertions(+), 83 deletions(-)

diff --git a/gitblit.properties b/gitblit.properties
index 4b08135..9925499 100644
--- a/gitblit.properties
+++ b/gitblit.properties
@@ -66,6 +66,10 @@
 # Control if email addresses are shown in web ui
 web.showEmailAddresses = true
 
+# Shows a combobox in the page links header with commit, committer, and author
+# search selection.  Default search is commit.
+web.showSearchTypeSelection = false
+
 # Generates a line graph of repository activity over time on the Summary page.
 # This is a real-time graph so generation may be expensive. 
 web.generateActivityGraph = true
@@ -78,9 +82,9 @@
 # Value must exceed 0 else default of 5 is used
 web.summaryRefsCount = 5
 
-# The number of commits to show on each page of a Log
-# Value must exceed 0 else default of 50 is used
-web.logPageCommitCount = 50
+# The number of items to show on a page before showing the first, prev, next
+# pagination links.  A default if 50 is used for any invalid value.
+web.itemsPerPage = 50
 
 # Registered extensions for google-code-prettify
 web.prettyPrintExtensions = c cpp cs css htm html java js php pl prefs properties py rb sh sql xml vb
@@ -112,12 +116,6 @@
 
 # Example per-repository regex substitutions overrides global
 #regex.myrepository.bug = \\b(Bug:)(\\s*[#]?|-){0,1}(\\d+)\\b!!!<a href="http://elsewhere/bug/$3">Bug-Id: $3</a>
-
-# Enable tickets pages for all repositories (if ticgit branch is present)
-tickets.global = false
-
-# Enable tickets pages for specified repository (if ticgit branch is present)
-#tickets.myrepository = true
 
 #
 # Server Settings
diff --git a/src/com/gitblit/GitBlit.java b/src/com/gitblit/GitBlit.java
index c412b18..c56b3cb 100644
--- a/src/com/gitblit/GitBlit.java
+++ b/src/com/gitblit/GitBlit.java
@@ -116,7 +116,7 @@
 		JGitUtils.setRepositoryOwner(r, repository.owner);
 		JGitUtils.setRepositoryUseTickets(r, repository.useTickets);
 		JGitUtils.setRepositoryUseDocs(r, repository.useDocs);
-		JGitUtils.setRepositoryUseNamedUsers(r, repository.useNamedUsers);
+		JGitUtils.setRepositoryRestrictedAccess(r, repository.useRestrictedAccess);
 	}
 
 	public List<String> getRepositoryList() {
@@ -130,9 +130,15 @@
 			Repository r = getRepository(repo);
 			String description = JGitUtils.getRepositoryDescription(r);
 			String owner = JGitUtils.getRepositoryOwner(r);
+			String group = JGitUtils.getRepositoryGroup(r);
 			Date lastchange = JGitUtils.getLastChange(r);
+			RepositoryModel model = new RepositoryModel(repo, description, owner, lastchange);
+			model.group = group;
+			model.useTickets = JGitUtils.getRepositoryUseTickets(r);
+			model.useDocs = JGitUtils.getRepositoryUseDocs(r);
+			model.useRestrictedAccess = JGitUtils.getRepositoryRestrictedAccess(r);
 			r.close();
-			repositories.add(new RepositoryModel(repo, description, owner, lastchange));
+			repositories.add(model);
 		}
 		return repositories;
 	}
diff --git a/src/com/gitblit/utils/JGitUtils.java b/src/com/gitblit/utils/JGitUtils.java
index df7be6b..eddd3df 100644
--- a/src/com/gitblit/utils/JGitUtils.java
+++ b/src/com/gitblit/utils/JGitUtils.java
@@ -749,6 +749,14 @@
 		setRepositoryConfigString(r, "owner", owner);
 	}
 	
+	public static String getRepositoryGroup(Repository r) {
+		return getRepositoryConfigString(r, "group");
+	}
+	
+	public static void setRepositoryGroup(Repository r, String group) {
+		setRepositoryConfigString(r, "group", group);
+	} 
+	
 	public static boolean getRepositoryUseTickets(Repository r) {
 		return getRepositoryConfigBoolean(r, "useTickets", false);
 	}
@@ -765,12 +773,12 @@
 		setRepositoryConfigBoolean(r, "useDocs", value);
 	}
 	
-	public static boolean getRepositoryUseNamedUsers(Repository r) {
-		return getRepositoryConfigBoolean(r, "useNamedUsers", false);
+	public static boolean getRepositoryRestrictedAccess(Repository r) {
+		return getRepositoryConfigBoolean(r, "restrictedAccess", false);
 	}
 	
-	public static void setRepositoryUseNamedUsers(Repository r, boolean value) {
-		setRepositoryConfigBoolean(r, "useNamedUsers", value);
+	public static void setRepositoryRestrictedAccess(Repository r, boolean value) {
+		setRepositoryConfigBoolean(r, "restrictedAccess", value);
 	}	
 	
 	public static String getRepositoryConfigString(Repository r, String field) {
@@ -886,6 +894,10 @@
 		metrics.add(0, total);
 		return metrics;
 	}
+	
+	public static RefModel getDocumentsBranch(Repository r) {
+		return getTicketsBranch(r);
+	}
 
 	public static RefModel getTicketsBranch(Repository r) {
 		RefModel ticgitBranch = null;
diff --git a/src/com/gitblit/wicket/GitBlitWebApp.properties b/src/com/gitblit/wicket/GitBlitWebApp.properties
index cbe1d05..18b1e78 100644
--- a/src/com/gitblit/wicket/GitBlitWebApp.properties
+++ b/src/com/gitblit/wicket/GitBlitWebApp.properties
@@ -66,4 +66,8 @@
 gb.missingUsername = Missing Username
 gb.edit = edit
 gb.searchTypeTooltip = Select Search Type
-gb.searchTooltip = Search Git:Blit
\ No newline at end of file
+gb.searchTooltip = Search Git:Blit
+gb.rename = rename
+gb.delete = delete
+gb.docs = docs
+gb.restrictedAccess = restricted access
\ No newline at end of file
diff --git a/src/com/gitblit/wicket/RepositoryPage.java b/src/com/gitblit/wicket/RepositoryPage.java
index 6e03479..30e41a5 100644
--- a/src/com/gitblit/wicket/RepositoryPage.java
+++ b/src/com/gitblit/wicket/RepositoryPage.java
@@ -140,26 +140,26 @@
 	
 	protected void setPersonSearchTooltip(Component component, String value, SearchType searchType) {
 		if (searchType.equals(SearchType.AUTHOR)) {
-			WicketUtils.setHtmlTitle(component, getString("gb.searchForAuthor") + " " + value);
+			WicketUtils.setHtmlTooltip(component, getString("gb.searchForAuthor") + " " + value);
 		} else if (searchType.equals(SearchType.COMMITTER)) {
-			WicketUtils.setHtmlTitle(component, getString("gb.searchForCommitter") + " " + value);
+			WicketUtils.setHtmlTooltip(component, getString("gb.searchForCommitter") + " " + value);
 		}
 	}
 	
 	protected void setChangeTypeTooltip(Component container, ChangeType type) {
 		switch (type) {
 		case ADD:
-			WicketUtils.setHtmlTitle(container, getString("gb.addition"));
+			WicketUtils.setHtmlTooltip(container, getString("gb.addition"));
 			break;
 		case COPY:
 		case RENAME:
-			WicketUtils.setHtmlTitle(container, getString("gb.rename"));
+			WicketUtils.setHtmlTooltip(container, getString("gb.rename"));
 			break;
 		case DELETE:
-			WicketUtils.setHtmlTitle(container, getString("gb.deletion"));
+			WicketUtils.setHtmlTooltip(container, getString("gb.deletion"));
 			break;
 		case MODIFY:
-			WicketUtils.setHtmlTitle(container, getString("gb.modification"));
+			WicketUtils.setHtmlTooltip(container, getString("gb.modification"));
 			break;
 		}
 	}
diff --git a/src/com/gitblit/wicket/WicketUtils.java b/src/com/gitblit/wicket/WicketUtils.java
index 63e6621..fb8e296 100644
--- a/src/com/gitblit/wicket/WicketUtils.java
+++ b/src/com/gitblit/wicket/WicketUtils.java
@@ -9,6 +9,8 @@
 import org.apache.wicket.PageParameters;
 import org.apache.wicket.behavior.SimpleAttributeModifier;
 import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.image.ContextImage;
+import org.apache.wicket.resource.ContextRelativeResource;
 import org.eclipse.jgit.diff.DiffEntry.ChangeType;
 import org.eclipse.jgit.lib.Constants;
 
@@ -28,7 +30,7 @@
 		container.add(new SimpleAttributeModifier("style", value));
 	}
 
-	public static void setHtmlTitle(Component container, String value) {
+	public static void setHtmlTooltip(Component container, String value) {
 		container.add(new SimpleAttributeModifier("title", value));
 	}
 
@@ -77,8 +79,32 @@
 
 	public static Label createAuthorLabel(String wicketId, String author) {
 		Label label = new Label(wicketId, author);
-		WicketUtils.setHtmlTitle(label, author);
+		WicketUtils.setHtmlTooltip(label, author);
 		return label;
+	}
+
+	public static ContextImage newClearPixel(String wicketId) {
+		return newImage(wicketId, "pixel.png");
+	}
+	
+	public static ContextImage newBlankImage(String wicketId) {
+		return newImage(wicketId, "blank.png");
+	}
+
+	public static ContextImage newImage(String wicketId, String file) {
+		return newImage(wicketId, file, null);
+	}
+
+	public static ContextImage newImage(String wicketId, String file, String tooltip) {
+		ContextImage img = new ContextImage(wicketId, "/com/gitblit/wicket/resources/" + file);
+		if (!StringUtils.isEmpty(tooltip)) {
+			setHtmlTooltip(img, tooltip);
+		}
+		return img;
+	}
+	
+	public static ContextRelativeResource getResource(String file) {
+		return new ContextRelativeResource("/com/gitblit/wicket/resources/" + file);
 	}
 
 	public static PageParameters newRepositoryParameter(String repositoryName) {
@@ -170,7 +196,7 @@
 		}
 		Label label = new Label(wicketId, dateString);
 		WicketUtils.setCssClass(label, TimeUtils.timeAgoCss(date));
-		WicketUtils.setHtmlTitle(label, title);
+		WicketUtils.setHtmlTooltip(label, title);
 		return label;
 	}
 
@@ -182,7 +208,7 @@
 		String dateString = df.format(date);
 		String title = TimeUtils.timeAgo(date);
 		Label label = new Label(wicketId, dateString);
-		WicketUtils.setHtmlTitle(label, title);
+		WicketUtils.setHtmlTooltip(label, title);
 		return label;
 	}
 }
diff --git a/src/com/gitblit/wicket/models/RepositoryModel.java b/src/com/gitblit/wicket/models/RepositoryModel.java
index a9410b5..8df3808 100644
--- a/src/com/gitblit/wicket/models/RepositoryModel.java
+++ b/src/com/gitblit/wicket/models/RepositoryModel.java
@@ -9,10 +9,11 @@
 	public String name;
 	public String description;
 	public String owner;
+	public String group;
 	public Date lastChange;
 	public boolean useTickets;
 	public boolean useDocs;
-	public boolean useNamedUsers;
+	public boolean useRestrictedAccess;
 
 	public RepositoryModel(String name, String description, String owner, Date lastchange) {
 		this.name = name;
diff --git a/src/com/gitblit/wicket/pages/EditRepositoryPage.html b/src/com/gitblit/wicket/pages/EditRepositoryPage.html
index 1e04ed0..f202e91 100644
--- a/src/com/gitblit/wicket/pages/EditRepositoryPage.html
+++ b/src/com/gitblit/wicket/pages/EditRepositoryPage.html
@@ -13,13 +13,13 @@
 	<form wicket:id="editForm">
 		<table class="plain">
 			<tbody>
-				<tr><th>Name</th><td><input type="text" wicket:id="name" size="30" /></td></tr>
-				<tr><th>Description</th><td><input type="text" wicket:id="description" size="80" /></td></tr>
-				<tr><th>Owner</th><td><input type="text" wicket:id="owner" size="30" /></td></tr>
-				<tr><th>Use Git:Blit Tickets</th><td><input type="checkbox" wicket:id="useTickets"/>distributed Git:Blit ticketing</td></tr>
-				<tr><th>Use Git:Blit Docs</th><td><input type="checkbox" wicket:id="useDocs"/>distributed Git:Blit documentation</td></tr>
-				<tr><th>Named User Access</th><td><input type="checkbox" wicket:id="useNamedUsers"/>not implemented</td></tr>
-				<tr><td colspan="2"><input type="submit" value="Submit"/></td></tr>
+				<tr><th>Name</th><td class="edit"><input type="text" wicket:id="name" size="30" tabindex="1" /></td></tr>
+				<tr><th>Description</th><td class="edit"><input type="text" wicket:id="description" size="80" tabindex="2" /></td></tr>
+				<tr><th>Owner</th><td class="edit"><input type="text" wicket:id="owner" size="30" tabindex="3" /></td></tr>
+				<tr><th>Group</th><td class="edit"><input type="text" wicket:id="group" size="30" tabindex="4" /></td></tr>
+				<tr><th>Enable Tickets</th><td class="edit"><input type="checkbox" wicket:id="useTickets" tabindex="5" /> <i>distributed Ticgit ticketing</i></td></tr>
+				<tr><th>Enable Docs</th><td class="edit"><input type="checkbox" wicket:id="useDocs" tabindex="6" /> <i>distributed Markdown documentation</i></td></tr>
+				<tr><td class="edit" colspan="2"><input type="submit" value="Submit" tabindex="7" /></td></tr>
 			</tbody>
 		</table>
 	</form>	
diff --git a/src/com/gitblit/wicket/pages/EditRepositoryPage.java b/src/com/gitblit/wicket/pages/EditRepositoryPage.java
index fab3203..e290568 100644
--- a/src/com/gitblit/wicket/pages/EditRepositoryPage.java
+++ b/src/com/gitblit/wicket/pages/EditRepositoryPage.java
@@ -7,8 +7,10 @@
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.TextField;
 import org.apache.wicket.model.CompoundPropertyModel;
+import org.eclipse.jgit.lib.Repository;
 
 import com.gitblit.GitBlit;
+import com.gitblit.utils.JGitUtils;
 import com.gitblit.wicket.AdminPage;
 import com.gitblit.wicket.BasePage;
 import com.gitblit.wicket.WicketUtils;
@@ -30,8 +32,17 @@
 		// edit constructor
 		super(params);
 		isCreate = false;
-		String repositoryName = WicketUtils.getRepositoryName(params);
-		setupPage(new RepositoryModel(repositoryName, "", "", new Date()));
+		String name = WicketUtils.getRepositoryName(params);
+		Repository r = GitBlit.self().getRepository(name);
+		String description = JGitUtils.getRepositoryDescription(r);
+		String owner = JGitUtils.getRepositoryOwner(r);
+		String group = JGitUtils.getRepositoryGroup(r);
+		RepositoryModel model = new RepositoryModel(name, description, owner, new Date());
+		model.group = group;
+		model.useTickets = JGitUtils.getRepositoryUseTickets(r);
+		model.useDocs = JGitUtils.getRepositoryUseDocs(r);
+		model.useRestrictedAccess = JGitUtils.getRepositoryRestrictedAccess(r);
+		setupPage(model);
 	}
 
 	protected void setupPage(final RepositoryModel repository) {
@@ -55,9 +66,9 @@
 		form.add(new TextField<String>("name").setEnabled(isCreate));
 		form.add(new TextField<String>("description"));
 		form.add(new TextField<String>("owner"));
+		form.add(new TextField<String>("group"));
 		form.add(new CheckBox("useTickets"));
 		form.add(new CheckBox("useDocs"));
-		form.add(new CheckBox("useNamedUsers"));
 
 		add(form);
 	}
diff --git a/src/com/gitblit/wicket/pages/RepositoriesPage.html b/src/com/gitblit/wicket/pages/RepositoriesPage.html
index 24a3446..bb13292 100644
--- a/src/com/gitblit/wicket/pages/RepositoriesPage.html
+++ b/src/com/gitblit/wicket/pages/RepositoriesPage.html
@@ -20,6 +20,7 @@
 			<th wicket:id="orderByRepository"><wicket:message key="gb.repository">Repository</wicket:message></th>
 			<th wicket:id="orderByDescription"><wicket:message key="gb.description">Description</wicket:message></th>
 			<th wicket:id="orderByOwner"><wicket:message key="gb.owner">Owner</wicket:message></th>
+			<th></th>
 			<th wicket:id="orderByDate"><wicket:message key="gb.lastChange">Last Change</wicket:message></th>
 			<th></th>
 		</tr>
@@ -28,8 +29,9 @@
          		<td><div class="list" wicket:id="repositoryName">[repository name]</div></td>
          		<td><div class="list" wicket:id="repositoryDescription">[repository description]</div></td>
          		<td class="author"><span wicket:id="repositoryOwner">[repository owner]</span></td>
+         		<td class="icon"><img wicket:id="ticketsIcon" /><img wicket:id="docsIcon" /><img wicket:id="restrictedAccessIcon" /></td>
          		<td><span wicket:id="repositoryLastChange">[last change]</span></td>
-         		<td><a wicket:id="repositoryLinks"><wicket:message key="gb.edit">[edit]</wicket:message></a></td>
+         		<td class="rightAlign"><span wicket:id="repositoryLinks"></span></td>
        		</tr>
     	</tbody>
 	</table>
@@ -40,6 +42,10 @@
 			<a wicket:id="newRepository"><wicket:message key="gb.newRepository"></wicket:message></a> | <a wicket:id="newUser"><wicket:message key="gb.newUser"></wicket:message></a>
 		</div>	
 	</wicket:fragment>
+	
+	<wicket:fragment wicket:id="repositoryAdminLinks">
+		<span class="link"><a wicket:id="editRepository"><wicket:message key="gb.edit">[edit]</wicket:message></a> | <a wicket:id="renameRepository"><wicket:message key="gb.rename">[rename]</wicket:message></a> | <a wicket:id="deleteRepository"><wicket:message key="gb.delete">[delete]</wicket:message></a></span>
+	</wicket:fragment>
 </wicket:extend>
 </body>
 </html>
\ No newline at end of file
diff --git a/src/com/gitblit/wicket/pages/RepositoriesPage.java b/src/com/gitblit/wicket/pages/RepositoriesPage.java
index 4aba988..a7ec963 100644
--- a/src/com/gitblit/wicket/pages/RepositoriesPage.java
+++ b/src/com/gitblit/wicket/pages/RepositoriesPage.java
@@ -48,7 +48,7 @@
 		} else {
 			showAdmin = GitBlit.self().settings().getBoolean(Keys.web.allowAdministration, false);
 		}
-		
+
 		Fragment adminLinks = new Fragment("adminPanel", "adminLinks", this);
 		adminLinks.add(new BookmarkablePageLink<Void>("newRepository", EditRepositoryPage.class));
 		adminLinks.add(new BookmarkablePageLink<Void>("newUser", RepositoriesPage.class));
@@ -60,7 +60,7 @@
 		if (messageSource.equalsIgnoreCase("gitblit")) {
 			// Read default welcome message
 			try {
-				ContextRelativeResource res = new ContextRelativeResource("/com/gitblit/wicket/resources/welcome.mkd");
+				ContextRelativeResource res = WicketUtils.getResource("welcome.mkd");
 				InputStream is = res.getResourceStream().getInputStream();
 				InputStreamReader reader = new InputStreamReader(is);
 				StringWriter writer = new StringWriter();
@@ -112,6 +112,25 @@
 				PageParameters pp = WicketUtils.newRepositoryParameter(entry.name);
 				item.add(new LinkPanel("repositoryName", "list", entry.name, SummaryPage.class, pp));
 				item.add(new LinkPanel("repositoryDescription", "list", entry.description, SummaryPage.class, pp));
+
+				if (entry.useTickets) {
+					item.add(WicketUtils.newImage("ticketsIcon", "bug_16x16.png", getString("gb.tickets")));
+				} else {
+					item.add(WicketUtils.newClearPixel("ticketsIcon"));
+				}
+				
+				if (entry.useDocs) {
+					item.add(WicketUtils.newImage("docsIcon", "book_16x16.png", getString("gb.docs")));
+				} else {
+					item.add(WicketUtils.newClearPixel("docsIcon"));
+				}
+				
+				if (entry.useRestrictedAccess) {
+					item.add(WicketUtils.newImage("restrictedAccessIcon", "lock_16x16.png", getString("gb.restrictedAccess")));
+				} else {
+					item.add(WicketUtils.newClearPixel("restrictedAccessIcon"));
+				}
+				
 				item.add(new Label("repositoryOwner", entry.owner));
 
 				String lastChange = TimeUtils.timeAgo(entry.lastChange);
@@ -119,8 +138,15 @@
 				item.add(lastChangeLabel);
 				WicketUtils.setCssClass(lastChangeLabel, TimeUtils.timeAgoCss(entry.lastChange));
 
-				item.add(new BookmarkablePageLink<Void>("repositoryLinks", EditRepositoryPage.class, WicketUtils.newRepositoryParameter(entry.name)).setVisible(showAdmin));
-				
+				if (showAdmin) {
+					Fragment repositoryLinks = new Fragment("repositoryLinks", "repositoryAdminLinks", this);
+					repositoryLinks.add(new BookmarkablePageLink<Void>("editRepository", EditRepositoryPage.class, WicketUtils.newRepositoryParameter(entry.name)));
+					repositoryLinks.add(new BookmarkablePageLink<Void>("renameRepository", EditRepositoryPage.class, WicketUtils.newRepositoryParameter(entry.name)).setEnabled(false));
+					repositoryLinks.add(new BookmarkablePageLink<Void>("deleteRepository", EditRepositoryPage.class, WicketUtils.newRepositoryParameter(entry.name)).setEnabled(false));
+					item.add(repositoryLinks);
+				} else {
+					item.add(new Label("repositoryLinks"));
+				}
 				WicketUtils.setAlternatingBackground(item, counter);
 				counter++;
 			}
diff --git a/src/com/gitblit/wicket/pages/SummaryPage.java b/src/com/gitblit/wicket/pages/SummaryPage.java
index 3d4a6ef..0c4c595 100644
--- a/src/com/gitblit/wicket/pages/SummaryPage.java
+++ b/src/com/gitblit/wicket/pages/SummaryPage.java
@@ -7,7 +7,6 @@
 
 import org.apache.wicket.PageParameters;
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.image.ContextImage;
 import org.eclipse.jgit.lib.Repository;
 import org.wicketstuff.googlecharts.AbstractChartData;
 import org.wicketstuff.googlecharts.Chart;
@@ -100,7 +99,7 @@
 			
 			add(new Chart("commitsChart", provider));
 		} else {
-			add(new ContextImage("commitsChart", "blank.png"));
+			add(WicketUtils.newBlankImage("commitsChart"));
 		}
 	}
 
diff --git a/src/com/gitblit/wicket/pages/TreePage.html b/src/com/gitblit/wicket/pages/TreePage.html
index f72792f..f180c9d 100644
--- a/src/com/gitblit/wicket/pages/TreePage.html
+++ b/src/com/gitblit/wicket/pages/TreePage.html
@@ -24,6 +24,7 @@
 	<!-- changed paths -->	
 	<table style="width:100%" class="pretty">
 		<tr wicket:id="changedPath">
+			<td class="icon"><img wicket:id="pathIcon" /></td>
 			<td><span wicket:id="pathName"></span></td>			
 			<td class="size"><span wicket:id="pathSize">[path size]</span></td>
 			<td class="mode"><span wicket:id="pathPermissions">[path permissions]</span></td>
diff --git a/src/com/gitblit/wicket/pages/TreePage.java b/src/com/gitblit/wicket/pages/TreePage.java
index e29ba42..9022d44 100644
--- a/src/com/gitblit/wicket/pages/TreePage.java
+++ b/src/com/gitblit/wicket/pages/TreePage.java
@@ -57,12 +57,14 @@
 				item.add(new Label("pathPermissions", JGitUtils.getPermissionsFromMode(entry.mode)));
 				if (entry.isParentPath) {
 					// parent .. path
+					item.add(WicketUtils.newBlankImage("pathIcon"));
 					item.add(new Label("pathSize", ""));
 					item.add(new LinkPanel("pathName", null, entry.name, TreePage.class, newPathParameter(entry.path)));
 					item.add(new Label("pathLinks", ""));
 				} else {
 					if (entry.isTree()) {
 						// folder/tree link
+						item.add(WicketUtils.newImage("pathIcon", "folder_16x16.png"));
 						item.add(new Label("pathSize", ""));
 						item.add(new LinkPanel("pathName", null, entry.name, TreePage.class, newPathParameter(entry.path)));
 
@@ -73,6 +75,7 @@
 						item.add(links);
 					} else {
 						// blob link
+						item.add(WicketUtils.newImage("pathIcon", "file_16x16.png"));
 						item.add(new Label("pathSize", byteFormat.format(entry.size)));
 						item.add(new LinkPanel("pathName", "list", entry.name, BlobPage.class, newPathParameter(entry.path)));
 
diff --git a/src/com/gitblit/wicket/panels/BasePanel.java b/src/com/gitblit/wicket/panels/BasePanel.java
index 8a168ab..43cd126 100644
--- a/src/com/gitblit/wicket/panels/BasePanel.java
+++ b/src/com/gitblit/wicket/panels/BasePanel.java
@@ -25,9 +25,9 @@
 
 	protected void setPersonSearchTooltip(Component component, String value, SearchType searchType) {
 		if (searchType.equals(SearchType.AUTHOR)) {
-			WicketUtils.setHtmlTitle(component, getString("gb.searchForAuthor") + " " + value);
+			WicketUtils.setHtmlTooltip(component, getString("gb.searchForAuthor") + " " + value);
 		} else if (searchType.equals(SearchType.COMMITTER)) {
-			WicketUtils.setHtmlTitle(component, getString("gb.searchForCommitter") + " " + value);
+			WicketUtils.setHtmlTooltip(component, getString("gb.searchForCommitter") + " " + value);
 		}
 	}
 }
diff --git a/src/com/gitblit/wicket/panels/HistoryPanel.java b/src/com/gitblit/wicket/panels/HistoryPanel.java
index f859213..234e00b 100644
--- a/src/com/gitblit/wicket/panels/HistoryPanel.java
+++ b/src/com/gitblit/wicket/panels/HistoryPanel.java
@@ -5,7 +5,6 @@
 import java.util.Map;
 
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.image.ContextImage;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 import org.apache.wicket.markup.html.panel.Fragment;
 import org.apache.wicket.markup.repeater.Item;
@@ -43,7 +42,7 @@
 	public HistoryPanel(String wicketId, final String repositoryName, final String objectId, final String path, Repository r, int limit, int pageOffset) {
 		super(wicketId);
 		boolean pageResults = limit <= 0;
-		int itemsPerPage = GitBlit.self().settings().getInteger(Keys.web.logPageCommitCount, 50);
+		int itemsPerPage = GitBlit.self().settings().getInteger(Keys.web.itemsPerPage, 50);
 		if (itemsPerPage <= 1) {
 			itemsPerPage = 50;
 		}
@@ -107,16 +106,16 @@
 
 				// merge icon
 				if (entry.getParentCount() > 1) {
-					item.add(new ContextImage("commitIcon", "/com/gitblit/wicket/resources/commit_merge_16x16.png"));
+					item.add(WicketUtils.newImage("commitIcon", "commit_merge_16x16.png"));
 				} else {
-					item.add(new ContextImage("commitIcon", "/com/gitblit/wicket/resources/blank.png"));
+					item.add(WicketUtils.newBlankImage("commitIcon"));
 				}
 
 				String shortMessage = entry.getShortMessage();
 				String trimmedMessage = StringUtils.trimShortLog(shortMessage);
 				LinkPanel shortlog = new LinkPanel("commitShortMessage", "list subject", trimmedMessage, CommitPage.class, WicketUtils.newObjectParameter(repositoryName, entry.getName()));
 				if (!shortMessage.equals(trimmedMessage)) {
-					WicketUtils.setHtmlTitle(shortlog, shortMessage);
+					WicketUtils.setHtmlTooltip(shortlog, shortMessage);
 				}
 				item.add(shortlog);
 
diff --git a/src/com/gitblit/wicket/panels/LogPanel.java b/src/com/gitblit/wicket/panels/LogPanel.java
index 8895dbc..23afc37 100644
--- a/src/com/gitblit/wicket/panels/LogPanel.java
+++ b/src/com/gitblit/wicket/panels/LogPanel.java
@@ -5,7 +5,6 @@
 import java.util.Map;
 
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.image.ContextImage;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.markup.repeater.data.DataView;
@@ -38,7 +37,7 @@
 	public LogPanel(String wicketId, final String repositoryName, final String objectId, Repository r, int limit, int pageOffset) {
 		super(wicketId);
 		boolean pageResults = limit <= 0;
-		int itemsPerPage = GitBlit.self().settings().getInteger(Keys.web.logPageCommitCount, 50);
+		int itemsPerPage = GitBlit.self().settings().getInteger(Keys.web.itemsPerPage, 50);
 		if (itemsPerPage <= 1) {
 			itemsPerPage = 50;
 		}
@@ -87,9 +86,9 @@
 
 				// merge icon
 				if (entry.getParentCount() > 1) {
-					item.add(new ContextImage("commitIcon", "/com/gitblit/wicket/resources/commit_merge_16x16.png"));
+					item.add(WicketUtils.newImage("commitIcon", "commit_merge_16x16.png"));
 				} else {
-					item.add(new ContextImage("commitIcon", "/com/gitblit/wicket/resources/blank.png"));
+					item.add(WicketUtils.newBlankImage("commitIcon"));
 				}
 				
 				// short message
@@ -97,7 +96,7 @@
 				String trimmedMessage = StringUtils.trimShortLog(shortMessage);
 				LinkPanel shortlog = new LinkPanel("commitShortMessage", "list subject", trimmedMessage, CommitPage.class, WicketUtils.newObjectParameter(repositoryName, entry.getName()));
 				if (!shortMessage.equals(trimmedMessage)) {
-					WicketUtils.setHtmlTitle(shortlog, shortMessage);
+					WicketUtils.setHtmlTooltip(shortlog, shortMessage);
 				}
 				item.add(shortlog);
 
diff --git a/src/com/gitblit/wicket/panels/PageLinksPanel.html b/src/com/gitblit/wicket/panels/PageLinksPanel.html
index c467779..7cad29f 100644
--- a/src/com/gitblit/wicket/panels/PageLinksPanel.html
+++ b/src/com/gitblit/wicket/panels/PageLinksPanel.html
@@ -9,7 +9,7 @@
 	<form wicket:id="searchForm">
 		<div class="search">
 			<select wicket:id="searchType"/>			
-			<input type="text" id="searchBox" wicket:id="searchBox" value=""/>
+			<input type="text" id="searchBox" wicket:id="searchBox" size="25" value=""/>
 		</div>
 	</form>
 		
diff --git a/src/com/gitblit/wicket/panels/PageLinksPanel.java b/src/com/gitblit/wicket/panels/PageLinksPanel.java
index deb0f6d..c2bae8f 100644
--- a/src/com/gitblit/wicket/panels/PageLinksPanel.java
+++ b/src/com/gitblit/wicket/panels/PageLinksPanel.java
@@ -1,6 +1,5 @@
 package com.gitblit.wicket.panels;
 
-import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -63,14 +62,18 @@
 		add(new BookmarkablePageLink<Void>("tags", TagsPage.class, WicketUtils.newRepositoryParameter(repositoryName)));
 		add(new BookmarkablePageLink<Void>("tree", TreePage.class, WicketUtils.newRepositoryParameter(repositoryName)));
 
-		// Get the repository tickets setting
-		boolean checkTicgit = GitBlit.self().settings().getBoolean(Keys.tickets.global, false);
-		checkTicgit |= GitBlit.self().settings().getBoolean(MessageFormat.format(Keys.tickets._ROOT + ".{0}", repositoryName), false);
-
-		// Add dynamic repository extras
 		List<String> extras = new ArrayList<String>();
-		if (checkTicgit && JGitUtils.getTicketsBranch(r) != null) {
+
+		// Get the repository tickets setting
+		boolean checkTickets = JGitUtils.getRepositoryUseTickets(r);
+		if (checkTickets && JGitUtils.getTicketsBranch(r) != null) {
 			extras.add("tickets");
+		}
+
+		// Get the repository docs setting
+		boolean checkDocs = JGitUtils.getRepositoryUseDocs(r);
+		if (checkDocs && JGitUtils.getDocumentsBranch(r) != null) {
+			extras.add("docs");
 		}
 
 		ListDataProvider<String> extrasDp = new ListDataProvider<String>(extras);
@@ -81,7 +84,10 @@
 				String extra = item.getModelObject();
 				if (extra.equals("tickets")) {
 					item.add(new Label("extraSeparator", " | "));
-					item.add(new LinkPanel("extraLink", null, "tickets", TicketsPage.class, WicketUtils.newRepositoryParameter(repositoryName)));
+					item.add(new LinkPanel("extraLink", null, getString("gb.tickets"), TicketsPage.class, WicketUtils.newRepositoryParameter(repositoryName)));
+				} else if (extra.equals("docs")) {
+					item.add(new Label("extraSeparator", " | "));
+					item.add(new LinkPanel("extraLink", null, getString("gb.docs"), TicketsPage.class, WicketUtils.newRepositoryParameter(repositoryName)));
 				}
 			}
 		};
@@ -110,7 +116,7 @@
 		private final String repositoryName;
 
 		private final IModel<String> searchBoxModel = new Model<String>("");
-		
+
 		private final IModel<SearchType> searchTypeModel = new Model<SearchType>(SearchType.COMMIT);
 
 		public SearchForm(String id, String repositoryName) {
@@ -118,11 +124,11 @@
 			this.repositoryName = repositoryName;
 			DropDownChoice<SearchType> searchType = new DropDownChoice<SearchType>("searchType", Arrays.asList(SearchType.values()));
 			searchType.setModel(searchTypeModel);
-			WicketUtils.setHtmlTitle(searchType, getString("gb.searchTypeTooltip"));
-			add(searchType);
+			WicketUtils.setHtmlTooltip(searchType, getString("gb.searchTypeTooltip"));
+			add(searchType.setVisible(GitBlit.self().settings().getBoolean(Keys.web.showSearchTypeSelection, false)));
 			TextField<String> searchBox = new TextField<String>("searchBox", searchBoxModel);
 			add(searchBox);
-			WicketUtils.setHtmlTitle(searchBox, getString("gb.searchTooltip"));
+			WicketUtils.setHtmlTooltip(searchBox, getString("gb.searchTooltip"));
 			WicketUtils.setInputPlaceholder(searchBox, getString("gb.search"));
 		}
 
@@ -130,6 +136,13 @@
 		public void onSubmit() {
 			SearchType searchType = searchTypeModel.getObject();
 			String searchString = searchBoxModel.getObject();
+			for (SearchType type : SearchType.values()) {
+				if (searchString.toLowerCase().startsWith(type.name().toLowerCase() + ":")) {
+					searchType = type;
+					searchString = searchString.substring(type.name().toLowerCase().length() + 1).trim();
+					break;
+				}
+			}
 			setResponsePage(SearchPage.class, WicketUtils.newSearchParameter(repositoryName, null, searchString, searchType));
 		}
 	}
diff --git a/src/com/gitblit/wicket/panels/RefsPanel.java b/src/com/gitblit/wicket/panels/RefsPanel.java
index b84d9df..e8d8c7f 100644
--- a/src/com/gitblit/wicket/panels/RefsPanel.java
+++ b/src/com/gitblit/wicket/panels/RefsPanel.java
@@ -57,7 +57,7 @@
 					c = new LinkPanel("refName", null, entry, CommitPage.class, WicketUtils.newObjectParameter(repositoryName, entry));
 					WicketUtils.setCssClass(c, "otherRef");
 				}
-				WicketUtils.setHtmlTitle(c, entry);
+				WicketUtils.setHtmlTooltip(c, entry);
 				item.add(c);
 			}
 		};
diff --git a/src/com/gitblit/wicket/panels/SearchPanel.java b/src/com/gitblit/wicket/panels/SearchPanel.java
index c7e038d..7a87732 100644
--- a/src/com/gitblit/wicket/panels/SearchPanel.java
+++ b/src/com/gitblit/wicket/panels/SearchPanel.java
@@ -4,7 +4,6 @@
 import java.util.List;
 import java.util.Map;
 
-import org.apache.wicket.markup.html.image.ContextImage;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.markup.repeater.data.DataView;
@@ -34,7 +33,7 @@
 	public SearchPanel(String wicketId, final String repositoryName, final String objectId, final String value, SearchType searchType, Repository r, int limit, int pageOffset) {
 		super(wicketId);
 		boolean pageResults = limit <= 0;
-		int itemsPerPage = GitBlit.self().settings().getInteger(Keys.web.logPageCommitCount, 50);
+		int itemsPerPage = GitBlit.self().settings().getInteger(Keys.web.itemsPerPage, 50);
 		if (itemsPerPage <= 1) {
 			itemsPerPage = 50;
 		}
@@ -77,9 +76,9 @@
 
 				// merge icon
 				if (entry.getParentCount() > 1) {
-					item.add(new ContextImage("commitIcon", "/com/gitblit/wicket/resources/commit_merge_16x16.png"));
+					item.add(WicketUtils.newImage("commitIcon", "commit_merge_16x16.png"));
 				} else {
-					item.add(new ContextImage("commitIcon", "/com/gitblit/wicket/resources/blank.png"));
+					item.add(WicketUtils.newBlankImage("commitIcon"));
 				}
 
 				String shortMessage = entry.getShortMessage();
@@ -87,7 +86,7 @@
 				// TODO highlight matches
 				LinkPanel shortlog = new LinkPanel("commitShortMessage", "list subject", trimmedMessage, CommitPage.class, WicketUtils.newObjectParameter(repositoryName, entry.getName()));
 				if (!shortMessage.equals(trimmedMessage)) {
-					WicketUtils.setHtmlTitle(shortlog, shortMessage);
+					WicketUtils.setHtmlTooltip(shortlog, shortMessage);
 				}
 				item.add(shortlog);
 
diff --git a/src/com/gitblit/wicket/panels/TagsPanel.java b/src/com/gitblit/wicket/panels/TagsPanel.java
index 40871b1..e55b672 100644
--- a/src/com/gitblit/wicket/panels/TagsPanel.java
+++ b/src/com/gitblit/wicket/panels/TagsPanel.java
@@ -3,7 +3,6 @@
 import java.util.List;
 
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.image.ContextImage;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 import org.apache.wicket.markup.html.panel.Fragment;
 import org.apache.wicket.markup.repeater.Item;
@@ -54,9 +53,9 @@
 
 				// tag icon
 				if (entry.isAnnotatedTag()) {
-					item.add(new ContextImage("tagIcon", "/com/gitblit/wicket/resources/tag_16x16.png"));
+					item.add(WicketUtils.newImage("tagIcon", "tag_16x16.png"));
 				} else {
-					item.add(new ContextImage("tagIcon", "/com/gitblit/wicket/resources/blank.png"));
+					item.add(WicketUtils.newBlankImage("tagIcon"));
 				}
 				
 				item.add(new LinkPanel("tagName", "list name", entry.getDisplayName(), CommitPage.class, WicketUtils.newObjectParameter(repositoryName, entry.getCommitId().getName())));
diff --git a/src/com/gitblit/wicket/resources/book_16x16.png b/src/com/gitblit/wicket/resources/book_16x16.png
new file mode 100644
index 0000000..e48ff95
--- /dev/null
+++ b/src/com/gitblit/wicket/resources/book_16x16.png
Binary files differ
diff --git a/src/com/gitblit/wicket/resources/bug_16x16.png b/src/com/gitblit/wicket/resources/bug_16x16.png
new file mode 100644
index 0000000..c7299fd
--- /dev/null
+++ b/src/com/gitblit/wicket/resources/bug_16x16.png
Binary files differ
diff --git a/src/com/gitblit/wicket/resources/file_16x16.png b/src/com/gitblit/wicket/resources/file_16x16.png
new file mode 100644
index 0000000..eda4488
--- /dev/null
+++ b/src/com/gitblit/wicket/resources/file_16x16.png
Binary files differ
diff --git a/src/com/gitblit/wicket/resources/folder_16x16.png b/src/com/gitblit/wicket/resources/folder_16x16.png
new file mode 100644
index 0000000..f1ed9ab
--- /dev/null
+++ b/src/com/gitblit/wicket/resources/folder_16x16.png
Binary files differ
diff --git a/src/com/gitblit/wicket/resources/gitblit.css b/src/com/gitblit/wicket/resources/gitblit.css
index 12c43ed..3200381 100644
--- a/src/com/gitblit/wicket/resources/gitblit.css
+++ b/src/com/gitblit/wicket/resources/gitblit.css
@@ -172,15 +172,20 @@
 	color:yellow;
 	text-align:right;
 	float:right;
-	padding:4px 4px 3px 3px;	
+	padding:4px 4px 3px 3px;
+	border-left: 1px solid #8080f0;
+	margin: 0px;
+	height: 23px;
 }
 
 div.search input {
+	vertical-align: top;
 	background: url(/com/gitblit/wicket/resources/search-icon.png) no-repeat 4px center;
 	color: #ddd;
 	background-color: #000070;
 	border: 1px solid transparent;
-	padding: 0px 2px 2px 22px;	
+	padding: 2px 2px 2px 22px;
+	margin: 0px;
 }
 
 div.search input:hover, div.search input:focus {
@@ -380,6 +385,7 @@
 	float: right;
 	padding: 0.4em;
 	vertical-align:top;
+	margin: 0px;
 }
 
 div.commitLegend span {
@@ -424,6 +430,21 @@
 	padding: 8px;
 }
 
+table.plain td.edit {
+	padding: 3px;
+}
+
+table.plain td.edit input {
+	margin: 0px;
+	outline: 1px solid transparent;
+	border: 1px solid #ccc;	
+	padding-left:5px;
+}
+
+table.plain td.edit input:focus, table.plain td.edit input:hover{
+	border: 1px solid orange;
+}
+
 table.pretty, table.repositories, table.comments {
 	margin-bottom:5px;
 	border-spacing: 0px;
@@ -436,8 +457,8 @@
 }
 
 table.pretty td.icon {
-	padding: 0px;
-	width: 20px;
+	padding: 0px 0px 0px 2px;	
+	width: 18px;
 }
 
 table.pretty td.icon img {
@@ -456,11 +477,16 @@
 table.repositories th {
 	background-color:#D2C3AF;
 	padding: 4px;
+	border-top: 1px solid #808080;
 	border-bottom: 1px solid #808080;
 }
 
 table.repositories td {
-	padding: 4px;
+	padding: 2px;
+}
+
+table.repositories td.icon img {
+	vertical-align: top;
 }
 
 table.repositories th a {
diff --git a/src/com/gitblit/wicket/resources/lock_16x16.png b/src/com/gitblit/wicket/resources/lock_16x16.png
new file mode 100644
index 0000000..ddf83d9
--- /dev/null
+++ b/src/com/gitblit/wicket/resources/lock_16x16.png
Binary files differ
diff --git a/src/com/gitblit/wicket/resources/pixel.png b/src/com/gitblit/wicket/resources/pixel.png
new file mode 100644
index 0000000..4d5f6df
--- /dev/null
+++ b/src/com/gitblit/wicket/resources/pixel.png
Binary files differ

--
Gitblit v1.9.1