Merge branch 'remove-asciidoc'

This commit is contained in:
takezoe
2014-04-10 07:44:02 +09:00
3 changed files with 2 additions and 72 deletions

View File

@@ -1,62 +0,0 @@
package view
import org.asciidoctor.Asciidoctor
import org.asciidoctor.AttributesBuilder
import org.asciidoctor.OptionsBuilder
import org.asciidoctor.SafeMode
import org.htmlcleaner.HtmlCleaner
import org.htmlcleaner.HtmlNode
import org.htmlcleaner.SimpleHtmlSerializer
import org.htmlcleaner.TagNode
import org.htmlcleaner.TagNodeVisitor
object Asciidoc {
private[this] lazy val asciidoctor = Asciidoctor.Factory.create()
/**
* Converts Markdown of Wiki pages to HTML.
*/
def toHtml(filePath: List[String], asciidoc: String, branch: String, repository: service.RepositoryService.RepositoryInfo,
enableWikiLink: Boolean, enableRefsLink: Boolean)(implicit context: app.Context): String = {
val options = OptionsBuilder.options()
options.safe(SafeMode.SECURE)
val attributes = AttributesBuilder.attributes()
attributes.showTitle(true)
options.attributes(attributes.get())
val rendered = asciidoctor.render(asciidoc, options)
val path = filePath.reverse.tail.reverse match {
case Nil => ""
case p => p.mkString("", "/", "/")
}
val relativeUrlPrefix = s"${helpers.url(repository)}/blob/${branch}/${path}"
prefixRelativeUrls(rendered, relativeUrlPrefix)
}
private[this] val exceptionPrefixes = Seq("#", "/", "http://", "https://")
def prefixRelativeUrls(html: String, urlPrefix: String): String = {
val cleaner = new HtmlCleaner()
val node = cleaner.clean(html)
node.traverse(new TagNodeVisitor() {
override def visit(tagNode: TagNode, htmlNode: HtmlNode): Boolean = {
htmlNode match {
case tag: TagNode if tag.getName == "a" =>
Option(tag.getAttributeByName("href")) foreach { href =>
if (exceptionPrefixes.forall(p => !href.startsWith(p))) {
tag.addAttribute("href", s"${urlPrefix}${href}")
}
}
case _ =>
}
// continue traversal
true
}
})
new SimpleHtmlSerializer(cleaner.getProperties()).getAsString(node)
}
}

View File

@@ -30,9 +30,7 @@ object helpers extends AvatarImageProvider with LinkConverter with RequestCache
private[this] val renderersBySuffix: Seq[(String, (List[String], String, String, service.RepositoryService.RepositoryInfo, Boolean, Boolean, app.Context) => Html)] =
Seq(
".md" -> ((filePath, fileContent, branch, repository, enableWikiLink, enableRefsLink, context) => markdown(fileContent, repository, enableWikiLink, enableRefsLink)(context)),
".markdown" -> ((filePath, fileContent, branch, repository, enableWikiLink, enableRefsLink, context) => markdown(fileContent, repository, enableWikiLink, enableRefsLink)(context)),
".adoc" -> ((filePath, fileContent, branch, repository, enableWikiLink, enableRefsLink, context) => asciidoc(filePath, fileContent, branch, repository, enableWikiLink, enableRefsLink)(context)),
".asciidoc" -> ((filePath, fileContent, branch, repository, enableWikiLink, enableRefsLink, context) => asciidoc(filePath, fileContent, branch, repository, enableWikiLink, enableRefsLink)(context))
".markdown" -> ((filePath, fileContent, branch, repository, enableWikiLink, enableRefsLink, context) => markdown(fileContent, repository, enableWikiLink, enableRefsLink)(context))
)
def renderableSuffixes: Seq[String] = renderersBySuffix.map(_._1)
@@ -59,10 +57,6 @@ object helpers extends AvatarImageProvider with LinkConverter with RequestCache
}
}
def asciidoc(filePath: List[String], value: String, branch: String, repository: service.RepositoryService.RepositoryInfo,
enableWikiLink: Boolean, enableRefsLink: Boolean)(implicit context: app.Context): Html =
Html(Asciidoc.toHtml(filePath, value, branch, repository, enableWikiLink, enableRefsLink))
/**
* Returns <img> which displays the avatar icon for the given user name.
* This method looks up Gravatar if avatar icon has not been configured in user settings.