doortts doortts 2017-01-11
markdown: Make markdown files to refer code repository files directly
See: github issue #124
@83d3fa0a347164d92d36c23fcd50fc787d617216
app/controllers/MigrationApp.java
--- app/controllers/MigrationApp.java
+++ app/controllers/MigrationApp.java
@@ -16,7 +16,6 @@
 import models.support.IssueLabelAggregate;
 import org.apache.commons.lang.StringUtils;
 import play.Configuration;
-import play.i18n.Messages;
 import play.libs.F;
 import play.libs.F.Promise;
 import play.libs.Json;
app/utils/Markdown.java
--- app/utils/Markdown.java
+++ app/utils/Markdown.java
@@ -22,6 +22,7 @@
 
 import models.Project;
 import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang.StringUtils;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
 import org.jsoup.nodes.Element;
@@ -216,4 +217,18 @@
     public static String render(@Nonnull String source, Project project) {
         return render(source, project, true);
     }
+
+    public static String renderFileInCodeBrowser(@Nonnull String source, Project project) {
+        String relativeLinksToCodeBrowserPath = replaceContentsLinkToCodeBrowerPath(project, source);
+        AutoLinkRenderer autoLinkRenderer = new AutoLinkRenderer(renderWithHighlight(relativeLinksToCodeBrowserPath, true), project);
+        return autoLinkRenderer.render();
+    }
+
+    private static String replaceContentsLinkToCodeBrowerPath(Project project, String text){
+        String root = play.Configuration.root().getString("application.context", "");
+        if (StringUtils.isNotEmpty(root)) {
+            root = "/" + root;
+        }
+        return text.replaceAll("\\[(?<text>[^\\]]*)\\]\\(\\.?+/?+(?<link>[^\\)]*)\\)", "[$1](/" + root + project.owner + "/" + project.name + "/files/" + project.defaultBranch().replaceAll("refs/heads/", "") + "/$2)");
+    }
 }
app/views/code/partial_view_file.scala.html
--- app/views/code/partial_view_file.scala.html
+++ app/views/code/partial_view_file.scala.html
@@ -110,7 +110,7 @@
           @if(isMarkdownExtension(path)) {
           <div id="codeVal" class="markdown-wrap codebrowser-markdown">
             @if(files.get("data") != null){
-            @Html(Markdown.render(fieldText(files, "data"), project))
+            @Html(Markdown.renderFileInCodeBrowser(fieldText(files, "data"), project))
             }
           </div>
           } else {
app/views/project/partial_readme.scala.html
--- app/views/project/partial_readme.scala.html
+++ app/views/project/partial_readme.scala.html
@@ -45,7 +45,7 @@
           <a href="@routes.BoardApp.newPostForm(project.owner, project.name)?readme=true" class="ybtn vmiddle ml5">@Messages("button.edit")</a>
       }
     </header>
-    <div class="readme-body markdown-wrap">@Html(Markdown.render(project.readme, project, false))</div>
+    <div class="readme-body markdown-wrap">@Html(Markdown.renderFileInCodeBrowser(project.readme, project))</div>
   </div>
 }
 @common.markdown(project)
Add a comment
List