Merge pull request #2189 from gitbucket/fix-markdown-rendering

Fix link rendering in Markdown
This commit is contained in:
Naoki Takezoe
2018-11-09 18:10:49 +09:00
committed by GitHub
12 changed files with 71 additions and 42 deletions

View File

@@ -257,6 +257,7 @@ trait IssuesControllerBase extends ControllerBase {
"content" -> Markdown.toHtml( "content" -> Markdown.toHtml(
markdown = x.content getOrElse "No description given.", markdown = x.content getOrElse "No description given.",
repository = repository, repository = repository,
branch = repository.repository.defaultBranch,
enableWikiLink = false, enableWikiLink = false,
enableRefsLink = true, enableRefsLink = true,
enableAnchor = true, enableAnchor = true,
@@ -284,6 +285,7 @@ trait IssuesControllerBase extends ControllerBase {
"content" -> view.Markdown.toHtml( "content" -> view.Markdown.toHtml(
markdown = x.content, markdown = x.content,
repository = repository, repository = repository,
branch = repository.repository.defaultBranch,
enableWikiLink = false, enableWikiLink = false,
enableRefsLink = true, enableRefsLink = true,
enableAnchor = true, enableAnchor = true,

View File

@@ -174,7 +174,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
helpers.renderMarkup( helpers.renderMarkup(
filePath = List(f), filePath = List(f),
fileContent = params("content"), fileContent = params("content"),
branch = "master", branch = repository.repository.defaultBranch,
repository = repository, repository = repository,
enableWikiLink = params("enableWikiLink").toBoolean, enableWikiLink = params("enableWikiLink").toBoolean,
enableRefsLink = params("enableRefsLink").toBoolean, enableRefsLink = params("enableRefsLink").toBoolean,
@@ -184,6 +184,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
helpers.markdown( helpers.markdown(
markdown = params("content"), markdown = params("content"),
repository = repository, repository = repository,
branch = repository.repository.defaultBranch,
enableWikiLink = params("enableWikiLink").toBoolean, enableWikiLink = params("enableWikiLink").toBoolean,
enableRefsLink = params("enableRefsLink").toBoolean, enableRefsLink = params("enableRefsLink").toBoolean,
enableLineBreaks = params("enableLineBreaks").toBoolean, enableLineBreaks = params("enableLineBreaks").toBoolean,
@@ -679,6 +680,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
"content" -> view.Markdown.toHtml( "content" -> view.Markdown.toHtml(
markdown = x.content, markdown = x.content,
repository = repository, repository = repository,
branch = repository.repository.defaultBranch,
enableWikiLink = false, enableWikiLink = false,
enableRefsLink = true, enableRefsLink = true,
enableAnchor = true, enableAnchor = true,

View File

@@ -25,6 +25,7 @@ object MarkdownRenderer extends Renderer {
Markdown.toHtml( Markdown.toHtml(
markdown = fileContent, markdown = fileContent,
repository = repository, repository = repository,
branch = branch,
enableWikiLink = enableWikiLink, enableWikiLink = enableWikiLink,
enableRefsLink = enableRefsLink, enableRefsLink = enableRefsLink,
enableAnchor = enableAnchor, enableAnchor = enableAnchor,

View File

@@ -16,6 +16,7 @@ object Markdown {
* Converts Markdown of Wiki pages to HTML. * Converts Markdown of Wiki pages to HTML.
* *
* @param repository the repository which contains the markdown * @param repository the repository which contains the markdown
* @param branch the target branch
* @param enableWikiLink if true then wiki style link is available in markdown * @param enableWikiLink if true then wiki style link is available in markdown
* @param enableRefsLink if true then issue reference (e.g. #123) is rendered as link * @param enableRefsLink if true then issue reference (e.g. #123) is rendered as link
* @param enableAnchor if true then anchor for headline is generated * @param enableAnchor if true then anchor for headline is generated
@@ -27,6 +28,7 @@ object Markdown {
def toHtml( def toHtml(
markdown: String, markdown: String,
repository: RepositoryService.RepositoryInfo, repository: RepositoryService.RepositoryInfo,
branch: String,
enableWikiLink: Boolean, enableWikiLink: Boolean,
enableRefsLink: Boolean, enableRefsLink: Boolean,
enableAnchor: Boolean, enableAnchor: Boolean,
@@ -45,6 +47,7 @@ object Markdown {
val renderer = new GitBucketMarkedRenderer( val renderer = new GitBucketMarkedRenderer(
options, options,
repository, repository,
branch,
enableWikiLink, enableWikiLink,
enableRefsLink, enableRefsLink,
enableAnchor, enableAnchor,
@@ -62,6 +65,7 @@ object Markdown {
class GitBucketMarkedRenderer( class GitBucketMarkedRenderer(
options: Options, options: Options,
repository: RepositoryService.RepositoryInfo, repository: RepositoryService.RepositoryInfo,
branch: String,
enableWikiLink: Boolean, enableWikiLink: Boolean,
enableRefsLink: Boolean, enableRefsLink: Boolean,
enableAnchor: Boolean, enableAnchor: Boolean,
@@ -131,11 +135,11 @@ object Markdown {
} }
override def link(href: String, title: String, text: String): String = { override def link(href: String, title: String, text: String): String = {
super.link(fixUrl(href, false), title, text) super.link(fixUrl(href, branch, false), title, text)
} }
override def image(href: String, title: String, text: String): String = { override def image(href: String, title: String, text: String): String = {
super.image(fixUrl(href, true), title, text) super.image(fixUrl(href, branch, true), title, text)
} }
override def nolink(text: String): String = { override def nolink(text: String): String = {
@@ -162,7 +166,7 @@ object Markdown {
} }
} }
private def fixUrl(url: String, isImage: Boolean = false): String = { private def fixUrl(url: String, branch: String, isImage: Boolean = false): String = {
lazy val urlWithRawParam: String = url + (if (isImage && !url.endsWith("?raw=true")) "?raw=true" else "") lazy val urlWithRawParam: String = url + (if (isImage && !url.endsWith("?raw=true")) "?raw=true" else "")
if (url.startsWith("http://") || url.startsWith("https://") || url.startsWith("mailto:") || url.startsWith("/")) { if (url.startsWith("http://") || url.startsWith("https://") || url.startsWith("mailto:") || url.startsWith("/")) {
@@ -172,13 +176,7 @@ object Markdown {
} else if (!enableWikiLink) { } else if (!enableWikiLink) {
if (context.currentPath.contains("/blob/")) { if (context.currentPath.contains("/blob/")) {
urlWithRawParam urlWithRawParam
} else if (context.currentPath.contains("/tree/")) {
val paths = context.currentPath.split("/")
val branch = if (paths.length > 3) paths.drop(4).mkString("/") else repository.repository.defaultBranch
repository.httpUrl.replaceFirst("/git/", "/").stripSuffix(".git") + "/blob/" + branch + "/" + urlWithRawParam
} else { } else {
val paths = context.currentPath.split("/")
val branch = if (paths.length > 3) paths.last else repository.repository.defaultBranch
repository.httpUrl.replaceFirst("/git/", "/").stripSuffix(".git") + "/blob/" + branch + "/" + urlWithRawParam repository.httpUrl.replaceFirst("/git/", "/").stripSuffix(".git") + "/blob/" + branch + "/" + urlWithRawParam
} }
} else { } else {

View File

@@ -102,6 +102,7 @@ object helpers extends AvatarImageProvider with LinkConverter with RequestCache
def markdown( def markdown(
markdown: String, markdown: String,
repository: RepositoryService.RepositoryInfo, repository: RepositoryService.RepositoryInfo,
branch: String,
enableWikiLink: Boolean, enableWikiLink: Boolean,
enableRefsLink: Boolean, enableRefsLink: Boolean,
enableLineBreaks: Boolean, enableLineBreaks: Boolean,
@@ -114,6 +115,7 @@ object helpers extends AvatarImageProvider with LinkConverter with RequestCache
Markdown.toHtml( Markdown.toHtml(
markdown = markdown, markdown = markdown,
repository = repository, repository = repository,
branch = branch,
enableWikiLink = enableWikiLink, enableWikiLink = enableWikiLink,
enableRefsLink = enableRefsLink, enableRefsLink = enableRefsLink,
enableAnchor = enableAnchor, enableAnchor = enableAnchor,

View File

@@ -22,12 +22,13 @@
</div> </div>
<div class="commit-commentContent-@comment.commentId"> <div class="commit-commentContent-@comment.commentId">
@helpers.markdown( @helpers.markdown(
markdown = comment.content, markdown = comment.content,
repository = repository, repository = repository,
enableWikiLink = false, branch = repository.repository.defaultBranch,
enableRefsLink = true, enableWikiLink = false,
enableLineBreaks = true, enableRefsLink = true,
enableTaskList = true, enableLineBreaks = true,
enableTaskList = true,
hasWritePermission = hasWritePermission hasWritePermission = hasWritePermission
) )
</div> </div>

View File

@@ -32,12 +32,13 @@
</div> </div>
<div class="panel-body markdown-body" id="commentContent-@comment.commentId"> <div class="panel-body markdown-body" id="commentContent-@comment.commentId">
@helpers.markdown( @helpers.markdown(
markdown = comment.content, markdown = comment.content,
repository = repository, repository = repository,
enableWikiLink = false, branch = repository.repository.defaultBranch,
enableRefsLink = true, enableWikiLink = false,
enableLineBreaks = true, enableRefsLink = true,
enableTaskList = true, enableLineBreaks = true,
enableTaskList = true,
hasWritePermission = isManageable hasWritePermission = isManageable
) )
</div> </div>
@@ -57,12 +58,13 @@
</div> </div>
<div class="panel-body markdown-body" id="issueContent"> <div class="panel-body markdown-body" id="issueContent">
@helpers.markdown( @helpers.markdown(
markdown = issue.get.content getOrElse "No description provided.", markdown = issue.get.content getOrElse "No description provided.",
repository = repository, repository = repository,
enableWikiLink = false, branch = repository.repository.defaultBranch,
enableRefsLink = true, enableWikiLink = false,
enableLineBreaks = true, enableRefsLink = true,
enableTaskList = true, enableLineBreaks = true,
enableTaskList = true,
hasWritePermission = isManageable hasWritePermission = isManageable
) )
</div> </div>
@@ -268,12 +270,13 @@
</div> </div>
<div class="panel-body markdown-body commit-commentContent-@comment.commentId"> <div class="panel-body markdown-body commit-commentContent-@comment.commentId">
@helpers.markdown( @helpers.markdown(
markdown = comment.content, markdown = comment.content,
repository = repository, repository = repository,
enableWikiLink = false, branch = repository.repository.defaultBranch,
enableRefsLink = true, enableWikiLink = false,
enableLineBreaks = true, enableRefsLink = true,
enableTaskList = true, enableLineBreaks = true,
enableTaskList = true,
hasWritePermission = isManageable hasWritePermission = isManageable
) )
</div> </div>

View File

@@ -76,13 +76,14 @@
</div> </div>
</div> </div>
</div> </div>
@if(milestone.description.isDefined){ @milestone.description.map { description =>
<div class="milestone-description markdown-body"> <div class="milestone-description markdown-body">
@helpers.markdown( @helpers.markdown(
markdown = milestone.description.get, markdown = description,
repository = repository, repository = repository,
enableWikiLink = false, branch = repository.repository.defaultBranch,
enableRefsLink = false, enableWikiLink = false,
enableRefsLink = false,
enableLineBreaks = true enableLineBreaks = true
) )
</div> </div>

View File

@@ -43,7 +43,14 @@
</div> </div>
<div> <div>
<hr> <hr>
@status.conflictMessage.map { message => @helpers.markdown(message, originRepository, false, true, false) } @status.conflictMessage.map { message => @helpers.markdown(
markdown = message,
repository = originRepository,
branch = originRepository.repository.defaultBranch,
enableWikiLink = false,
enableRefsLink = true,
enableLineBreaks = false
) }
</div> </div>
} else { } else {
@if(status.branchIsOutOfDate){ @if(status.branchIsOutOfDate){

View File

@@ -27,6 +27,7 @@
@helpers.markdown( @helpers.markdown(
markdown = release.content getOrElse "No description provided.", markdown = release.content getOrElse "No description provided.",
repository = repository, repository = repository,
branch = repository.repository.defaultBranch,
enableWikiLink = false, enableWikiLink = false,
enableRefsLink = true, enableRefsLink = true,
enableLineBreaks = true, enableLineBreaks = true,

View File

@@ -34,6 +34,7 @@
@helpers.markdown( @helpers.markdown(
markdown = release.content getOrElse "No description provided.", markdown = release.content getOrElse "No description provided.",
repository = repository, repository = repository,
branch = repository.repository.defaultBranch,
enableWikiLink = false, enableWikiLink = false,
enableRefsLink = true, enableRefsLink = true,
enableLineBreaks = true, enableLineBreaks = true,

View File

@@ -59,7 +59,7 @@
@if(isEditable){ @if(isEditable){
<a href="@helpers.url(repository)/wiki/_Sidebar/_edit" style="text-decoration: none;"><span class="octicon octicon-pencil pull-right"></span></a> <a href="@helpers.url(repository)/wiki/_Sidebar/_edit" style="text-decoration: none;"><span class="octicon octicon-pencil pull-right"></span></a>
} }
@helpers.markdown(sidebarPage.content, repository, true, false, false, false, pages) @helpers.markdown(sidebarPage.content, repository, "master", true, false, false, false, pages)
</div> </div>
}.getOrElse{ }.getOrElse{
@if(isEditable){ @if(isEditable){
@@ -85,6 +85,7 @@
@helpers.markdown( @helpers.markdown(
markdown = page.content, markdown = page.content,
repository = repository, repository = repository,
branch = "master",
enableWikiLink = true, enableWikiLink = true,
enableRefsLink = false, enableRefsLink = false,
enableLineBreaks = false, enableLineBreaks = false,
@@ -98,7 +99,16 @@
@if(isEditable){ @if(isEditable){
<a href="@helpers.url(repository)/wiki/_Footer/_edit" style="text-decoration: none;"><span class="octicon octicon-pencil pull-right"></span></a> <a href="@helpers.url(repository)/wiki/_Footer/_edit" style="text-decoration: none;"><span class="octicon octicon-pencil pull-right"></span></a>
} }
@helpers.markdown(footerPage.content, repository, true, false, false, false, pages) @helpers.markdown(
markdown = footerPage.content,
repository = repository,
branch = "master",
enableWikiLink = true,
enableRefsLink = false,
enableLineBreaks = false,
enableAnchor = false,
pages = pages
)
</div> </div>
}.getOrElse{ }.getOrElse{
@if(isEditable){ @if(isEditable){