68 lines
2.0 KiB
Diff
68 lines
2.0 KiB
Diff
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
|
Date: Fri, 16 May 2014 11:48:42 +0200
|
|
Subject: libs/web: add support for string templates to luci.template module
|
|
|
|
diff --git a/libs/web/luasrc/template.lua b/libs/web/luasrc/template.lua
|
|
index 72127d1..ea01d3c 100644
|
|
--- a/libs/web/luasrc/template.lua
|
|
+++ b/libs/web/luasrc/template.lua
|
|
@@ -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
|