@@ -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 |
@@ -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; |
@@ -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; | |||
} | |||
} |
@@ -71,7 +71,7 @@ | |||
</wicket:fragment> | |||
<wicket:fragment wicket:id="repositoryRow"> | |||
<td class="left" style="padding-left:10px;" ><div class="list" wicket:id="repositoryName">[repository name]</div></td> | |||
<td class="left" style="padding-left:3px;" ><span class="repositorySwatch" wicket:id="repositorySwatch"></span> <span style="padding-left:3px;" wicket:id="repositoryName">[repository name]</span></td> | |||
<td><div class="list" wicket:id="repositoryDescription">[repository description]</div></td> | |||
<td class="author"><span wicket:id="repositoryOwner">[repository owner]</span></td> | |||
<td style="text-align: right;padding-right:10px;"><img class="inlineIcon" wicket:id="ticketsIcon" /><img class="inlineIcon" wicket:id="docsIcon" /><img class="inlineIcon" wicket:id="frozenIcon" /><img class="inlineIcon" wicket:id="federatedIcon" /><img class="inlineIcon" wicket:id="accessRestrictionIcon" /></td> |
@@ -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<RepositoryModel> dataView = new DataView<RepositoryModel>("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)); |