From 4cbf7e7bb0746ccd34661dc85cbf7e30bf0a1ad0 Mon Sep 17 00:00:00 2001 From: Ali Yakamercan Date: Wed, 24 Feb 2016 11:39:23 -0500 Subject: [PATCH] pass context to partials --- .../handlebars/scala/CachingHandlebars.scala | 9 ++++++++- .../com/gilt/handlebars/scala/Handlebars.scala | 17 ++++++++++++++++- .../scala/visitor/DefaultVisitor.scala | 2 +- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/main/scala/com/gilt/handlebars/scala/CachingHandlebars.scala b/src/main/scala/com/gilt/handlebars/scala/CachingHandlebars.scala index 2921e23..33e3a3a 100644 --- a/src/main/scala/com/gilt/handlebars/scala/CachingHandlebars.scala +++ b/src/main/scala/com/gilt/handlebars/scala/CachingHandlebars.scala @@ -3,6 +3,7 @@ package com.gilt.handlebars.scala import java.io.File import com.gilt.handlebars.scala.binding.{Binding, BindingFactory} +import com.gilt.handlebars.scala.context.Context import com.gilt.handlebars.scala.helper.Helper import com.gilt.handlebars.scala.parser.{HandlebarsGrammar, Program} import com.gilt.handlebars.scala.partial.PartialHelper @@ -62,4 +63,10 @@ case class CachingHandlebarsImpl[T]( data: Map[String, Binding[T]] = Map.empty[String, Binding[T]], partials: Map[String, Handlebars[T]] = Map.empty[String, Handlebars[T]], helpers: Map[String, Helper[T]] = Map.empty[String, Helper[T]])(implicit c: BindingFactory[T]): String = "" // Call to HandlebarsVisitor -} \ No newline at end of file + + def c( + context: Context[T], + data: Map[String, Binding[T]], + partials: Map[String, Handlebars[T]], + helpers: Map[String, Helper[T]])(implicit c: BindingFactory[T]): String = "" // Call to HandlebarsVisitor +} diff --git a/src/main/scala/com/gilt/handlebars/scala/Handlebars.scala b/src/main/scala/com/gilt/handlebars/scala/Handlebars.scala index 030e537..c91a0cd 100644 --- a/src/main/scala/com/gilt/handlebars/scala/Handlebars.scala +++ b/src/main/scala/com/gilt/handlebars/scala/Handlebars.scala @@ -17,10 +17,16 @@ trait Handlebars[T] { def helpers: Map[String, Helper[T]] def apply( - context: Binding[T], + binding: Binding[T], data: Map[String, Binding[T]] = Map.empty[String, Binding[T]], partials: Map[String, Handlebars[T]] = Map.empty[String, Handlebars[T]], helpers: Map[String, Helper[T]] = Map.empty[String, Helper[T]])(implicit c: BindingFactory[T]): String + + def c( + context: Context[T], + data: Map[String, Binding[T]], + partials: Map[String, Handlebars[T]], + helpers: Map[String, Helper[T]])(implicit c: BindingFactory[T]): String } class HandlebarsImpl[T]( @@ -38,6 +44,15 @@ class HandlebarsImpl[T]( DefaultVisitor(Context(binding), PartialHelper.normalizePartialNames(partials ++ providedPartials), helpers ++ providedHelpers, data).visit(program) } + + override def c( + context: Context[T], + data: Map[String, Binding[T]], + providedPartials: Map[String, Handlebars[T]], + providedHelpers: Map[String, Helper[T]])(implicit c: BindingFactory[T]): String = { + + DefaultVisitor(context, PartialHelper.normalizePartialNames(partials ++ providedPartials), helpers ++ providedHelpers, data).visit(program) + } } object Handlebars { diff --git a/src/main/scala/com/gilt/handlebars/scala/visitor/DefaultVisitor.scala b/src/main/scala/com/gilt/handlebars/scala/visitor/DefaultVisitor.scala index 1585754..59ea6fb 100644 --- a/src/main/scala/com/gilt/handlebars/scala/visitor/DefaultVisitor.scala +++ b/src/main/scala/com/gilt/handlebars/scala/visitor/DefaultVisitor.scala @@ -133,7 +133,7 @@ class DefaultVisitor[T](context: Context[T], partials: Map[String, Handlebars[T] val partialContext = partial.context.map(context.lookup(_)).getOrElse(context) partials.get(partialName).map { - _(partialContext.binding, data, partials, helpers) // TODO - partial rendering should receive a context + _.c(partialContext, data, partials, helpers) }.getOrElse { warn(s"Could not find partial: $partialName") ""