From 9effe1630d97039b3e01cd9b58ed07e75be1d63c Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Mon, 25 Feb 2013 08:40:30 -0500 Subject: [PATCH] Merge pull request #75 from thefake/master --- src/com/gitblit/wicket/panels/RefsPanel.java | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 51 insertions(+), 6 deletions(-) diff --git a/src/com/gitblit/wicket/panels/RefsPanel.java b/src/com/gitblit/wicket/panels/RefsPanel.java index 8cf137b..3ba22c0 100644 --- a/src/com/gitblit/wicket/panels/RefsPanel.java +++ b/src/com/gitblit/wicket/panels/RefsPanel.java @@ -22,6 +22,7 @@ import java.util.Map; import org.apache.wicket.Component; +import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.markup.repeater.data.DataView; @@ -54,35 +55,68 @@ Collections.sort(refs, new Comparator<RefModel>() { @Override public int compare(RefModel o1, RefModel o2) { + // sort remote heads last, otherwise sort by name + // this is so we can insert a break on the refs panel + // [head][branch][branch][tag][tag] + // [remote][remote][remote] + boolean remote1 = o1.displayName.startsWith(Constants.R_REMOTES); + boolean remote2 = o2.displayName.startsWith(Constants.R_REMOTES); + if (remote1 && remote2) { + // both are remote heads, sort by name + return o1.displayName.compareTo(o2.displayName); + } + if (remote1) { + // o1 is remote, o2 comes first + return 1; + } + if (remote2) { + // remote is o2, o1 comes first + return -1; + } + // standard sort return o1.displayName.compareTo(o2.displayName); } }); - + + // count remote and determine if we should insert a break + int remoteCount = 0; + for (RefModel ref : refs) { + if (ref.displayName.startsWith(Constants.R_REMOTES)) { + remoteCount++; + } + } + final boolean shouldBreak = remoteCount < refs.size(); + ListDataProvider<RefModel> refsDp = new ListDataProvider<RefModel>(refs); DataView<RefModel> refsView = new DataView<RefModel>("ref", refsDp) { private static final long serialVersionUID = 1L; + private boolean alreadyInsertedBreak = !shouldBreak; public void populateItem(final Item<RefModel> item) { RefModel entry = item.getModelObject(); String name = entry.displayName; String objectid = entry.getReferencedObjectId().getName(); - + boolean breakLine = false; Class<? extends RepositoryPage> linkClass = CommitPage.class; String cssClass = ""; if (name.startsWith(Constants.R_HEADS)) { - // local head + // local branch linkClass = LogPage.class; name = name.substring(Constants.R_HEADS.length()); - cssClass = "headRef"; + cssClass = "localBranch"; } else if (name.equals(Constants.HEAD)) { // local head linkClass = LogPage.class; cssClass = "headRef"; } else if (name.startsWith(Constants.R_REMOTES)) { - // remote head + // remote branch linkClass = LogPage.class; name = name.substring(Constants.R_REMOTES.length()); - cssClass = "remoteRef"; + cssClass = "remoteBranch"; + if (!alreadyInsertedBreak) { + breakLine = true; + alreadyInsertedBreak = true; + } } else if (name.startsWith(Constants.R_TAGS)) { // tag if (entry.isAnnotatedTag()) { @@ -95,8 +129,14 @@ name = name.substring(Constants.R_TAGS.length()); cssClass = "tagRef"; } else if (name.startsWith(Constants.R_NOTES)) { + // codereview refs linkClass = CommitPage.class; cssClass = "otherRef"; + } else if (name.startsWith(com.gitblit.Constants.R_GITBLIT)) { + // gitblit refs + linkClass = LogPage.class; + cssClass = "otherRef"; + name = name.substring(com.gitblit.Constants.R_GITBLIT.length()); } Component c = new LinkPanel("refName", null, name, linkClass, @@ -104,6 +144,11 @@ WicketUtils.setCssClass(c, cssClass); WicketUtils.setHtmlTooltip(c, name); item.add(c); + Label lb = new Label("lineBreak", "<br/>"); + lb.setVisible(breakLine); + lb.setRenderBodyOnly(true); + item.add(lb.setEscapeModelStrings(false)); + item.setRenderBodyOnly(true); } }; add(refsView); -- Gitblit v1.9.1