diff options
author | Felix Mulder <felix.mulder@gmail.com> | 2017-01-09 13:55:43 +0100 |
---|---|---|
committer | Felix Mulder <felix.mulder@gmail.com> | 2017-01-31 14:31:05 +0100 |
commit | ce4ba7f7718fb1b5f698e784fa7f89902f5bf098 (patch) | |
tree | d8c8ad76636ae8f1d14b666dcf0c8cf491edd649 /doc-tool/src/dotty/tools/dottydoc/staticsite | |
parent | de4787898fbf91662cd894c5a9a0f30ad097fa5f (diff) | |
download | dotty-ce4ba7f7718fb1b5f698e784fa7f89902f5bf098.tar.gz dotty-ce4ba7f7718fb1b5f698e784fa7f89902f5bf098.tar.bz2 dotty-ce4ba7f7718fb1b5f698e784fa7f89902f5bf098.zip |
Preserve `page` object on expansion
Diffstat (limited to 'doc-tool/src/dotty/tools/dottydoc/staticsite')
-rw-r--r-- | doc-tool/src/dotty/tools/dottydoc/staticsite/Page.scala | 23 | ||||
-rw-r--r-- | doc-tool/src/dotty/tools/dottydoc/staticsite/Site.scala | 3 |
2 files changed, 22 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) } } |