<%- if type(self.hidden) == "table" then for k, v in pairs(self.hidden) do -%> <input type="hidden" id="<%=k%>" name="<%=k%>" value="<%=pcdata(v)%>" /> <%- end end %> <% if self.tabs then %> <%+cbi/tabcontainer%> <% else %> <% self:render_children(section, scope or {}) %> <% end %> <% if self.error and self.error[section] then -%> <div class="cbi-section-error" data-index="<%=#self.children + 1%>"> <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 %> <% if self.optionals[section] and #self.optionals[section] > 0 or self.dynamic then %> <div class="cbi-optionals" data-index="<%=#self.children + 1%>"> <% if self.dynamic then local keys, vals, name, opt = { }, { } for name, opt in pairs(self.optionals[section]) do keys[#keys+1] = name vals[#vals+1] = opt.title end %> <input type="text" id="cbi.opt.<%=self.config%>.<%=section%>" name="cbi.opt.<%=self.config%>.<%=section%>" data-type="uciname" data-optional="true"<%= ifattr(#keys > 0, "data-choices", luci.util.json_encode({keys, vals})) %> /> <% else %> <select id="cbi.opt.<%=self.config%>.<%=section%>" name="cbi.opt.<%=self.config%>.<%=section%>" data-optionals="true"> <option><%: -- Additional Field -- %></option> <% for key, val in pairs(self.optionals[section]) do -%> <option id="cbi-<%=self.config.."-"..section.."-"..val.option%>" value="<%=val.option%>" data-index="<%=val.index%>" data-depends="<%=pcdata(val:deplist2json(section))%>"><%=striptags(val.title)%></option> <%- end %> </select> <% end %> <input type="submit" class="cbi-button cbi-button-fieldadd" value="<%:Add%>" /> </div> <% end %>