diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2008-09-05 23:21:37 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2008-09-05 23:21:37 +0000 |
commit | 898c45743aeda97da9e129d4d317d542eca3b4a4 (patch) | |
tree | b0fe49c4a8b8b9fad304e540f81a0772065a61b8 /libs | |
parent | e63d3f03eb1360c1d2c1bc58a343e2e8adc78ace (diff) |
* luci/libs/cbi: improved error integration with uvl
Diffstat (limited to 'libs')
-rw-r--r-- | libs/cbi/luasrc/cbi.lua | 54 | ||||
-rw-r--r-- | libs/cbi/luasrc/view/cbi/cell_valuefooter.htm | 10 | ||||
-rw-r--r-- | libs/cbi/luasrc/view/cbi/cell_valueheader.htm | 2 | ||||
-rw-r--r-- | libs/cbi/luasrc/view/cbi/full_valuefooter.htm | 11 | ||||
-rw-r--r-- | libs/cbi/luasrc/view/cbi/full_valueheader.htm | 2 | ||||
-rw-r--r-- | libs/cbi/luasrc/view/cbi/tblsection.htm | 24 | ||||
-rw-r--r-- | libs/cbi/luasrc/view/cbi/tsection.htm | 4 | ||||
-rw-r--r-- | libs/cbi/luasrc/view/cbi/ucisection.htm | 10 |
8 files changed, 53 insertions, 64 deletions
diff --git a/libs/cbi/luasrc/cbi.lua b/libs/cbi/luasrc/cbi.lua index ac8d8b5b3..7cde3c957 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 6ca530657..6dd566714 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 ecfeee6d9..9a065a3da 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 8003f53fe..e42043e78 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 ddc256dc7..fed2412f0 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 a557c584f..5a2b24734 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 a81715b0a..33d5c8e49 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 e571cb212..feab18e62 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 %> |