libs/cbi: Added magic ;-)
This commit is contained in:
parent
d79794c119
commit
e72a526984
4 changed files with 36 additions and 14 deletions
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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,6 +32,17 @@ 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")
|
||||||
|
|
|
@ -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", "")
|
||||||
|
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
|
s.addremove = true
|
||||||
s:exclude("loopback")
|
end
|
||||||
s:depends("proto", "static")
|
s:depends("proto", "static")
|
||||||
s:depends("proto", "dhcp")
|
s:depends("proto", "dhcp")
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue