libs/web: dispatcher: fix access to template properties in attr() and ifattr() helper...
authorJo-Philipp Wich <jow@openwrt.org>
Sun, 30 Oct 2011 15:00:54 +0000 (15:00 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Sun, 30 Oct 2011 15:00:54 +0000 (15:00 +0000)
libs/web/luasrc/dispatcher.lua

index fa78b2f..911f2f4 100644 (file)
@@ -284,13 +284,15 @@ function dispatch(request)
                        assert(media, "No valid theme found")
                end
 
-               local function ifattr(cond, key, val)
+               local function _ifattr(cond, key, val)
                        if cond then
-                               local env = getfenv(1)
+                               local env = getfenv(3)
+                               local scope = (type(env.self) == "table") and env.self
                                return string.format(
                                        ' %s="%s"', tostring(key),
                                        luci.util.pcdata(tostring( val
                                         or (type(env[key]) ~= "function" and env[key])
+                                        or (scope and type(scope[key]) ~= "function" and scope[key])
                                         or "" ))
                                )
                        else
@@ -308,8 +310,8 @@ function dispatch(request)
                   media       = media;
                   theme       = fs.basename(media);
                   resource    = luci.config.main.resourcebase;
-                  ifattr      = ifattr;
-                  attr        = function(...) return ifattr(true, ...) end
+                  ifattr      = function(...) return _ifattr(...) end;
+                  attr        = function(...) return _ifattr(true, ...) end;
                }, {__index=function(table, key)
                        if key == "controller" then
                                return build_url()