From 451eacf8da90980f9b860db445cb0b04558e9d31 Mon Sep 17 00:00:00 2001 From: Steven Barth Date: Sun, 24 Aug 2008 16:22:49 +0000 Subject: CBI-UVL integration part #1 --- contrib/package/luci/Makefile | 2 +- libs/cbi/luasrc/cbi.lua | 28 ++++++++++++++++++++++++---- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/contrib/package/luci/Makefile b/contrib/package/luci/Makefile index a0872ad39..1cb3a79a6 100644 --- a/contrib/package/luci/Makefile +++ b/contrib/package/luci/Makefile @@ -137,7 +137,7 @@ endif ### Libraries ### define Package/luci-cbi $(call Package/luci/libtemplate) - DEPENDS+=+luci-web + DEPENDS+=+luci-web +luci-uvl +luci-uci TITLE:=Configuration Binding Interface endef diff --git a/libs/cbi/luasrc/cbi.lua b/libs/cbi/luasrc/cbi.lua index 295998e92..8da7bc726 100644 --- a/libs/cbi/luasrc/cbi.lua +++ b/libs/cbi/luasrc/cbi.lua @@ -30,6 +30,7 @@ require("luci.template") require("luci.util") require("luci.http") require("luci.model.uci") +require("luci.uvl") local uci = luci.model.uci local class = luci.util.class @@ -160,6 +161,9 @@ function Map.__init__(self, config, ...) if not uci.load_config(self.config) then error("Unable to read UCI data: " .. self.config) end + + self.validator = luci.uvl.UVL() + self.scheme = self.validator:get_scheme(self.config) end function Map.render(self, ...) @@ -535,13 +539,22 @@ NamedSection - A fixed configuration section defined by its name ]]-- NamedSection = class(AbstractSection) -function NamedSection.__init__(self, map, section, type, ...) - AbstractSection.__init__(self, map, type, ...) +function NamedSection.__init__(self, map, section, stype, ...) + AbstractSection.__init__(self, map, stype, ...) Node._i18n(self, map.config, section, nil, ...) + -- Defaults + self.addremove = false + + -- Use defaults from UVL + if self.map.scheme and self.map.scheme.sections[self.sectiontype] then + local vs = self.map.scheme.sections[self.sectiontype] + self.addremove = not vs.unique and not vs.required + self.dynamic = vs.dynamic + end + self.template = "cbi/nsection" self.section = section - self.addremove = false end function NamedSection.parse(self) @@ -587,8 +600,15 @@ function TypedSection.__init__(self, map, type, ...) self.template = "cbi/tsection" self.deps = {} - self.anonymous = false + + -- Use defaults from UVL + if self.map.scheme and self.map.scheme.sections[self.sectiontype] then + local vs = self.map.scheme.sections[self.sectiontype] + self.addremove = not vs.unique and not vs.required + self.dynamic = vs.dynamic + self.anonymous = not vs.named + end end -- Return all matching UCI sections for this TypedSection -- cgit v1.2.3