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:
parent
35eaa9f85f
commit
8fab048554
1 changed files with 23 additions and 7 deletions
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue