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/MarkdownPage.java |   32 ++++++++++++++++++++++++++++----
 1 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/gitblit/wicket/pages/MarkdownPage.java b/src/main/java/com/gitblit/wicket/pages/MarkdownPage.java
index 188a5b4..e0c85cf 100644
--- a/src/main/java/com/gitblit/wicket/pages/MarkdownPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/MarkdownPage.java
@@ -16,6 +16,7 @@
 package com.gitblit.wicket.pages;
 
 import java.text.MessageFormat;
+import java.util.List;
 
 import org.apache.wicket.PageParameters;
 import org.apache.wicket.markup.html.basic.Label;
@@ -25,6 +26,7 @@
 import org.eclipse.jgit.revwalk.RevCommit;
 
 import com.gitblit.GitBlit;
+import com.gitblit.Keys;
 import com.gitblit.utils.JGitUtils;
 import com.gitblit.utils.MarkdownUtils;
 import com.gitblit.utils.StringUtils;
@@ -38,11 +40,32 @@
 	public MarkdownPage(PageParameters params) {
 		super(params);
 
-		final String markdownPath = WicketUtils.getPath(params);
+		final String path = WicketUtils.getPath(params).replace("%2f", "/").replace("%2F", "/");
 
 		Repository r = getRepository();
 		RevCommit commit = JGitUtils.getCommit(r, objectId);
 		String [] encodings = GitBlit.getEncodings();
+		List<String> extensions = GitBlit.getStrings(Keys.web.markdownExtensions);
+
+		// Read raw markdown content and transform it to html
+		String markdownPath = path;
+		String markdownText = JGitUtils.getStringContent(r, commit.getTree(), path, encodings);
+		if (StringUtils.isEmpty(markdownText)) {
+			String name = path;
+			if (path.indexOf('.') > -1) {
+				name = path.substring(0, path.lastIndexOf('.'));
+			}
+
+			for (String ext : extensions) {
+				String checkName = name + "." + ext;
+				markdownText = JGitUtils.getStringContent(r, commit.getTree(), checkName, encodings);
+				if (!StringUtils.isEmpty(markdownText)) {
+					// found it
+					markdownPath = path;
+					break;
+				}
+			}
+		}
 
 		// markdown page links
 		add(new BookmarkablePageLink<Void>("blameLink", BlamePage.class,
@@ -54,13 +77,14 @@
 		add(new BookmarkablePageLink<Void>("headLink", MarkdownPage.class,
 				WicketUtils.newPathParameter(repositoryName, Constants.HEAD, markdownPath)));
 
-		// Read raw markdown content and transform it to html
-		String markdownText = JGitUtils.getStringContent(r, commit.getTree(), markdownPath, encodings);
 		String htmlText;
 		try {
-			htmlText = MarkdownUtils.transformMarkdown(markdownText);
+			htmlText = MarkdownUtils.transformMarkdown(markdownText, getLinkRenderer());
 		} catch (Exception e) {
 			logger.error("failed to transform markdown", e);
+			if (markdownText == null) {
+				markdownText = String.format("Markdown document <b>%1$s</b> not found in <em>%2$s</em>", markdownPath, repositoryName);
+			}
 			markdownText = MessageFormat.format("<div class=\"alert alert-error\"><strong>{0}:</strong> {1}</div>{2}", getString("gb.error"), getString("gb.markdownFailure"), markdownText);
 			htmlText = StringUtils.breakLinesForHtml(markdownText);
 		}

--
Gitblit v1.9.1