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.config = map.config
|
||||||
self.optionals = {}
|
self.optionals = {}
|
||||||
self.defaults = {}
|
self.defaults = {}
|
||||||
|
self.cast = "string"
|
||||||
|
|
||||||
self.optional = true
|
self.optional = true
|
||||||
self.addremove = false
|
self.addremove = false
|
||||||
|
@ -446,7 +447,16 @@ end
|
||||||
|
|
||||||
-- Returns the section's UCI table
|
-- Returns the section's UCI table
|
||||||
function AbstractSection.cfgvalue(self, section)
|
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
|
end
|
||||||
|
|
||||||
-- Removes the section
|
-- Removes the section
|
||||||
|
@ -989,6 +999,60 @@ function MultiValue.validate(self, val)
|
||||||
return result
|
return result
|
||||||
end
|
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
|
TextValue - A multi-line value
|
||||||
rows: Rows
|
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%>
|
<%+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 -%>
|
<% if #self.keylist > 0 then -%>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
cbi_combobox_init('<%=cbid%>', {
|
cbi_combobox_init('<%=cbid%>', {
|
||||||
|
|
Loading…
Reference in a new issue