libs/cbi: Added magic ;-)
authorSteven Barth <steven@midlink.org>
Thu, 7 Aug 2008 19:03:25 +0000 (19:03 +0000)
committerSteven Barth <steven@midlink.org>
Thu, 7 Aug 2008 19:03:25 +0000 (19:03 +0000)
libs/cbi/luasrc/cbi.lua
libs/web/luasrc/dispatcher.lua
modules/admin-full/luasrc/controller/admin/network.lua
modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua

index f81f7f1b9424a6a79d9175c976558bc8d9a8dbf5..ff33604254f745148659ef4eccf6669fc7960ff4 100644 (file)
@@ -37,7 +37,7 @@ local instanceof = luci.util.instanceof
 
 
 -- Loads a CBI map from given file, creating an environment and returns it
-function load(cbimap)
+function load(cbimap, ...)
        require("luci.fs")
        require("luci.i18n")
        require("luci.config")
@@ -56,6 +56,7 @@ function load(cbimap)
        luci.util.updfenv(func, luci.cbi)
        luci.util.extfenv(func, "translate", luci.i18n.translate)
        luci.util.extfenv(func, "translatef", luci.i18n.translatef)
+       luci.util.extfenv(func, "arg", {...})
 
        local maps = {func()}
 
@@ -414,7 +415,6 @@ function TypedSection.__init__(self, map, type, ...)
 
        self.template  = "cbi/tsection"
        self.deps = {}
-       self.excludes = {}
 
        self.anonymous = false
 end
@@ -437,11 +437,6 @@ function TypedSection.depends(self, option, value)
        table.insert(self.deps, {option=option, value=value})
 end
 
--- Excludes several sections by name
-function TypedSection.exclude(self, field)
-       self.excludes[field] = true
-end
-
 function TypedSection.parse(self)
        if self.addremove then
                -- Create
@@ -492,7 +487,7 @@ end
 -- Verifies scope of sections
 function TypedSection.checkscope(self, section)
        -- Check if we are not excluded
-       if self.excludes[section] then
+       if self.filter and not self.filter(section) then
                return nil
        end
 
index 840dbf3c26aec4fd33671e71b37209fa5bc2b5fe..9ba74c49c91e09ed25dc101d007c73918c3a1678 100644 (file)
@@ -126,9 +126,12 @@ function dispatch(request)
        
        local c = context.tree
        local track = {}
+       local args = {}
+       local n
 
        for i, s in ipairs(request) do
                c = c.nodes[s]
+               n = i
                if not c or c.leaf then
                        break
                end
@@ -138,6 +141,12 @@ function dispatch(request)
                end
        end
 
+       if c and c.leaf then
+               for j=n+1, #request do
+                       table.insert(args, request[j])
+               end
+       end
+
        if track.i18n then
                require("luci.i18n").loadc(track.i18n)
        end
@@ -190,7 +199,7 @@ function dispatch(request)
                        luci.util.updfenv(c.target, mod)
                end
                
-               stat, err = luci.util.copcall(c.target)
+               stat, err = luci.util.copcall(c.target, unpack(args))
                if not stat then
                        error500(err)
                end
@@ -430,8 +439,8 @@ function cbi(model)
        require("luci.cbi")
        require("luci.template")
 
-       return function()
-               local stat, maps = luci.util.copcall(luci.cbi.load, model)
+       return function(...)
+               local stat, maps = luci.util.copcall(luci.cbi.load, model, ...)
                if not stat then
                        error500(maps)
                        return true
index 871263334a94ffe505c10dd0ca6605de0db04031..3fb45f804d04cb4315d4969263c0234071d94173 100644 (file)
@@ -15,6 +15,7 @@ module("luci.controller.admin.network", package.seeall)
 
 function index()
        require("luci.i18n")
+       require("luci.model.uci")
        local i18n = luci.i18n.translate
 
        local page  = node("admin", "network")
@@ -31,7 +32,18 @@ function index()
        page.target = cbi("admin_network/ifaces")
        page.title  = i18n("interfaces", "Schnittstellen")
        page.order  = 20
-       
+       page.leaf   = true
+
+       luci.model.uci.foreach("network", "interface",
+               function (section)
+                       local ifc = section[".name"]
+                       if ifc ~= "loopback" then
+                               entry({"admin", "network", "ifaces", ifc}, page.target, ifc)
+                       end
+               end
+       )
+
+
        local page  = node("admin", "network", "dhcp")
        page.target = cbi("admin_network/dhcp")
        page.title  = "DHCP"
index 014de7ddf7fb76e802cb4c07826fe4ea2801004d..bea425d7234776db42e10b82d3abdc2a4d71b258 100644 (file)
@@ -14,8 +14,14 @@ $Id$
 m = Map("network", translate("interfaces"), translate("a_n_ifaces1"))
 
 s = m:section(TypedSection, "interface", "")
-s.addremove = true
-s:exclude("loopback")
+function s.filter(section)
+       return section ~= "loopback" and (not arg or #arg == 0 or
+        luci.util.contains(arg, section))
+end
+
+if not arg or #arg == 0 then
+       s.addremove = true
+end
 s:depends("proto", "static")
 s:depends("proto", "dhcp")