libs/web: add support for string templates to luci.template module

Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
This commit is contained in:
Jo-Philipp Wich 2014-09-04 11:35:15 +00:00
parent 35eaa9f85f
commit 8fab048554

View file

@ -50,6 +50,13 @@ function render(name, scope)
return Template(name):render(scope or getfenv(2))
end
--- Render a template from a string.
-- @param template Template string
-- @param scope Scope to assign to template (optional)
function render_string(template, scope)
return Template(nil, template):render(scope or getfenv(2))
end
-- Template class
Template = util.class()
@ -59,11 +66,14 @@ Template.cache = setmetatable({}, {__mode = "v"})
-- Constructor - Reads and compiles the template on-demand
function Template.__init__(self, name)
function Template.__init__(self, name, template)
if name then
self.template = self.cache[name]
self.name = name
else
self.name = "[string]"
end
self.template = self.cache[name]
self.name = name
-- Create a new namespace for this template
self.viewns = context.viewns
@ -72,16 +82,22 @@ function Template.__init__(self, name)
-- Compile template
local err
local sourcefile = viewdir .. "/" .. name .. ".htm"
local sourcefile
self.template, _, err = tparser.parse(sourcefile)
if name then
sourcefile = viewdir .. "/" .. name .. ".htm"
self.template, _, err = tparser.parse(sourcefile)
else
sourcefile = "[string]"
self.template, _, err = tparser.parse_string(template)
end
-- If we have no valid template throw error, otherwise cache the template
if not self.template then
error("Failed to load template '" .. name .. "'.\n" ..
"Error while parsing template '" .. sourcefile .. "':\n" ..
(err or "Unknown syntax error"))
else
elseif name then
self.cache[name] = self.template
end
end