aboutsummaryrefslogtreecommitdiff
path: root/doc-tool
diff options
context:
space:
mode:
authorFelix Mulder <felix.mulder@gmail.com>2017-01-08 16:00:35 +0100
committerFelix Mulder <felix.mulder@gmail.com>2017-01-31 14:31:04 +0100
commitde4787898fbf91662cd894c5a9a0f30ad097fa5f (patch)
tree12828f1b20780bc70bddd5bc7fb374d4a33e15e7 /doc-tool
parent87f1f5f44585e855a8c8234955e1e48dcbbc3a21 (diff)
downloaddotty-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.html4
-rw-r--r--doc-tool/resources/index.md5
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/staticsite/Site.scala18
-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"
+ )
+ }
}