Skip to content
Snippets Groups Projects
0004-libs-web-add-support-for-string-templates-to-luci.template-module.patch 1.99 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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/modules/base/luasrc/template.lua b/modules/base/luasrc/template.lua
    
    index 72127d1..ea01d3c 100644
    
    --- a/modules/base/luasrc/template.lua
    +++ b/modules/base/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