diff options
author | James Moger <james.moger@gitblit.com> | 2011-04-04 09:10:51 -0400 |
---|---|---|
committer | James Moger <james.moger@gitblit.com> | 2011-04-04 09:10:51 -0400 |
commit | 5fe7df81eb38dc66f2cfc4bf1973863a19f55cf2 (patch) | |
tree | 3f1b1b3f953aa8a5ed60e149043598fbdaf4d42f /src/com/gitblit/wicket/pages | |
download | gitblit-5fe7df81eb38dc66f2cfc4bf1973863a19f55cf2.tar.gz gitblit-5fe7df81eb38dc66f2cfc4bf1973863a19f55cf2.zip |
Initial import of Git:Blit.
Change-Id: Ifce000c85c8947c3a768e782c841e41a8953d314
Diffstat (limited to 'src/com/gitblit/wicket/pages')
20 files changed, 1267 insertions, 0 deletions
diff --git a/src/com/gitblit/wicket/pages/BlobPage.html b/src/com/gitblit/wicket/pages/BlobPage.html new file mode 100644 index 00000000..6d04e180 --- /dev/null +++ b/src/com/gitblit/wicket/pages/BlobPage.html @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" >
+<head>
+ <link href="prettify/prettify.css" type="text/css" rel="stylesheet" />
+ <script type="text/javascript" src="prettify/prettify.js"></script>
+</head>
+<body onload="prettyPrint()">
+ <!-- page header -->
+ <div wicket:id="pageHeader"></div>
+
+ <!-- page nav links -->
+ <div wicket:id="pageLinks"></div>
+
+ <!-- blob nav links -->
+ <div class="page_nav2">
+ <span wicket:id="historyLink"></span> | <span wicket:id="rawLink"></span> | <span wicket:id="headLink"></span>
+ </div>
+
+ <!-- shortlog header -->
+ <div class="header" wicket:id="shortlog"></div>
+
+ <!-- breadcrumbs -->
+ <div wicket:id="breadcrumbs"></div>
+
+ <!-- blob content -->
+ <pre wicket:id="blobText"></pre>
+
+ <!-- footer -->
+ <div wicket:id="pageFooter"></div>
+</body>
+</html>
\ No newline at end of file diff --git a/src/com/gitblit/wicket/pages/BlobPage.java b/src/com/gitblit/wicket/pages/BlobPage.java new file mode 100644 index 00000000..979bb261 --- /dev/null +++ b/src/com/gitblit/wicket/pages/BlobPage.java @@ -0,0 +1,94 @@ +package com.gitblit.wicket.pages;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.PageParameters;
+import org.apache.wicket.markup.html.basic.Label;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.revwalk.RevCommit;
+
+import com.gitblit.StoredSettings;
+import com.gitblit.utils.JGitUtils;
+import com.gitblit.wicket.LinkPanel;
+import com.gitblit.wicket.RepositoryPage;
+import com.gitblit.wicket.WicketUtils;
+import com.gitblit.wicket.panels.PathBreadcrumbsPanel;
+
+
+public class BlobPage extends RepositoryPage {
+
+ public BlobPage(PageParameters params) {
+ super(params, "blob");
+
+ final String blobPath = params.getString("f", null);
+
+ Repository r = getRepository();
+ RevCommit commit = JGitUtils.getCommit(r, commitId);
+
+ // blob page links
+ add(new Label("historyLink", "history"));
+ add(new Label("rawLink", "raw"));
+ add(new Label("headLink", "HEAD"));
+
+ add(new LinkPanel("shortlog", "title", commit.getShortMessage(), CommitPage.class, newCommitParameter()));
+
+ add(new PathBreadcrumbsPanel("breadcrumbs", repositoryName, blobPath, commitId));
+ String extension = null;
+ if (blobPath.lastIndexOf('.') > -1) {
+ extension = blobPath.substring(blobPath.lastIndexOf('.') + 1);
+ }
+
+ // Map the extensions to types
+ Map<String, Integer> map = new HashMap<String, Integer>();
+ for (String ext : StoredSettings.getStrings("prettyPrintExtensions")) {
+ map.put(ext.toLowerCase(), 1);
+ }
+ for (String ext : StoredSettings.getStrings("imageExtensions")) {
+ map.put(ext.toLowerCase(), 2);
+ }
+ for (String ext : StoredSettings.getStrings("binaryExtensions")) {
+ map.put(ext.toLowerCase(), 3);
+ }
+
+ if (extension != null) {
+ int type = 0;
+ if (map.containsKey(extension)) {
+ type = map.get(extension);
+ }
+ Component c = null;
+ switch (type) {
+ case 1:
+ // PrettyPrint blob text
+ c = new Label("blobText", JGitUtils.getRawContentAsString(r, commit, blobPath));
+ WicketUtils.setCssClass(c, "prettyprint");
+ break;
+ case 2:
+ // TODO image blobs
+ c = new Label("blobText", "Image File");
+ break;
+ case 3:
+ // TODO binary blobs
+ c = new Label("blobText", "Binary File");
+ break;
+ default:
+ // plain text
+ c = new Label("blobText", JGitUtils.getRawContentAsString(r, commit, blobPath));
+ WicketUtils.setCssClass(c, "plainprint");
+ }
+ add(c);
+ } else {
+ // plain text
+ Label blobLabel = new Label("blobText", JGitUtils.getRawContentAsString(r, commit, blobPath));
+ WicketUtils.setCssClass(blobLabel, "plainprint");
+ add(blobLabel);
+ }
+
+ // close repository
+ r.close();
+
+ // footer
+ addFooter();
+ }
+}
diff --git a/src/com/gitblit/wicket/pages/CommitPage.html b/src/com/gitblit/wicket/pages/CommitPage.html new file mode 100644 index 00000000..a493e047 --- /dev/null +++ b/src/com/gitblit/wicket/pages/CommitPage.html @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" >
+<body>
+ <!-- page header -->
+ <div wicket:id="pageHeader"></div>
+
+ <!-- page nav links -->
+ <div wicket:id="pageLinks"></div>
+
+ <!-- commit nav links -->
+ <div class="page_nav2">
+ (parent: <span wicket:id="parentLink"></span>) | <span wicket:id="patchLink"></span>
+ </div>
+
+ <!-- shortlog header -->
+ <div class="header" wicket:id="shortlog"></div>
+
+ <!-- Refs -->
+ <div wicket:id="refsPanel"></div>
+
+ <!-- commit info -->
+ <div class="title_text">
+ <table class="object_header">
+ <tr><td>author</td><td><span wicket:id="commitAuthor">Message goes here</span></td></tr>
+ <tr><td></td><td><span wicket:id="commitAuthorDate">Message goes here</span></td></tr>
+ <tr><td>committer</td><td><span wicket:id="commitCommitter">Message goes here</span></td></tr>
+ <tr><td></td><td><span wicket:id="commitCommitterDate">Message goes here</span></td></tr>
+ <tr><td>commit</td><td class="sha1"><span wicket:id="commitId">Message goes here</span></td></tr>
+ <tr><td>tree</td><td class="sha1"><span wicket:id="commitTree">Message goes here</span></td></tr>
+ <tr><td>parent</td><td class="sha1"><span wicket:id="commitParents">
+ <div wicket:id="commitParent">Message goes here</div></span></td></tr>
+ </table>
+ </div>
+
+ <!-- full message -->
+ <div class="page_body" wicket:id="fullMessage"></div>
+
+ <!-- changed paths -->
+ <div class="list_head"></div>
+ <table class="diff_tree">
+ <tr wicket:id="changedPath">
+ <td class="path"><span wicket:id="pathName"></span></td>
+ <td></td>
+ <td><span wicket:id="pathLinks"></span></td>
+ </tr>
+ </table>
+
+ <!-- footer -->
+ <div wicket:id="pageFooter"></div>
+</body>
+</html>
\ No newline at end of file diff --git a/src/com/gitblit/wicket/pages/CommitPage.java b/src/com/gitblit/wicket/pages/CommitPage.java new file mode 100644 index 00000000..ad1fce06 --- /dev/null +++ b/src/com/gitblit/wicket/pages/CommitPage.java @@ -0,0 +1,106 @@ +package com.gitblit.wicket.pages;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.wicket.PageParameters;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.markup.repeater.data.DataView;
+import org.apache.wicket.markup.repeater.data.ListDataProvider;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.revwalk.RevCommit;
+
+import com.gitblit.utils.JGitUtils;
+import com.gitblit.wicket.GitBlitWebSession;
+import com.gitblit.wicket.LinkPanel;
+import com.gitblit.wicket.RepositoryPage;
+import com.gitblit.wicket.WicketUtils;
+import com.gitblit.wicket.models.PathModel;
+import com.gitblit.wicket.panels.PathLinksPanel;
+
+
+public class CommitPage extends RepositoryPage {
+
+ public CommitPage(PageParameters params) {
+ super(params, "commit");
+
+ final String commitId = params.getString("h", "");
+
+ Repository r = getRepository();
+ RevCommit c = JGitUtils.getCommit(r, commitId);
+
+ List<String> parents = new ArrayList<String>();
+ if (c.getParentCount() > 0) {
+ for (RevCommit parent : c.getParents()) {
+ parents.add(parent.name());
+ }
+ }
+
+ // commit page links
+ if (parents.size() == 0) {
+ add(new Label("parentLink", "none"));
+ } else {
+ add(new LinkPanel("parentLink", null, parents.get(0).substring(0, 8), CommitPage.class, newCommitParameter(parents.get(0))));
+ }
+ add(new Label("patchLink", "patch"));
+
+ add(new LinkPanel("shortlog", "title", c.getShortMessage(), ShortLogPage.class, newRepositoryParameter()));
+
+ addRefs(r, c);
+
+ add(new Label("commitAuthor", JGitUtils.getDisplayName(c.getAuthorIdent())));
+ String authorDate = GitBlitWebSession.get().formatDateTimeLong(c.getAuthorIdent().getWhen());
+ add(new Label("commitAuthorDate", authorDate));
+
+ add(new Label("commitCommitter", JGitUtils.getDisplayName(c.getCommitterIdent())));
+ String comitterDate = GitBlitWebSession.get().formatDateTimeLong(c.getCommitterIdent().getWhen());
+ add(new Label("commitCommitterDate", comitterDate));
+
+ add(new Label("commitId", c.getName()));
+
+ add(new LinkPanel("commitTree", "list", c.getTree().getName(), TreePage.class, newCommitParameter()));
+
+ // Parent Commits
+ ListDataProvider<String> parentsDp = new ListDataProvider<String>(parents);
+ DataView<String> parentsView = new DataView<String>("commitParents", parentsDp) {
+ private static final long serialVersionUID = 1L;
+
+ public void populateItem(final Item<String> item) {
+ String entry = item.getModelObject();
+ item.add(new LinkPanel("commitParent", "list", entry, CommitPage.class, newCommitParameter(entry)));
+ }
+ };
+ add(parentsView);
+
+ addFullText("fullMessage", c.getFullMessage(), true);
+
+ // changed paths list
+ List<PathModel> paths = JGitUtils.getCommitChangedPaths(r, c);
+ ListDataProvider<PathModel> pathsDp = new ListDataProvider<PathModel>(paths);
+ DataView<PathModel> pathsView = new DataView<PathModel>("changedPath", pathsDp) {
+ private static final long serialVersionUID = 1L;
+ int counter = 0;
+
+ public void populateItem(final Item<PathModel> item) {
+ final PathModel entry = item.getModelObject();
+ if (entry.isTree()) {
+ item.add(new LinkPanel("pathName", null, entry.path, TreePage.class, newPathParameter(entry.path)));
+ } else {
+ item.add(new LinkPanel("pathName", "list", entry.path, BlobPage.class, newPathParameter(entry.path)));
+ }
+ item.add(new PathLinksPanel("pathLinks", repositoryName, entry));
+ String clazz = counter % 2 == 0 ? "dark" : "light";
+ WicketUtils.setCssClass(item, clazz);
+ counter++;
+ }
+ };
+ add(pathsView);
+
+ // close repository
+ r.close();
+
+ // footer
+ addFooter();
+ }
+}
diff --git a/src/com/gitblit/wicket/pages/HeadsPage.html b/src/com/gitblit/wicket/pages/HeadsPage.html new file mode 100644 index 00000000..cd914363 --- /dev/null +++ b/src/com/gitblit/wicket/pages/HeadsPage.html @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" >
+<body>
+ <!-- page header -->
+ <div wicket:id="pageHeader"></div>
+
+ <!-- page nav links -->
+ <div wicket:id="pageLinks"></div>
+
+ <!-- shortlog -->
+ <div class="header" wicket:id="summary"></div>
+
+ <table class="heads">
+ <tbody>
+ <tr wicket:id="head">
+ <td><i><span wicket:id="headDate"></span></i></td>
+ <td><div wicket:id="headName"></div></td>
+ <td></td>
+ </tr>
+ </tbody>
+ </table>
+
+ <!-- footer -->
+ <div wicket:id="pageFooter"></div>
+</body>
+</html>
\ No newline at end of file diff --git a/src/com/gitblit/wicket/pages/HeadsPage.java b/src/com/gitblit/wicket/pages/HeadsPage.java new file mode 100644 index 00000000..df5e00f0 --- /dev/null +++ b/src/com/gitblit/wicket/pages/HeadsPage.java @@ -0,0 +1,63 @@ +package com.gitblit.wicket.pages;
+
+import java.util.List;
+
+import org.apache.wicket.PageParameters;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.markup.repeater.data.DataView;
+import org.apache.wicket.markup.repeater.data.ListDataProvider;
+import org.eclipse.jgit.lib.Repository;
+
+import com.gitblit.utils.JGitUtils;
+import com.gitblit.utils.Utils;
+import com.gitblit.wicket.GitBlitWebApp;
+import com.gitblit.wicket.LinkPanel;
+import com.gitblit.wicket.RepositoryPage;
+import com.gitblit.wicket.WicketUtils;
+import com.gitblit.wicket.models.RefModel;
+
+
+public class HeadsPage extends RepositoryPage {
+
+ public HeadsPage(PageParameters params) {
+ super(params, "heads");
+
+ Repository r = getRepository();
+ List<RefModel> tags = JGitUtils.getHeads(r, -1);
+ r.close();
+
+ // shortlog
+ add(new LinkPanel("summary", "title", repositoryName, SummaryPage.class, newRepositoryParameter()));
+
+ ListDataProvider<RefModel> tagsDp = new ListDataProvider<RefModel>(tags);
+ DataView<RefModel> tagView = new DataView<RefModel>("head", tagsDp) {
+ private static final long serialVersionUID = 1L;
+ int counter = 0;
+
+ public void populateItem(final Item<RefModel> item) {
+ final RefModel entry = item.getModelObject();
+ String date;
+ if (entry.getDate() != null) {
+ date = Utils.timeAgo(entry.getDate());
+ } else {
+ date = "";
+ }
+ Label headDateLabel = new Label("headDate", date);
+ item.add(headDateLabel);
+ WicketUtils.setCssClass(headDateLabel, Utils.timeAgoCss(entry.getDate()));
+
+ item.add(new LinkPanel("headName", "list name", entry.getDisplayName(), ShortLogPage.class, newCommitParameter(entry.getName())));
+
+ String clazz = counter % 2 == 0 ? "dark" : "light";
+ WicketUtils.setCssClass(item, clazz);
+ counter++;
+ }
+ };
+ tagView.setItemsPerPage(GitBlitWebApp.PAGING_ITEM_COUNT);
+ add(tagView);
+
+ // footer
+ addFooter();
+ }
+}
diff --git a/src/com/gitblit/wicket/pages/LogPage.html b/src/com/gitblit/wicket/pages/LogPage.html new file mode 100644 index 00000000..3c1b54b9 --- /dev/null +++ b/src/com/gitblit/wicket/pages/LogPage.html @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" >
+<body>
+ <!-- page header -->
+ <div wicket:id="pageHeader"></div>
+
+ <!-- page nav links -->
+ <div wicket:id="pageLinks"></div>
+
+ <!-- summary header -->
+ <div class="header" wicket:id="summary"></div>
+
+ <!-- log -->
+ <div wicket:id="commit">
+ <div class="header">
+ <b><span class="age" wicket:id="timeAgo"></span></b>
+ <span wicket:id="link"></span>
+ </div>
+ <div wicket:id="commitRefs"></div>
+ <div class="title_text">
+ <div class="log_link">commit | commitdiff | tree</div>
+ <span wicket:id="commitAuthor"></span>
+ <span wicket:id="commitDate"></span>
+ </div>
+ <div class="log_body" wicket:id="fullMessage"></div>
+ </div>
+
+ <div wicket:id="navigator"></div>
+
+ <!-- footer -->
+ <div wicket:id="pageFooter"></div>
+</body>
+</html>
\ No newline at end of file diff --git a/src/com/gitblit/wicket/pages/LogPage.java b/src/com/gitblit/wicket/pages/LogPage.java new file mode 100644 index 00000000..325596ab --- /dev/null +++ b/src/com/gitblit/wicket/pages/LogPage.java @@ -0,0 +1,69 @@ +package com.gitblit.wicket.pages;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.wicket.PageParameters;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.navigation.paging.PagingNavigator;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.markup.repeater.data.DataView;
+import org.apache.wicket.markup.repeater.data.ListDataProvider;
+import org.eclipse.jgit.lib.ObjectId;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.revwalk.RevCommit;
+
+import com.gitblit.utils.JGitUtils;
+import com.gitblit.utils.Utils;
+import com.gitblit.wicket.GitBlitWebApp;
+import com.gitblit.wicket.GitBlitWebSession;
+import com.gitblit.wicket.LinkPanel;
+import com.gitblit.wicket.RepositoryPage;
+import com.gitblit.wicket.WicketUtils;
+import com.gitblit.wicket.panels.RefsPanel;
+
+
+public class LogPage extends RepositoryPage {
+
+ public LogPage(PageParameters params) {
+ super(params, "log");
+
+ Repository r = getRepository();
+ final Map<ObjectId, List<String>> allRefs = JGitUtils.getAllRefs(r);
+ List<RevCommit> commits = JGitUtils.getRevLog(r, 100);
+ r.close();
+
+ add(new LinkPanel("summary", "title", repositoryName, SummaryPage.class, newRepositoryParameter()));
+
+ // log
+ ListDataProvider<RevCommit> dp = new ListDataProvider<RevCommit>(commits);
+ DataView<RevCommit> logView = new DataView<RevCommit>("commit", dp) {
+ private static final long serialVersionUID = 1L;
+
+ public void populateItem(final Item<RevCommit> item) {
+ final RevCommit entry = item.getModelObject();
+ final Date date = JGitUtils.getCommitDate(entry);
+
+ item.add(new Label("timeAgo", Utils.timeAgo(date)));
+
+ item.add(new LinkPanel("link", "title", entry.getShortMessage(), CommitPage.class, newCommitParameter(entry.getName())));
+
+ item.add(new RefsPanel("commitRefs", entry, allRefs));
+
+ String author = entry.getAuthorIdent().getName();
+ item.add(createAuthorLabel("commitAuthor", author));
+
+ item.add(new Label("commitDate", GitBlitWebSession.get().formatDateTimeLong(date)));
+
+ item.add(new Label("fullMessage", WicketUtils.breakLines(entry.getFullMessage())).setEscapeModelStrings(false));
+ }
+ };
+ logView.setItemsPerPage(GitBlitWebApp.PAGING_ITEM_COUNT);
+ add(logView);
+ add(new PagingNavigator("navigator", logView));
+
+ // footer
+ addFooter();
+ }
+}
diff --git a/src/com/gitblit/wicket/pages/RepositoriesPage.html b/src/com/gitblit/wicket/pages/RepositoriesPage.html new file mode 100644 index 00000000..6a3054f1 --- /dev/null +++ b/src/com/gitblit/wicket/pages/RepositoriesPage.html @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" >
+<body>
+ <div wicket:id="pageHeader"></div>
+ <div class="index_include" wicket:id="indexInclude"></div>
+
+ <table class="project_list">
+ <tr>
+ <th wicket:id="orderByRepository">Repository</th>
+ <th wicket:id="orderByDescription">Description</th>
+ <th wicket:id="orderByOwner">Owner</th>
+ <th wicket:id="orderByDate">Last Change</th>
+ <th></th>
+ </tr>
+ <tbody>
+ <tr wicket:id="repository">
+ <td><div class="list" wicket:id="repositoryName"></div></td>
+ <td><div class="list" wicket:id="repositoryDescription"></div></td>
+ <td><i><span wicket:id="repositoryOwner"></span></i></td>
+ <td><span wicket:id="repositoryLastChange"></span></td>
+ <td></td>
+ </tr>
+ </tbody>
+ </table>
+
+ <!-- footer -->
+ <div wicket:id="pageFooter"></div>
+</body>
+</html>
\ No newline at end of file diff --git a/src/com/gitblit/wicket/pages/RepositoriesPage.java b/src/com/gitblit/wicket/pages/RepositoriesPage.java new file mode 100644 index 00000000..1c880d9f --- /dev/null +++ b/src/com/gitblit/wicket/pages/RepositoriesPage.java @@ -0,0 +1,151 @@ +package com.gitblit.wicket.pages;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.wicket.PageParameters;
+import org.apache.wicket.extensions.markup.html.repeater.data.sort.OrderByBorder;
+import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
+import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.markup.repeater.data.DataView;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+
+import com.gitblit.StoredSettings;
+import com.gitblit.utils.Utils;
+import com.gitblit.wicket.BasePage;
+import com.gitblit.wicket.GitBlitWebApp;
+import com.gitblit.wicket.LinkPanel;
+import com.gitblit.wicket.WicketUtils;
+import com.gitblit.wicket.models.RepositoryModel;
+import com.gitblit.wicket.panels.PageFooter;
+import com.gitblit.wicket.panels.PageHeader;
+
+
+public class RepositoriesPage extends BasePage {
+
+ public RepositoriesPage() {
+ add(new PageHeader("pageHeader"));
+
+ add(new Label("indexInclude", StoredSettings.getString("indexMessage", "")).setEscapeModelStrings(false));
+
+ List<RepositoryModel> rows = GitBlitWebApp.get().getRepositories(getRequest());
+ DataProvider dp = new DataProvider(rows);
+ DataView<RepositoryModel> dataView = new DataView<RepositoryModel>("repository", dp) {
+ private static final long serialVersionUID = 1L;
+ int counter = 0;
+
+ public void populateItem(final Item<RepositoryModel> item) {
+ final RepositoryModel entry = item.getModelObject();
+ PageParameters pp = new PageParameters("p=" + entry.name);
+ item.add(new LinkPanel("repositoryName", "list", entry.name, SummaryPage.class, pp));
+ item.add(new LinkPanel("repositoryDescription", "list", entry.description, SummaryPage.class, pp));
+ item.add(new Label("repositoryOwner", entry.owner));
+
+ String lastChange = Utils.timeAgo(entry.lastChange);
+ Label lastChangeLabel = new Label("repositoryLastChange", lastChange);
+ item.add(lastChangeLabel);
+ WicketUtils.setCssClass(lastChangeLabel, Utils.timeAgoCss(entry.lastChange));
+
+ String clazz = counter % 2 == 0 ? "dark" : "light";
+ WicketUtils.setCssClass(item, clazz);
+ counter++;
+ }
+ };
+ add(dataView);
+
+ add(newSort("orderByRepository", SortBy.repository, dp, dataView));
+ add(newSort("orderByDescription", SortBy.description, dp, dataView));
+ add(newSort("orderByOwner", SortBy.owner, dp, dataView));
+ add(newSort("orderByDate", SortBy.date, dp, dataView));
+
+ add(new PageFooter("pageFooter"));
+ }
+
+ protected enum SortBy {
+ repository, description, owner, date;
+ }
+
+ protected OrderByBorder newSort(String wicketId, SortBy field, SortableDataProvider<?> dp, final DataView<?> dataView) {
+ return new OrderByBorder(wicketId, field.name(), dp) {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected void onSortChanged() {
+ dataView.setCurrentPage(0);
+ }
+ };
+ }
+
+ private class DataProvider extends SortableDataProvider<RepositoryModel> {
+ private static final long serialVersionUID = 1L;
+ private List<RepositoryModel> list = null;
+
+ protected DataProvider(List<RepositoryModel> list) {
+ this.list = list;
+ setSort(SortBy.date.name(), false);
+ }
+
+ @Override
+ public int size() {
+ if (list == null)
+ return 0;
+ return list.size();
+ }
+
+ @Override
+ public IModel<RepositoryModel> model(RepositoryModel header) {
+ return new Model<RepositoryModel>(header);
+ }
+
+ @Override
+ public Iterator<RepositoryModel> iterator(int first, int count) {
+ SortParam sp = getSort();
+ String prop = sp.getProperty();
+ final boolean asc = sp.isAscending();
+
+ if (prop == null || prop.equals(SortBy.date.name())) {
+ Collections.sort(list, new Comparator<RepositoryModel>() {
+ @Override
+ public int compare(RepositoryModel o1, RepositoryModel o2) {
+ if (asc)
+ return o1.lastChange.compareTo(o2.lastChange);
+ return o2.lastChange.compareTo(o1.lastChange);
+ }
+ });
+ } else if (prop.equals(SortBy.repository.name())) {
+ Collections.sort(list, new Comparator<RepositoryModel>() {
+ @Override
+ public int compare(RepositoryModel o1, RepositoryModel o2) {
+ if (asc)
+ return o1.name.compareTo(o2.name);
+ return o2.name.compareTo(o1.name);
+ }
+ });
+ } else if (prop.equals(SortBy.owner.name())) {
+ Collections.sort(list, new Comparator<RepositoryModel>() {
+ @Override
+ public int compare(RepositoryModel o1, RepositoryModel o2) {
+ if (asc)
+ return o1.owner.compareTo(o2.owner);
+ return o2.owner.compareTo(o1.owner);
+ }
+ });
+ } else if (prop.equals(SortBy.description.name())) {
+ Collections.sort(list, new Comparator<RepositoryModel>() {
+ @Override
+ public int compare(RepositoryModel o1, RepositoryModel o2) {
+ if (asc)
+ return o1.description.compareTo(o2.description);
+ return o2.description.compareTo(o1.description);
+ }
+ });
+ }
+ return list.subList(first, first + count).iterator();
+ }
+ }
+}
diff --git a/src/com/gitblit/wicket/pages/ShortLogPage.html b/src/com/gitblit/wicket/pages/ShortLogPage.html new file mode 100644 index 00000000..b10e90d6 --- /dev/null +++ b/src/com/gitblit/wicket/pages/ShortLogPage.html @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" >
+<body>
+ <!-- page header -->
+ <div wicket:id="pageHeader"></div>
+
+ <!-- page nav links -->
+ <div wicket:id="pageLinks"></div>
+
+ <!-- shortlog -->
+ <div class="header" wicket:id="summary"></div>
+
+ <table class="project_list">
+ <tbody>
+ <tr wicket:id="commit">
+ <td><span wicket:id="commitDate"></span></td>
+ <td><i><span wicket:id="commitAuthor"></span></i></td>
+ <td><div wicket:id="commitShortMessage"></div></td>
+ <td><div wicket:id="commitRefs"></div></td>
+ <td><span wicket:id="commitLinks"></span></td>
+ </tr>
+ <tr>
+ <td colspan="4"><div wicket:id="navigator"></div></td>
+ </tr>
+ </tbody>
+ </table>
+
+ <!-- footer -->
+ <div wicket:id="pageFooter"></div>
+</body>
+</html>
\ No newline at end of file diff --git a/src/com/gitblit/wicket/pages/ShortLogPage.java b/src/com/gitblit/wicket/pages/ShortLogPage.java new file mode 100644 index 00000000..220874e8 --- /dev/null +++ b/src/com/gitblit/wicket/pages/ShortLogPage.java @@ -0,0 +1,76 @@ +package com.gitblit.wicket.pages;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.wicket.PageParameters;
+import org.apache.wicket.markup.html.navigation.paging.PagingNavigator;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.markup.repeater.data.DataView;
+import org.apache.wicket.markup.repeater.data.ListDataProvider;
+import org.eclipse.jgit.lib.ObjectId;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.revwalk.RevCommit;
+
+import com.gitblit.utils.JGitUtils;
+import com.gitblit.wicket.GitBlitWebApp;
+import com.gitblit.wicket.LinkPanel;
+import com.gitblit.wicket.RepositoryPage;
+import com.gitblit.wicket.WicketUtils;
+import com.gitblit.wicket.panels.RefsPanel;
+import com.gitblit.wicket.panels.ShortLogLinksPanel;
+
+
+public class ShortLogPage extends RepositoryPage {
+
+ public ShortLogPage(PageParameters params) {
+ super(params, "shortlog");
+
+ Repository r = getRepository();
+ final Map<ObjectId, List<String>> allRefs = JGitUtils.getAllRefs(r);
+ List<RevCommit> commits = JGitUtils.getRevLog(r, 100);
+ r.close();
+
+ // shortlog
+ add(new LinkPanel("summary", "title", repositoryName, SummaryPage.class, newRepositoryParameter()));
+
+ ListDataProvider<RevCommit> dp = new ListDataProvider<RevCommit>(commits);
+ DataView<RevCommit> shortlogView = new DataView<RevCommit>("commit", dp) {
+ private static final long serialVersionUID = 1L;
+ int counter = 0;
+
+ public void populateItem(final Item<RevCommit> item) {
+ final RevCommit entry = item.getModelObject();
+ final Date date = JGitUtils.getCommitDate(entry);
+
+ item.add(createShortlogDateLabel("commitDate", date));
+
+ String author = entry.getAuthorIdent().getName();
+ item.add(createAuthorLabel("commitAuthor", author));
+
+ String shortMessage = entry.getShortMessage();
+ String trimmedMessage = trimShortLog(shortMessage);
+ LinkPanel shortlog = new LinkPanel("commitShortMessage", "list subject", trimmedMessage, CommitPage.class, newCommitParameter(entry.getName()));
+ if (!shortMessage.equals(trimmedMessage)) {
+ WicketUtils.setHtmlTitle(shortlog, shortMessage);
+ }
+ item.add(shortlog);
+
+ item.add(new RefsPanel("commitRefs", entry, allRefs));
+
+ item.add(new ShortLogLinksPanel("commitLinks", repositoryName, entry.getName()));
+
+ String clazz = counter % 2 == 0 ? "dark" : "light";
+ WicketUtils.setCssClass(item, clazz);
+ counter++;
+ }
+ };
+ shortlogView.setItemsPerPage(GitBlitWebApp.PAGING_ITEM_COUNT);
+ add(shortlogView);
+ add(new PagingNavigator("navigator", shortlogView));
+
+ // footer
+ addFooter();
+ }
+}
diff --git a/src/com/gitblit/wicket/pages/SummaryPage.html b/src/com/gitblit/wicket/pages/SummaryPage.html new file mode 100644 index 00000000..3eab0a1e --- /dev/null +++ b/src/com/gitblit/wicket/pages/SummaryPage.html @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" >
+<body>
+ <!-- page header -->
+ <div wicket:id="pageHeader"></div>
+
+ <!-- page nav links -->
+ <div wicket:id="pageLinks"></div>
+
+ <!-- repository info -->
+ <div class="title"> </div>
+ <table class="projects_list">
+ <tr id="metadata_desc"><td>description</td><td><span wicket:id="repositoryDescription">Message goes here</span></td></tr>
+ <tr id="metadata_owner"><td>owner</td><td><span wicket:id="repositoryOwner">Message goes here</span></td></tr>
+ <tr id="metadata_lchange"><td>last change</td><td><span wicket:id="repositoryLastChange">Message goes here</span></td></tr>
+ <tr class="metadata_url"><td>URL</td><td><span wicket:id="repositoryCloneUrl">Message goes here</span></td></tr>
+ </table>
+
+
+ <!-- shortlog -->
+ <div class="header" wicket:id="shortlog"></div>
+
+ <table class="project_list">
+ <tbody>
+ <tr wicket:id="commit">
+ <td><span wicket:id="commitDate"></span></td>
+ <td><i><span wicket:id="commitAuthor"></span></i></td>
+ <td><div wicket:id="commitShortMessage"></div></td>
+ <td><div wicket:id="commitRefs"></div></td>
+ <td><span wicket:id="commitLinks"></span></td>
+ </tr>
+
+ <tr>
+ <td colspan="4"><div wicket:id="shortlogMore"></div></td>
+ </tr>
+ </tbody>
+ </table>
+
+
+ <!-- tags -->
+ <div class="header" wicket:id="tags"></div>
+
+ <table class="project_list">
+ <tbody>
+ <tr wicket:id="tag">
+ <td><i><span wicket:id="tagDate"></span></i></td>
+ <td><div wicket:id="tagName"></div></td>
+ <td><div wicket:id="tagDescription"></div></td>
+ <td><span wicket:id="tagLinks"></span></td>
+ </tr>
+
+ <tr>
+ <td colspan="4"><div wicket:id="tagsMore"></div></td>
+ </tr>
+ </tbody>
+ </table>
+
+
+ <!-- heads -->
+ <div class="header" wicket:id="heads"></div>
+
+ <table class="heads">
+ <tbody>
+ <tr wicket:id="head">
+ <td><i><span wicket:id="headDate"></span></i></td>
+ <td><div wicket:id="headName"></div></td>
+ <td><span wicket:id="headLinks"></span></td>
+ </tr>
+ </tbody>
+ </table>
+
+
+ <!-- footer -->
+ <div wicket:id="pageFooter"></div>
+</body>
+</html>
\ No newline at end of file diff --git a/src/com/gitblit/wicket/pages/SummaryPage.java b/src/com/gitblit/wicket/pages/SummaryPage.java new file mode 100644 index 00000000..84e78b4e --- /dev/null +++ b/src/com/gitblit/wicket/pages/SummaryPage.java @@ -0,0 +1,149 @@ +package com.gitblit.wicket.pages;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.wicket.PageParameters;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.markup.repeater.data.DataView;
+import org.apache.wicket.markup.repeater.data.ListDataProvider;
+import org.eclipse.jgit.lib.ObjectId;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.revwalk.RevCommit;
+
+import com.gitblit.utils.JGitUtils;
+import com.gitblit.wicket.GitBlitWebApp;
+import com.gitblit.wicket.GitBlitWebSession;
+import com.gitblit.wicket.LinkPanel;
+import com.gitblit.wicket.RepositoryPage;
+import com.gitblit.wicket.WicketUtils;
+import com.gitblit.wicket.models.RefModel;
+import com.gitblit.wicket.panels.HeadLinksPanel;
+import com.gitblit.wicket.panels.RefsPanel;
+import com.gitblit.wicket.panels.ShortLogLinksPanel;
+import com.gitblit.wicket.panels.TagLinksPanel;
+
+
+public class SummaryPage extends RepositoryPage {
+
+ public SummaryPage(PageParameters params) {
+ super(params, "summary");
+
+ Repository r = getRepository();
+ final Map<ObjectId, List<String>> allRefs = JGitUtils.getAllRefs(r);
+
+ String owner = JGitUtils.getRepositoryOwner(r);
+ GitBlitWebSession session = GitBlitWebSession.get();
+ String lastchange = session.formatDateTimeLong(JGitUtils.getLastChange(r));
+ String cloneurl = GitBlitWebApp.get().getCloneUrl(repositoryName);
+
+ // repository description
+ add(new Label("repositoryDescription", description));
+ add(new Label("repositoryOwner", owner));
+ add(new Label("repositoryLastChange", lastchange));
+ add(new Label("repositoryCloneUrl", cloneurl));
+
+ int summaryCount = 16;
+
+ // shortlog
+ add(new LinkPanel("shortlog", "title", "shortlog", ShortLogPage.class, newRepositoryParameter()));
+
+ List<RevCommit> commits = JGitUtils.getRevLog(r, summaryCount);
+ ListDataProvider<RevCommit> dp = new ListDataProvider<RevCommit>(commits);
+ DataView<RevCommit> shortlogView = new DataView<RevCommit>("commit", dp) {
+ private static final long serialVersionUID = 1L;
+ int counter = 0;
+
+ public void populateItem(final Item<RevCommit> item) {
+ RevCommit entry = item.getModelObject();
+ Date date = JGitUtils.getCommitDate(entry);
+
+ item.add(createShortlogDateLabel("commitDate", date));
+
+ String author = entry.getAuthorIdent().getName();
+ item.add(createAuthorLabel("commitAuthor", author));
+
+ String shortMessage = entry.getShortMessage();
+ String trimmedMessage = trimShortLog(shortMessage);
+ LinkPanel shortlog = new LinkPanel("commitShortMessage", "list subject", trimmedMessage, CommitPage.class, newCommitParameter(entry.getName()));
+ if (!shortMessage.equals(trimmedMessage)) {
+ WicketUtils.setHtmlTitle(shortlog, shortMessage);
+ }
+ item.add(shortlog);
+
+ item.add(new RefsPanel("commitRefs", entry, allRefs));
+
+ item.add(new ShortLogLinksPanel("commitLinks", repositoryName, entry.getName()));
+
+ setAlternatingBackground(item, counter);
+ counter++;
+ }
+ };
+ add(shortlogView);
+ add(new LinkPanel("shortlogMore", "link", "...", ShortLogPage.class, newRepositoryParameter()));
+
+ // tags
+ List<RefModel> tags = JGitUtils.getTags(r, summaryCount);
+ add(new LinkPanel("tags", "title", "tags", TagsPage.class, newRepositoryParameter()));
+
+ ListDataProvider<RefModel> tagsDp = new ListDataProvider<RefModel>(tags);
+ DataView<RefModel> tagView = new DataView<RefModel>("tag", tagsDp) {
+ private static final long serialVersionUID = 1L;
+ int counter = 0;
+
+ public void populateItem(final Item<RefModel> item) {
+ final RefModel entry = item.getModelObject();
+
+ item.add(createDateLabel("tagDate", entry.getDate()));
+
+ item.add(new LinkPanel("tagName", "list name", entry.getDisplayName(), CommitPage.class, newCommitParameter(entry.getCommitId().getName())));
+
+ if (entry.getCommitId().equals(entry.getObjectId())) {
+ // lightweight tag on commit object
+ item.add(new Label("tagDescription", ""));
+ } else {
+ // tag object
+ item.add(new LinkPanel("tagDescription", "list subject", entry.getShortLog(), TagPage.class, newCommitParameter(entry.getObjectId().getName())));
+ }
+
+ item.add(new TagLinksPanel("tagLinks", repositoryName, entry));
+
+ setAlternatingBackground(item, counter);
+ counter++;
+ }
+ };
+ add(tagView);
+ add(new LinkPanel("tagsMore", "link", "...", TagsPage.class, newRepositoryParameter()));
+ // heads
+ List<RefModel> heads = JGitUtils.getHeads(r, summaryCount);
+ add(new LinkPanel("heads", "title", "heads", HeadsPage.class, newRepositoryParameter()));
+
+ ListDataProvider<RefModel> headsDp = new ListDataProvider<RefModel>(heads);
+ DataView<RefModel> headsView = new DataView<RefModel>("head", headsDp) {
+ private static final long serialVersionUID = 1L;
+ int counter = 0;
+
+ public void populateItem(final Item<RefModel> item) {
+ final RefModel entry = item.getModelObject();
+
+ item.add(createDateLabel("headDate", entry.getDate()));
+
+ item.add(new LinkPanel("headName", "list name", entry.getDisplayName(), ShortLogPage.class, newCommitParameter(entry.getName())));
+
+ item.add(new HeadLinksPanel("headLinks", repositoryName, entry));
+
+ setAlternatingBackground(item, counter);
+ counter++;
+ }
+ };
+ add(headsView);
+
+ // close the repository
+ r.close();
+
+ // footer
+ addFooter();
+ }
+}
diff --git a/src/com/gitblit/wicket/pages/TagPage.html b/src/com/gitblit/wicket/pages/TagPage.html new file mode 100644 index 00000000..ae2c99c2 --- /dev/null +++ b/src/com/gitblit/wicket/pages/TagPage.html @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" >
+<body>
+ <!-- page header -->
+ <div wicket:id="pageHeader"></div>
+
+ <!-- page nav links -->
+ <div wicket:id="pageLinks"></div>
+
+ <!-- summary header -->
+ <div class="header" wicket:id="commit"></div>
+
+ <!-- commit info -->
+ <div class="title_text">
+ <table class="object_header">
+ <tr><td>object</td><td><span wicket:id="tagId">Message goes here</span></td></tr>
+ <tr><td>author</td><td><span wicket:id="tagAuthor">Message goes here</span></td></tr>
+ <tr><td></td><td><span wicket:id="tagDate">Message goes here</span></td></tr>
+ </table>
+ </div>
+
+ <!-- full message -->
+ <div class="page_body" wicket:id="fullMessage"></div>
+
+ <!-- footer -->
+ <div wicket:id="pageFooter"></div>
+</body>
+</html>
\ No newline at end of file diff --git a/src/com/gitblit/wicket/pages/TagPage.java b/src/com/gitblit/wicket/pages/TagPage.java new file mode 100644 index 00000000..f098c1e3 --- /dev/null +++ b/src/com/gitblit/wicket/pages/TagPage.java @@ -0,0 +1,36 @@ +package com.gitblit.wicket.pages;
+
+import org.apache.wicket.PageParameters;
+import org.apache.wicket.markup.html.basic.Label;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.revwalk.RevCommit;
+
+import com.gitblit.utils.JGitUtils;
+import com.gitblit.wicket.GitBlitWebSession;
+import com.gitblit.wicket.LinkPanel;
+import com.gitblit.wicket.RepositoryPage;
+
+
+public class TagPage extends RepositoryPage {
+
+ public TagPage(PageParameters params) {
+ super(params, "tag");
+
+ Repository r = getRepository();
+ RevCommit c = JGitUtils.getCommit(r, commitId);
+
+ add(new LinkPanel("commit", "title", c.getName(), CommitPage.class, newCommitParameter()));
+
+ add(new LinkPanel("tagId", "list", c.getName(), CommitPage.class, newCommitParameter(c.getName())));
+ add(new Label("tagAuthor", JGitUtils.getDisplayName(c.getAuthorIdent())));
+ String authorDate = GitBlitWebSession.get().formatDateTimeLong(c.getAuthorIdent().getWhen());
+ add(new Label("tagDate", authorDate));
+
+ addFullText("fullMessage", c.getFullMessage(), true);
+
+ r.close();
+
+ // footer
+ addFooter();
+ }
+}
diff --git a/src/com/gitblit/wicket/pages/TagsPage.html b/src/com/gitblit/wicket/pages/TagsPage.html new file mode 100644 index 00000000..314eec77 --- /dev/null +++ b/src/com/gitblit/wicket/pages/TagsPage.html @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" >
+<body>
+ <!-- page header -->
+ <div wicket:id="pageHeader"></div>
+
+ <!-- page nav links -->
+ <div wicket:id="pageLinks"></div>
+
+ <!-- shortlog -->
+ <div class="header" wicket:id="summary"></div>
+
+ <table class="tags">
+ <tbody>
+ <tr wicket:id="tag">
+ <td><i><span wicket:id="tagDate"></span></i></td>
+ <td><div wicket:id="tagName"></div></td>
+ <td><div wicket:id="tagDescription"></div></td>
+ <td><span wicket:id="tagLinks"></span></td>
+ </tr>
+ <tr>
+ <td colspan="4"><div wicket:id="navigator"></div></td>
+ </tr>
+ </tbody>
+ </table>
+
+ <!-- footer -->
+ <div wicket:id="pageFooter"></div>
+</body>
+</html>
\ No newline at end of file diff --git a/src/com/gitblit/wicket/pages/TagsPage.java b/src/com/gitblit/wicket/pages/TagsPage.java new file mode 100644 index 00000000..85c0455c --- /dev/null +++ b/src/com/gitblit/wicket/pages/TagsPage.java @@ -0,0 +1,64 @@ +package com.gitblit.wicket.pages;
+
+import java.util.List;
+
+import org.apache.wicket.PageParameters;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.navigation.paging.PagingNavigator;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.markup.repeater.data.DataView;
+import org.apache.wicket.markup.repeater.data.ListDataProvider;
+import org.eclipse.jgit.lib.Repository;
+
+import com.gitblit.utils.JGitUtils;
+import com.gitblit.wicket.GitBlitWebApp;
+import com.gitblit.wicket.LinkPanel;
+import com.gitblit.wicket.RepositoryPage;
+import com.gitblit.wicket.models.RefModel;
+import com.gitblit.wicket.panels.TagLinksPanel;
+
+
+public class TagsPage extends RepositoryPage {
+
+ public TagsPage(PageParameters params) {
+ super(params, "tags");
+ Repository r = getRepository();
+ List<RefModel> tags = JGitUtils.getTags(r, -1);
+ r.close();
+
+ // shortlog
+ add(new LinkPanel("summary", "title", repositoryName, SummaryPage.class, newRepositoryParameter()));
+
+ ListDataProvider<RefModel> tagsDp = new ListDataProvider<RefModel>(tags);
+ DataView<RefModel> tagView = new DataView<RefModel>("tag", tagsDp) {
+ private static final long serialVersionUID = 1L;
+ int counter = 0;
+
+ public void populateItem(final Item<RefModel> item) {
+ final RefModel entry = item.getModelObject();
+ item.add(createDateLabel("tagDate", entry.getDate()));
+
+ item.add(new LinkPanel("tagName", "list name", entry.getDisplayName(), CommitPage.class, newCommitParameter(entry.getObjectId().getName())));
+
+ if (entry.getCommitId().equals(entry.getObjectId())) {
+ // lightweight tag on commit object
+ item.add(new Label("tagDescription", ""));
+ } else {
+ // tag object
+ item.add(new LinkPanel("tagDescription", "list subject", entry.getShortLog(), TagPage.class, newCommitParameter(entry.getObjectId().getName())));
+ }
+
+ item.add(new TagLinksPanel("tagLinks", repositoryName, entry));
+
+ setAlternatingBackground(item, counter);
+ counter++;
+ }
+ };
+ tagView.setItemsPerPage(GitBlitWebApp.PAGING_ITEM_COUNT);
+ add(tagView);
+ add(new PagingNavigator("navigator", tagView));
+
+ // footer
+ addFooter();
+ }
+}
diff --git a/src/com/gitblit/wicket/pages/TreePage.html b/src/com/gitblit/wicket/pages/TreePage.html new file mode 100644 index 00000000..e01049c6 --- /dev/null +++ b/src/com/gitblit/wicket/pages/TreePage.html @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" >
+<body>
+ <!-- page header -->
+ <div wicket:id="pageHeader"></div>
+
+ <!-- page nav links -->
+ <div wicket:id="pageLinks"></div>
+
+ <!-- blob nav links -->
+ <div class="page_nav2">
+ <span wicket:id="historyLink"></span> | <span wicket:id="headLink"></span>
+ </div>
+
+ <!-- shortlog header -->
+ <div class="header" wicket:id="shortlog"></div>
+
+ <!-- breadcrumbs -->
+ <div wicket:id="breadcrumbs"></div>
+
+ <!-- changed paths -->
+ <div class="list_head"></div>
+ <table class="diff_tree">
+ <tr wicket:id="changedPath">
+ <td class="mode"><span wicket:id="pathPermissions"></span></td>
+ <td class="size"><span wicket:id="pathSize"></span></td>
+ <td><span wicket:id="pathName"></span></td>
+ <td><span wicket:id="treeLinks"></span></td>
+ </tr>
+ </table>
+
+ <!-- footer -->
+ <div wicket:id="pageFooter"></div>
+</body>
+</html>
\ No newline at end of file diff --git a/src/com/gitblit/wicket/pages/TreePage.java b/src/com/gitblit/wicket/pages/TreePage.java new file mode 100644 index 00000000..a608bdda --- /dev/null +++ b/src/com/gitblit/wicket/pages/TreePage.java @@ -0,0 +1,89 @@ +package com.gitblit.wicket.pages;
+
+import java.util.List;
+
+import org.apache.wicket.PageParameters;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.markup.repeater.data.DataView;
+import org.apache.wicket.markup.repeater.data.ListDataProvider;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.revwalk.RevCommit;
+
+import com.gitblit.utils.ByteFormat;
+import com.gitblit.utils.JGitUtils;
+import com.gitblit.wicket.LinkPanel;
+import com.gitblit.wicket.RepositoryPage;
+import com.gitblit.wicket.WicketUtils;
+import com.gitblit.wicket.models.PathModel;
+import com.gitblit.wicket.panels.PathBreadcrumbsPanel;
+import com.gitblit.wicket.panels.TreeLinksPanel;
+
+
+public class TreePage extends RepositoryPage {
+
+ public TreePage(PageParameters params) {
+ super(params, "tree");
+
+ final String basePath = params.getString("f", null);
+
+ Repository r = getRepository();
+ RevCommit commit = JGitUtils.getCommit(r, commitId);
+ List<PathModel> paths = JGitUtils.getFilesInPath(r, basePath, commit);
+
+ // tree page links
+ add(new Label("historyLink", "history"));
+ add(new Label("headLink", "HEAD"));
+
+ add(new LinkPanel("shortlog", "title", commit.getShortMessage(), CommitPage.class, newCommitParameter()));
+
+ // breadcrumbs
+ if (basePath == null || basePath.trim().length() == 0) {
+ add(new Label("breadcrumbs", "").setVisible(false));
+ } else {
+ add(new PathBreadcrumbsPanel("breadcrumbs", repositoryName, basePath, commitId));
+ paths.add(0, PathModel.getParentPath(basePath, commitId));
+ }
+
+ final ByteFormat byteFormat = new ByteFormat();
+
+ // changed paths list
+ ListDataProvider<PathModel> pathsDp = new ListDataProvider<PathModel>(paths);
+ DataView<PathModel> pathsView = new DataView<PathModel>("changedPath", pathsDp) {
+ private static final long serialVersionUID = 1L;
+ int counter = 0;
+
+ public void populateItem(final Item<PathModel> item) {
+ PathModel entry = item.getModelObject();
+ item.add(new Label("pathPermissions", JGitUtils.getPermissionsFromMode(entry.mode)));
+ if (entry.isParentPath) {
+ // parent .. path
+ item.add(new Label("pathSize", "").setVisible(false));
+ item.add(new LinkPanel("pathName", null, entry.name, TreePage.class, newPathParameter(entry.path)));
+ item.add(new Label("treeLinks", "").setVisible(false));
+ } else {
+ if (entry.isTree()) {
+ // folder/tree link
+ item.add(new Label("pathSize", "-"));
+ item.add(new LinkPanel("pathName", null, entry.name, TreePage.class, newPathParameter(entry.path)));
+ } else {
+ // blob link
+ item.add(new Label("pathSize", byteFormat.format(entry.size)));
+ item.add(new LinkPanel("pathName", "list", entry.name, BlobPage.class, newPathParameter(entry.path)));
+ }
+ item.add(new TreeLinksPanel("treeLinks", repositoryName, entry));
+ }
+ String clazz = counter % 2 == 0 ? "dark" : "light";
+ WicketUtils.setCssClass(item, clazz);
+ counter++;
+ }
+ };
+ add(pathsView);
+
+ // close repository
+ r.close();
+
+ // footer
+ addFooter();
+ }
+}
|