libs/cbi: remove workaround for libuci
[project/luci.git] / libs / cbi / luasrc / cbi.lua
index f733560..275c3f3 100644 (file)
@@ -27,15 +27,15 @@ limitations under the License.
 module("luci.cbi", package.seeall)
 
 require("luci.template")
-require("luci.util")
+local util = require("luci.util")
 require("luci.http")
 require("luci.uvl")
 require("luci.fs")
 
 --local event      = require "luci.sys.event"
 local uci        = require("luci.model.uci")
-local class      = luci.util.class
-local instanceof = luci.util.instanceof
+local class      = util.class
+local instanceof = util.instanceof
 
 FORM_NODATA  =  0
 FORM_PROCEED =  0
@@ -57,10 +57,10 @@ function load(cbimap, ...)
 
        local upldir = "/lib/uci/upload/"
        local cbidir = luci.util.libpath() .. "/model/cbi/"
-       
-       assert(luci.fs.stat(cbimap) or luci.fs.stat(cbidir..cbimap..".lua"), 
+
+       assert(luci.fs.stat(cbimap) or luci.fs.stat(cbidir..cbimap..".lua"),
         "Model not found!")
-         
+
        local func, err = loadfile(cbimap)
        if not func then
                func, err = loadfile(cbidir..cbimap..".lua")
@@ -298,9 +298,9 @@ function Map.__init__(self, config, ...)
 
        self.uci = uci.cursor()
        self.save = true
-       
+
        self.changed = false
-       
+
        if not self.uci:load(self.config) then
                error("Unable to read UCI data: " .. self.config)
        end
@@ -456,12 +456,12 @@ end
 
 function Compound.parse(self, ...)
        local cstate, state = 0, 0
-       
+
        for k, child in ipairs(self.children) do
                cstate = child:parse(...)
                state = (not state or cstate < state) and cstate or state
        end
-       
+
        return state
 end
 
@@ -479,13 +479,13 @@ end
 function Delegator.state(self, name, node, transitor)
        transitor = transitor or self.transistor_linear
        local state = {node=node, name=name, transitor=transitor}
-       
+
        assert(instanceof(node, Node), "Invalid node")
        assert(not self.nodes[name], "Duplicate entry")
-       
+
        self.nodes[name] = state
        self:append(state)
-       
+
        return state
 end
 
@@ -508,10 +508,10 @@ end
 function Delegator.parse(self, ...)
        local active = self:getactive()
        assert(active, "Invalid state")
-       
+
        local cstate = active.node:parse()
        self.active = active.transistor(self, active.node, cstate)
-       
+
        if not self.active then
                return FORM_DONE
        else
@@ -525,8 +525,8 @@ function Delegator.render(self, ...)
 end
 
 function Delegator.getactive(self)
-       return self:get(Map.formvalue(self, "cbi.delegated") 
-               or (self.children[1] and self.children[1].name)) 
+       return self:get(Map.formvalue(self, "cbi.delegated")
+               or (self.children[1] and self.children[1].name))
 end
 
 --[[
@@ -769,6 +769,7 @@ end
 
 -- Removes the section
 function AbstractSection.remove(self, section)
+       self.map.autoapply = false
        return self.map:del(section)
 end
 
@@ -795,6 +796,8 @@ function AbstractSection.create(self, section)
                end
        end
 
+       self.map.autoapply = false
+
        return stat
 end
 
@@ -813,7 +816,7 @@ function Table.__init__(self, form, data, ...)
        local datasource = {}
        datasource.config = "table"
        self.data = data
-       
+
        datasource.formvalue = Map.formvalue
        datasource.formvaluetable = Map.formvaluetable
        datasource.readinput = true
@@ -821,7 +824,7 @@ function Table.__init__(self, form, data, ...)
        function datasource.get(self, section, option)
                return data[section] and data[section][option]
        end
-       
+
        function datasource.submitstate(self)
                return Map.formvalue(self, "cbi.submit")
        end
@@ -915,7 +918,7 @@ function NamedSection.parse(self, novld)
                        end
                end
                AbstractSection.parse_optionals(self, s)
-               
+
                if self.changed then
                        self:push_events()
                end
@@ -1095,7 +1098,7 @@ function AbstractValue.__init__(self, map, section, option, ...)
        --self.cast = "string"
 
        self.track_missing = false
-       --self.rmempty   = false
+       self.rmempty   = true
        self.default   = nil
        self.size      = nil
        self.optional  = false
@@ -1106,9 +1109,6 @@ function AbstractValue.prepare(self)
        if not self.override_scheme
         and self.map:get_scheme(self.section.sectiontype, self.option) then
                local vs = self.map:get_scheme(self.section.sectiontype, self.option)
-               if self.rmempty == nil then
-                       self.rmempty = not vs.required
-               end
                if self.cast == nil then
                        self.cast = (vs.type == "list") and "list" or "string"
                end
@@ -1186,7 +1186,7 @@ function AbstractValue.parse(self, section, novld)
                        if self:write(section, fvalue) then
                                -- Push events
                                self.section.changed = true
-                               --luci.util.append(self.map.events, self.events)                        
+                               --luci.util.append(self.map.events, self.events)
                        end
                end
        else                                                    -- Unset the UCI or error
@@ -1501,7 +1501,7 @@ function StaticList.validate(self, value)
 
        local valid = {}
        for i, v in ipairs(value) do
-               if luci.util.contains(self.vallist, v) then
+               if luci.util.contains(self.keylist, v) then
                        table.insert(valid, v)
                end
        end