libs/cbi: Added magic ;-)

This commit is contained in:
Steven Barth 2008-08-07 19:03:25 +00:00
parent d79794c119
commit e72a526984
4 changed files with 36 additions and 14 deletions

View file

@ -37,7 +37,7 @@ local instanceof = luci.util.instanceof
-- Loads a CBI map from given file, creating an environment and returns it -- Loads a CBI map from given file, creating an environment and returns it
function load(cbimap) function load(cbimap, ...)
require("luci.fs") require("luci.fs")
require("luci.i18n") require("luci.i18n")
require("luci.config") require("luci.config")
@ -56,6 +56,7 @@ function load(cbimap)
luci.util.updfenv(func, luci.cbi) luci.util.updfenv(func, luci.cbi)
luci.util.extfenv(func, "translate", luci.i18n.translate) luci.util.extfenv(func, "translate", luci.i18n.translate)
luci.util.extfenv(func, "translatef", luci.i18n.translatef) luci.util.extfenv(func, "translatef", luci.i18n.translatef)
luci.util.extfenv(func, "arg", {...})
local maps = {func()} local maps = {func()}
@ -414,7 +415,6 @@ function TypedSection.__init__(self, map, type, ...)
self.template = "cbi/tsection" self.template = "cbi/tsection"
self.deps = {} self.deps = {}
self.excludes = {}
self.anonymous = false self.anonymous = false
end end
@ -437,11 +437,6 @@ function TypedSection.depends(self, option, value)
table.insert(self.deps, {option=option, value=value}) table.insert(self.deps, {option=option, value=value})
end end
-- Excludes several sections by name
function TypedSection.exclude(self, field)
self.excludes[field] = true
end
function TypedSection.parse(self) function TypedSection.parse(self)
if self.addremove then if self.addremove then
-- Create -- Create
@ -492,7 +487,7 @@ end
-- Verifies scope of sections -- Verifies scope of sections
function TypedSection.checkscope(self, section) function TypedSection.checkscope(self, section)
-- Check if we are not excluded -- Check if we are not excluded
if self.excludes[section] then if self.filter and not self.filter(section) then
return nil return nil
end end

View file

@ -126,9 +126,12 @@ function dispatch(request)
local c = context.tree local c = context.tree
local track = {} local track = {}
local args = {}
local n
for i, s in ipairs(request) do for i, s in ipairs(request) do
c = c.nodes[s] c = c.nodes[s]
n = i
if not c or c.leaf then if not c or c.leaf then
break break
end end
@ -138,6 +141,12 @@ function dispatch(request)
end end
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 if track.i18n then
require("luci.i18n").loadc(track.i18n) require("luci.i18n").loadc(track.i18n)
end end
@ -190,7 +199,7 @@ function dispatch(request)
luci.util.updfenv(c.target, mod) luci.util.updfenv(c.target, mod)
end end
stat, err = luci.util.copcall(c.target) stat, err = luci.util.copcall(c.target, unpack(args))
if not stat then if not stat then
error500(err) error500(err)
end end
@ -430,8 +439,8 @@ function cbi(model)
require("luci.cbi") require("luci.cbi")
require("luci.template") require("luci.template")
return function() return function(...)
local stat, maps = luci.util.copcall(luci.cbi.load, model) local stat, maps = luci.util.copcall(luci.cbi.load, model, ...)
if not stat then if not stat then
error500(maps) error500(maps)
return true return true

View file

@ -15,6 +15,7 @@ module("luci.controller.admin.network", package.seeall)
function index() function index()
require("luci.i18n") require("luci.i18n")
require("luci.model.uci")
local i18n = luci.i18n.translate local i18n = luci.i18n.translate
local page = node("admin", "network") local page = node("admin", "network")
@ -31,7 +32,18 @@ function index()
page.target = cbi("admin_network/ifaces") page.target = cbi("admin_network/ifaces")
page.title = i18n("interfaces", "Schnittstellen") page.title = i18n("interfaces", "Schnittstellen")
page.order = 20 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") local page = node("admin", "network", "dhcp")
page.target = cbi("admin_network/dhcp") page.target = cbi("admin_network/dhcp")
page.title = "DHCP" page.title = "DHCP"

View file

@ -14,8 +14,14 @@ $Id$
m = Map("network", translate("interfaces"), translate("a_n_ifaces1")) m = Map("network", translate("interfaces"), translate("a_n_ifaces1"))
s = m:section(TypedSection, "interface", "") s = m:section(TypedSection, "interface", "")
s.addremove = true function s.filter(section)
s:exclude("loopback") 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", "static")
s:depends("proto", "dhcp") s:depends("proto", "dhcp")