From 309c55b5a9670e7c327ad8d4e5d94b8af840d00f Mon Sep 17 00:00:00 2001 From: James Moger Date: Fri, 18 Nov 2011 17:46:06 -0500 Subject: [PATCH] Calculate repository color from name. Show swatch on repository list. --- distrib/gitblit.properties | 6 +++ resources/bootstrap.gb.css | 9 ++++ src/com/gitblit/utils/StringUtils.java | 48 ++++++++++++++++++- .../wicket/panels/RepositoriesPanel.html | 2 +- .../wicket/panels/RepositoriesPanel.java | 11 ++++- 5 files changed, 71 insertions(+), 5 deletions(-) diff --git a/distrib/gitblit.properties b/distrib/gitblit.properties index 5c50a2ce..7ce4ddfa 100644 --- a/distrib/gitblit.properties +++ b/distrib/gitblit.properties @@ -228,6 +228,12 @@ web.repositoryListType = grouped # SINCE 0.5.0 web.repositoryRootGroupName = main +# Display the repository swatch color next to the repository name link in the +# repositories list. +# +# SINCE 0.8.0 +web.repositoryListSwatches = true + # Choose the diff presentation style: gitblt, gitweb, or plain # # SINCE 0.5.0 diff --git a/resources/bootstrap.gb.css b/resources/bootstrap.gb.css index 06c46709..32aac08a 100644 --- a/resources/bootstrap.gb.css +++ b/resources/bootstrap.gb.css @@ -160,6 +160,15 @@ span.link em, div.link span em { font-size: 11px; } +span.repositorySwatch { + border-radius: 3px; + padding: 2px 5px; + color: #ffffff; +} +span.repositorySwatch a { + color: inherit; +} + img.inlineIcon { padding-left: 1px; padding-right: 1px; diff --git a/src/com/gitblit/utils/StringUtils.java b/src/com/gitblit/utils/StringUtils.java index 746fbe2e..a51c157f 100644 --- a/src/com/gitblit/utils/StringUtils.java +++ b/src/com/gitblit/utils/StringUtils.java @@ -33,7 +33,7 @@ import java.util.regex.PatternSyntaxException; public class StringUtils { public static final String MD5_TYPE = "MD5:"; - + public static final String COMBINED_MD5_TYPE = "CMD5:"; /** @@ -443,4 +443,48 @@ public class StringUtils { } }); } -} + + public static String getColor(String value) { + int cs = 0; + for (char c : getMD5(value.toLowerCase()).toCharArray()) { + cs += c; + } + int n = (cs % 360); + float hue = ((float) n) / 360; + return hsvToRgb(hue, 0.90f, 0.65f); + } + + public static String hsvToRgb(float hue, float saturation, float value) { + int h = (int) (hue * 6); + float f = hue * 6 - h; + float p = value * (1 - saturation); + float q = value * (1 - f * saturation); + float t = value * (1 - (1 - f) * saturation); + + switch (h) { + case 0: + return rgbToString(value, t, p); + case 1: + return rgbToString(q, value, p); + case 2: + return rgbToString(p, value, t); + case 3: + return rgbToString(p, q, value); + case 4: + return rgbToString(t, p, value); + case 5: + return rgbToString(value, p, q); + default: + throw new RuntimeException( + "Something went wrong when converting from HSV to RGB. Input was " + hue + ", " + + saturation + ", " + value); + } + } + + public static String rgbToString(float r, float g, float b) { + String rs = Integer.toHexString((int) (r * 256)); + String gs = Integer.toHexString((int) (g * 256)); + String bs = Integer.toHexString((int) (b * 256)); + return "#" + rs + gs + bs; + } +} \ No newline at end of file diff --git a/src/com/gitblit/wicket/panels/RepositoriesPanel.html b/src/com/gitblit/wicket/panels/RepositoriesPanel.html index 41741e89..54a498e1 100644 --- a/src/com/gitblit/wicket/panels/RepositoriesPanel.html +++ b/src/com/gitblit/wicket/panels/RepositoriesPanel.html @@ -71,7 +71,7 @@ -
[repository name]
+ [repository name]
[repository description]
[repository owner] diff --git a/src/com/gitblit/wicket/panels/RepositoriesPanel.java b/src/com/gitblit/wicket/panels/RepositoriesPanel.java index d18d5bb3..fd5e34f7 100644 --- a/src/com/gitblit/wicket/panels/RepositoriesPanel.java +++ b/src/com/gitblit/wicket/panels/RepositoriesPanel.java @@ -120,6 +120,7 @@ public class RepositoriesPanel extends BasePanel { } final String baseUrl = WicketUtils.getGitblitURL(getRequest()); + final boolean showSwatch = GitBlit.getBoolean(Keys.web.repositoryListSwatches, true); DataView dataView = new DataView("row", dp) { private static final long serialVersionUID = 1L; @@ -146,13 +147,19 @@ public class RepositoriesPanel extends BasePanel { } Fragment row = new Fragment("rowContent", "repositoryRow", this); item.add(row); - + // try to strip group name for less cluttered list String repoName = entry.name; if (!StringUtils.isEmpty(currGroupName) && (repoName.indexOf('/') > -1)) { repoName = repoName.substring(currGroupName.length() + 1); } - + + // repository swatch + Label swatch = new Label("repositorySwatch", " "); + WicketUtils.setCssBackground(swatch, entry.name); + row.add(swatch); + swatch.setVisible(showSwatch); + if (entry.hasCommits && linksActive) { PageParameters pp = WicketUtils.newRepositoryParameter(entry.name); row.add(new LinkPanel("repositoryName", "list", repoName, SummaryPage.class, pp)); -- 2.39.5