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>
(cherry picked from commit 4141243762)
This commit is contained in:
Jo-Philipp Wich 2019-02-12 08:28:21 +01:00
parent a0ae6c97f3
commit 28e852f4e0

View file

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