projects
/
project
/
luci.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
* CBI updates
[project/luci.git]
/
src
/
ffluci
/
cbi.lua
diff --git
a/src/ffluci/cbi.lua
b/src/ffluci/cbi.lua
index fc8b1aed3d54393a29fef169d0c0538ec01d34dc..149c1d70fae4b071079cb2ad5c78fd1601d28fcc 100644
(file)
--- a/
src/ffluci/cbi.lua
+++ b/
src/ffluci/cbi.lua
@@
-27,6
+27,9
@@
limitations under the License.
module("ffluci.cbi", package.seeall)
require("ffluci.template")
require("ffluci.util")
module("ffluci.cbi", package.seeall)
require("ffluci.template")
require("ffluci.util")
+require("ffluci.http")
+require("ffluci.model.uci")
+local Template = ffluci.template.Template
local class = ffluci.util.class
local instanceof = ffluci.util.instanceof
local class = ffluci.util.class
local instanceof = ffluci.util.instanceof
@@
-45,6
+48,16
@@
function Node.append(self, obj)
table.insert(self.children, obj)
end
table.insert(self.children, obj)
end
+function Node.parse(self)
+ for k, child in ipairs(self.children) do
+ child:parse()
+ end
+end
+
+function Node.render(self)
+ ffluci.template.render(self.template)
+end
+
--[[
Map - A map describing a configuration file
--[[
Map - A map describing a configuration file
@@
-57,37
+70,39
@@
function Map.__init__(self, config, ...)
self.template = "cbi/map"
end
self.template = "cbi/map"
end
-function Map.render(self)
- ffluci.template.render(self.template)
-end
-
function Map.section(self, class, ...)
function Map.section(self, class, ...)
- if instanceof(class, AbstractClass) then
- local obj = class(...)
- obj.map = self
- table.insert(self.children, obj)
+ if instanceof(class, AbstractSection) then
+ local obj = class(...)
+ obj.map = self
+ obj.config = self.config
+ self:append(obj)
return obj
else
error("class must be a descendent of AbstractSection")
end
end
return obj
else
error("class must be a descendent of AbstractSection")
end
end
+function Map.read(self)
+ self.ucidata = self.ucidata or ffluci.model.uci.show(self.config)
+ return self.ucidata
+end
--[[
AbstractSection
]]--
AbstractSection = class(Node)
--[[
AbstractSection
]]--
AbstractSection = class(Node)
-function AbstractSection.__init__(self, ...)
+function AbstractSection.__init__(self,
sectiontype,
...)
Node.__init__(self, ...)
Node.__init__(self, ...)
+ self.sectiontype = sectiontype
end
function AbstractSection.option(self, class, ...)
if instanceof(class, AbstractValue) then
end
function AbstractSection.option(self, class, ...)
if instanceof(class, AbstractValue) then
- local obj = class(...)
- obj.
section = self
- obj.
map = self.map
-
table.insert(self.children,
obj)
+ local obj
= class(...)
+ obj.
map = self.map
+ obj.
config = self.config
+
self:append(
obj)
return obj
else
error("class must be a descendent of AbstractValue")
return obj
else
error("class must be a descendent of AbstractValue")
@@
-103,8
+118,15
@@
NamedSection = class(AbstractSection)
function NamedSection.__init__(self, section, ...)
AbstractSection.__init__(self, ...)
function NamedSection.__init__(self, section, ...)
AbstractSection.__init__(self, ...)
- self.section = section
self.template = "cbi/nsection"
self.template = "cbi/nsection"
+
+ self.section = section
+end
+
+function NamedSection.option(self, ...)
+ local obj = AbstractSection.option(self, ...)
+ obj.section = self.section
+ return obj
end
end
@@
-116,9
+138,8
@@
TypedSection - A (set of) configuration section(s) defined by the type
]]--
TypedSection = class(AbstractSection)
]]--
TypedSection = class(AbstractSection)
-function TypedSection.__init__(self,
sectiontype,
...)
+function TypedSection.__init__(self, ...)
AbstractSection.__init__(self, ...)
AbstractSection.__init__(self, ...)
- self.sectiontype = sectiontype
self.template = "cbi/tsection"
self.addremove = true
self.template = "cbi/tsection"
self.addremove = true
@@
-130,8
+151,9
@@
end
--[[
AbstractValue - An abstract Value Type
null: Value can be empty
--[[
AbstractValue - An abstract Value Type
null: Value can be empty
- valid: A
table with valid names or a function returning nil if invalid
+ valid: A
function returning the value if it is valid otherwise nil
depends: A table of option => value pairs of which one must be true
depends: A table of option => value pairs of which one must be true
+ default: The default value
]]--
AbstractValue = class(Node)
]]--
AbstractValue = class(Node)
@@
-139,14
+161,32
@@
function AbstractValue.__init__(self, option, ...)
Node.__init__(self, ...)
self.option = option
Node.__init__(self, ...)
self.option = option
- self.null = true
self.valid = nil
self.depends = nil
self.valid = nil
self.depends = nil
+ self.default = nil
+end
+
+
+function AbstractValue.formvalue(self)
+ local key = "uci."..self.map.config.."."..self.section.."."..self.option
+ return ffluci.http.formvalue(key)
+end
+
+function AbstractValue.ucivalue(self)
+ return self.map.read()[self.section][self.option]
end
end
-
+
+function AbstractValue.validate(self, value)
+ return ffluci.util.validate(value, nil, nil, self.valid)
+end
+
+function AbstractValue.write(self, value)
+ ffluci.model.uci.set(self.config, self.section, self.option, value)
+end
+
--[[
--[[
-Value - A one-line value
+Value - A one-line value
maxlength: The maximum length
isnumber: The value must be a valid (floating point) number
isinteger: The value must be a valid integer
maxlength: The maximum length
isnumber: The value must be a valid (floating point) number
isinteger: The value must be a valid integer
@@
-164,11
+204,18
@@
end
--[[
--[[
-Boolean - A simple boolean value
+ListValue - A one-line value predefined in a list
]]--
]]--
-
Boolean
= class(AbstractValue)
+
ListValue
= class(AbstractValue)
-function
Boolean
.__init__(self, ...)
+function
ListValue
.__init__(self, ...)
AbstractValue.__init__(self, ...)
AbstractValue.__init__(self, ...)
- self.template = "cbi/boolean"
+ self.template = "cbi/lvalue"
+
+ self.list = {}
+end
+
+function ListValue.addValue(self, key, val)
+ val = val or key
+ self.list[key] = val
end
\ No newline at end of file
end
\ No newline at end of file