mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-08 22:45:51 +01:00
Improve Wiki rendering performance
This commit is contained in:
@@ -18,9 +18,14 @@ object Markdown {
|
|||||||
/**
|
/**
|
||||||
* Converts Markdown of Wiki pages to HTML.
|
* Converts Markdown of Wiki pages to HTML.
|
||||||
*/
|
*/
|
||||||
def toHtml(markdown: String, repository: service.RepositoryService.RepositoryInfo,
|
def toHtml(markdown: String,
|
||||||
enableWikiLink: Boolean, enableRefsLink: Boolean,
|
repository: service.RepositoryService.RepositoryInfo,
|
||||||
enableTaskList: Boolean = false, hasWritePermission: Boolean = false)(implicit context: app.Context): String = {
|
enableWikiLink: Boolean,
|
||||||
|
enableRefsLink: Boolean,
|
||||||
|
enableTaskList: Boolean = false,
|
||||||
|
hasWritePermission: Boolean = false,
|
||||||
|
pages: List[String] = Nil)(implicit context: app.Context): String = {
|
||||||
|
|
||||||
// escape issue id
|
// escape issue id
|
||||||
val s = if(enableRefsLink){
|
val s = if(enableRefsLink){
|
||||||
markdown.replaceAll("(?<=(\\W|^))#(\\d+)(?=(\\W|$))", "issue:$2")
|
markdown.replaceAll("(?<=(\\W|^))#(\\d+)(?=(\\W|$))", "issue:$2")
|
||||||
@@ -35,12 +40,16 @@ object Markdown {
|
|||||||
Extensions.AUTOLINKS | Extensions.WIKILINKS | Extensions.FENCED_CODE_BLOCKS | Extensions.TABLES | Extensions.HARDWRAPS | Extensions.SUPPRESS_ALL_HTML
|
Extensions.AUTOLINKS | Extensions.WIKILINKS | Extensions.FENCED_CODE_BLOCKS | Extensions.TABLES | Extensions.HARDWRAPS | Extensions.SUPPRESS_ALL_HTML
|
||||||
).parseMarkdown(source.toCharArray)
|
).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,
|
class GitBucketLinkRender(
|
||||||
enableWikiLink: Boolean) extends LinkRenderer with WikiService {
|
context: app.Context,
|
||||||
|
repository: service.RepositoryService.RepositoryInfo,
|
||||||
|
enableWikiLink: Boolean,
|
||||||
|
pages: List[String]) extends LinkRenderer with WikiService {
|
||||||
|
|
||||||
override def render(node: WikiLinkNode): Rendering = {
|
override def render(node: WikiLinkNode): Rendering = {
|
||||||
if(enableWikiLink){
|
if(enableWikiLink){
|
||||||
try {
|
try {
|
||||||
@@ -54,7 +63,7 @@ class GitBucketLinkRender(context: app.Context, repository: service.RepositorySe
|
|||||||
|
|
||||||
val url = repository.httpUrl.replaceFirst("/git/", "/").stripSuffix(".git") + "/wiki/" + StringUtil.urlEncode(page)
|
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)
|
new Rendering(url, label)
|
||||||
} else {
|
} else {
|
||||||
new Rendering(url, label).withAttribute("class", "absent")
|
new Rendering(url, label).withAttribute("class", "absent")
|
||||||
@@ -91,9 +100,10 @@ class GitBucketHtmlSerializer(
|
|||||||
enableWikiLink: Boolean,
|
enableWikiLink: Boolean,
|
||||||
enableRefsLink: Boolean,
|
enableRefsLink: Boolean,
|
||||||
enableTaskList: Boolean,
|
enableTaskList: Boolean,
|
||||||
hasWritePermission: Boolean
|
hasWritePermission: Boolean,
|
||||||
|
pages: List[String]
|
||||||
)(implicit val context: app.Context) extends ToHtmlSerializer(
|
)(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
|
Map[String, VerbatimSerializer](VerbatimSerializer.DEFAULT -> new GitBucketVerbatimSerializer).asJava
|
||||||
) with LinkConverter with RequestCache {
|
) with LinkConverter with RequestCache {
|
||||||
|
|
||||||
|
|||||||
@@ -86,9 +86,14 @@ object helpers extends AvatarImageProvider with LinkConverter with RequestCache
|
|||||||
/**
|
/**
|
||||||
* Converts Markdown of Wiki pages to HTML.
|
* Converts Markdown of Wiki pages to HTML.
|
||||||
*/
|
*/
|
||||||
def markdown(value: String, repository: service.RepositoryService.RepositoryInfo,
|
def markdown(value: String,
|
||||||
enableWikiLink: Boolean, enableRefsLink: Boolean, enableTaskList: Boolean = false, hasWritePermission: Boolean = false)(implicit context: app.Context): Html =
|
repository: service.RepositoryService.RepositoryInfo,
|
||||||
Html(Markdown.toHtml(value, repository, enableWikiLink, enableRefsLink, enableTaskList, hasWritePermission))
|
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,
|
def renderMarkup(filePath: List[String], fileContent: String, branch: String,
|
||||||
repository: service.RepositoryService.RepositoryInfo,
|
repository: service.RepositoryService.RepositoryInfo,
|
||||||
|
|||||||
@@ -53,7 +53,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div style="width: 650px;" class="pull-left">
|
<div style="width: 650px;" class="pull-left">
|
||||||
<div class="markdown-body">
|
<div class="markdown-body">
|
||||||
@markdown(page.content, repository, true, false)
|
@markdown(page.content, repository, true, false, false, false, pages)
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user