From a7317acec01cde855a9f9f3d2da3dcc49d89aa86 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Fri, 25 Oct 2013 08:39:56 -0400 Subject: [PATCH] Support for intra-Markdown linking using [[WikiLinks]] syntax (issue-324) --- src/main/java/com/gitblit/wicket/pages/RepositoryPage.java | 31 +++++++++++++++++++++++++++++++ 1 files changed, 31 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/gitblit/wicket/pages/RepositoryPage.java b/src/main/java/com/gitblit/wicket/pages/RepositoryPage.java index 2df0a0e..3b1d296 100644 --- a/src/main/java/com/gitblit/wicket/pages/RepositoryPage.java +++ b/src/main/java/com/gitblit/wicket/pages/RepositoryPage.java @@ -16,6 +16,8 @@ package com.gitblit.wicket.pages; import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Arrays; @@ -43,6 +45,8 @@ import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; +import org.pegdown.LinkRenderer; +import org.pegdown.ast.WikiLinkNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -644,6 +648,33 @@ return isOwner; } + /** + * Returns a Pegdown/Markdown link renderer which renders WikiLinks. + * + * @return a link renderer + */ + protected LinkRenderer getLinkRenderer() { + RevCommit head = JGitUtils.getCommit(r, "HEAD"); + final String id = getBestCommitId(head); + LinkRenderer renderer = new LinkRenderer() { + @Override + public Rendering render(WikiLinkNode node) { + try { + String path = URLEncoder.encode(node.getText().replace(' ', '-'), "UTF-8"); + String name = node.getText(); + if (name.indexOf('/') > -1) { + name = name.substring(name.lastIndexOf('/') + 1); + } + String url = urlFor(MarkdownPage.class, WicketUtils.newPathParameter(repositoryName, id, path)).toString(); + return new Rendering(url, name); + } catch (UnsupportedEncodingException e) { + throw new IllegalStateException(); + } + } + }; + return renderer; + } + private class SearchForm extends SessionlessForm<Void> implements Serializable { private static final long serialVersionUID = 1L; -- Gitblit v1.9.1