luci-base: dispatcher: support raw values in attr() and ifattr()

Extend the attr() and ifattr() template functions to take an optional
further parameter indicating that the passed value should not be escaped.

This is needed for cases where the input already is escaped through
other means, e.g. when the value was previously filtered through the
striptags() template helper.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
Jo-Philipp Wich 2019-02-12 08:28:21 +01:00
parent 83df3eb6c7
commit 4141243762

View file

@ -328,7 +328,7 @@ function dispatch(request)
assert(media, "No valid theme found") assert(media, "No valid theme found")
end end
local function _ifattr(cond, key, val) local function _ifattr(cond, key, val, noescape)
if cond then if cond then
local env = getfenv(3) local env = getfenv(3)
local scope = (type(env.self) == "table") and env.self local scope = (type(env.self) == "table") and env.self
@ -339,13 +339,16 @@ function dispatch(request)
val = util.serialize_json(val) val = util.serialize_json(val)
end end
end end
return string.format(
' %s="%s"', tostring(key), val = tostring(val or
util.pcdata(tostring( val (type(env[key]) ~= "function" and env[key]) or
or (type(env[key]) ~= "function" and env[key]) (scope and type(scope[key]) ~= "function" and scope[key]) or "")
or (scope and type(scope[key]) ~= "function" and scope[key])
or "" )) if noescape ~= true then
) val = util.pcdata(val)
end
return string.format(' %s="%s"', tostring(key), val)
else else
return '' return ''
end end