Created
October 29, 2010 10:34
-
-
Save casualjim/653308 to your computer and use it in GitHub Desktop.
Template support trait for scalatra
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
trait TemplateSupport extends ScalateSupport with Logging { self: ( | |
ScalatraKernel with FlashMapSupport with CookieSupport { def servletContext: ServletContext }) => | |
private var _viewsLocation = "/WEB-INF/views" | |
val Ssp = "ssp" | |
val Scaml = "scaml" | |
val Jade = "jade" | |
val Mustache = "mustache" | |
protected def viewsLocation = | |
if (_viewsLocation.endsWith("/")) _viewsLocation.substring(0, _viewsLocation.length - 1) else _viewsLocation | |
protected def viewsLocation_=(location: String ) = { | |
_viewsLocation = if (location.endsWith("/")) location.substring(0, location.length - 1) else location | |
_viewsLocation | |
} | |
protected def templatePath(templateName: String, extension: String = "ssp") = { | |
val ext = if (extension.startsWith(".")) extension else (".%s" format extension) | |
val templ = if (templateName.startsWith("/")) templateName else ("/%s" format templateName) | |
viewsLocation + templ + ext | |
} | |
protected def render(path: String, options: (String, Any)*) = { | |
log debug "Rendering template with path [%s] and options: %s".format(path, options) | |
response.setContentType("text/html") | |
renderTemplate(path, (("flash" -> flash) :: options.toList):_*) | |
} | |
protected def ssp(templateName: String, options: (String, Any)*) = { | |
render(templatePath(templateName, Ssp), options:_*) | |
} | |
protected def scaml(templateName: String, options: (String, Any)*) = { | |
render(templatePath(templateName, Scaml), options:_*) | |
} | |
protected def jade(templateName: String, options: (String, Any)*) = { | |
render(templatePath(templateName, Jade), options:_*) | |
} | |
protected def mustache(templateName: String, options: (String, Any)*) = { | |
render(templatePath(templateName, Mustache), options:_*) | |
} | |
override def createRenderContext: ServletRenderContext = { | |
templateEngine.bindings = | |
Binding("flash", "org.scalatra.FlashMap") :: | |
Binding("params", "scala.collection.Map[String, String]") :: | |
Binding("title", "String") :: | |
Binding("cookies", "org.scalatra.SweetCookies") :: | |
Binding("session", "org.scalatra.RichSession") :: templateEngine.bindings | |
val context = new ServletRenderContext(templateEngine, request, response, servletContext) | |
context.attributes.update("flash", flash) | |
context.attributes.update("cookies", self.cookies) | |
context.attributes.update("session", new RichSession(session)) | |
context.attributes.update("params", params) | |
context.attributes.update("title", "") | |
context | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment