aboutsummaryrefslogtreecommitdiff
path: root/doc-tool
diff options
context:
space:
mode:
authorFelix Mulder <felix.mulder@gmail.com>2017-01-09 13:55:43 +0100
committerFelix Mulder <felix.mulder@gmail.com>2017-01-31 14:31:05 +0100
commitce4ba7f7718fb1b5f698e784fa7f89902f5bf098 (patch)
treed8c8ad76636ae8f1d14b666dcf0c8cf491edd649 /doc-tool
parentde4787898fbf91662cd894c5a9a0f30ad097fa5f (diff)
downloaddotty-ce4ba7f7718fb1b5f698e784fa7f89902f5bf098.tar.gz
dotty-ce4ba7f7718fb1b5f698e784fa7f89902f5bf098.tar.bz2
dotty-ce4ba7f7718fb1b5f698e784fa7f89902f5bf098.zip
Preserve `page` object on expansion
Diffstat (limited to 'doc-tool')
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/staticsite/Page.scala23
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/staticsite/Site.scala3
-rw-r--r--doc-tool/test/dotty/tools/dottydoc/staticsite/SiteTests.scala22
3 files changed, 44 insertions, 4 deletions
diff --git a/doc-tool/src/dotty/tools/dottydoc/staticsite/Page.scala b/doc-tool/src/dotty/tools/dottydoc/staticsite/Page.scala
index 33667cf61..0293c3367 100644
--- a/doc-tool/src/dotty/tools/dottydoc/staticsite/Page.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/staticsite/Page.scala
@@ -10,6 +10,7 @@ import com.vladsch.flexmark.html.HtmlRenderer
import com.vladsch.flexmark.parser.Parser
import com.vladsch.flexmark.ext.front.matter.AbstractYamlFrontMatterVisitor
import liqp.{ Template => LiquidTemplate }
+import _root_.java.util.{ Map => JMap }
case class IllegalFrontMatter(message: String) extends Exception(message)
@@ -37,10 +38,12 @@ trait Page {
val yamlCollector = new AbstractYamlFrontMatterVisitor()
yamlCollector.visit(md)
- _yaml = yamlCollector
+ _yaml = updatedYaml {
+ yamlCollector
.getData().asScala
.mapValues(_.asScala.headOption.getOrElse(""))
.toMap
+ }
// YAML must start with "---" and end in either "---" or "..."
val withoutYaml =
@@ -57,11 +60,25 @@ trait Page {
else pageContent
// make accessible via "{{ page.title }}" in templates
- val page = Map("page" -> _yaml.asJava)
+ val page = Map("page" -> _yaml.asJava)
_html = LiquidTemplate
.parse(withoutYaml)
- .render((page ++ params).asJava)
+ .render((params ++ page).asJava)
}
+
+ /** Takes "page" from `params` map in case this is a second expansion, and
+ * removes "layout" from the parameters if it exists. We don't want to
+ * preserve the layout from the previously expanded template
+ */
+ private def updatedYaml(newYaml: Map[String, String]): Map[String, String] =
+ params
+ .get("page")
+ .flatMap {
+ case page: Map[String, String] @unchecked =>
+ Some(page - "layout" ++ newYaml)
+ case _ => None
+ }
+ .getOrElse(newYaml)
}
class HtmlPage(fileContents: => String, val params: Map[String, AnyRef]) extends Page {
diff --git a/doc-tool/src/dotty/tools/dottydoc/staticsite/Site.scala b/doc-tool/src/dotty/tools/dottydoc/staticsite/Site.scala
index 11e2faeef..ac609e6b6 100644
--- a/doc-tool/src/dotty/tools/dottydoc/staticsite/Site.scala
+++ b/doc-tool/src/dotty/tools/dottydoc/staticsite/Site.scala
@@ -57,7 +57,8 @@ class Site(val root: JFile) {
case None =>
page.html
case Some(layout) =>
- val expandedTemplate = new HtmlPage(layout, Map("content" -> page.html) ++ params)
+ val newParams = Map("content" -> page.html) ++ params ++ Map("page" -> page.yaml)
+ val expandedTemplate = new HtmlPage(layout, newParams)
render(expandedTemplate, params)
}
}
diff --git a/doc-tool/test/dotty/tools/dottydoc/staticsite/SiteTests.scala b/doc-tool/test/dotty/tools/dottydoc/staticsite/SiteTests.scala
index b73d7555b..2a8b6ac9b 100644
--- a/doc-tool/test/dotty/tools/dottydoc/staticsite/SiteTests.scala
+++ b/doc-tool/test/dotty/tools/dottydoc/staticsite/SiteTests.scala
@@ -56,4 +56,26 @@ class SiteTests extends DottyDocTest {
"html page did not render properly"
)
}
+
+ @Test def preservesPageYaml = {
+ val site = new Site(new java.io.File("../doc-tool/resources/"))
+
+ val renderedPage = site.render(new HtmlPage(
+ """|---
+ |title: Hello, world
+ |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("<title>Hello, world</title>") &&
+ renderedPage.contains("<!DOCTYPE html>"),
+ "html page did not render properly"
+ )
+ }
}