Support Markdown rendering. Use Wicket GoogleCharts from Maven.
32 files deleted
3 files added
9 files modified
| | |
| | | <?xml version="1.0" encoding="UTF-8"?>
|
| | | <classpath>
|
| | | <classpathentry kind="src" path="src"/>
|
| | | <classpathentry kind="src" path="contrib"/>
|
| | | <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
|
| | | <classpathentry kind="lib" path="ext/log4j-1.2.16.jar"/>
|
| | | <classpathentry kind="lib" path="ext/servlet-api-2.5.jar"/>
|
| | |
| | | <classpathentry kind="lib" path="ext/wicket-extensions-1.4.17.jar"/>
|
| | | <classpathentry kind="lib" path="lib/jgit-0.11.3.jar"/>
|
| | | <classpathentry kind="lib" path="lib/jgit-http-0.11.3.jar"/>
|
| | | <classpathentry kind="lib" path="ext/markdownpapers-core-1.0.0.jar"/>
|
| | | <classpathentry kind="lib" path="ext/googlecharts-1.4.17.jar"/>
|
| | | <classpathentry kind="output" path="bin"/>
|
| | | </classpath>
|
| | |
| | | </path>
|
| | | <javac destdir="${project.build.dir}">
|
| | | <src path="${basedir}/src" />
|
| | | <src path="${basedir}/contrib" />
|
| | | <classpath refid="master-classpath" />
|
| | | </javac>
|
| | | <copy todir="${project.build.dir}">
|
| | |
| | |
|
| | | # This is the message display above the repositories table.
|
| | | # This can point to a file with HTML content.
|
| | | web.repositoriesMessage = Welcome to Git:Blit!<br>A quick and easy way to host your own Git repositories.<br>Built with <a href="http://eclipse.org/jgit">JGit</a>, <a href="http://wicket.apache.org">Wicket</a>, <a href="http://eclipse.org/jetty">Jetty</a>, <a href="http://www.slf4j.org">SLF4J</a>, <a href="http://logging.apache.org/log4j">Log4j</a>, <a href="http://code.google.com/p/google-code-prettify/">google-code-prettify</a>, and <a href="http://jcommander.org">JCommander</a>.
|
| | | web.repositoriesMessage = Welcome to Git:Blit!<br>A quick and easy way to host your own Git repositories.<br>Built with <a href="http://eclipse.org/jgit">JGit</a>, <a href="http://wicket.apache.org">Wicket</a>, <a href="http://https://github.com/wicketstuff/core/wiki/GoogleCharts">WicketStuff googlecharts</a>, <a href="http://markdown.tautua.org">MarkdownPapers</a>, <a href="http://eclipse.org/jetty">Jetty</a>, <a href="http://www.slf4j.org">SLF4J</a>, <a href="http://logging.apache.org/log4j">Log4j</a>, <a href="http://code.google.com/p/google-code-prettify/">google-code-prettify</a>, and <a href="http://jcommander.org">JCommander</a>.
|
| | |
|
| | | # Use the client timezone when formatting dates.
|
| | | # This uses AJAX to determine the browser's timezone and enables Wicket
|
| | |
| | | # Registered extensions for google-code-prettify
|
| | | web.prettyPrintExtensions = c cpp cs css htm html java js php pl prefs properties py rb sh sql xml vb
|
| | |
|
| | | # Registered extensions for markdown transformation
|
| | | web.markdownExtensions = md mkd markdown
|
| | |
|
| | | # Image extensions
|
| | | web.imageExtensions = bmp jpg gif png
|
| | |
|
| | |
| | | downloadFromMaven(MavenObject.WICKET);
|
| | | downloadFromMaven(MavenObject.WICKET_EXT);
|
| | | downloadFromMaven(MavenObject.WICKET_AUTH_ROLES);
|
| | | downloadFromMaven(MavenObject.WICKET_GOOGLE_CHARTS);
|
| | | downloadFromMaven(MavenObject.MARKDOWNPAPERS);
|
| | | }
|
| | |
|
| | | public static void compiletime() {
|
| | |
| | |
|
| | | 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;
|
| | |
| | | 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;
|
| | |
| | | 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[] {}));
|
| | |
| | | gb.deletion = deletion
|
| | | gb.rename = rename
|
| | | gb.stats = stats |
| | | gb.markdown = markdown |
| | |
| | |
|
| | | 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);
|
| | |
|
| | |
| | | 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<String, Integer> map = new HashMap<String, Integer>();
|
New file |
| | |
| | | <!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">
|
| | | |
| | | <!-- contribute markdown css to the page header -->
|
| | | <wicket:head>
|
| | | <wicket:link>
|
| | | <link href="/com/gitblit/wicket/resources/markdown.css" type="text/css" rel="stylesheet" />
|
| | | </wicket:link>
|
| | | </wicket:head>
|
| | |
|
| | | <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>
|
| | | </div> |
| | | |
| | | <!-- markdown content -->
|
| | | <div class="markdown" wicket:id="markdownText">[markdown content]</div>
|
| | | </wicket:extend>
|
| | | </body>
|
| | | </html> |
New file |
| | |
| | | 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<Void>("historyLink", HistoryPage.class, WicketUtils.newPathParameter(repositoryName, objectId, markdownPath)));
|
| | | 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 = "";
|
| | | 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");
|
| | | }
|
| | | }
|
| | |
| | | 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;
|
| | |
| | | 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;
|
| | |
| | | padding: 0px;
|
| | | }
|
| | |
|
| | | pre, pre.prettyprint, pre.plainprint {
|
| | | pre, code, pre.prettyprint, pre.plainprint {
|
| | | color: black;
|
| | | font-family: monospace;
|
| | | font-size:12px;
|
| | |
| | | background-color: #D2C3AF;
|
| | | padding: 3px;
|
| | | border: 1px solid #808080;
|
| | | border-radius: 3px 3px 0 0;
|
| | | }
|
| | |
|
| | | div.header a {
|
| | |
| | | color: #ddd;
|
| | | background-color: #000070;
|
| | | padding: 7px;
|
| | | border-radius: 3px;
|
| | | }
|
| | |
|
| | | div.page_nav a {
|
| | |
| | | color:yellow;
|
| | | text-align:right;
|
| | | float:right;
|
| | | padding:3px 4px 3px 3px; |
| | | padding:4px 4px 3px 3px; |
| | | }
|
| | |
|
| | | .repositories_message {
|
New file |
| | |
| | | /*
|
| | | * 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; |
| | | } |