From 96a6dae0c86e505e129ce4af33886f4dda69d169 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 25 Oct 2013 09:24:23 -0400
Subject: [PATCH] Strip Markdown extension from rendered [[WikiLink]] (issue-324)
---
src/main/java/com/gitblit/wicket/pages/RepositoryPage.java | 43 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 43 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..508b865 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,45 @@
return isOwner;
}
+ /**
+ * Returns a Pegdown/Markdown link renderer which renders WikiLinks.
+ *
+ * @return a link renderer
+ */
+ protected LinkRenderer getMarkdownLinkRenderer() {
+ RevCommit head = JGitUtils.getCommit(r, "HEAD");
+ final String id = getBestCommitId(head);
+ LinkRenderer renderer = new LinkRenderer() {
+ @Override
+ public Rendering render(WikiLinkNode node) {
+ try {
+ String fsc = GitBlit.getString(Keys.web.forwardSlashCharacter, "/");
+ String path = URLEncoder.encode(node.getText().replace(' ', '-'), "UTF-8").replace("%2F", fsc);
+
+ // extract document name
+ String name = node.getText();
+ if (name.indexOf('/') > -1) {
+ name = name.substring(name.lastIndexOf('/') + 1);
+ }
+
+ // strip Markdown extension
+ for (String ext : GitBlit.getStrings(Keys.web.markdownExtensions)) {
+ String x = "." + ext;
+ if (name.endsWith(x)) {
+ name = name.substring(0, name.length() - x.length());
+ break;
+ }
+ }
+ 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