diff --git a/src/main/scala/app/IssuesController.scala b/src/main/scala/app/IssuesController.scala
index be564ee..b8f1682 100644
--- a/src/main/scala/app/IssuesController.scala
+++ b/src/main/scala/app/IssuesController.scala
@@ -186,7 +186,7 @@
org.json4s.jackson.Serialization.write(
Map("title" -> x.title,
"content" -> view.Markdown.toHtml(x.content getOrElse "No description given.",
- repository, false, true)
+ repository, false, true, true)
))
}
} else Unauthorized
@@ -203,7 +203,7 @@
contentType = formats("json")
org.json4s.jackson.Serialization.write(
Map("content" -> view.Markdown.toHtml(x.content,
- repository, false, true)
+ repository, false, true, true)
))
}
} else Unauthorized
diff --git a/src/main/scala/app/RepositoryViewerController.scala b/src/main/scala/app/RepositoryViewerController.scala
index dda0e61..c38eb01 100644
--- a/src/main/scala/app/RepositoryViewerController.scala
+++ b/src/main/scala/app/RepositoryViewerController.scala
@@ -30,7 +30,8 @@
contentType = "text/html"
view.helpers.markdown(params("content"), repository,
params("enableWikiLink").toBoolean,
- params("enableRefsLink").toBoolean)
+ params("enableRefsLink").toBoolean,
+ params("enableTaskList").toBoolean)
})
/**
diff --git a/src/main/scala/view/Markdown.scala b/src/main/scala/view/Markdown.scala
index c347d14..f83ef10 100644
--- a/src/main/scala/view/Markdown.scala
+++ b/src/main/scala/view/Markdown.scala
@@ -11,7 +11,7 @@
import java.util.Locale
import java.util.regex.Pattern
import scala.collection.JavaConverters._
-import service.{RequestCache, WikiService}
+import service.{RepositoryService, RequestCache, WikiService}
object Markdown {
@@ -19,17 +19,22 @@
* Converts Markdown of Wiki pages to HTML.
*/
def toHtml(markdown: String, repository: service.RepositoryService.RepositoryInfo,
- enableWikiLink: Boolean, enableRefsLink: Boolean)(implicit context: app.Context): String = {
+ enableWikiLink: Boolean, enableRefsLink: Boolean, enableTaskList: Boolean = false)(implicit context: app.Context): String = {
// escape issue id
- val source = if(enableRefsLink){
+ val s = if(enableRefsLink){
markdown.replaceAll("(?<=(\\W|^))#(\\d+)(?=(\\W|$))", "issue:$2")
} else markdown
+ // escape task list
+ val source = if(enableTaskList){
+ GitBucketHtmlSerializer.escapeTaskList(s)
+ } else s
+
val rootNode = new PegDownProcessor(
Extensions.AUTOLINKS | Extensions.WIKILINKS | Extensions.FENCED_CODE_BLOCKS | Extensions.TABLES | Extensions.HARDWRAPS
).parseMarkdown(source.toCharArray)
- new GitBucketHtmlSerializer(markdown, repository, enableWikiLink, enableRefsLink).toHtml(rootNode)
+ new GitBucketHtmlSerializer(markdown, repository, enableWikiLink, enableRefsLink, enableTaskList).toHtml(rootNode)
}
}
@@ -83,11 +88,12 @@
markdown: String,
repository: service.RepositoryService.RepositoryInfo,
enableWikiLink: Boolean,
- enableRefsLink: Boolean
+ enableRefsLink: Boolean,
+ enableTaskList: Boolean
)(implicit val context: app.Context) extends ToHtmlSerializer(
new GitBucketLinkRender(context, repository, enableWikiLink),
Map[String, VerbatimSerializer](VerbatimSerializer.DEFAULT -> new GitBucketVerbatimSerializer).asJava
- ) with LinkConverter with RequestCache {
+ ) with RepositoryService with LinkConverter with RequestCache {
override protected def printImageTag(imageNode: SuperNode, url: String): Unit =
printer.print("")
@@ -130,7 +136,10 @@
override def visit(node: TextNode): Unit = {
// convert commit id and username to link.
- val text = if(enableRefsLink) convertRefsLinks(node.getText, repository, "issue:") else node.getText
+ val t = if(enableRefsLink) convertRefsLinks(node.getText, repository, "issue:") else node.getText
+
+ // convert task list to checkbox.
+ val text = if(enableTaskList) GitBucketHtmlSerializer.convertCheckBox(t, hasWritePermission(repository.owner, repository.name, context.loginAccount)) else t
if (abbreviations.isEmpty) {
printer.print(text)
@@ -154,4 +163,10 @@
def escapeTaskList(text: String): String = {
Pattern.compile("""^ *- \[([x| ])\] """, Pattern.MULTILINE).matcher(text).replaceAll("task:$1: ")
}
+
+ def convertCheckBox(text: String, hasWritePermission: Boolean): String = {
+ val disabled = if (hasWritePermission) "" else "disabled"
+ text.replaceAll("task:x:", """")
+ .replaceAll("task: :", """")
+ }
}
diff --git a/src/main/scala/view/helpers.scala b/src/main/scala/view/helpers.scala
index feb5f21..774c034 100644
--- a/src/main/scala/view/helpers.scala
+++ b/src/main/scala/view/helpers.scala
@@ -41,8 +41,8 @@
* Converts Markdown of Wiki pages to HTML.
*/
def markdown(value: String, repository: service.RepositoryService.RepositoryInfo,
- enableWikiLink: Boolean, enableRefsLink: Boolean)(implicit context: app.Context): Html =
- Html(Markdown.toHtml(value, repository, enableWikiLink, enableRefsLink))
+ enableWikiLink: Boolean, enableRefsLink: Boolean, enableTaskList: Boolean = false)(implicit context: app.Context): Html =
+ Html(Markdown.toHtml(value, repository, enableWikiLink, enableRefsLink, enableTaskList))
def renderMarkup(filePath: List[String], fileContent: String, branch: String,
repository: service.RepositoryService.RepositoryInfo,
diff --git a/src/main/twirl/helper/preview.scala.html b/src/main/twirl/helper/preview.scala.html
index cc6504b..1586128 100644
--- a/src/main/twirl/helper/preview.scala.html
+++ b/src/main/twirl/helper/preview.scala.html
@@ -1,4 +1,4 @@
-@(repository: service.RepositoryService.RepositoryInfo, content: String, enableWikiLink: Boolean, enableRefsLink: Boolean,
+@(repository: service.RepositoryService.RepositoryInfo, content: String, enableWikiLink: Boolean, enableRefsLink: Boolean, enableTaskList: Boolean,
style: String = "", placeholder: String = "Leave a comment", elastic: Boolean = false)(implicit context: app.Context)
@import context._
@import view.helpers._
@@ -36,7 +36,8 @@
$.post('@url(repository)/_preview', {
content : $('#content').val(),
enableWikiLink : @enableWikiLink,
- enableRefsLink : @enableRefsLink
+ enableRefsLink : @enableRefsLink,
+ enableTaskList : @enableTaskList
}, function(data){
$('#preview-area').html(data);
prettyPrint();
diff --git a/src/main/twirl/issues/commentform.scala.html b/src/main/twirl/issues/commentform.scala.html
index edf656e..e4a6836 100644
--- a/src/main/twirl/issues/commentform.scala.html
+++ b/src/main/twirl/issues/commentform.scala.html
@@ -8,7 +8,7 @@