James Moger
2011-09-30 94750e9faea7e383db64df6d2ac4290eaa267770
More Bootstrap improvements.

* Strip leading group name from repositories page.
* Put topbars on all pages.
* Properly sort repositories in all locations.
* White Gitblit logo.
3 files added
21 files modified
212 ■■■■■ changed files
docs/gitblit_logo_white.xcf patch | view | raw | blame | history
resources/bootstrap.gb.css 42 ●●●● patch | view | raw | blame | history
resources/gitblt2_white.png patch | view | raw | blame | history
resources/gitblt_25_white.png patch | view | raw | blame | history
src/com/gitblit/FederationServlet.java 1 ●●●● patch | view | raw | blame | history
src/com/gitblit/models/FederationModel.java 17 ●●●●● patch | view | raw | blame | history
src/com/gitblit/models/RepositoryModel.java 3 ●●●● patch | view | raw | blame | history
src/com/gitblit/utils/JGitUtils.java 2 ●●● patch | view | raw | blame | history
src/com/gitblit/utils/StringUtils.java 42 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/WicketUtils.java 2 ●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/BasePage.html 2 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/BasePage.java 6 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/BlamePage.html 4 ●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/ChangePasswordPage.html 19 ●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/ChangePasswordPage.java 12 ●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/EditRepositoryPage.html 6 ●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/RepositoriesPage.java 13 ●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/RepositoryPage.html 4 ●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/RepositoryPage.java 4 ●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/RootPage.html 4 ●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/StandardPage.html 4 ●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/StandardPage.java 7 ●●●● 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 16 ●●●● patch | view | raw | blame | history
docs/gitblit_logo_white.xcf
Binary files differ
resources/bootstrap.gb.css
@@ -1,5 +1,31 @@
body, input, select {
    color: #202020;
}
ul, ol {
    margin:0 !important;
}
hr {
    margin-top: 10px;
    margin-bottom: 10px;
}
.page-header h1, .page-header h2 {
    color: #0069D6;
}
.topbar{
    height:40px !important;
}
.topbar a {
      color: white;
    text-shadow: none;
}
.nav a:hover {
    color: #abd4ff !important;
}
.topbar-inner,.topbar .fill{
@@ -85,7 +111,7 @@
a.list {
    text-decoration: none;
    color: #000000;
    color: inherit;
}
a.list.subject {
@@ -489,8 +515,8 @@
    color: black;
    background-color: #ddd;
    padding-left: 5px;
    border-top: 1px solid #ccc;
    border-bottom: 1px solid #ccc;
    border-top: 1px solid #aaa;
     border-bottom: 1px solid #aaa;
}
table.palette { border:0; width: 0 !important; }
@@ -534,8 +560,6 @@
}
table.annotated {
    width: 100%;
    border: 1px solid #bbb;
}
table.annotated tr.even {
@@ -543,13 +567,18 @@
}
table.annotated tr.odd {
    background-color: #fdfbdf;
    background-color: #f5f5f5;
}
table.annotated td {
    padding: 0px;
    border: 0;
}
tr th a { background-position: right; padding-right: 15px; background-repeat:no-repeat; }
tr th.wicket_orderDown a {background-image: url(arrow_down.png); }
tr th.wicket_orderUp a { background-image: url(arrow_up.png); }
tr th.wicket_orderNone a { background-image: url(arrow_off.png); }
tr.light {
    background-color: #ffffff;
@@ -661,6 +690,7 @@
.feedbackPanelERROR, .feedbackPanelINFO {    
    list-style: none;
    line-height: 35px;
}
.feedbackPanelINFO span, .feedbackPanelERROR span {
resources/gitblt2_white.png
resources/gitblt_25_white.png
src/com/gitblit/FederationServlet.java
@@ -33,7 +33,6 @@
import com.gitblit.Constants.FederationToken;
import com.gitblit.models.FederationModel;
import com.gitblit.models.FederationProposal;
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.UserModel;
import com.gitblit.utils.FederationUtils;
import com.gitblit.utils.HttpUtils;
src/com/gitblit/models/FederationModel.java
@@ -198,22 +198,7 @@
        @Override
        public int compareTo(RepositoryStatus o) {
            if (status.equals(o.status)) {
                // sort root repositories first, alphabetically
                // then sort grouped repositories, alphabetically
                int s1 = name.indexOf('/');
                int s2 = o.name.indexOf('/');
                if (s1 == -1 && s2 == -1) {
                    // neither grouped
                    return name.compareTo(o.name);
                } else if (s1 > -1 && s2 > -1) {
                    // both grouped
                    return name.compareTo(o.name);
                } else if (s1 == -1) {
                    return -1;
                } else if (s2 == -1) {
                    return 1;
                }
                return 0;
                return StringUtils.compareRepositoryNames(name, o.name);
            }
            return status.compareTo(o.status);
        }
src/com/gitblit/models/RepositoryModel.java
@@ -22,6 +22,7 @@
import com.gitblit.Constants.AccessRestrictionType;
import com.gitblit.Constants.FederationStrategy;
import com.gitblit.utils.StringUtils;
/**
 * RepositoryModel is a serializable model class that represents a Gitblit
@@ -74,6 +75,6 @@
    @Override
    public int compareTo(RepositoryModel o) {
        return name.compareTo(o.name);
        return StringUtils.compareRepositoryNames(name, o.name);
    }
}
src/com/gitblit/utils/JGitUtils.java
@@ -299,7 +299,7 @@
        }
        list.addAll(getRepositoryList(repositoriesFolder.getAbsolutePath(), repositoriesFolder,
                exportAll, searchSubfolders));
        Collections.sort(list);
        StringUtils.sortRepositorynames(list);
        return list;
    }
src/com/gitblit/utils/StringUtils.java
@@ -19,6 +19,8 @@
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.regex.PatternSyntaxException;
@@ -395,4 +397,44 @@
        }
        return false;
    }
    /**
     * Compare two repository names for proper group sorting.
     *
     * @param r1
     * @param r2
     * @return
     */
    public static int compareRepositoryNames(String r1, String r2) {
        // sort root repositories first, alphabetically
        // then sort grouped repositories, alphabetically
        int s1 = r1.indexOf('/');
        int s2 = r2.indexOf('/');
        if (s1 == -1 && s2 == -1) {
            // neither grouped
            return r1.compareTo(r2);
        } else if (s1 > -1 && s2 > -1) {
            // both grouped
            return r1.compareTo(r2);
        } else if (s1 == -1) {
            return -1;
        } else if (s2 == -1) {
            return 1;
        }
        return 0;
    }
    /**
     * Sort grouped repository names.
     *
     * @param list
     */
    public static void sortRepositorynames(List<String> list) {
        Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return compareRepositoryNames(o1, o2);
            }
        });
    }
}
src/com/gitblit/wicket/WicketUtils.java
@@ -102,7 +102,7 @@
    }
    public static void setAlternatingBackground(Component c, int i) {
        String clazz = i % 2 == 0 ? "dark" : "light";
        String clazz = i % 2 == 0 ? "light" : "dark";
        setCssClass(c, clazz);
    }
