lib/cbi: Added support for multiple CBI maps per model
authorSteven Barth <steven@midlink.org>
Tue, 15 Jul 2008 13:17:28 +0000 (13:17 +0000)
committerSteven Barth <steven@midlink.org>
Tue, 15 Jul 2008 13:17:28 +0000 (13:17 +0000)
libs/cbi/luasrc/cbi.lua
libs/web/luasrc/dispatcher.lua
modules/admin-mini/luasrc/controller/index.lua [deleted file]
modules/admin-mini/luasrc/controller/mini/index.lua [new file with mode: 0644]

index 6e08455..7370a04 100644 (file)
@@ -57,14 +57,16 @@ function load(cbimap)
        luci.util.extfenv(func, "translate", luci.i18n.translate)
        luci.util.extfenv(func, "translatef", luci.i18n.translatef)
 
-       local map = func()
+       local maps = {func()}
 
-       if not instanceof(map, Map) then
-               error("CBI map returns no valid map object!")
-               return nil
+       for i, map in ipairs(maps) do
+               if not instanceof(map, Map) then
+                       error("CBI map returns no valid map object!")
+                       return nil
+               end
        end
 
-       return map
+       return maps
 end
 
 -- Node pseudo abstract class
index 689d060..735e2a7 100644 (file)
@@ -381,20 +381,24 @@ function cbi(model)
        require("luci.template")
 
        return function()
-               local stat, res = luci.util.copcall(luci.cbi.load, model)
+               local stat, maps = luci.util.copcall(luci.cbi.load, model)
                if not stat then
-                       error500(res)
+                       error500(maps)
                        return true
                end
 
-               local stat, err = luci.util.copcall(res.parse, res)
-               if not stat then
-                       error500(err)
-                       return true
+               for i, res in ipairs(maps) do
+                       local stat, err = luci.util.copcall(res.parse, res)
+                       if not stat then
+                               error500(err)
+                               return true
+                       end
                end
 
                luci.template.render("cbi/header")
-               res:render()
+               for i, res in ipairs(maps) do
+                       res:render()
+               end
                luci.template.render("cbi/footer")
        end
 end
diff --git a/modules/admin-mini/luasrc/controller/index.lua b/modules/admin-mini/luasrc/controller/index.lua
deleted file mode 100644 (file)
index eb58e00..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
---[[
-LuCI - Lua Configuration Interface
-
-Copyright 2008 Steven Barth <steven@midlink.org>
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-$Id$
-]]--
-module("luci.controller.admin.index", package.seeall)
-
-function index()
-       luci.i18n.loadc("admin-core")
-       local i18n = luci.i18n.translate
-
-       local root = node()
-       if not root.target then
-               root.target = alias("admin")
-       end
-       
-       entry({"about"}, template("about")).i18n = "admin-core"
-       
-       local page   = node("admin")
-       page.target  = alias("admin", "index")
-       page.title   = i18n("administration", "Administration")
-       page.order   = 10
-       page.i18n    = "admin-core"
-       page.sysauth = "root"
-       
-       local page  = node("admin", "index")
-       page.target = template("admin_index/index")
-       page.title  = i18n("overview", "Übersicht")
-       page.order  = 10
-       
-       local page  = node("admin", "index", "luci")
-       page.target = cbi("admin_index/luci")
-       page.title  = i18n("a_i_ui", "Oberfläche")
-       
-       entry({"admin", "logout"}, call("action_logout"), i18n("logout"))
-end
-
-function action_logout()
-       luci.http.header("Set-Cookie", "sysauth=; path=/")
-       luci.http.redirect(luci.dispatcher.build_url())
-end
\ No newline at end of file
diff --git a/modules/admin-mini/luasrc/controller/mini/index.lua b/modules/admin-mini/luasrc/controller/mini/index.lua
new file mode 100644 (file)
index 0000000..eb58e00
--- /dev/null
@@ -0,0 +1,49 @@
+--[[
+LuCI - Lua Configuration Interface
+
+Copyright 2008 Steven Barth <steven@midlink.org>
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+$Id$
+]]--
+module("luci.controller.admin.index", package.seeall)
+
+function index()
+       luci.i18n.loadc("admin-core")
+       local i18n = luci.i18n.translate
+
+       local root = node()
+       if not root.target then
+               root.target = alias("admin")
+       end
+       
+       entry({"about"}, template("about")).i18n = "admin-core"
+       
+       local page   = node("admin")
+       page.target  = alias("admin", "index")
+       page.title   = i18n("administration", "Administration")
+       page.order   = 10
+       page.i18n    = "admin-core"
+       page.sysauth = "root"
+       
+       local page  = node("admin", "index")
+       page.target = template("admin_index/index")
+       page.title  = i18n("overview", "Übersicht")
+       page.order  = 10
+       
+       local page  = node("admin", "index", "luci")
+       page.target = cbi("admin_index/luci")
+       page.title  = i18n("a_i_ui", "Oberfläche")
+       
+       entry({"admin", "logout"}, call("action_logout"), i18n("logout"))
+end
+
+function action_logout()
+       luci.http.header("Set-Cookie", "sysauth=; path=/")
+       luci.http.redirect(luci.dispatcher.build_url())
+end
\ No newline at end of file