From: Steven Barth Date: Thu, 7 Aug 2008 19:03:25 +0000 (+0000) Subject: libs/cbi: Added magic ;-) X-Git-Tag: 0.8.0~505 X-Git-Url: http://git.openwrt.org/?p=project%2Fluci.git;a=commitdiff_plain;h=e72a526984982f6fa2b6f2ed5ce01523094bfe43 libs/cbi: Added magic ;-) --- diff --git a/libs/cbi/luasrc/cbi.lua b/libs/cbi/luasrc/cbi.lua index f81f7f1b94..ff33604254 100644 --- a/libs/cbi/luasrc/cbi.lua +++ b/libs/cbi/luasrc/cbi.lua @@ -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 diff --git a/libs/web/luasrc/dispatcher.lua b/libs/web/luasrc/dispatcher.lua index 840dbf3c26..9ba74c49c9 100644 --- a/libs/web/luasrc/dispatcher.lua +++ b/libs/web/luasrc/dispatcher.lua @@ -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 diff --git a/modules/admin-full/luasrc/controller/admin/network.lua b/modules/admin-full/luasrc/controller/admin/network.lua index 871263334a..3fb45f804d 100644 --- a/modules/admin-full/luasrc/controller/admin/network.lua +++ b/modules/admin-full/luasrc/controller/admin/network.lua @@ -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" diff --git a/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua b/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua index 014de7ddf7..bea425d723 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua @@ -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")