src/com/gitblit/wicket/pages/BasePage.html
@@ -22,7 +22,9 @@
        <!-- page footer -->
        <div class="page_footer">
            <div style="float:right">
                <a title="gitblit homepage" href="http://gitblit.com/">
                <span wicket:id="gbVersion"></span> 
                </a>
            </div>
            <div wicket:id="userPanel">[user panel]</div>
        </div>
src/com/gitblit/wicket/pages/BasePage.java
@@ -29,6 +29,7 @@
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.link.ExternalLink;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.protocol.http.WebRequest;
@@ -44,6 +45,7 @@
import com.gitblit.Keys;
import com.gitblit.models.UserModel;
import com.gitblit.wicket.GitBlitWebSession;
import com.gitblit.wicket.WicketUtils;
import com.gitblit.wicket.panels.LinkPanel;
public abstract class BasePage extends WebPage {
@@ -92,6 +94,10 @@
            add(new Label("title", getServerName()));
        }
        ExternalLink rootLink = new ExternalLink("rootLink", urlFor(RepositoriesPage.class, null).toString());
        WicketUtils.setHtmlTooltip(rootLink, GitBlit.getString(Keys.web.siteName, Constants.NAME));
        add(rootLink);
        // Feedback panel for info, warning, and non-fatal error messages
        add(new FeedbackPanel("feedback"));
src/com/gitblit/wicket/pages/BlamePage.html
@@ -19,12 +19,12 @@
    <div wicket:id="breadcrumbs">[breadcrumbs]</div>
        
    <!--  blame content -->
    <table class="annotated" style="border-top: 0px; margin-bottom:5px;">
    <table class="annotated" style="margin-bottom:5px;">
        <tbody>
            <tr>
                <th>Commit</th>
                <th>Line</th>
                <th>Data</th>
                <th>Content</th>
            </tr>
            <tr wicket:id="annotation">
                <td><span class="sha1" wicket:id="commit"></span></td>
