libs/cbi: Added preliminary UCI list datatype support... for great justice

This commit is contained in:
Steven Barth 2008-08-18 23:26:06 +00:00
parent 70aa9bb855
commit d1a448604e
3 changed files with 110 additions and 2 deletions

View file

@ -367,6 +367,7 @@ function AbstractSection.__init__(self, map, sectiontype, ...)
self.config = map.config
self.optionals = {}
self.defaults = {}
self.cast = "string"
self.optional = true
self.addremove = false
@ -446,7 +447,16 @@ end
-- Returns the section's UCI table
function AbstractSection.cfgvalue(self, section)
return self.map:get(section)
local value = self.map:get(section)
if not self.cast or self.cast == type(value) then
return value
elseif self.cast == "string" then
if type(value) == "table" then
return value[1]
end
elseif self.cast == "table" then
return {value}
end
end
-- Removes the section
@ -989,6 +999,60 @@ function MultiValue.validate(self, val)
return result
end
StaticList = class(MultiValue)
function StaticList.__init__(self, ...)
MultiValue.__init__(self, ...)
self.cast = "table"
self.valuelist = self.cfgvalue
end
function StaticList.validate(self, value)
value = (type(value) == "table") and value or {value}
local valid = {}
for i, v in ipairs(value) do
if luci.util.contains(self.valuelist, v) then
table.insert(valid, v)
end
end
return valid
end
DynamicList = class(AbstractValue)
function DynamicList.__init__(self, ...)
AbstractValue.__init__(self, ...)
self.template = "cbi/dynlist"
self.cast = "table"
self.keylist = {}
self.vallist = {}
end
function DynamicList.value(self, key, val)
val = val or key
table.insert(self.keylist, tostring(key))
table.insert(self.vallist, tostring(val))
end
function DynamicList.validate(self, value, section)
value = (type(value) == "table") and value or {value}
local valid = {}
for i, v in ipairs(value) do
if v and #v > 0 and
not luci.http.formvalue("cbi.rle."..section.."."..self.option.."."..i) then
table.insert(valid, v)
end
end
return valid
end
--[[
TextValue - A multi-line value
rows: Rows

View file

@ -0,0 +1,44 @@
<%#
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
$Id$
-%>
<%+cbi/valueheader%>
local vals = self:cfgvalue(section)
for i=1, #vals + 1 do
local val = vals[i]
%>
<input onchange="cbi_d_update(this.id)" type="text"<%= attr("id", cbid .. "." .. i) .. attr("name", cbid) .. ifattr(val, "value") .. ifattr(self.size, "size")%> />
<% if i <= #vals then %>
<input type="image" value="<%:cbi_del%>" name="cbi.rle.<%=section .. "." .. self.option .. "." i%>" alt="<%:cbi_del%>" title="<%:cbi_del%>" src="<%=resource%>/cbi/remove.gif" />
<% else %>
<input type="image" value="<%:cbi_add%>" name="cbi.ale.<%=section .. "." .. self.option%>" alt="<%:cbi_add%>" title="<%:cbi_add%>" src="<%=resource%>/cbi/add.gif" />
<% end %>
<% if #self.keylist > 0 then -%>
<script type="text/javascript">
cbi_combobox_init('<%=cbid .. "." .. i%>', {
<%-
for i, k in ipairs(self.keylist) do
-%>
<%-=string.format("%q", k) .. ":" .. string.format("%q", self.vallist[i])-%>,
<%-
end
-%>
}, '<%- if not self.rmempty and not self.optional then -%>
<%-:cbi_select-%>
<%- end -%>', '<%:cbi_manual%>');
</script>
<% end -%>
<br />
<% if i <= #vals then %><br />
<% end end %>
<%+cbi/valuefooter%>

View file

@ -13,7 +13,7 @@ $Id$
-%>
<%+cbi/valueheader%>
<input type="<%=self.password and 'password" class="cbi-input-key' or "text"%>" onchange="cbi_d_update(this.id)"<%= attr("name", cbid) .. attr("id", cbid) .. attr("value", self:cfgvalue(section)) .. ifattr(self.size, "size") .. ifattr(self.maxlength, "maxlength") %> />
<input type="<%=self.password and 'password" class="cbi-input-key' or "text"%>" onchange="cbi_d_update(this.id)"<%= attr("name", cbid) .. attr("id", cbid) .. attr("value", self:cfgvalue(section)) .. ifattr(self.size, "size")%> />
<% if #self.keylist > 0 then -%>
<script type="text/javascript">
cbi_combobox_init('<%=cbid%>', {