* CBI updates

This commit is contained in:
Steven Barth 2008-03-18 22:08:46 +00:00
parent e2f117b870
commit f989f6ee00
4 changed files with 68 additions and 19 deletions

View file

@ -27,6 +27,7 @@ limitations under the License.
module("ffluci.cbi", package.seeall)
require("ffluci.template")
require("ffluci.util")
local Template = ffluci.template.Template
local class = ffluci.util.class
local instanceof = ffluci.util.instanceof
@ -45,6 +46,10 @@ function Node.append(self, obj)
table.insert(self.children, obj)
end
function Node.render(self)
ffluci.template.render(self.template, self)
end
--[[
Map - A map describing a configuration file
@ -57,14 +62,10 @@ function Map.__init__(self, config, ...)
self.template = "cbi/map"
end
function Map.render(self)
ffluci.template.render(self.template)
end
function Map.section(self, class, ...)
if instanceof(class, AbstractClass) then
if instanceof(class, AbstractSection) then
local obj = class(...)
obj.map = self
obj.map = self.config
table.insert(self.children, obj)
return obj
else
@ -78,15 +79,15 @@ AbstractSection
]]--
AbstractSection = class(Node)
function AbstractSection.__init__(self, ...)
function AbstractSection.__init__(self, sectiontype, ...)
Node.__init__(self, ...)
self.sectiontype = sectiontype
end
function AbstractSection.option(self, class, ...)
if instanceof(class, AbstractValue) then
local obj = class(...)
obj.section = self
obj.map = self.map
obj.map = self.map
table.insert(self.children, obj)
return obj
else
@ -103,8 +104,15 @@ NamedSection = class(AbstractSection)
function NamedSection.__init__(self, section, ...)
AbstractSection.__init__(self, ...)
self.section = section
self.template = "cbi/nsection"
self.section = section
end
function NamedSection.option(self, ...)
local obj = AbstractSection.option(self, ...)
obj.section = self.section
return obj
end
@ -116,9 +124,8 @@ TypedSection - A (set of) configuration section(s) defined by the type
]]--
TypedSection = class(AbstractSection)
function TypedSection.__init__(self, sectiontype, ...)
function TypedSection.__init__(self, ...)
AbstractSection.__init__(self, ...)
self.sectiontype = sectiontype
self.template = "cbi/tsection"
self.addremove = true
@ -130,8 +137,9 @@ end
--[[
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 nil if invalid
depends: A table of option => value pairs of which one must be true
default: The default value
]]--
AbstractValue = class(Node)
@ -139,14 +147,14 @@ function AbstractValue.__init__(self, option, ...)
Node.__init__(self, ...)
self.option = option
self.null = true
self.valid = nil
self.depends = nil
self.default = nil
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
@ -164,11 +172,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, ...)
self.template = "cbi/boolean"
self.template = "cbi/value"
self.list = {}
end
function ListValue.addValue(self, key, val)
val = val or key
self.list[key] = val
end

View file

@ -0,0 +1,7 @@
<div class="cbi-map" id="cbi-<%=config%>">
<form method="post" action="<%=os.getenv("REQUEST_URI")%>">
<h1><%=title%></h1>
<div class="cbi-map-descr"><%=description%></div>
<% for k, node in ipairs(children) do node:render() end %>
</form>
</div>

View file

@ -0,0 +1,5 @@
<div class="cbi-nsection" id="cbi-<%=map.config%>-<%=sectiontype%>-<%=section%>">
<h2><%=title%></h2>
<div class="cbi-nsection-descr"><%=description%></div>
<% for k, node in ipairs(children) do node:render() end %>
</div>

View file

@ -0,0 +1,22 @@
<%
require("ffluci.model.uci")
local allsections = ffluci.model.uci.show(map)
local sections = {}
for k, v in pairs(allsections) do
if v[".type"] == sectiontype then
sections[k] = v
end
end
%>
<div class="cbi-tsection" id="cbi-<%=map%>-<%=sectiontype%>">
<h2><%=title%></h2>
<div class="cbi-tsection-descr"><%=description%></div>
<% for k, v in pairs(sections) do %>
<div class="cbi-tsection-node" id="cbi-<%=map%>-<%=k%>">
<% for k, node in ipairs(children) do
node.section = k
node:render(k)
end %>
</div>
<% end %>
</div>