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)) return Template(name):render(scope or getfenv(2))
end 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 class
Template = util.class() Template = util.class()
@ -59,11 +66,14 @@ Template.cache = setmetatable({}, {__mode = "v"})
-- Constructor - Reads and compiles the template on-demand -- 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 -- Create a new namespace for this template
self.viewns = context.viewns self.viewns = context.viewns
@ -72,16 +82,22 @@ function Template.__init__(self, name)
-- Compile template -- Compile template
local err 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 we have no valid template throw error, otherwise cache the template
if not self.template then if not self.template then
error("Failed to load template '" .. name .. "'.\n" .. error("Failed to load template '" .. name .. "'.\n" ..
"Error while parsing template '" .. sourcefile .. "':\n" .. "Error while parsing template '" .. sourcefile .. "':\n" ..
(err or "Unknown syntax error")) (err or "Unknown syntax error"))
else elseif name then
self.cache[name] = self.template self.cache[name] = self.template
end end
end end