diff options
author | Felix Mulder <felix.mulder@gmail.com> | 2017-01-08 16:00:35 +0100 |
---|---|---|
committer | Felix Mulder <felix.mulder@gmail.com> | 2017-01-31 14:31:04 +0100 |
commit | de4787898fbf91662cd894c5a9a0f30ad097fa5f (patch) | |
tree | 12828f1b20780bc70bddd5bc7fb374d4a33e15e7 /doc-tool | |
parent | 87f1f5f44585e855a8c8234955e1e48dcbbc3a21 (diff) | |
download | dotty-de4787898fbf91662cd894c5a9a0f30ad097fa5f.tar.gz dotty-de4787898fbf91662cd894c5a9a0f30ad097fa5f.tar.bz2 dotty-de4787898fbf91662cd894c5a9a0f30ad097fa5f.zip |
Fix recursive expansion of templates
Diffstat (limited to 'doc-tool')
-rw-r--r-- | doc-tool/resources/_layouts/index.html | 4 | ||||
-rw-r--r-- | doc-tool/resources/index.md | 5 | ||||
-rw-r--r-- | doc-tool/src/dotty/tools/dottydoc/staticsite/Site.scala | 18 | ||||
-rw-r--r-- | doc-tool/test/dotty/tools/dottydoc/staticsite/PageTests.scala (renamed from doc-tool/test/StaticPageTests.scala) | 5 | ||||
-rw-r--r-- | doc-tool/test/dotty/tools/dottydoc/staticsite/SiteTests.scala (renamed from doc-tool/test/StaticSiteTests.scala) | 27 |
5 files changed, 44 insertions, 15 deletions
diff --git a/doc-tool/resources/_layouts/index.html b/doc-tool/resources/_layouts/index.html new file mode 100644 index 000000000..5be2d9794 --- /dev/null +++ b/doc-tool/resources/_layouts/index.html @@ -0,0 +1,4 @@ +--- +layout: main +--- +<h1>{{ content }}</h1> diff --git a/doc-tool/resources/index.md b/doc-tool/resources/index.md new file mode 100644 index 000000000..82f1d9cfc --- /dev/null +++ b/doc-tool/resources/index.md @@ -0,0 +1,5 @@ +--- +layout: main +--- + +Hello, world! diff --git a/doc-tool/src/dotty/tools/dottydoc/staticsite/Site.scala b/doc-tool/src/dotty/tools/dottydoc/staticsite/Site.scala index d51b881e5..11e2faeef 100644 --- a/doc-tool/src/dotty/tools/dottydoc/staticsite/Site.scala +++ b/doc-tool/src/dotty/tools/dottydoc/staticsite/Site.scala @@ -33,11 +33,6 @@ class Site(val root: JFile) { } .toMap - def getResource(p: String): String = - Option(getClass.getResourceAsStream(p)).map(scala.io.Source.fromInputStream) - .map(_.mkString) - .getOrElse(throw ResourceNotFoundException(p)) - val userDefinedLayouts = root .listFiles.find(d => d.getName == "_layouts" && d.isDirectory) @@ -45,18 +40,25 @@ class Site(val root: JFile) { .getOrElse(Map.empty) val defaultLayouts: Map[String, String] = Map( - "main" -> "/_layouts/main.html" + "main" -> "/_layouts/main.html", + "index" -> "/_layouts/index.html" ).mapValues(getResource) defaultLayouts ++ userDefinedLayouts } + private def getResource(r: String): String = + Option(getClass.getResourceAsStream(r)).map(scala.io.Source.fromInputStream) + .map(_.mkString) + .getOrElse(throw ResourceNotFoundException(r)) + def render(page: Page, params: Map[String, AnyRef])(implicit ctx: Context): String = { page.yaml.get("layout").flatMap(layouts.get(_)) match { - case Some(layout) => - (new HtmlPage(layout, Map("content" -> page.html) ++ params)).html case None => page.html + case Some(layout) => + val expandedTemplate = new HtmlPage(layout, Map("content" -> page.html) ++ params) + render(expandedTemplate, params) } } } diff --git a/doc-tool/test/StaticPageTests.scala b/doc-tool/test/dotty/tools/dottydoc/staticsite/PageTests.scala index 1b22665c8..87358d738 100644 --- a/doc-tool/test/StaticPageTests.scala +++ b/doc-tool/test/dotty/tools/dottydoc/staticsite/PageTests.scala @@ -1,12 +1,11 @@ package dotty.tools package dottydoc +package staticsite import org.junit.Test import org.junit.Assert._ -import staticsite.{ MarkdownPage, HtmlPage, IllegalFrontMatter } - -class StaticPageTests extends DottyDocTest { +class PageTests extends DottyDocTest { import scala.collection.JavaConverters._ @Test def mdHas1Key = { diff --git a/doc-tool/test/StaticSiteTests.scala b/doc-tool/test/dotty/tools/dottydoc/staticsite/SiteTests.scala index a2f174eb3..b73d7555b 100644 --- a/doc-tool/test/StaticSiteTests.scala +++ b/doc-tool/test/dotty/tools/dottydoc/staticsite/SiteTests.scala @@ -1,19 +1,18 @@ package dotty.tools package dottydoc +package staticsite import org.junit.Test import org.junit.Assert._ -import staticsite.{ Site, HtmlPage } - -class StaticSiteTests extends DottyDocTest { +class SiteTests extends DottyDocTest { @Test def hasCorrectLayoutFiles = { val site = new Site(new java.io.File("../doc-tool/resources/")) assert(site.root.exists && site.root.isDirectory, s"'${site.root.getName}' is not a directory") - val expectedLayouts = Set("main") + val expectedLayouts = Set("main", "index") assert(site.layouts.keys == expectedLayouts, s"Incorrect layouts in: ${site.layouts.keys}, expected: $expectedLayouts") } @@ -37,4 +36,24 @@ class StaticSiteTests extends DottyDocTest { "html page did not render properly" ) } + + @Test def renderMultipleTemplates = { + val site = new Site(new java.io.File("../doc-tool/resources/")) + + val renderedPage = site.render(new HtmlPage( + """|--- + |layout: index + |--- + |Hello, world!""".stripMargin, + Map.empty + ), Map.empty) + + assert( + renderedPage.contains("<h1>Hello, world!</h1>") && + !renderedPage.contains("---\nlayout: main\n---\n") && + !renderedPage.contains("---\nlayout: index\n---\n") && + renderedPage.contains("<!DOCTYPE html>"), + "html page did not render properly" + ) + } } |