summaryrefslogtreecommitdiffhomepage
path: root/libs/cbi/luasrc
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2008-09-05 23:21:37 +0000
committerJo-Philipp Wich <jow@openwrt.org>2008-09-05 23:21:37 +0000
commit898c45743aeda97da9e129d4d317d542eca3b4a4 (patch)
treeb0fe49c4a8b8b9fad304e540f81a0772065a61b8 /libs/cbi/luasrc
parente63d3f03eb1360c1d2c1bc58a343e2e8adc78ace (diff)
* luci/libs/cbi: improved error integration with uvl
Diffstat (limited to 'libs/cbi/luasrc')
-rw-r--r--libs/cbi/luasrc/cbi.lua54
-rw-r--r--libs/cbi/luasrc/view/cbi/cell_valuefooter.htm10
-rw-r--r--libs/cbi/luasrc/view/cbi/cell_valueheader.htm2
-rw-r--r--libs/cbi/luasrc/view/cbi/full_valuefooter.htm11
-rw-r--r--libs/cbi/luasrc/view/cbi/full_valueheader.htm2
-rw-r--r--libs/cbi/luasrc/view/cbi/tblsection.htm24
-rw-r--r--libs/cbi/luasrc/view/cbi/tsection.htm4
-rw-r--r--libs/cbi/luasrc/view/cbi/ucisection.htm10
8 files changed, 53 insertions, 64 deletions
diff --git a/libs/cbi/luasrc/cbi.lua b/libs/cbi/luasrc/cbi.lua
index ac8d8b5b3a..7cde3c9576 100644
--- a/libs/cbi/luasrc/cbi.lua
+++ b/libs/cbi/luasrc/cbi.lua
@@ -56,13 +56,14 @@ function load(cbimap, ...)
assert(func, err)
luci.i18n.loadc("cbi")
+ luci.i18n.loadc("uvl")
local env = {
translate=i18n.translate,
translatef=i18n.translatef,
arg={...}
}
-
+
setfenv(func, setmetatable(env, {__index =
function(tbl, key)
return rawget(tbl, key) or _M[key] or _G[key]
@@ -86,26 +87,51 @@ local function _uvl_validate_section(node, name)
luci.uvl.STRICT_UNKNOWN_OPTIONS = false
luci.uvl.STRICT_UNKNOWN_SECTIONS = false
+ local function tag_fields(e)
+ if e.option and node.fields[e.option] then
+ node.fields[e.option].error = e
+ elseif e.childs then
+ for _, c in ipairs(e.childs) do tag_fields(c) end
+ end
+ end
+
+ local function tag_section(e)
+ local s = { }
+ for _, c in ipairs(e.childs) do
+ if c.childs and not c:is(luci.uvl.errors.ERR_DEPENDENCY) then
+ table.insert( s, c.childs[1]:string() )
+ else
+ table.insert( s, c:string() )
+ end
+ end
+ if #s > 0 then node.error = s end
+ end
+
local stat, err = node.map.validator:validate_section(node.config, name, co)
if err then
node.map.save = false
+
+ tag_fields(err)
+ tag_section(err)
+--[[
if err:is(luci.uvl.errors.ERR_DEPENDENCY) then
- node.tag_deperror[name] = true
+ node.tag_deperror[name] = err:string()
else
- node.tag_invalid[name] = true
+ node.tag_invalid[name] = err:string()
end
for i, v in ipairs(err.childs) do
if v.option and node.fields[v.option] then
if v:is(luci.uvl.errors.ERR_DEPENDENCY) then
- node.fields[v.option].tag_reqerror[name] = true
+ node.fields[v.option].tag_deperror[name] = v:string()
elseif v:is(luci.uvl.errors.ERR_OPT_REQUIRED) then
- node.fields[v.option].tag_missing[name] = true
- node.tag_deperror[name] = true
+ node.fields[v.option].tag_missing[name] = v:string()
+ node.tag_reqerror[name] = v:string()
elseif v:is(luci.uvl.errors.ERR_OPTION) then
- node.fields[v.option].tag_invalid[name] = true
+ node.fields[v.option].tag_invalid[name] = v:string()
end
end
end
+]]
end
end
@@ -213,7 +239,7 @@ function Map.__init__(self, config, ...)
self.validator = luci.uvl.UVL()
self.scheme = self.validator:get_scheme(self.config)
-
+
end
function Map.get_scheme(self, sectiontype, option)
@@ -243,14 +269,14 @@ function Map.parse(self, ...)
for i, config in ipairs(self.parsechain) do
self.uci:commit(config)
self.uci:apply(config)
-
+
-- Refresh data because commit changes section names
self.uci:load(config)
end
-
+
-- Reparse sections
Node.parse(self, ...)
-
+
end
for i, config in ipairs(self.parsechain) do
self.uci:unload(config)
@@ -616,7 +642,7 @@ NamedSection = class(AbstractSection)
function NamedSection.__init__(self, map, section, stype, ...)
AbstractSection.__init__(self, map, stype, ...)
Node._i18n(self, map.config, section, nil, ...)
-
+
-- Defaults
self.addremove = false
@@ -655,7 +681,7 @@ function NamedSection.parse(self)
AbstractSection.parse_dynamic(self, s)
if luci.http.formvalue("cbi.submit") then
Node.parse(self, s)
-
+
if not self.override_scheme and self.map.scheme then
_uvl_validate_section(self, s)
end
@@ -730,7 +756,7 @@ function TypedSection.parse(self)
AbstractSection.parse_dynamic(self, k)
if luci.http.formvalue("cbi.submit") then
Node.parse(self, k)
-
+
if not self.override_scheme and self.map.scheme then
_uvl_validate_section(self, k)
end
diff --git a/libs/cbi/luasrc/view/cbi/cell_valuefooter.htm b/libs/cbi/luasrc/view/cbi/cell_valuefooter.htm
index 6ca530657d..6dd5667146 100644
--- a/libs/cbi/luasrc/view/cbi/cell_valuefooter.htm
+++ b/libs/cbi/luasrc/view/cbi/cell_valuefooter.htm
@@ -12,16 +12,6 @@ You may obtain a copy of the License at
$Id$
-%>
-
- <% if self.tag_error[section] then -%>
- <div class="cbi-error"><%=self.tag_error[section]%></div>
- <%- elseif self.tag_reqerror[section] then -%>
- <div class="cbi-error"><%:cbi_reqerror%></div>
- <%- elseif self.tag_invalid[section] then -%>
- <div class="cbi-error"><%:cbi_invalid%></div>
- <%- elseif self.tag_missing[section] then -%>
- <div class="cbi-error"><%:cbi_missing%></div>
- <%- end %>
</td>
<% if #self.deps > 0 then -%>
diff --git a/libs/cbi/luasrc/view/cbi/cell_valueheader.htm b/libs/cbi/luasrc/view/cbi/cell_valueheader.htm
index ecfeee6d95..9a065a3da5 100644
--- a/libs/cbi/luasrc/view/cbi/cell_valueheader.htm
+++ b/libs/cbi/luasrc/view/cbi/cell_valueheader.htm
@@ -13,4 +13,4 @@ $Id$
-%>
-<td class="cbi-value-field" id="cbi-<%=self.config.."-"..section.."-"..self.option%>">
+<td class="cbi-value-field<% if self.error then %> cbi-value-error<% end %>" id="cbi-<%=self.config.."-"..section.."-"..self.option%>">
diff --git a/libs/cbi/luasrc/view/cbi/full_valuefooter.htm b/libs/cbi/luasrc/view/cbi/full_valuefooter.htm
index 8003f53fe5..e42043e78a 100644
--- a/libs/cbi/luasrc/view/cbi/full_valuefooter.htm
+++ b/libs/cbi/luasrc/view/cbi/full_valuefooter.htm
@@ -25,17 +25,6 @@ $Id$
<%- if self.title and #self.title > 0 then -%>
</div>
<%- end -%>
-
- <% if self.tag_error[section] then -%>
- <div class="cbi-error"><%=self.tag_error[section]%></div>
- <%- elseif self.tag_reqerror[section] then -%>
- <div class="cbi-error"><%:cbi_reqerror%></div>
- <%- elseif self.tag_invalid[section] then -%>
- <div class="cbi-error"><%:cbi_invalid%></div>
- <%- elseif self.tag_missing[section] then -%>
- <div class="cbi-error"><%:cbi_missing%></div>
- <%- end %>
-
</div>
<% if #self.deps > 0 then -%>
diff --git a/libs/cbi/luasrc/view/cbi/full_valueheader.htm b/libs/cbi/luasrc/view/cbi/full_valueheader.htm
index ddc256dc72..fed2412f07 100644
--- a/libs/cbi/luasrc/view/cbi/full_valueheader.htm
+++ b/libs/cbi/luasrc/view/cbi/full_valueheader.htm
@@ -13,7 +13,7 @@ $Id$
-%>
-<div class="cbi-value" id="cbi-<%=self.config.."-"..section.."-"..self.option%>">
+<div class="cbi-value<% if self.error then %> cbi-value-error<% end %>" id="cbi-<%=self.config.."-"..section.."-"..self.option%>">
<%- if self.title and #self.title > 0 then -%>
<label class="cbi-value-title"<%= attr("for", cbid) %>>
<%- if self.titleref then -%><a title="<%=self.titledesc or translate('cbi_gorel')%>" class="cbi-title-ref" href="<%=self.titleref%>"><%- end -%>
diff --git a/libs/cbi/luasrc/view/cbi/tblsection.htm b/libs/cbi/luasrc/view/cbi/tblsection.htm
index a557c584fd..5a2b247344 100644
--- a/libs/cbi/luasrc/view/cbi/tblsection.htm
+++ b/libs/cbi/luasrc/view/cbi/tblsection.htm
@@ -89,19 +89,6 @@ end
</td>
<%- end -%>
</tr>
- <% if self.tag_deperror[section] or self.tag_invalid[section] or self.tag_error[section] then %>
- <tr class="cbi-section-table-row">
- <td colspan="<%=count%>">
- <%- if self.tag_deperror[section] then -%>
- <div class="cbi-error"><%:cbi_deperror%></div>
- <%- elseif self.tag_invalid[section] then -%>
- <div class="cbi-error"><%:cbi_invalid_section%></div>
- <%- elseif self.tag_error[section] then -%>
- <div class="cbi-error"><%=self.tag_error[section]%></div>
- <%- end -%>
- </td>
- </tr>
- <% end %>
<%- end -%>
<%- if isempty then -%>
@@ -110,6 +97,13 @@ end
</tr>
<%- end -%>
</table>
+
+ <% if self.error then %>
+ <div class="cbi-section-error">
+ <ul><% for _, e in ipairs(self.error) do %><li><%=luci.util.pcdata(e):gsub("\n","<br />")%></li><% end %></ul>
+ </div>
+ <% end %>
+
<%- if self.addremove then -%>
<div class="cbi-section-table-row">
<td colspan="<%=count%>" class="cbi-section-table-optionals">
@@ -120,10 +114,6 @@ end
<input type="text" class="cbi-section-create-name" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>" />
<input class="cbi-button cbi-button-add" type="submit" value="<%:cbi_add%>" title="<%:cbi_add%>" />
<% end %>
-
- <% if self.err_invalid then %>
- <div class="cbi-error"><%:cbi_invalid%></div>
- <% end %>
</div>
</td>
</div>
diff --git a/libs/cbi/luasrc/view/cbi/tsection.htm b/libs/cbi/luasrc/view/cbi/tsection.htm
index a81715b0ab..33d5c8e499 100644
--- a/libs/cbi/luasrc/view/cbi/tsection.htm
+++ b/libs/cbi/luasrc/view/cbi/tsection.htm
@@ -48,10 +48,6 @@ $Id$
<input type="text" class="cbi-section-create-name" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>" />
<input type="submit" class="cbi-button cbi-button-add" value="<%:cbi_add%>" />
<%- end %>
-
- <% if self.err_invalid then -%>
- <div class="cbi-error"><%:cbi_invalid%></div>
- <%- end %>
</div>
<%- end %>
</fieldset>
diff --git a/libs/cbi/luasrc/view/cbi/ucisection.htm b/libs/cbi/luasrc/view/cbi/ucisection.htm
index e571cb212e..feab18e627 100644
--- a/libs/cbi/luasrc/view/cbi/ucisection.htm
+++ b/libs/cbi/luasrc/view/cbi/ucisection.htm
@@ -15,12 +15,10 @@ $Id$
<% self:render_children(section, scope or {}) %>
-<% if self.tag_deperror[section] then -%>
- <div class="cbi-error"><%:cbi_deperror%></div>
-<% elseif self.tag_invalid[section] then -%>
- <div class="cbi-error"><%:cbi_invalid_section%></div>
-<%- elseif self.tag_error[section] then -%>
- <div class="cbi-error"><%=self.tag_error[section]%></div>
+<% if self.error then -%>
+ <div class="cbi-section-error">
+ <ul><% for _, e in ipairs(self.error) do %><li><%=luci.util.pcdata(e):gsub("\n","<br />")%></li><% end %></ul>
+ </div>
<%- end %>
<% if self.optionals[section] and #self.optionals[section] > 0 or self.dynamic then %>