diff --git a/src/main/scala/view/Markdown.scala b/src/main/scala/view/Markdown.scala index 71a7ef8..87719b4 100644 --- a/src/main/scala/view/Markdown.scala +++ b/src/main/scala/view/Markdown.scala @@ -18,9 +18,14 @@ /** * Converts Markdown of Wiki pages to HTML. */ - def toHtml(markdown: String, repository: service.RepositoryService.RepositoryInfo, - enableWikiLink: Boolean, enableRefsLink: Boolean, - enableTaskList: Boolean = false, hasWritePermission: Boolean = false)(implicit context: app.Context): String = { + def toHtml(markdown: String, + repository: service.RepositoryService.RepositoryInfo, + enableWikiLink: Boolean, + enableRefsLink: Boolean, + enableTaskList: Boolean = false, + hasWritePermission: Boolean = false, + pages: List[String] = Nil)(implicit context: app.Context): String = { + // escape issue id val s = if(enableRefsLink){ markdown.replaceAll("(?<=(\\W|^))#(\\d+)(?=(\\W|$))", "issue:$2") @@ -35,12 +40,16 @@ Extensions.AUTOLINKS | Extensions.WIKILINKS | Extensions.FENCED_CODE_BLOCKS | Extensions.TABLES | Extensions.HARDWRAPS | Extensions.SUPPRESS_ALL_HTML ).parseMarkdown(source.toCharArray) - new GitBucketHtmlSerializer(markdown, repository, enableWikiLink, enableRefsLink, enableTaskList, hasWritePermission).toHtml(rootNode) + new GitBucketHtmlSerializer(markdown, repository, enableWikiLink, enableRefsLink, enableTaskList, hasWritePermission, pages).toHtml(rootNode) } } -class GitBucketLinkRender(context: app.Context, repository: service.RepositoryService.RepositoryInfo, - enableWikiLink: Boolean) extends LinkRenderer with WikiService { +class GitBucketLinkRender( + context: app.Context, + repository: service.RepositoryService.RepositoryInfo, + enableWikiLink: Boolean, + pages: List[String]) extends LinkRenderer with WikiService { + override def render(node: WikiLinkNode): Rendering = { if(enableWikiLink){ try { @@ -54,7 +63,7 @@ val url = repository.httpUrl.replaceFirst("/git/", "/").stripSuffix(".git") + "/wiki/" + StringUtil.urlEncode(page) - if(getWikiPage(repository.owner, repository.name, page).isDefined){ + if(pages.contains(page)){ new Rendering(url, label) } else { new Rendering(url, label).withAttribute("class", "absent") @@ -91,9 +100,10 @@ enableWikiLink: Boolean, enableRefsLink: Boolean, enableTaskList: Boolean, - hasWritePermission: Boolean + hasWritePermission: Boolean, + pages: List[String] )(implicit val context: app.Context) extends ToHtmlSerializer( - new GitBucketLinkRender(context, repository, enableWikiLink), + new GitBucketLinkRender(context, repository, enableWikiLink, pages), Map[String, VerbatimSerializer](VerbatimSerializer.DEFAULT -> new GitBucketVerbatimSerializer).asJava ) with LinkConverter with RequestCache { diff --git a/src/main/scala/view/helpers.scala b/src/main/scala/view/helpers.scala index c84f7c9..caea648 100644 --- a/src/main/scala/view/helpers.scala +++ b/src/main/scala/view/helpers.scala @@ -86,9 +86,14 @@ /** * Converts Markdown of Wiki pages to HTML. */ - def markdown(value: String, repository: service.RepositoryService.RepositoryInfo, - enableWikiLink: Boolean, enableRefsLink: Boolean, enableTaskList: Boolean = false, hasWritePermission: Boolean = false)(implicit context: app.Context): Html = - Html(Markdown.toHtml(value, repository, enableWikiLink, enableRefsLink, enableTaskList, hasWritePermission)) + def markdown(value: String, + repository: service.RepositoryService.RepositoryInfo, + enableWikiLink: Boolean, + enableRefsLink: Boolean, + enableTaskList: Boolean = false, + hasWritePermission: Boolean = false, + pages: List[String] = Nil)(implicit context: app.Context): Html = + Html(Markdown.toHtml(value, repository, enableWikiLink, enableRefsLink, enableTaskList, hasWritePermission, pages)) def renderMarkup(filePath: List[String], fileContent: String, branch: String, repository: service.RepositoryService.RepositoryInfo, diff --git a/src/main/twirl/wiki/page.scala.html b/src/main/twirl/wiki/page.scala.html index 8c96edc..bc4880a 100644 --- a/src/main/twirl/wiki/page.scala.html +++ b/src/main/twirl/wiki/page.scala.html @@ -53,7 +53,7 @@
- @markdown(page.content, repository, true, false) + @markdown(page.content, repository, true, false, false, false, pages)
}