libs/cbi: Added preliminary UCI list datatype support... for great justice
This commit is contained in:
parent
70aa9bb855
commit
d1a448604e
3 changed files with 110 additions and 2 deletions
|
@ -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
|
||||
|
|
44
libs/cbi/luasrc/view/cbi/dynlist.htm
Normal file
44
libs/cbi/luasrc/view/cbi/dynlist.htm
Normal 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%>
|
|
@ -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%>', {
|
||||
|
|
Loading…
Reference in a new issue