From 531cd203f387f8358a2e15da5f6171f5871ea688 Mon Sep 17 00:00:00 2001 From: James Moger Date: Wed, 20 Apr 2011 20:16:31 -0400 Subject: Support Markdown rendering. Use Wicket GoogleCharts from Maven. --- src/com/gitblit/Build.java | 6 +++ src/com/gitblit/wicket/GitBlitWebApp.java | 4 ++ src/com/gitblit/wicket/GitBlitWebApp.properties | 3 +- src/com/gitblit/wicket/pages/BlobPage.java | 18 ++++++-- src/com/gitblit/wicket/pages/MarkdownPage.html | 28 ++++++++++++ src/com/gitblit/wicket/pages/MarkdownPage.java | 60 +++++++++++++++++++++++++ src/com/gitblit/wicket/pages/SummaryPage.java | 20 ++++----- src/com/gitblit/wicket/resources/gitblit.css | 8 ++-- src/com/gitblit/wicket/resources/markdown.css | 54 ++++++++++++++++++++++ 9 files changed, 183 insertions(+), 18 deletions(-) create mode 100644 src/com/gitblit/wicket/pages/MarkdownPage.html create mode 100644 src/com/gitblit/wicket/pages/MarkdownPage.java create mode 100644 src/com/gitblit/wicket/resources/markdown.css (limited to 'src/com/gitblit') diff --git a/src/com/gitblit/Build.java b/src/com/gitblit/Build.java index b12d44ed..604ee08f 100644 --- a/src/com/gitblit/Build.java +++ b/src/com/gitblit/Build.java @@ -36,6 +36,8 @@ public class Build { downloadFromMaven(MavenObject.WICKET); downloadFromMaven(MavenObject.WICKET_EXT); downloadFromMaven(MavenObject.WICKET_AUTH_ROLES); + downloadFromMaven(MavenObject.WICKET_GOOGLE_CHARTS); + downloadFromMaven(MavenObject.MARKDOWNPAPERS); } public static void compiletime() { @@ -192,8 +194,12 @@ public class Build { public static final MavenObject WICKET_AUTH_ROLES = new MavenObject("Apache Wicket Auth Roles", "org/apache/wicket", "wicket-auth-roles", "1.4.17", "86d20ff32f62d3026213ff11a78555da643bc676"); + public static final MavenObject WICKET_GOOGLE_CHARTS = new MavenObject("Apache Wicket Google Charts Add-On", "org/wicketstuff", "googlecharts", "1.4.17", "c567b98b0c5efe4147e77ef2d0d3c2d45c49dea5"); + public static final MavenObject JUNIT = new MavenObject("JUnit", "junit", "junit", "3.8.2", "07e4cde26b53a9a0e3fe5b00d1dbbc7cc1d46060"); + public static final MavenObject MARKDOWNPAPERS = new MavenObject("MarkdownPapers", "org/tautua/markdownpapers", "markdownpapers-core", "1.0.0", "feda63bd149f3315da210e397d45d02277038ad5"); + public final String name; public final String group; public final String artifact; diff --git a/src/com/gitblit/wicket/GitBlitWebApp.java b/src/com/gitblit/wicket/GitBlitWebApp.java index 106981e3..e3c41cd6 100644 --- a/src/com/gitblit/wicket/GitBlitWebApp.java +++ b/src/com/gitblit/wicket/GitBlitWebApp.java @@ -17,6 +17,7 @@ import com.gitblit.wicket.pages.CommitDiffPage; import com.gitblit.wicket.pages.CommitPage; import com.gitblit.wicket.pages.HistoryPage; import com.gitblit.wicket.pages.LogPage; +import com.gitblit.wicket.pages.MarkdownPage; import com.gitblit.wicket.pages.PatchPage; import com.gitblit.wicket.pages.RawPage; import com.gitblit.wicket.pages.RepositoriesPage; @@ -67,6 +68,9 @@ public class GitBlitWebApp extends WebApplication { mount(new MixedParamUrlCodingStrategy("/tickets", TicketsPage.class, new String[] { "r" })); mount(new MixedParamUrlCodingStrategy("/ticket", TicketPage.class, new String[] { "r", "h", "f" })); + // setup the markdown urls + mount(new MixedParamUrlCodingStrategy("/markdown", MarkdownPage.class, new String[] { "r", "h", "f" })); + // setup login/logout urls, if we are using authentication if (useAuthentication) { mount(new MixedParamUrlCodingStrategy("/login", LoginPage.class, new String[] {})); diff --git a/src/com/gitblit/wicket/GitBlitWebApp.properties b/src/com/gitblit/wicket/GitBlitWebApp.properties index f0638586..a2e51d11 100644 --- a/src/com/gitblit/wicket/GitBlitWebApp.properties +++ b/src/com/gitblit/wicket/GitBlitWebApp.properties @@ -55,4 +55,5 @@ gb.addition = addition gb.modification = modification gb.deletion = deletion gb.rename = rename -gb.stats = stats \ No newline at end of file +gb.stats = stats +gb.markdown = markdown \ No newline at end of file diff --git a/src/com/gitblit/wicket/pages/BlobPage.java b/src/com/gitblit/wicket/pages/BlobPage.java index e535199a..335d25a1 100644 --- a/src/com/gitblit/wicket/pages/BlobPage.java +++ b/src/com/gitblit/wicket/pages/BlobPage.java @@ -26,6 +26,20 @@ public class BlobPage extends RepositoryPage { final String blobPath = WicketUtils.getPath(params); + String extension = null; + if (blobPath.lastIndexOf('.') > -1) { + extension = blobPath.substring(blobPath.lastIndexOf('.') + 1).toLowerCase(); + } + + // see if we should redirect to the markdown page + for (String ext : GitBlit.self().settings().getStrings(Keys.web.markdownExtensions)) { + if (ext.equals(extension)) { + setResponsePage(MarkdownPage.class, params); + return; + } + } + + // standard blob view Repository r = getRepository(); RevCommit commit = JGitUtils.getCommit(r, objectId); @@ -38,10 +52,6 @@ public class BlobPage extends RepositoryPage { add(new LinkPanel("shortlog", "title", commit.getShortMessage(), CommitPage.class, newCommitParameter())); add(new PathBreadcrumbsPanel("breadcrumbs", repositoryName, blobPath, objectId)); - String extension = null; - if (blobPath.lastIndexOf('.') > -1) { - extension = blobPath.substring(blobPath.lastIndexOf('.') + 1); - } // Map the extensions to types Map map = new HashMap(); diff --git a/src/com/gitblit/wicket/pages/MarkdownPage.html b/src/com/gitblit/wicket/pages/MarkdownPage.html new file mode 100644 index 00000000..9b009348 --- /dev/null +++ b/src/com/gitblit/wicket/pages/MarkdownPage.html @@ -0,0 +1,28 @@ + + + + + + + + + + + + + +
[page links]
+ + + + + +
[markdown content]
+
+ + \ No newline at end of file diff --git a/src/com/gitblit/wicket/pages/MarkdownPage.java b/src/com/gitblit/wicket/pages/MarkdownPage.java new file mode 100644 index 00000000..83083abf --- /dev/null +++ b/src/com/gitblit/wicket/pages/MarkdownPage.java @@ -0,0 +1,60 @@ +package com.gitblit.wicket.pages; + +import java.io.StringReader; +import java.io.StringWriter; + +import org.apache.wicket.PageParameters; +import org.apache.wicket.markup.html.basic.Label; +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.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); + + final String markdownPath = WicketUtils.getPath(params); + + Repository r = getRepository(); + RevCommit commit = JGitUtils.getCommit(r, objectId); + + // markdown page links + add(new Label("blameLink", getString("gb.blame"))); + add(new BookmarkablePageLink("historyLink", HistoryPage.class, WicketUtils.newPathParameter(repositoryName, objectId, markdownPath))); + add(new BookmarkablePageLink("rawLink", RawPage.class, WicketUtils.newPathParameter(repositoryName, objectId, markdownPath))); + add(new BookmarkablePageLink("headLink", MarkdownPage.class, WicketUtils.newPathParameter(repositoryName, Constants.HEAD, markdownPath))); + + // Read raw markdown content and transform it to html + 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(); + } catch (ParseException p) { + logger.error("Failed to parse markdown text from " + markdownPath, p); + } + + // Add the html to the page + add(new Label("markdownText", htmlText).setEscapeModelStrings(false)); + } + + @Override + protected String getPageName() { + return getString("gb.markdown"); + } +} diff --git a/src/com/gitblit/wicket/pages/SummaryPage.java b/src/com/gitblit/wicket/pages/SummaryPage.java index 53a684b5..b20dc643 100644 --- a/src/com/gitblit/wicket/pages/SummaryPage.java +++ b/src/com/gitblit/wicket/pages/SummaryPage.java @@ -10,16 +10,16 @@ import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.image.ContextImage; import org.eclipse.jgit.lib.Repository; -import com.codecommit.wicket.AbstractChartData; -import com.codecommit.wicket.Chart; -import com.codecommit.wicket.ChartAxis; -import com.codecommit.wicket.ChartAxisType; -import com.codecommit.wicket.ChartProvider; -import com.codecommit.wicket.ChartType; -import com.codecommit.wicket.IChartData; -import com.codecommit.wicket.LineStyle; -import com.codecommit.wicket.MarkerType; -import com.codecommit.wicket.ShapeMarker; +import org.wicketstuff.googlecharts.AbstractChartData; +import org.wicketstuff.googlecharts.Chart; +import org.wicketstuff.googlecharts.ChartAxis; +import org.wicketstuff.googlecharts.ChartAxisType; +import org.wicketstuff.googlecharts.ChartProvider; +import org.wicketstuff.googlecharts.ChartType; +import org.wicketstuff.googlecharts.IChartData; +import org.wicketstuff.googlecharts.LineStyle; +import org.wicketstuff.googlecharts.MarkerType; +import org.wicketstuff.googlecharts.ShapeMarker; import com.gitblit.GitBlit; import com.gitblit.Keys; import com.gitblit.utils.JGitUtils; diff --git a/src/com/gitblit/wicket/resources/gitblit.css b/src/com/gitblit/wicket/resources/gitblit.css index d3d68b7a..3c5aca8b 100644 --- a/src/com/gitblit/wicket/resources/gitblit.css +++ b/src/com/gitblit/wicket/resources/gitblit.css @@ -4,7 +4,7 @@ html, body, table, dl, dt, dd, ol, ul, li, form, a, span, tr, th, td, div, em { font-family: verdana, sans-serif; font-size: 12px; - line-height: 15px; + line-height: 1.35em; margin: 0; padding: 0; border: 0; @@ -22,7 +22,7 @@ body { padding: 0px; } -pre, pre.prettyprint, pre.plainprint { +pre, code, pre.prettyprint, pre.plainprint { color: black; font-family: monospace; font-size:12px; @@ -75,6 +75,7 @@ div.header { background-color: #D2C3AF; padding: 3px; border: 1px solid #808080; + border-radius: 3px 3px 0 0; } div.header a { @@ -146,6 +147,7 @@ div.page_nav { color: #ddd; background-color: #000070; padding: 7px; + border-radius: 3px; } div.page_nav a { @@ -169,7 +171,7 @@ div.search { color:yellow; text-align:right; float:right; - padding:3px 4px 3px 3px; + padding:4px 4px 3px 3px; } .repositories_message { diff --git a/src/com/gitblit/wicket/resources/markdown.css b/src/com/gitblit/wicket/resources/markdown.css new file mode 100644 index 00000000..ce48cefb --- /dev/null +++ b/src/com/gitblit/wicket/resources/markdown.css @@ -0,0 +1,54 @@ +/* + * Git:Blit Markdown CSS definition. + */ + +div.markdown { +} + +div.markdown h1, +div.markdown h2, +div.markdown h3, +div.markdown h4, +div.markdown h5, +div.markdown h6 { + border: 0 none !important; +} + +div.markdown h1 { + margin-top: 1em; + margin-bottom: 0.5em; + padding-bottom: 0.5em; + border-bottom: 2px solid #000080 !important; +} + +div.markdown h2 { + margin-top: 1em; + margin-bottom: 0.5em; + padding-bottom: 0.5em; + border-bottom: 2px solid #000080 !important; +} + +div.markdown pre { + background-color: #f8f8f8; + border: 1px solid #2f6fab; + border-radius: 3px; + overflow: auto; + padding: 5px; +} + +div.markdown pre code { + background-color: inherit; + border: none; + padding: 0; +} + +div.markdown code { + background-color: #ffffe0; + border: 1px solid orange; + border-radius: 3px; + padding: 0 0.2em; +} + +div.markdown a { + text-decoration: underline; +} \ No newline at end of file -- cgit v1.2.3