src/com/gitblit/wicket/pages/ChangePasswordPage.html
@@ -4,20 +4,9 @@
      xml:lang="en"  
      lang="en"> 
      
    <!-- Head with Wicket-controlled resources in this package -->
    <wicket:head>
           <title wicket:id="title">[page title]</title>
        <link rel="stylesheet" type="text/css" href="gitblit.css"/>
        <link rel="shortcut icon" href="gitblt-favicon.png" type="image/png" />
    </wicket:head>
    <wicket:extend>
    <body onload="document.getElementById('password').focus();">
        <div>
            <div style="padding-top: 10px;text-align:center;">
                <img src="gitblt_25.png" alt="Gitblit"/><br/>
                <div style="padding-top:30px;font-weight:bold;" wicket:id="name"></div>
            </div>
            <p/>
            <form style="text-align:center;" wicket:id="passwordForm">
                <center>
                    <table class="plain">
@@ -30,11 +19,11 @@
                        <td class="edit"><input type="password" wicket:id="confirmPassword" size="30" tabindex="2" /></td>
                    </tr>
                    </table>
                    <input type="submit" wicket:message="value:gb.save" wicket:id="save" tabindex="3" />
                    <input type="submit" wicket:message="value:gb.cancel" wicket:id="cancel" tabindex="4" />
                    <div style="padding-top:10px;" wicket:id="feedback"></div>
                    <input class="btn" type="submit" wicket:message="value:gb.cancel" wicket:id="cancel" tabindex="3" />
                    <input class="btn primary" type="submit" wicket:message="value:gb.save" wicket:id="save" tabindex="4" />
                </center>
            </form>            
        </div>
    </body>
    </wicket:extend>
