@@ -4,6 +4,7 @@ import java.io.ByteArrayOutputStream; | |||
import java.io.File; | |||
import java.io.IOException; | |||
import java.io.InputStream; | |||
import java.nio.charset.Charset; | |||
import java.text.DateFormat; | |||
import java.text.ParseException; | |||
import java.text.SimpleDateFormat; | |||
@@ -264,12 +265,14 @@ public class JGitUtils { | |||
} | |||
public static String getRawContentAsString(Repository r, RevBlob blob) { | |||
return new String(getRawContent(r, blob)); | |||
byte [] content = getRawContent(r, blob); | |||
return new String(content, Charset.forName("UTF-8")); | |||
} | |||
public static String getRawContentAsString(Repository r, RevCommit commit, String blobPath) { | |||
RevObject obj = getRevObject(r, commit.getTree(), blobPath); | |||
return new String(getRawContent(r, (RevBlob) obj)); | |||
byte [] content = getRawContent(r, (RevBlob) obj); | |||
return new String(content, Charset.forName("UTF-8")); | |||
} | |||
public static List<PathModel> getFilesInPath(Repository r, String basePath, String objectId) { |
@@ -1,12 +1,18 @@ | |||
package com.gitblit.utils; | |||
import java.io.IOException; | |||
import java.io.StringReader; | |||
import java.io.StringWriter; | |||
import java.io.UnsupportedEncodingException; | |||
import java.security.MessageDigest; | |||
import java.security.NoSuchAlgorithmException; | |||
import java.util.List; | |||
import org.tautua.markdownpapers.Markdown; | |||
import org.tautua.markdownpapers.parser.ParseException; | |||
public class StringUtils { | |||
public static boolean isEmpty(String value) { | |||
return value == null || value.trim().length() == 0; | |||
} | |||
@@ -107,4 +113,22 @@ public class StringUtils { | |||
} | |||
} | |||
public static String transformMarkdown(String markdown) throws java.text.ParseException { | |||
// Read raw markdown content and transform it to html | |||
StringReader reader = new StringReader(markdown); | |||
StringWriter writer = new StringWriter(); | |||
try { | |||
Markdown md = new Markdown(); | |||
md.transform(reader, writer); | |||
return writer.toString(); | |||
} catch (ParseException p) { | |||
throw new java.text.ParseException(p.getMessage(), 0); | |||
} finally { | |||
reader.close(); | |||
try { | |||
writer.close(); | |||
} catch (IOException e) { | |||
} | |||
} | |||
} | |||
} |
@@ -0,0 +1,30 @@ | |||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | |||
<html xmlns="http://www.w3.org/1999/xhtml" | |||
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd" | |||
xml:lang="en" | |||
lang="en"> | |||
<body> | |||
<wicket:extend> | |||
<!-- page header bar --> | |||
<div> | |||
<!-- floating search form on right --> | |||
<form wicket:id="searchForm"> | |||
<div class="search"> | |||
<select wicket:id="searchType"/> | |||
<input type="text" id="searchBox" wicket:id="searchBox" size="25" value=""/> | |||
</div> | |||
</form> | |||
<!-- page nav links --> | |||
<div class="page_nav"> | |||
<a wicket:id="summary"><wicket:message key="gb.summary"></wicket:message></a> | <a wicket:id="log"><wicket:message key="gb.log"></wicket:message></a> | <a wicket:id="branches"><wicket:message key="gb.branches"></wicket:message></a> | <a wicket:id="tags"><wicket:message key="gb.tags"></wicket:message></a> | <a wicket:id="tree"><wicket:message key="gb.tree"></wicket:message></a> <span wicket:id="extra"><span wicket:id="extraSeparator"></span><span wicket:id="extraLink"></span></span> | |||
</div> | |||
</div> | |||
<!-- page content --> | |||
<wicket:child /> | |||
</wicket:extend> | |||
</body> | |||
</html> |
@@ -1,5 +1,7 @@ | |||
package com.gitblit.wicket; | |||
import java.util.ArrayList; | |||
import java.util.Arrays; | |||
import java.util.HashMap; | |||
import java.util.List; | |||
import java.util.Map; | |||
@@ -7,7 +9,16 @@ import java.util.Map; | |||
import org.apache.wicket.Component; | |||
import org.apache.wicket.PageParameters; | |||
import org.apache.wicket.markup.html.basic.Label; | |||
import org.apache.wicket.markup.html.form.DropDownChoice; | |||
import org.apache.wicket.markup.html.form.StatelessForm; | |||
import org.apache.wicket.markup.html.form.TextField; | |||
import org.apache.wicket.markup.html.link.BookmarkablePageLink; | |||
import org.apache.wicket.markup.html.panel.Fragment; | |||
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.apache.wicket.model.IModel; | |||
import org.apache.wicket.model.Model; | |||
import org.eclipse.jgit.diff.DiffEntry.ChangeType; | |||
import org.eclipse.jgit.lib.PersonIdent; | |||
import org.eclipse.jgit.lib.Repository; | |||
@@ -20,9 +31,15 @@ import com.gitblit.Keys; | |||
import com.gitblit.utils.JGitUtils; | |||
import com.gitblit.utils.JGitUtils.SearchType; | |||
import com.gitblit.utils.StringUtils; | |||
import com.gitblit.wicket.pages.BranchesPage; | |||
import com.gitblit.wicket.pages.DocsPage; | |||
import com.gitblit.wicket.pages.LogPage; | |||
import com.gitblit.wicket.pages.RepositoriesPage; | |||
import com.gitblit.wicket.pages.SearchPage; | |||
import com.gitblit.wicket.panels.PageLinksPanel; | |||
import com.gitblit.wicket.pages.SummaryPage; | |||
import com.gitblit.wicket.pages.TagsPage; | |||
import com.gitblit.wicket.pages.TicketsPage; | |||
import com.gitblit.wicket.pages.TreePage; | |||
import com.gitblit.wicket.panels.RefsPanel; | |||
public abstract class RepositoryPage extends BasePage { | |||
@@ -34,7 +51,21 @@ public abstract class RepositoryPage extends BasePage { | |||
private transient Repository r = null; | |||
private final Logger logger = LoggerFactory.getLogger(RepositoryPage.class); | |||
private final Map<String, String> knownPages = new HashMap<String, String>() { | |||
private static final long serialVersionUID = 1L; | |||
{ | |||
put("summary", "gb.summary"); | |||
put("log", "gb.log"); | |||
put("branches", "gb.branches"); | |||
put("tags", "gb.tags"); | |||
put("tree", "gb.tree"); | |||
put("tickets", "gb.tickets"); | |||
} | |||
}; | |||
public RepositoryPage(PageParameters params) { | |||
super(params); | |||
if (!params.containsKey("r")) { | |||
@@ -46,14 +77,71 @@ public abstract class RepositoryPage extends BasePage { | |||
Repository r = getRepository(); | |||
// setup the page links and disable this page's link | |||
PageLinksPanel pageLinks = new PageLinksPanel("pageLinks", r, repositoryName, getPageName()); | |||
add(pageLinks); | |||
pageLinks.disablePageLink(getPageName()); | |||
// standard page links | |||
add(new BookmarkablePageLink<Void>("summary", SummaryPage.class, WicketUtils.newRepositoryParameter(repositoryName))); | |||
add(new BookmarkablePageLink<Void>("log", LogPage.class, WicketUtils.newRepositoryParameter(repositoryName))); | |||
add(new BookmarkablePageLink<Void>("branches", BranchesPage.class, WicketUtils.newRepositoryParameter(repositoryName))); | |||
add(new BookmarkablePageLink<Void>("tags", TagsPage.class, WicketUtils.newRepositoryParameter(repositoryName))); | |||
add(new BookmarkablePageLink<Void>("tree", TreePage.class, WicketUtils.newRepositoryParameter(repositoryName))); | |||
// per-repository extra page links | |||
List<String> extraPageLinks = new ArrayList<String>(); | |||
// Conditionally add tickets page | |||
boolean checkTickets = JGitUtils.getRepositoryUseTickets(r); | |||
if (checkTickets && JGitUtils.getTicketsBranch(r) != null) { | |||
extraPageLinks.add("tickets"); | |||
} | |||
// Conditionally add docs page | |||
boolean checkDocs = JGitUtils.getRepositoryUseDocs(r); | |||
if (checkDocs) { | |||
extraPageLinks.add("docs"); | |||
} | |||
ListDataProvider<String> extrasDp = new ListDataProvider<String>(extraPageLinks); | |||
DataView<String> extrasView = new DataView<String>("extra", extrasDp) { | |||
private static final long serialVersionUID = 1L; | |||
public void populateItem(final Item<String> item) { | |||
String extra = item.getModelObject(); | |||
if (extra.equals("tickets")) { | |||
item.add(new Label("extraSeparator", " | ")); | |||
item.add(new LinkPanel("extraLink", null, getString("gb.tickets"), TicketsPage.class, WicketUtils.newRepositoryParameter(repositoryName))); | |||
} else if (extra.equals("docs")) { | |||
item.add(new Label("extraSeparator", " | ")); | |||
item.add(new LinkPanel("extraLink", null, getString("gb.docs"), DocsPage.class, WicketUtils.newRepositoryParameter(repositoryName))); | |||
} | |||
} | |||
}; | |||
add(extrasView); | |||
// disable current page | |||
disablePageLink(getPageName()); | |||
// add floating search form | |||
SearchForm searchForm = new SearchForm("searchForm", repositoryName); | |||
add(searchForm); | |||
searchForm.setTranslatedAttributes(); | |||
// set stateless page preference | |||
setStatelessHint(true); | |||
} | |||
public void disablePageLink(String pageName) { | |||
for (String wicketId : knownPages.keySet()) { | |||
String key = knownPages.get(wicketId); | |||
String linkName = getString(key); | |||
if (linkName.equals(pageName)) { | |||
Component c = get(wicketId); | |||
if (c != null) { | |||
c.setEnabled(false); | |||
} | |||
break; | |||
} | |||
} | |||
} | |||
protected Repository getRepository() { | |||
if (r == null) { | |||
Repository r = GitBlit.self().getRepository(repositoryName); | |||
@@ -108,7 +196,6 @@ public abstract class RepositoryPage extends BasePage { | |||
protected abstract String getPageName(); | |||
protected Component createPersonPanel(String wicketId, PersonIdent identity, SearchType searchType) { | |||
boolean showEmail = GitBlit.self().settings().getBoolean(Keys.web.showEmailAddresses, false); | |||
if (!showEmail || StringUtils.isEmpty(identity.getName()) || StringUtils.isEmpty(identity.getEmailAddress())) { | |||
@@ -130,14 +217,14 @@ public abstract class RepositoryPage extends BasePage { | |||
LinkPanel nameLink = new LinkPanel("personName", "list", identity.getName(), SearchPage.class, WicketUtils.newSearchParameter(repositoryName, objectId, identity.getName(), searchType)); | |||
setPersonSearchTooltip(nameLink, identity.getName(), searchType); | |||
fullPerson.add(nameLink); | |||
LinkPanel addressLink = new LinkPanel("personAddress", "list", "<" + identity.getEmailAddress() + ">", SearchPage.class, WicketUtils.newSearchParameter(repositoryName, objectId, identity.getEmailAddress(), searchType)); | |||
setPersonSearchTooltip(addressLink, identity.getEmailAddress(), searchType); | |||
fullPerson.add(addressLink); | |||
return fullPerson; | |||
} | |||
} | |||
protected void setPersonSearchTooltip(Component component, String value, SearchType searchType) { | |||
if (searchType.equals(SearchType.AUTHOR)) { | |||
WicketUtils.setHtmlTooltip(component, getString("gb.searchForAuthor") + " " + value); | |||
@@ -145,7 +232,7 @@ public abstract class RepositoryPage extends BasePage { | |||
WicketUtils.setHtmlTooltip(component, getString("gb.searchForCommitter") + " " + value); | |||
} | |||
} | |||
protected void setChangeTypeTooltip(Component container, ChangeType type) { | |||
switch (type) { | |||
case ADD: | |||
@@ -163,7 +250,7 @@ public abstract class RepositoryPage extends BasePage { | |||
break; | |||
} | |||
} | |||
@Override | |||
protected void onBeforeRender() { | |||
// dispose of repository object | |||
@@ -191,4 +278,44 @@ public abstract class RepositoryPage extends BasePage { | |||
protected PageParameters newPathParameter(String path) { | |||
return WicketUtils.newPathParameter(repositoryName, objectId, path); | |||
} | |||
class SearchForm extends StatelessForm<Void> { | |||
private static final long serialVersionUID = 1L; | |||
private final String repositoryName; | |||
private final IModel<String> searchBoxModel = new Model<String>(""); | |||
private final IModel<SearchType> searchTypeModel = new Model<SearchType>(SearchType.COMMIT); | |||
public SearchForm(String id, String repositoryName) { | |||
super(id); | |||
this.repositoryName = repositoryName; | |||
DropDownChoice<SearchType> searchType = new DropDownChoice<SearchType>("searchType", Arrays.asList(SearchType.values())); | |||
searchType.setModel(searchTypeModel); | |||
add(searchType.setVisible(GitBlit.self().settings().getBoolean(Keys.web.showSearchTypeSelection, false))); | |||
TextField<String> searchBox = new TextField<String>("searchBox", searchBoxModel); | |||
add(searchBox); | |||
} | |||
void setTranslatedAttributes() { | |||
WicketUtils.setHtmlTooltip(get("searchType"), getString("gb.searchTypeTooltip")); | |||
WicketUtils.setHtmlTooltip(get("searchBox"), getString("gb.searchTooltip")); | |||
WicketUtils.setInputPlaceholder(get("searchBox"), getString("gb.search")); | |||
} | |||
@Override | |||
public void onSubmit() { | |||
SearchType searchType = searchTypeModel.getObject(); | |||
String searchString = searchBoxModel.getObject(); | |||
for (SearchType type : SearchType.values()) { | |||
if (searchString.toLowerCase().startsWith(type.name().toLowerCase() + ":")) { | |||
searchType = type; | |||
searchString = searchString.substring(type.name().toLowerCase().length() + 1).trim(); | |||
break; | |||
} | |||
} | |||
setResponsePage(SearchPage.class, WicketUtils.newSearchParameter(repositoryName, null, searchString, searchType)); | |||
} | |||
} | |||
} |
@@ -6,9 +6,6 @@ | |||
<body> | |||
<wicket:extend> | |||
<!-- page nav links --> | |||
<div wicket:id="pageLinks">[page links]</div> | |||
<!-- blob nav links --> | |||
<div class="page_nav2"> |
@@ -16,9 +16,6 @@ | |||
<!-- need to specify body.onload --> | |||
<body onload="prettyPrint()"> | |||
<!-- page nav links --> | |||
<div wicket:id="pageLinks">[page links]</div> | |||
<!-- blob nav links --> | |||
<div class="page_nav2"> | |||
<span wicket:id="blameLink">[blame link]</span> | <a wicket:id="historyLink"><wicket:message key="gb.history"></wicket:message></a> | <a wicket:id="rawLink"><wicket:message key="gb.raw"></wicket:message></a> | <a wicket:id="headLink"><wicket:message key="gb.head"></wicket:message></a> |
@@ -7,9 +7,6 @@ | |||
<body> | |||
<wicket:extend> | |||
<!-- page nav links --> | |||
<div wicket:id="pageLinks">[page links]</div> | |||
<!-- branches --> | |||
<div style="margin-top:5px;" wicket:id="branchesPanel">[branches panel]</div> | |||
@@ -7,9 +7,6 @@ | |||
<body> | |||
<wicket:extend> | |||
<!-- page nav links --> | |||
<div wicket:id="pageLinks">[page links]</div> | |||
<!-- commitdiff nav links --> | |||
<div class="page_nav2"> | |||
<wicket:message key="gb.parent"></wicket:message>: <span wicket:id="parentLink">[parent link]</span> | <a wicket:id="patchLink"><wicket:message key="gb.patch"></wicket:message></a> | <a wicket:id="commitLink"><wicket:message key="gb.commit"></wicket:message></a> |
@@ -7,9 +7,6 @@ | |||
<body> | |||
<wicket:extend> | |||
<!-- page nav links --> | |||
<div wicket:id="pageLinks">[page links]</div> | |||
<!-- commit nav links --> | |||
<div class="page_nav2"> | |||
<wicket:message key="gb.parent"></wicket:message>: <span wicket:id="parentLink">[parent link]</span> | <a wicket:id="patchLink"><wicket:message key="gb.patch"></wicket:message></a> | <span wicket:id="commitdiffLink">[commitdiff link]</span> |
@@ -7,9 +7,6 @@ | |||
<body> | |||
<wicket:extend> | |||
<!-- page nav links --> | |||
<div wicket:id="pageLinks">[page links]</div> | |||
<!-- header --> | |||
<div style="margin-top:5px;" class="header"><span wicket:id="header">[header]</span></div> | |||
@@ -7,9 +7,6 @@ | |||
<body> | |||
<wicket:extend> | |||
<!-- page nav links --> | |||
<div wicket:id="pageLinks">[page links]</div> | |||
<!-- pager links --> | |||
<div style="padding-top:5px;"> | |||
<a wicket:id="firstPageTop"><wicket:message key="gb.pageFirst"></wicket:message></a> | <a wicket:id="prevPageTop"><wicket:message key="gb.pagePrevious"></wicket:message></a> | <a wicket:id="nextPageTop"><wicket:message key="gb.pageNext"></wicket:message></a> |
@@ -7,9 +7,6 @@ | |||
<body> | |||
<wicket:extend> | |||
<!-- page nav links --> | |||
<div wicket:id="pageLinks">[page links]</div> | |||
<!-- pager links --> | |||
<div style="padding-top:5px;"> | |||
<a wicket:id="firstPageTop"><wicket:message key="gb.pageFirst"></wicket:message></a> | <a wicket:id="prevPageTop"><wicket:message key="gb.pagePrevious"></wicket:message></a> | <a wicket:id="nextPageTop"><wicket:message key="gb.pageNext"></wicket:message></a> |
@@ -13,9 +13,6 @@ | |||
<body> | |||
<wicket:extend> | |||
<!-- page nav links --> | |||
<div wicket:id="pageLinks">[page links]</div> | |||
<!-- markdown nav links --> | |||
<div class="page_nav2"> | |||
<span wicket:id="blameLink">[blame link]</span> | <a wicket:id="historyLink"><wicket:message key="gb.history"></wicket:message></a> | <a wicket:id="rawLink"><wicket:message key="gb.raw"></wicket:message></a> | <a wicket:id="headLink"><wicket:message key="gb.head"></wicket:message></a> |
@@ -1,7 +1,6 @@ | |||
package com.gitblit.wicket.pages; | |||
import java.io.StringReader; | |||
import java.io.StringWriter; | |||
import java.text.ParseException; | |||
import org.apache.wicket.PageParameters; | |||
import org.apache.wicket.markup.html.basic.Label; | |||
@@ -9,19 +8,14 @@ import org.apache.wicket.markup.html.link.BookmarkablePageLink; | |||
import org.eclipse.jgit.lib.Constants; | |||
import org.eclipse.jgit.lib.Repository; | |||
import org.eclipse.jgit.revwalk.RevCommit; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import org.tautua.markdownpapers.Markdown; | |||
import org.tautua.markdownpapers.parser.ParseException; | |||
import com.gitblit.utils.JGitUtils; | |||
import com.gitblit.utils.StringUtils; | |||
import com.gitblit.wicket.RepositoryPage; | |||
import com.gitblit.wicket.WicketUtils; | |||
public class MarkdownPage extends RepositoryPage { | |||
private final Logger logger = LoggerFactory.getLogger(MarkdownPage.class); | |||
public MarkdownPage(PageParameters params) { | |||
super(params); | |||
@@ -36,17 +30,14 @@ public class MarkdownPage extends RepositoryPage { | |||
add(new BookmarkablePageLink<Void>("rawLink", RawPage.class, WicketUtils.newPathParameter(repositoryName, objectId, markdownPath))); | |||
add(new BookmarkablePageLink<Void>("headLink", MarkdownPage.class, WicketUtils.newPathParameter(repositoryName, Constants.HEAD, markdownPath))); | |||
// Read raw markdown content and transform it to html | |||
String htmlText = ""; | |||
// Read raw markdown content and transform it to html | |||
String markdownText = JGitUtils.getRawContentAsString(r, commit, markdownPath); | |||
String htmlText; | |||
try { | |||
String rawText = JGitUtils.getRawContentAsString(r, commit, markdownPath); | |||
StringReader reader = new StringReader(rawText); | |||
StringWriter writer = new StringWriter(); | |||
Markdown md = new Markdown(); | |||
md.transform(reader, writer); | |||
htmlText = writer.toString(); | |||
htmlText = StringUtils.transformMarkdown(markdownText); | |||
} catch (ParseException p) { | |||
logger.error("Failed to parse markdown text from " + markdownPath, p); | |||
error(p.getMessage()); | |||
htmlText = markdownText; | |||
} | |||
// Add the html to the page |
@@ -7,9 +7,6 @@ | |||
<body> | |||
<wicket:extend> | |||
<!-- page nav links --> | |||
<div wicket:id="pageLinks">[page links]</div> | |||
<!-- pager links --> | |||
<div style="padding-top:5px;"> | |||
<a wicket:id="firstPageTop"><wicket:message key="gb.pageFirst"></wicket:message></a> | <a wicket:id="prevPageTop"><wicket:message key="gb.pagePrevious"></wicket:message></a> | <a wicket:id="nextPageTop"><wicket:message key="gb.pageNext"></wicket:message></a> |
@@ -6,9 +6,6 @@ | |||
<body> | |||
<wicket:extend> | |||
<!-- page nav links --> | |||
<div wicket:id="pageLinks">[page links]</div> | |||
<div style="clear:both;"> | |||
<!-- Repository Activity Chart --> |
@@ -7,9 +7,6 @@ | |||
<body> | |||
<wicket:extend> | |||
<!-- page nav links --> | |||
<div wicket:id="pageLinks">[page links]</div> | |||
<!-- summary header --> | |||
<div style="margin-top: 5px;" class="header" wicket:id="commit">[shortlog header]</div> | |||
@@ -7,9 +7,6 @@ | |||
<body> | |||
<wicket:extend> | |||
<!-- page nav links --> | |||
<div wicket:id="pageLinks">[page links]</div> | |||
<!-- tags panel --> | |||
<div style="margin-top:5px;" wicket:id="tagsPanel">[tags panel]</div> | |||
@@ -7,9 +7,6 @@ | |||
<body> | |||
<wicket:extend> | |||
<!-- page nav links --> | |||
<div wicket:id="pageLinks">[page links]</div> | |||
<!-- ticket title --> | |||
<div style="font-size:150%;padding-top:5px;" wicket:id="ticketTitle">[ticket title]</div> | |||
@@ -7,9 +7,6 @@ | |||
<body> | |||
<wicket:extend> | |||
<!-- page nav links --> | |||
<div wicket:id="pageLinks">[page links]</div> | |||
<!-- header --> | |||
<div style="margin-top:5px;" class="header" wicket:id="header">[header]</div> | |||
@@ -7,9 +7,6 @@ | |||
<body> | |||
<wicket:extend> | |||
<!-- page nav links --> | |||
<div wicket:id="pageLinks">[page links]</div> | |||
<!-- blob nav links --> | |||
<div class="page_nav2"> | |||
<a wicket:id="historyLink"><wicket:message key="gb.history"></wicket:message></a> | <a wicket:id="headLink"><wicket:message key="gb.head"></wicket:message></a> |
@@ -1,21 +0,0 @@ | |||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | |||
<html xmlns="http://www.w3.org/1999/xhtml" | |||
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd" | |||
xml:lang="en" | |||
lang="en"> | |||
<wicket:panel> | |||
<!-- floating search form on right --> | |||
<form wicket:id="searchForm"> | |||
<div class="search"> | |||
<select wicket:id="searchType"/> | |||
<input type="text" id="searchBox" wicket:id="searchBox" size="25" value=""/> | |||
</div> | |||
</form> | |||
<!-- page nav links --> | |||
<div class="page_nav"> | |||
<a wicket:id="summary"><wicket:message key="gb.summary"></wicket:message></a> | <a wicket:id="log"><wicket:message key="gb.log"></wicket:message></a> | <a wicket:id="branches"><wicket:message key="gb.branches"></wicket:message></a> | <a wicket:id="tags"><wicket:message key="gb.tags"></wicket:message></a> | <a wicket:id="tree"><wicket:message key="gb.tree"></wicket:message></a> <span wicket:id="extra"><span wicket:id="extraSeparator"></span><span wicket:id="extraLink"></span></span> | |||
</div> | |||
</wicket:panel> | |||
</html> |
@@ -1,150 +0,0 @@ | |||
package com.gitblit.wicket.panels; | |||
import java.util.ArrayList; | |||
import java.util.Arrays; | |||
import java.util.HashMap; | |||
import java.util.List; | |||
import java.util.Map; | |||
import org.apache.wicket.Component; | |||
import org.apache.wicket.markup.html.basic.Label; | |||
import org.apache.wicket.markup.html.form.DropDownChoice; | |||
import org.apache.wicket.markup.html.form.StatelessForm; | |||
import org.apache.wicket.markup.html.form.TextField; | |||
import org.apache.wicket.markup.html.link.BookmarkablePageLink; | |||
import org.apache.wicket.markup.html.panel.Panel; | |||
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.apache.wicket.model.IModel; | |||
import org.apache.wicket.model.Model; | |||
import org.eclipse.jgit.lib.Repository; | |||
import com.gitblit.GitBlit; | |||
import com.gitblit.Keys; | |||
import com.gitblit.utils.JGitUtils; | |||
import com.gitblit.utils.JGitUtils.SearchType; | |||
import com.gitblit.wicket.LinkPanel; | |||
import com.gitblit.wicket.WicketUtils; | |||
import com.gitblit.wicket.pages.BranchesPage; | |||
import com.gitblit.wicket.pages.DocsPage; | |||
import com.gitblit.wicket.pages.LogPage; | |||
import com.gitblit.wicket.pages.SearchPage; | |||
import com.gitblit.wicket.pages.SummaryPage; | |||
import com.gitblit.wicket.pages.TagsPage; | |||
import com.gitblit.wicket.pages.TicketsPage; | |||
import com.gitblit.wicket.pages.TreePage; | |||
public class PageLinksPanel extends Panel { | |||
private static final long serialVersionUID = 1L; | |||
private final Map<String, String> knownPages = new HashMap<String, String>() { | |||
private static final long serialVersionUID = 1L; | |||
{ | |||
put("summary", "gb.summary"); | |||
put("log", "gb.log"); | |||
put("branches", "gb.branches"); | |||
put("tags", "gb.tags"); | |||
put("tree", "gb.tree"); | |||
put("tickets", "gb.tickets"); | |||
} | |||
}; | |||
public PageLinksPanel(String id, Repository r, final String repositoryName, String pageName) { | |||
super(id); | |||
// summary | |||
add(new BookmarkablePageLink<Void>("summary", SummaryPage.class, WicketUtils.newRepositoryParameter(repositoryName))); | |||
add(new BookmarkablePageLink<Void>("log", LogPage.class, WicketUtils.newRepositoryParameter(repositoryName))); | |||
add(new BookmarkablePageLink<Void>("branches", BranchesPage.class, WicketUtils.newRepositoryParameter(repositoryName))); | |||
add(new BookmarkablePageLink<Void>("tags", TagsPage.class, WicketUtils.newRepositoryParameter(repositoryName))); | |||
add(new BookmarkablePageLink<Void>("tree", TreePage.class, WicketUtils.newRepositoryParameter(repositoryName))); | |||
List<String> extras = new ArrayList<String>(); | |||
// Get the repository tickets setting | |||
boolean checkTickets = JGitUtils.getRepositoryUseTickets(r); | |||
if (checkTickets && JGitUtils.getTicketsBranch(r) != null) { | |||
extras.add("tickets"); | |||
} | |||
// Get the repository docs setting | |||
boolean checkDocs = JGitUtils.getRepositoryUseDocs(r); | |||
if (checkDocs) { | |||
extras.add("docs"); | |||
} | |||
ListDataProvider<String> extrasDp = new ListDataProvider<String>(extras); | |||
DataView<String> extrasView = new DataView<String>("extra", extrasDp) { | |||
private static final long serialVersionUID = 1L; | |||
public void populateItem(final Item<String> item) { | |||
String extra = item.getModelObject(); | |||
if (extra.equals("tickets")) { | |||
item.add(new Label("extraSeparator", " | ")); | |||
item.add(new LinkPanel("extraLink", null, getString("gb.tickets"), TicketsPage.class, WicketUtils.newRepositoryParameter(repositoryName))); | |||
} else if (extra.equals("docs")) { | |||
item.add(new Label("extraSeparator", " | ")); | |||
item.add(new LinkPanel("extraLink", null, getString("gb.docs"), DocsPage.class, WicketUtils.newRepositoryParameter(repositoryName))); | |||
} | |||
} | |||
}; | |||
add(extrasView); | |||
add(new SearchForm("searchForm", repositoryName)); | |||
} | |||
public void disablePageLink(String pageName) { | |||
for (String wicketId : knownPages.keySet()) { | |||
String key = knownPages.get(wicketId); | |||
String linkName = getString(key); | |||
if (linkName.equals(pageName)) { | |||
Component c = get(wicketId); | |||
if (c != null) { | |||
c.setEnabled(false); | |||
} | |||
break; | |||
} | |||
} | |||
} | |||
class SearchForm extends StatelessForm<Void> { | |||
private static final long serialVersionUID = 1L; | |||
private final String repositoryName; | |||
private final IModel<String> searchBoxModel = new Model<String>(""); | |||
private final IModel<SearchType> searchTypeModel = new Model<SearchType>(SearchType.COMMIT); | |||
public SearchForm(String id, String repositoryName) { | |||
super(id); | |||
this.repositoryName = repositoryName; | |||
DropDownChoice<SearchType> searchType = new DropDownChoice<SearchType>("searchType", Arrays.asList(SearchType.values())); | |||
searchType.setModel(searchTypeModel); | |||
WicketUtils.setHtmlTooltip(searchType, getString("gb.searchTypeTooltip")); | |||
add(searchType.setVisible(GitBlit.self().settings().getBoolean(Keys.web.showSearchTypeSelection, false))); | |||
TextField<String> searchBox = new TextField<String>("searchBox", searchBoxModel); | |||
add(searchBox); | |||
WicketUtils.setHtmlTooltip(searchBox, getString("gb.searchTooltip")); | |||
WicketUtils.setInputPlaceholder(searchBox, getString("gb.search")); | |||
} | |||
@Override | |||
public void onSubmit() { | |||
SearchType searchType = searchTypeModel.getObject(); | |||
String searchString = searchBoxModel.getObject(); | |||
for (SearchType type : SearchType.values()) { | |||
if (searchString.toLowerCase().startsWith(type.name().toLowerCase() + ":")) { | |||
searchType = type; | |||
searchString = searchString.substring(type.name().toLowerCase().length() + 1).trim(); | |||
break; | |||
} | |||
} | |||
setResponsePage(SearchPage.class, WicketUtils.newSearchParameter(repositoryName, null, searchString, searchType)); | |||
} | |||
} | |||
} |
@@ -32,14 +32,14 @@ pre, code, pre.prettyprint, pre.plainprint { | |||
/* age0: age < 60*60*2 */ | |||
.age0 { | |||
color: #009900; | |||
color: #008000; | |||
font-style: italic; | |||
font-weight: bold; | |||
} | |||
/* age1: 60*60*2 <= age < 60*60*24*2 */ | |||
.age1 { | |||
color: #009900; | |||
color: #008000; | |||
font-style: italic; | |||
} | |||
@@ -272,7 +272,7 @@ span.diff.add { | |||
} | |||
span.diff.remove { | |||
color: #cc0000; | |||
color: #FFDDDD; | |||
font-family: inherit; | |||
} | |||
@@ -373,7 +373,7 @@ span.addition, span.modification, span.deletion, span.rename { | |||
} | |||
span.addition { | |||
background-color: #bbffbb; | |||
background-color: #ccffcc; | |||
} | |||
span.modification { | |||
@@ -381,11 +381,11 @@ span.modification { | |||
} | |||
span.deletion { | |||
background-color: #ff8888; | |||
background-color: #f8bbbb; | |||
} | |||
span.rename { | |||
background-color: #8888ff; | |||
background-color: #cAc2f5; | |||
} | |||
div.commitLegend { | |||
@@ -616,16 +616,16 @@ span .otherRef { | |||
} | |||
span .remoteRef { | |||
background-color: #aaaaff; | |||
background-color: #cAc2f5; | |||
border-color: #ccccff #0033cc #0033cc #ccccff; | |||
} | |||
span .tagRef { | |||
background-color: #ffffaa; | |||
border-color: #ffffcc #ffee00 #ffee00 #ffffcc; | |||
border-color: #ffcc00 #ffcc00 #ffcc00 #ffcc00; | |||
} | |||
span .headRef { | |||
background-color: #aaffaa; | |||
background-color: #ccffcc; | |||
border-color: #ccffcc #00cc33 #00cc33 #ccffcc; | |||
} |