summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/ffluci/cbi.lua53
-rw-r--r--src/ffluci/view/cbi/map.htm7
-rw-r--r--src/ffluci/view/cbi/nsection.htm5
-rw-r--r--src/ffluci/view/cbi/tsection.htm22
4 files changed, 68 insertions, 19 deletions
diff --git a/src/ffluci/cbi.lua b/src/ffluci/cbi.lua
index fc8b1aed3d..a346dd7072 100644
--- a/src/ffluci/cbi.lua
+++ b/src/ffluci/cbi.lua
@@ -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 \ No newline at end of file
diff --git a/src/ffluci/view/cbi/map.htm b/src/ffluci/view/cbi/map.htm
new file mode 100644
index 0000000000..918e455d75
--- /dev/null
+++ b/src/ffluci/view/cbi/map.htm
@@ -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>
diff --git a/src/ffluci/view/cbi/nsection.htm b/src/ffluci/view/cbi/nsection.htm
new file mode 100644
index 0000000000..4a47c7dad4
--- /dev/null
+++ b/src/ffluci/view/cbi/nsection.htm
@@ -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>
diff --git a/src/ffluci/view/cbi/tsection.htm b/src/ffluci/view/cbi/tsection.htm
new file mode 100644
index 0000000000..2c25500f8a
--- /dev/null
+++ b/src/ffluci/view/cbi/tsection.htm
@@ -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>