</html>
src/com/gitblit/wicket/pages/ChangePasswordPage.java
@@ -18,17 +18,13 @@
import java.text.MessageFormat;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.PasswordTextField;
import org.apache.wicket.markup.html.form.StatelessForm;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.protocol.http.WebResponse;
import com.gitblit.Constants;
import com.gitblit.GitBlit;
import com.gitblit.GitBlitException;
import com.gitblit.Keys;
@@ -36,7 +32,7 @@
import com.gitblit.utils.StringUtils;
import com.gitblit.wicket.GitBlitWebSession;
public class ChangePasswordPage extends WebPage {
public class ChangePasswordPage extends StandardPage {
    IModel<String> password = new Model<String>("");
    IModel<String> confirmPassword = new Model<String>("");
@@ -54,10 +50,7 @@
            // no authentication enabled
            throw new RestartResponseException(getApplication().getHomePage());
        }
        add(new Label("title", GitBlit.getString(Keys.web.siteName, Constants.NAME)));
        add(new Label("name", getString("gb.changePassword") + ": "
                + GitBlitWebSession.get().getUser().username));
        setupPage(getString("gb.changePassword"), GitBlitWebSession.get().getUser().username);
        StatelessForm<Void> form = new StatelessForm<Void>("passwordForm") {
@@ -115,7 +108,6 @@
                confirmPassword);
        confirmPasswordField.setResetPassword(false);
        form.add(confirmPasswordField);
        form.add(new FeedbackPanel("feedback"));
        form.add(new Button("save"));
        Button cancel = new Button("cancel") {
src/com/gitblit/wicket/pages/EditRepositoryPage.html
@@ -12,17 +12,17 @@
            <tbody>
                <tr><th><wicket:message key="gb.name"></wicket:message></th><td class="edit"><input class="span6" type="text" wicket:id="name" id="name" size="40" tabindex="1" /> &nbsp;<i><wicket:message key="gb.nameDescription"></wicket:message></i></td></tr>
                <tr><th><wicket:message key="gb.description"></wicket:message></th><td class="edit"><input class="span6" type="text" wicket:id="description" size="40" tabindex="2" /></td></tr>
                <tr><th><wicket:message key="gb.origin"></wicket:message></th><td class="edit"><input class="span6" type="text" wicket:id="origin" size="80" tabindex="3" /></td></tr>
                <tr><th><wicket:message key="gb.origin"></wicket:message></th><td class="edit"><input class="span7" type="text" wicket:id="origin" size="80" tabindex="3" /></td></tr>
                <tr><th><wicket:message key="gb.owner"></wicket:message></th><td class="edit"><select wicket:id="owner" tabindex="4" /> &nbsp;<i><wicket:message key="gb.ownerDescription"></wicket:message></i></td></tr>
                <tr><th><wicket:message key="gb.enableTickets"></wicket:message></th><td class="edit"><input type="checkbox" wicket:id="useTickets" tabindex="5" /> &nbsp;<i><wicket:message key="gb.useTicketsDescription"></wicket:message></i></td></tr>
                <tr><th><wicket:message key="gb.enableDocs"></wicket:message></th><td class="edit"><input type="checkbox" wicket:id="useDocs" tabindex="6" /> &nbsp;<i><wicket:message key="gb.useDocsDescription"></wicket:message></i></td></tr>
                <tr><th><wicket:message key="gb.showRemoteBranches"></wicket:message></th><td class="edit"><input type="checkbox" wicket:id="showRemoteBranches" tabindex="7" /> &nbsp;<i><wicket:message key="gb.showRemoteBranchesDescription"></wicket:message></i></td></tr>
                <tr><th><wicket:message key="gb.showReadme"></wicket:message></th><td class="edit"><input type="checkbox" wicket:id="showReadme" tabindex="8" /> &nbsp;<i><wicket:message key="gb.showReadmeDescription"></wicket:message></i></td></tr>
                <tr><th><wicket:message key="gb.isFrozen"></wicket:message></th><td class="edit"><input type="checkbox" wicket:id="isFrozen" tabindex="9" /> &nbsp;<i><wicket:message key="gb.isFrozenDescription"></wicket:message></i></td></tr>
                <tr><td style="padding-top:10px;" colspan="2"><hr></hr></td></tr>
                <tr><td colspan="2"><hr></hr></td></tr>
                <tr><th><wicket:message key="gb.accessRestriction"></wicket:message></th><td class="edit"><select class="span6" wicket:id="accessRestriction" tabindex="10" /></td></tr>                
                <tr><th style="vertical-align: top;"><wicket:message key="gb.permittedUsers"></wicket:message></th><td style="padding:2px;"><span wicket:id="users"></span></td></tr>
                <tr><td style="padding-top:10px;" colspan="2"><hr></hr></td></tr>
                <tr><td colspan="2"><hr></hr></td></tr>
                <tr><th><wicket:message key="gb.federationStrategy"></wicket:message></th><td class="edit"><select class="span6" wicket:id="federationStrategy" tabindex="11" /></td></tr>
                <tr><th style="vertical-align: top;"><wicket:message key="gb.federationSets"></wicket:message></th><td style="padding:2px;"><span wicket:id="federationSets"></span></td></tr>                
                <tr><th></th><td class="editButton"><input class="btn" type="submit" value="Cancel" wicket:message="value:gb.cancel" wicket:id="cancel" tabindex="12" /> &nbsp; <input class="btn primary" type="submit" value="Save" wicket:message="value:gb.save" wicket:id="save" tabindex="13" /> </td></tr>
src/com/gitblit/wicket/pages/RepositoriesPage.java
@@ -38,7 +38,7 @@
        // Load the markdown welcome message
        String messageSource = GitBlit.getString(Keys.web.repositoriesMessage, "gitblit");
        String message = "<br/>";
        String message = "";
        if (messageSource.equalsIgnoreCase("gitblit")) {
            // Read default welcome message
            try {
@@ -69,8 +69,15 @@
            }
        }
        Component repositoriesMessage = new Label("repositoriesMessage", message)
                .setEscapeModelStrings(false);
                .setEscapeModelStrings(false).setVisible(message.length() > 0);
        add(repositoriesMessage);
        add(new RepositoriesPanel("repositoriesPanel", showAdmin, null, getAccessRestrictions()));
        RepositoriesPanel repositories = new RepositoriesPanel("repositoriesPanel", showAdmin,
                null, getAccessRestrictions());
        // push the panel down if we are hiding the admin controls and the
        // welcome message
        if (!showAdmin && !repositoriesMessage.isVisible()) {
            WicketUtils.setCssStyle(repositories, "padding-top:5px;");
        }
        add(repositories);
    }
}
src/com/gitblit/wicket/pages/RepositoryPage.html
@@ -12,8 +12,8 @@
            <div class="topbar">
            <div class="fill">
            <div class="container">
                <a class="brand" title="gitblit homepage" href="http://gitblit.com/">
                    <img src="gitblt_25.png" width="79" height="25" alt="gitblit" class="logo"/>
                <a class="brand" wicket:id="rootLink">
                    <img src="gitblt_25_white.png" width="79" height="25" alt="gitblit" class="logo"/>
                </a>
                <ul class="nav">                
                    <li><a wicket:id="repositories"><wicket:message key="gb.repositories"></wicket:message></a></li>
