CBI-UVL integration part #1
authorSteven Barth <steven@midlink.org>
Sun, 24 Aug 2008 16:22:49 +0000 (16:22 +0000)
committerSteven Barth <steven@midlink.org>
Sun, 24 Aug 2008 16:22:49 +0000 (16:22 +0000)
contrib/package/luci/Makefile
libs/cbi/luasrc/cbi.lua

index a0872ad39017920bf34076e30b78b0cb63f73559..1cb3a79a6f60311fb072ecac85f7126890563d2f 100644 (file)
@@ -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
 
index 295998e924a2e48609121da162c7fccf95987e42..8da7bc7263f6d0de4d8497e47602f28c4ea78841 100644 (file)
@@ -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