grill
Version:
40 lines (29 loc) • 1.08 kB
text/coffeescript
Mincer = require 'mincer'
FS = require 'fs'
Path = require 'path'
module.exports = class HamlEngine extends Mincer.Template
evaluate: (context) ->
HAMLC = require 'haml-coffee'
options = @constructor.options || {}
layout = (location, locals={}, content) ->
if typeof locals == "function"
content = locals
locals = {}
locals.content = content()
compileOrMince location, locals
partial = (location, locals={}) ->
compileOrMince location, locals
compileOrMince = (location, locals={}) ->
context.dependOn location
if Path.extname(location) == '.haml'
locals[key] = value for key, value of options
compile FS.readFileSync(context.environment.resolve location), locals
else
context.environment.findAsset(location).toString()
compile = (source, locals={}) ->
locals.partial = partial
locals.layout = layout
HAMLC.compile(source.toString())(locals)
compile(@data, options)