James Moger
2011-11-18 309c55b5a9670e7c327ad8d4e5d94b8af840d00f
Calculate repository color from name. Show swatch on repository list.
5 files modified
68 ■■■■■ changed files
distrib/gitblit.properties 6 ●●●●● patch | view | raw | blame | history
resources/bootstrap.gb.css 9 ●●●●● patch | view | raw | blame | history
src/com/gitblit/utils/StringUtils.java 44 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/panels/RepositoriesPanel.html 2 ●●● patch | view | raw | blame | history
src/com/gitblit/wicket/panels/RepositoriesPanel.java 7 ●●●●● patch | view | raw | blame | history
distrib/gitblit.properties
@@ -228,6 +228,12 @@
# 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
resources/bootstrap.gb.css
@@ -160,6 +160,15 @@
    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;
src/com/gitblit/utils/StringUtils.java
@@ -443,4 +443,48 @@
            }
        });
    }
    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;
    }
}
src/com/gitblit/wicket/panels/RepositoriesPanel.html
@@ -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>
src/com/gitblit/wicket/panels/RepositoriesPanel.java
@@ -120,6 +120,7 @@
        }
        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;
@@ -153,6 +154,12 @@
                    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));