require("ffluci.i18n")
local cbidir = ffluci.fs.dirname(ffluci.util.__file__()) .. "model/cbi/"
- local func = loadfile(cbidir..cbimap..".lua")
+ local func, err = loadfile(cbidir..cbimap..".lua")
if not func then
- error("Unable to load CBI map: " .. cbimap)
+ error(err)
return nil
end
Node.__init__(self, ...)
self.config = config
self.template = "cbi/map"
+ self.uci = ffluci.model.uci.Session()
+end
+
+function Map.parse(self)
+ self.ucidata = self.uci:show(self.config)
+ if not self.ucidata then
+ error("Unable to read UCI data: " .. self.config)
+ else
+ self.ucidata = self.ucidata[self.config]
+ end
+ Node.parse(self)
+end
+
+function Map.render(self)
+ self.ucidata = self.uci:show(self.config)
+ if not self.ucidata then
+ error("Unable to read UCI data: " .. self.config)
+ else
+ self.ucidata = self.ucidata[self.config]
+ end
+ Node.render(self)
end
function Map.section(self, class, ...)
end
end
-function Map.read(self)
- self.ucidata = self.ucidata or ffluci.model.uci.show(self.config)[self.config]
- return self.ucidata
+function Map.set(self, section, option, value)
+ return self.uci:set(self.config, section, option, value)
end
--[[
self.valid = nil
end
+function TypedSection.parse(self)
+ for k, v in pairs(self:ucisections()) do
+ for i, node in ipairs(self.children) do
+ node.section = k
+ node:parse()
+ end
+ end
+end
+
function TypedSection.render_children(self, section)
for k, node in ipairs(self.children) do
node.section = section
function TypedSection.ucisections(self)
local sections = {}
- for k, v in pairs(self.map:read()) do
+ for k, v in pairs(self.map.ucidata) do
if v[".type"] == self.sectiontype then
sections[k] = v
end
self.default = nil
end
-
function AbstractValue.formvalue(self)
- local key = "uci."..self.map.config.."."..self.section.."."..self.option
+ local key = "cbid."..self.map.config.."."..self.section.."."..self.option
return ffluci.http.formvalue(key)
end
+function AbstractValue.parse(self)
+ local fvalue = self:validate(self:formvalue())
+ if fvalue and not (fvalue == self:ucivalue()) then
+ self:write(fvalue)
+ end
+end
+
function AbstractValue.ucivalue(self)
- return self.map:read()[self.section][self.option]
+ return self.map.ucidata[self.section][self.option]
end
function AbstractValue.validate(self, value)
end
function AbstractValue.write(self, value)
- ffluci.model.uci.set(self.config, self.section, self.option, value)
+ return self.map:set(self.section, self.option, value)
end
self.list = {}
end
-function ListValue.addValue(self, key, val)
+function ListValue.add_value(self, key, val)
val = val or key
self.list[key] = val
end
\ No newline at end of file