function NamedSection.__init__(self, map, section, type, ...)
AbstractSection.__init__(self, map, type, ...)
Node._i18n(self, map.config, section, nil, ...)
-
+
self.template = "cbi/nsection"
self.section = section
self.addremove = false
function (section)
if self:checkscope(section[".name"]) then
table.insert(sections, section[".name"])
- end
+ end
end)
return sections
if not self.optional or self:cfgvalue(s) or self:formcreated(s) then
scope = scope or {}
scope.section = s
-
+ scope.cbid = "cbid." .. self.config ..
+ "." .. s ..
+ "." .. self.option
+
+ scope.ifattr = function(cond,key,val)
+ if cond then
+ return string.format(
+ ' %s="%s"', tostring(key),
+ tostring( val or scope[key] or self[key] or "" )
+ )
+ else
+ return ''
+ end
+ end
+
+ scope.attr = function(...)
+ return scope.ifattr( true, ... )
+ end
+
Node.render(self, scope)
end
end
end
function MultiValue.validate(self, val)
- val = (type(val) == "table") and val or {val}
+ val = (type(val) == "table") and val or {val}
local result
-%>
- <%- if self.tag_invalid[section] then -%>
+ <% if self.tag_invalid[section] then -%>
<div class="cbi-error"><%:cbi_invalid%></div>
- <%- end -%>
+ <%- end %>
</td>
-<%- if #self.deps > 0 then -%>
+<% if #self.deps > 0 then -%>
<script type="text/javascript">
<% for j, d in ipairs(self.deps) do -%>
cbi_d_add("cbi-<%=self.config.."-"..section.."-"..self.option%>", "cbid.<%=self.config.."."..section.."."..d.field%>", "<%=d.value%>");
<%- end %>
</script>
-<%- end -%>
+<%- end %>
$Id$
-%>
+
<td class="cbi-value-field" id="cbi-<%=self.config.."-"..section.."-"..self.option%>">
$Id$
-%>
+
<%+cbi/valueheader%>
<% if self.value then
if type(self.value) == "function" then %>
$Id$
-%>
- <div>
- <input type="submit" value="<%:save%>" />
- <input type="reset" value="<%:reset%>" />
- <script type="text/javascript">cbi_d_init();</script>
- </div>
- </form>
-<%+footer%>
\ No newline at end of file
+
+ <div>
+ <input type="submit" value="<%:save%>" />
+ <input type="reset" value="<%:reset%>" />
+ <script type="text/javascript">cbi_d_init();</script>
+ </div>
+</form>
+<%+footer%>
$Id$
-%>
- <% if #self.description > 0 then %><div class="cbi-value-description"><%=self.description%></div><% end %>
- </div>
- <% if self.tag_invalid[section] then %><div class="cbi-error"><%:cbi_invalid%></div><% end %>
- </div>
- <% if #self.deps > 0 then %><script type="text/javascript">
- <% for j, d in ipairs(self.deps) do %>cbi_d_add("cbi-<%=self.config.."-"..section.."-"..self.option%>", "cbid.<%=self.config.."."..section.."."..d.field%>", "<%=d.value%>");
- <% end %>
- </script><% end %>
+
+ <% if #self.description > 0 then -%>
+ <div class="cbi-value-description"><%=self.description%></div>
+ <%- end %>
+ </div>
+
+ <% if self.tag_invalid[section] then -%>
+ <div class="cbi-error"><%:cbi_invalid%></div>
+ <%- end %>
+</div>
+
+<% if #self.deps > 0 then -%>
+ <script type="text/javascript">
+ <% for j, d in ipairs(self.deps) do -%>
+ cbi_d_add("cbi-<%=self.config.."-"..section.."-"..self.option%>", "cbid.<%=self.config.."."..section.."."..d.field%>", "<%=d.value%>");
+ <%- end %>
+ </script>
+<%- end %>
$Id$
-%>
- <div class="cbi-value" id="cbi-<%=self.config.."-"..section.."-"..self.option%>">
- <label for="cbid.<%=self.config.."."..section.."."..self.option%>" class="cbi-value-title"><%=self.title%></label>
- <div class="cbi-value-field">
\ No newline at end of file
+
+<div class="cbi-value" id="cbi-<%=self.config.."-"..section.."-"..self.option%>">
+ <label class="cbi-value-title"<%= attr("for", cbid) %>><%=self.title%></label>
+ <div class="cbi-value-field">
-%>
<%+cbi/valueheader%>
- <input onchange="cbi_d_update(this.id)" type="checkbox" id="cbid.<%=self.config.."."..section.."."..self.option%>" name="cbid.<%=self.config.."."..section.."."..self.option%>"<% if self:cfgvalue(section) == self.enabled then %> checked="checked"<% end %> value="1" />
-<%+cbi/valuefooter%>
\ No newline at end of file
+ <input onchange="cbi_d_update(this.id)" type="checkbox"<%= attr("id", cbid) .. attr("name", cbid) .. ifattr(self:cfgvalue(section) == self.enabled, "checked", "checked") %> value="1" />
+<%+cbi/valuefooter%>
$Id$
-%>
+
<%+header%>
- <form method="post" action="<%=luci.http.getenv("REQUEST_URI")%>">
- <div>
- <script type="text/javascript" src="<%=resource%>/cbi.js"></script>
- <input type="hidden" name="cbi.submit" value="1" />
- <input type="submit" value="<%:save%>" class="hidden" />
- </div>
+<form method="post" action="<%=luci.http.getenv("REQUEST_URI")%>">
+ <div>
+ <script type="text/javascript" src="<%=resource%>/cbi.js"></script>
+ <input type="hidden" name="cbi.submit" value="1" />
+ <input type="submit" value="<%:save%>" class="hidden" />
+ </div>
-%>
<%+cbi/valueheader%>
<% if self.widget == "select" then %>
- <select onchange="cbi_d_update(this.id)" id="cbid.<%=self.config.."."..section.."."..self.option%>" name="cbid.<%=self.config.."."..section.."."..self.option%>"<% if self.size then %> size="<%=self.size%>"<% end %>>
-<%for i, key in pairs(self.keylist) do%>
- <option<% if self:cfgvalue(section) == key then %> selected="selected"<% end %> value="<%=key%>"><%=self.vallist[i]%></option>
-<% end %>
- </select>
+ <select onchange="cbi_d_update(this.id)"<%= attr("id", cbid) .. attr("name", cbid) .. ifattr(self.size, "size") %>>
+ <% for i, key in pairs(self.keylist) do -%>
+ <option<%= attr("value", key) .. ifattr(self:cfgvalue(section) == key, "selected", "selected") %>><%=self.vallist[i]%></option>
+ <%- end %>
+ </select>
<% elseif self.widget == "radio" then
- local c = 0;
+ local c = 0
for i, key in pairs(self.keylist) do
- c = c + 1%>
- <input type="radio" id="cbid.<%=self.config.."."..section.."."..self.option%>" name="cbid.<%=self.config.."."..section.."."..self.option%>"<% if self:cfgvalue(section) == key then %> checked="checked"<% end %> value="<%=key%>" />
- <label for="cbid.<%=self.config.."."..section.."."..self.option%>"><%=self.vallist[i]%></label><br />
+ c = c + 1
+%>
+ <input type="radio"<%= attr("id", cbid..c) .. attr("name", cbid) .. attr("value", key) .. ifattr(self:cfgvalue(section) == key, "checked", "checked") %> />
+ <label<%= attr("for", cbid..c) %>><%=self.vallist[i]%></label><br />
<% if c == self.size then c = 0 %><br />
<% end end %>
<% end %>
-<%+cbi/valuefooter%>
\ No newline at end of file
+<%+cbi/valuefooter%>
$Id$
-%>
- <div class="cbi-map" id="cbi-<%=self.config%>">
- <h1><%=self.title%></h1>
- <div class="cbi-map-descr"><%=self.description%></div>
-<% self:render_children() %>
- <br />
- </div>
+
+<div class="cbi-map" id="cbi-<%=self.config%>">
+ <h1><%=self.title%></h1>
+ <div class="cbi-map-descr"><%=self.description%></div>
+ <%- self:render_children() %>
+ <br />
+</div>
-%>
<%
-local v = self:valuelist(section)
+local v = self:valuelist(section)
%>
<%+cbi/valueheader%>
<% if self.widget == "select" then %>
- <select multiple="multiple" name="cbid.<%=self.config.."."..section.."."..self.option%>"<% if self.size then %> size="<%=self.size%>"<% end %>>
-<%for i, key in pairs(self.keylist) do %>
- <option<% if luci.util.contains(v, key) then %> selected="selected"<% end %> value="<%=key%>"><%=self.vallist[i]%></option>
-<% end %>
- </select>
+ <select multiple="multiple"<%= attr("name", cbid) .. ifattr(self.size, "size") %>>
+ <% for i, key in pairs(self.keylist) do -%>
+ <option<%= attr("value", key) .. ifattr(luci.util.contains(v, key), "selected", "selected") %>><%=self.vallist[i]%></option>
+ <%- end %>
+ </select>
<% elseif self.widget == "checkbox" then
local c = 0;
for i, key in pairs(self.keylist) do
- c = c + 1%>
- <input type="checkbox" id="cbid.<%=self.config.."."..section.."."..self.option.."."..i%>" name="cbid.<%=self.config.."."..section.."."..self.option%>"<% if luci.util.contains(v, key) then %> checked="checked"<% end %> value="<%=key%>" />
- <label for="cbid.<%=self.config.."."..section.."."..self.option.."."..i%>"><%=self.vallist[i]%></label><br />
+ c = c + 1
+%>
+ <input type="checkbox"<%= attr("id", cbid..c) .. attr("name", cbid) .. attr("value", key) .. ifattr(luci.util.contains(v, key), "checked", "checked") />
+ <label<%= attr("for", cbid..c) %>><%=self.vallist[i]%></label><br />
<% if c == self.size then c = 0 %><br />
<% end end %>
<% end %>
$Id$
-%>
-<% if self:cfgvalue(self.section) then
-section = self.section %>
- <div class="cbi-section" id="cbi-<%=self.config%>-<%=section%>">
- <h2><%=self.title%></h2>
- <div class="cbi-section-descr"><%=self.description%></div>
- <% if self.addremove then %><div class="cbi-section-remove right">
- <input type="submit" name="cbi.rns.<%=self.config%>.<%=section%>" value="<%:cbi_del%>" />
- </div><% end %>
-<div class="cbi-section-node" id="cbi-<%=self.config%>-<%=section%>">
-<%+cbi/ucisection%>
-</div>
-<br />
- </div>
+
+<% if self:cfgvalue(self.section) then section = self.section %>
+ <div class="cbi-section" id="cbi-<%=self.config%>-<%=section%>">
+ <h2><%=self.title%></h2>
+ <div class="cbi-section-descr"><%=self.description%></div>
+ <% if self.addremove then -%>
+ <div class="cbi-section-remove right">
+ <input type="submit" name="cbi.rns.<%=self.config%>.<%=section%>" value="<%:cbi_del%>" />
+ </div>
+ <%- end %>
+ <div class="cbi-section-node" id="cbi-<%=self.config%>-<%=section%>">
+ <%+cbi/ucisection%>
+ </div>
+ <br />
+ </div>
<% elseif self.addremove then %>
- <div class="cbi-section" id="cbi-<%=self.config%>-<%=self.section%>">
- <h2><%=self.title%></h2>
- <div class="cbi-section-descr"><%=self.description%></div>
- <input type="submit" name="cbi.cns.<%=self.config%>.<%=self.section%>" value="<%:cbi_add%>" />
- </div>
+ <div class="cbi-section" id="cbi-<%=self.config%>-<%=self.section%>">
+ <h2><%=self.title%></h2>
+ <div class="cbi-section-descr"><%=self.description%></div>
+ <input type="submit" name="cbi.cns.<%=self.config%>.<%=self.section%>" value="<%:cbi_add%>" />
+ </div>
<% end %>
$Id$
-%>
- <div class="cbi-section" id="cbi-<%=self.config%>-<%=self.sectiontype%>">
- <h2><%=self.title%></h2>
- <div class="cbi-section-descr"><%=self.description%></div>
- <div class="cbi-section-node">
- <%- local count = 0 -%>
- <table class="cbi-section-table">
- <tr class="cbi-section-table-titles">
- <%- for i, k in pairs(self.children) do -%>
- <th class="cbi-section-table-cell"><%=k.title%></th>
- <%- count = count + 1; end; if self.addremove then -%>
- <th class="cbi-section-table-cell"> </th>
- <%- count = count + 1; end -%>
- </tr>
- <tr class="cbi-section-table-descr">
- <%- for i, k in pairs(self.children) do -%>
- <th class="cbi-section-table-cell"><%=k.description%></th>
- <%- end; if self.addremove then -%>
- <th class="cbi-section-table-cell"> </th>
- <%- end -%>
- </tr>
- <%- for i, k in ipairs(self:cfgsections()) do
- if not self.anonymous then
- -%>
- <tr class="cbi-section-table-title">
- <th colspan="<%=count%>"><h3><%=k%></h3></th>
- </tr>
- <%- end
- section = k
- scope = { valueheader = "cbi/cell_valueheader", valuefooter = "cbi/cell_valuefooter" }
- -%>
- <tr class="cbi-section-table-row" id="cbi-<%=self.config%>-<%=section%>">
- <%-+cbi/ucisection-%>
- <%- if self.addremove then -%>
- <td class="cbi-section-table-cell">
- <input type="submit" name="cbi.rts.<%=self.config%>.<%=k%>" value="X" />
- </td>
- <%- end -%>
- </tr>
- <%- end -%>
- <%- if self.addremove then -%>
- <tr class="cbi-section-table-row">
- <td colspan="<%=count%>" class="cbi-section-table-optionals">
- <div class="cbi-section-create">
- <% if self.anonymous then %>
- <input type="submit" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>" value="<%:cbi_add%>" />
- <% else %>
- <input type="text" class="cbi-section-create-name" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>" />
- <input type="submit" value="<%:cbi_add%>" />
- <% end %>
+<div class="cbi-section" id="cbi-<%=self.config%>-<%=self.sectiontype%>">
+ <h2><%=self.title%></h2>
+ <div class="cbi-section-descr"><%=self.description%></div>
+ <div class="cbi-section-node">
+ <%- local count = 0 -%>
+ <table class="cbi-section-table">
+ <tr class="cbi-section-table-titles">
+ <%- for i, k in pairs(self.children) do -%>
+ <th class="cbi-section-table-cell"><%=k.title%></th>
+ <%- count = count + 1; end; if self.addremove then -%>
+ <th class="cbi-section-table-cell"> </th>
+ <%- count = count + 1; end -%>
+ </tr>
+ <tr class="cbi-section-table-descr">
+ <%- for i, k in pairs(self.children) do -%>
+ <th class="cbi-section-table-cell"><%=k.description%></th>
+ <%- end; if self.addremove then -%>
+ <th class="cbi-section-table-cell"> </th>
+ <%- end -%>
+ </tr>
+ <%- for i, k in ipairs(self:cfgsections()) do
+ if not self.anonymous then
+ -%>
+ <tr class="cbi-section-table-title">
+ <th colspan="<%=count%>"><h3><%=k%></h3></th>
+ </tr>
+ <%- end
+ section = k
+ scope = { valueheader = "cbi/cell_valueheader", valuefooter = "cbi/cell_valuefooter" }
+ -%>
+ <tr class="cbi-section-table-row" id="cbi-<%=self.config%>-<%=section%>">
+ <%-+cbi/ucisection-%>
+ <%- if self.addremove then -%>
+ <td class="cbi-section-table-cell">
+ <input type="submit" name="cbi.rts.<%=self.config%>.<%=k%>" value="X" />
+ </td>
+ <%- end -%>
+ </tr>
+ <%- end -%>
- <% if self.err_invalid then %>
- <div class="cbi-error"><%:cbi_invalid%></div>
- <% end %>
- </div>
- </td>
- </tr>
- <%- end -%>
- </table>
+ <%- if self.addremove then -%>
+ <tr class="cbi-section-table-row">
+ <td colspan="<%=count%>" class="cbi-section-table-optionals">
+ <div class="cbi-section-create">
+ <% if self.anonymous then %>
+ <input type="submit" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>" value="<%:cbi_add%>" />
+ <% else %>
+ <input type="text" class="cbi-section-create-name" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>" />
+ <input type="submit" value="<%:cbi_add%>" />
+ <% end %>
+
+ <% if self.err_invalid then %>
+ <div class="cbi-error"><%:cbi_invalid%></div>
+ <% end %>
</div>
- </div>
+ </td>
+ </tr>
+ <%- end -%>
+ </table>
+ </div>
+</div>
$Id$
-%>
- <div class="cbi-section" id="cbi-<%=self.config%>-<%=self.sectiontype%>">
- <h2><%=self.title%></h2>
- <div class="cbi-section-descr"><%=self.description%></div>
-<% for i, k in ipairs(self:cfgsections()) do%>
- <% if self.addremove then %><div class="cbi-section-remove right">
- <input type="submit" name="cbi.rts.<%=self.config%>.<%=k%>" value="<%:cbi_del%>" />
- </div><% end %>
- <% if not self.anonymous then %><h3><%=k%></h3><% end %>
-<% section = k %>
-<div class="cbi-section-node" id="cbi-<%=self.config%>-<%=section%>">
-<%+cbi/ucisection%>
-</div>
-<br />
-<% end %>
-<% if self.addremove then %>
- <div class="cbi-section-create">
- <% if self.anonymous then %>
- <input type="submit" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>" value="<%:cbi_add%>" />
- <% else %>
- <input type="text" class="cbi-section-create-name" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>" />
- <input type="submit" value="<%:cbi_add%>" />
- <% end %><% if self.err_invalid then %><div class="cbi-error"><%:cbi_invalid%></div><% end %>
- </div>
-<% end %>
+
+<div class="cbi-section" id="cbi-<%=self.config%>-<%=self.sectiontype%>">
+ <h2><%=self.title%></h2>
+ <div class="cbi-section-descr"><%=self.description%></div>
+ <% for i, k in ipairs(self:cfgsections()) do -%>
+ <% if self.addremove then -%>
+ <div class="cbi-section-remove right">
+ <input type="submit" name="cbi.rts.<%=self.config%>.<%=k%>" value="<%:cbi_del%>" />
</div>
+ <%- end %>
+ <% if not self.anonymous then %><h3><%=k%></h3><% end %>
+ <% section = k %>
+ <div class="cbi-section-node" id="cbi-<%=self.config%>-<%=section%>">
+ <%+cbi/ucisection%>
+ </div>
+ <br />
+ <%- end %>
+
+ <% if self.addremove then -%>
+ <div class="cbi-section-create">
+ <% if self.anonymous then -%>
+ <input type="submit" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>" value="<%:cbi_add%>" />
+ <%- else -%>
+ <input type="text" class="cbi-section-create-name" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>" />
+ <input type="submit" value="<%:cbi_add%>" />
+ <%- end %>
+
+ <% if self.err_invalid then -%>
+ <div class="cbi-error"><%:cbi_invalid%></div>
+ <%- end %>
+ </div>
+ <%- end %>
+ </div>
$Id$
-%>
+
<% self:render_children(section, scope or {}) %>
- <% if #self.optionals[section] > 0 or self.dynamic then %>
- <div class="cbi-optionals">
- <% if self.dynamic then %>
- <input type="text" name="cbi.opt.<%=self.config%>.<%=section%>" />
- <% else %>
- <select name="cbi.opt.<%=self.config%>.<%=section%>">
- <option><%:cbi_addopt%></option>
- <% for key, val in pairs(self.optionals[section]) do %>
- <option id="cbi-<%=self.config.."-"..section.."-"..val.option%>" value="<%=val.option%>"><%=val.title%></option>
- <% end %>
- </select>
- <script type="text/javascript"><% for key, val in pairs(self.optionals[section]) do %>
- <% if #val.deps > 0 then %><% for j, d in ipairs(val.deps) do %>cbi_d_add("cbi-<%=self.config.."-"..section.."-"..val.option%>", "cbid.<%=self.config.."."..section.."."..d.field%>", "<%=d.value%>");
- <% end %><% end %>
- <% end %></script>
- <% end %>
- <input type="submit" value="<%:add%>" />
- </div>
- <% end %>
\ No newline at end of file
+
+<% if #self.optionals[section] > 0 or self.dynamic then %>
+ <div class="cbi-optionals">
+ <% if self.dynamic then %>
+ <input type="text" name="cbi.opt.<%=self.config%>.<%=section%>" />
+ <% else %>
+ <select name="cbi.opt.<%=self.config%>.<%=section%>">
+ <option><%:cbi_addopt%></option>
+ <% for key, val in pairs(self.optionals[section]) do %>
+ <option id="cbi-<%=self.config.."-"..section.."-"..val.option%>" value="<%=val.option%>"><%=val.title%></option>
+ <% end %>
+ </select>
+ <script type="text/javascript"><% for key, val in pairs(self.optionals[section]) do %>
+ <% if #val.deps > 0 then %><% for j, d in ipairs(val.deps) do %>cbi_d_add("cbi-<%=self.config.."-"..section.."-"..val.option%>", "cbid.<%=self.config.."."..section.."."..d.field%>", "<%=d.value%>");
+ <% end %><% end %>
+ <% end %></script>
+ <% end %>
+ <input type="submit" value="<%:add%>" />
+ </div>
+<% end %>
-%>
<%+cbi/valueheader%>
- <input type="text" onchange="cbi_d_update(this.id)" <% if self.size then %>size="<%=self.size%>" <% end %><% if self.maxlength then %>maxlength="<%=self.maxlength%>" <% end %>name="cbid.<%=self.config.."."..section.."."..self.option%>" id="cbid.<%=self.config.."."..section.."."..self.option%>" value="<%=self:cfgvalue(section)%>" />
+ <input type="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") %> />
<%+cbi/valuefooter%>