src/com/gitblit/wicket/pages/RepositoryPage.java
@@ -137,7 +137,7 @@
                PageRegistration pageReg = registeredPages.get(extra);
                item.add(new LinkPanel("extraLink", null, getString(pageReg.translationKey),
                        pageReg.pageClass, WicketUtils.newRepositoryParameter(repositoryName))
                        .setEnabled(!extra.equals(pageWicketId)));
                        /*.setEnabled(!extra.equals(pageWicketId))*/);
            }
        };
        add(extrasView);
@@ -183,7 +183,7 @@
            Component c = get(wicketId);
            if (c != null) {
                //c.setEnabled(false);
                WicketUtils.setCssClass(c, "active");
//                WicketUtils.setCssClass(c, "selected");
            }
        }
    }
src/com/gitblit/wicket/pages/RootPage.html
@@ -8,8 +8,8 @@
    <div class="topbar">
        <div class="fill">
            <div class="container">
                <a class="brand" title="gitblit homepage" href="http://gitblit.com/">
                    <img src="gitblt_25.png" width="79" height="25" alt="gitblit" class="logo"/>
                <a class="brand" wicket:id="rootLink">
                    <img src="gitblt_25_white.png" width="79" height="25" alt="gitblit" class="logo"/>
                </a>
                
                <ul class="nav">                
src/com/gitblit/wicket/pages/StandardPage.html
@@ -10,8 +10,8 @@
    <div class="topbar">
        <div class="fill">
            <div class="container">
                <a class="brand" title="gitblit homepage" href="http://gitblit.com/">
                    <img src="gitblt_25.png" width="79" height="25" alt="gitblit" class="logo"/>
                <a class="brand" wicket:id="rootLink">
                    <img src="gitblt_25_white.png" width="79" height="25" alt="gitblit" class="logo"/>
                </a>                
            </div>
        </div>
src/com/gitblit/wicket/pages/StandardPage.java
@@ -18,6 +18,8 @@
import org.apache.wicket.PageParameters;
import org.apache.wicket.markup.html.basic.Label;
import com.gitblit.utils.StringUtils;
public abstract class StandardPage extends BasePage {
    
    public StandardPage() {
@@ -34,7 +36,10 @@
    protected void setupPage(String pageName, String subName) {        
        add(new Label("pageName", pageName));
        add(new Label("pageSubName", "/ " + subName));
        if (!StringUtils.isEmpty(subName)) {
            subName = "/ " + subName;
        }
        add(new Label("pageSubName", subName));
        super.setupPage("", pageName);
    }
}
src/com/gitblit/wicket/panels/RepositoriesPanel.html
@@ -71,7 +71,7 @@
    </wicket:fragment>
        
    <wicket:fragment wicket:id="repositoryRow">
        <td class="left"><div class="list" wicket:id="repositoryName">[repository name]</div></td>
        <td class="left" style="padding-left:10px;" ><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 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
@@ -131,6 +131,7 @@
        DataView<RepositoryModel> dataView = new DataView<RepositoryModel>("row", dp) {
            private static final long serialVersionUID = 1L;
            int counter;
            String currGroupName;
            @Override
            protected void onBeforeRender() {
@@ -141,23 +142,32 @@
            public void populateItem(final Item<RepositoryModel> item) {
                final RepositoryModel entry = item.getModelObject();
                if (entry instanceof GroupRepositoryModel) {
                    currGroupName = entry.name;
                    Fragment row = new Fragment("rowContent", "groupRepositoryRow", this);
                    item.add(row);
                    row.add(new Label("groupName", entry.toString()));
                    WicketUtils.setCssClass(item, "group");
                    // reset counter so that first row is light background
                    counter = 0;
                    return;
                }
                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);
                }
                if (entry.hasCommits && linksActive) {
                    PageParameters pp = WicketUtils.newRepositoryParameter(entry.name);
                    row.add(new LinkPanel("repositoryName", "list", entry.name, SummaryPage.class,
                            pp));
                    row.add(new LinkPanel("repositoryName", "list", repoName, SummaryPage.class, pp));
                    row.add(new LinkPanel("repositoryDescription", "list", entry.description,
                            SummaryPage.class, pp));
                } else {
                    // new/empty repository OR proposed repository
                    row.add(new Label("repositoryName", entry.name));
                    row.add(new Label("repositoryName", repoName));
                    row.add(new Label("repositoryDescription", entry.description));
                }