summaryrefslogtreecommitdiffhomepage
path: root/libs/cbi/luasrc
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2010-04-27 00:27:37 +0000
committerJo-Philipp Wich <jow@openwrt.org>2010-04-27 00:27:37 +0000
commiteca5a0abf07d6c4a08278bec9c578bdf294929c8 (patch)
treedfdef68956dbe3b84e281fc4afa19837aeec16ad /libs/cbi/luasrc
parentc4ac5b8eb86782b2fc8f16678b341c5f95f3f189 (diff)
libs/cbi:
- skip client side field validation if corrsponding field was removed due to dependencies - human readable error strings in uci section summary - implement field validation for dnyamic lists - render optional fields when section has tabs
Diffstat (limited to 'libs/cbi/luasrc')
-rw-r--r--libs/cbi/luasrc/cbi.lua20
-rw-r--r--libs/cbi/luasrc/view/cbi/dynlist.htm9
-rw-r--r--libs/cbi/luasrc/view/cbi/ucisection.htm12
3 files changed, 33 insertions, 8 deletions
diff --git a/libs/cbi/luasrc/cbi.lua b/libs/cbi/luasrc/cbi.lua
index a18d37d60..cc22229fc 100644
--- a/libs/cbi/luasrc/cbi.lua
+++ b/libs/cbi/luasrc/cbi.lua
@@ -813,7 +813,7 @@ function AbstractSection.parse_optionals(self, section)
local field = self.map:formvalue("cbi.opt."..self.config.."."..section)
for k,v in ipairs(self.children) do
- if v.optional and not v:cfgvalue(section) then
+ if v.optional and not v:cfgvalue(section) and not next(self.tabs) then
if field == v.option then
field = nil
self.map.proceed = true
@@ -1290,7 +1290,7 @@ end
-- Render if this value exists or if it is mandatory
function AbstractValue.render(self, s, scope)
- if not self.optional or self:cfgvalue(s) or self:formcreated(s) then
+ if not self.optional or next(self.section.tabs) or self:cfgvalue(s) or self:formcreated(s) then
scope = scope or {}
scope.section = s
scope.cbid = self:cbid(s)
@@ -1339,12 +1339,20 @@ end
-- Validate the form value
function AbstractValue.validate(self, value)
if self.datatype and value and datatypes[self.datatype] then
- if datatypes[self.datatype](value) then
- return value
+ if type(value) == "table" then
+ local v
+ for _, v in ipairs(value) do
+ if v and #v > 0 and not datatypes[self.datatype](v) then
+ return nil
+ end
+ end
+ else
+ if not datatypes[self.datatype](value) then
+ return nil
+ end
end
- else
- return value
end
+ return value
end
AbstractValue.transform = AbstractValue.validate
diff --git a/libs/cbi/luasrc/view/cbi/dynlist.htm b/libs/cbi/luasrc/view/cbi/dynlist.htm
index 8e2bda8f9..826e2e698 100644
--- a/libs/cbi/luasrc/view/cbi/dynlist.htm
+++ b/libs/cbi/luasrc/view/cbi/dynlist.htm
@@ -1,7 +1,7 @@
<%#
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
-Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
+Copyright 2008-2010 Jo-Philipp Wich <xm@subsignal.org>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -42,4 +42,11 @@ $Id$
<% end -%>
<% if i <= #vals then %><br />
<% end end %>
+<% if self.datatype then -%>
+ <script type="text/javascript">
+ <% for i=1, #vals + 1 do -%>
+ cbi_validate_field('<%=cbid%>.<%=i%>', <%=tostring(self.optional == true or i > #vals)%>, '<%=self.datatype%>');
+ <%- end %>
+ </script>
+<% end -%>
<%+cbi/valuefooter%>
diff --git a/libs/cbi/luasrc/view/cbi/ucisection.htm b/libs/cbi/luasrc/view/cbi/ucisection.htm
index b184908b0..db32c9043 100644
--- a/libs/cbi/luasrc/view/cbi/ucisection.htm
+++ b/libs/cbi/luasrc/view/cbi/ucisection.htm
@@ -31,7 +31,17 @@ $Id$
<% if self.error and self.error[section] then -%>
<div class="cbi-section-error">
- <ul><% for _, e in ipairs(self.error[section]) do %><li><%=pcdata(e):gsub("\n","<br />")%></li><% end %></ul>
+ <ul><% for _, e in ipairs(self.error[section]) do -%>
+ <li>
+ <%- if e == "invalid" then -%>
+ <%:One or more fields contain invalid values!%>
+ <%- elseif e == "missing" then -%>
+ <%:One or more required fields have no value!%>
+ <%- else -%>
+ <%=pcdata(e)%>
+ <%- end -%>
+ </li>
+ <%- end %></ul>
</div>
<%- end %>