diff options
author | Steven Barth <steven@midlink.org> | 2008-03-27 23:14:01 +0000 |
---|---|---|
committer | Steven Barth <steven@midlink.org> | 2008-03-27 23:14:01 +0000 |
commit | 077db659bbcb7cee6bbc4c4dbaed9776261190a0 (patch) | |
tree | 0128ec76baf8112f2dd6538e0c5a9448cdf7d91a /src/ffluci | |
parent | 3f1064b91949741af53eb1d198e228f768abaea8 (diff) |
* Major CBI improvements
Diffstat (limited to 'src/ffluci')
-rw-r--r-- | src/ffluci/cbi.lua | 116 | ||||
-rw-r--r-- | src/ffluci/controller/admin/network.lua | 3 | ||||
-rw-r--r-- | src/ffluci/controller/admin/uci.lua | 4 | ||||
-rw-r--r-- | src/ffluci/model/cbi/admin_network/ifaces.lua | 31 | ||||
-rw-r--r-- | src/ffluci/model/cbi/admin_network/ptp.lua | 31 | ||||
-rw-r--r-- | src/ffluci/model/cbi/admin_network/vlan.lua | 6 | ||||
-rw-r--r-- | src/ffluci/model/uci.lua | 3 | ||||
-rw-r--r-- | src/ffluci/util.lua | 11 | ||||
-rw-r--r-- | src/ffluci/view/cbi/footer.htm | 1 | ||||
-rw-r--r-- | src/ffluci/view/cbi/fvalue.htm | 17 | ||||
-rw-r--r-- | src/ffluci/view/cbi/header.htm | 1 | ||||
-rw-r--r-- | src/ffluci/view/cbi/lvalue.htm | 13 | ||||
-rw-r--r-- | src/ffluci/view/cbi/mvalue.htm | 15 | ||||
-rw-r--r-- | src/ffluci/view/cbi/nsection.htm | 15 | ||||
-rw-r--r-- | src/ffluci/view/cbi/tsection.htm | 19 | ||||
-rw-r--r-- | src/ffluci/view/cbi/value.htm | 13 |
16 files changed, 203 insertions, 96 deletions
diff --git a/src/ffluci/cbi.lua b/src/ffluci/cbi.lua index 22a4019e4..844f6c0bb 100644 --- a/src/ffluci/cbi.lua +++ b/src/ffluci/cbi.lua @@ -218,7 +218,6 @@ function AbstractSection.parse_optionals(self, section) for k,v in ipairs(self.children) do if v.optional and not v:cfgvalue(section) then if field == v.option then - self.map:set(section, field, v.default) field = nil else table.insert(self.optionals[section], v) @@ -328,18 +327,30 @@ end TypedSection - A (set of) configuration section(s) defined by the type addremove: Defines whether the user can add/remove sections of this type anonymous: Allow creating anonymous sections - valid: a list of names or a validation function for creating sections - scope: a list of names or a validation function for editing sections + validate: a validation function returning nil if the section is invalid ]]-- TypedSection = class(AbstractSection) function TypedSection.__init__(self, ...) AbstractSection.__init__(self, ...) self.template = "cbi/tsection" + self.deps = {} + self.excludes = {} self.anonymous = false - self.valid = nil - self.scope = nil +end + +-- Return all matching UCI sections for this TypedSection +function TypedSection.cfgsections(self) + local sections = {} + for k, v in pairs(self.map:get()) do + if v[".type"] == self.sectiontype then + if self:checkscope(k) then + sections[k] = v + end + end + end + return sections end -- Creates a new section of this type with the given name (or anonymous) @@ -357,6 +368,16 @@ function TypedSection.create(self, name) end end +-- Limits scope to sections that have certain option => value pairs +function TypedSection.depends(self, option, value) + table.insert(self.deps, {option=option, value=value}) +end + +-- Excludes several sections by name +function TypedSection.exclude(self, field) + self.excludes[field] = true +end + function TypedSection.parse(self) if self.addremove then -- Create @@ -368,10 +389,17 @@ function TypedSection.parse(self) end else if name then - name = ffluci.util.validate(name, self.valid) + -- Ignore if it already exists + if self:cfgvalue(name) then + name = nil; + end + + name = self:checkscope(name) + if not name then self.err_invalid = true end + if name and name:len() > 0 then self:create(name) end @@ -383,7 +411,7 @@ function TypedSection.parse(self) name = ffluci.http.formvalue(crval) if type(name) == "table" then for k,v in pairs(name) do - if ffluci.util.validate(k, self.valid) then + if self:cfgvalue(k) and self:checkscope(k) then self:remove(k) end end @@ -404,20 +432,37 @@ function TypedSection.render_children(self, section) end end --- Return all matching UCI sections for this TypedSection -function TypedSection.cfgsections(self) - local sections = {} - for k, v in pairs(self.map:get()) do - if v[".type"] == self.sectiontype then - if ffluci.util.validate(k, self.scope) then - sections[k] = v +-- Verifies scope of sections +function TypedSection.checkscope(self, section) + -- Check if we are not excluded + if self.excludes[section] then + return nil + end + + -- Check if at least one dependency is met + if #self.deps > 0 and self:cfgvalue(section) then + local stat = false + + for k, v in ipairs(self.deps) do + if self:cfgvalue(section)[v.option] == v.value then + stat = true end end + + if not stat then + return nil + end end - return sections + + return self:validate(section) end +-- Dummy validate function +function TypedSection.validate(self, section) + return section +end + --[[ AbstractValue - An abstract Value Type @@ -437,14 +482,25 @@ function AbstractValue.__init__(self, map, option, ...) self.map = map self.config = map.config self.tag_invalid = {} + self.deps = {} - self.valid = nil - self.depends = nil - self.default = " " + self.rmempty = false + self.default = nil self.size = nil self.optional = false end +-- Add a dependencie to another section field +function AbstractValue.depends(self, field, value) + table.insert(self.deps, {field=field, value=value}) +end + +-- Return whether this object should be created +function AbstractValue.formcreated(self, section) + local key = "cbi.opt."..self.config.."."..section + return (ffluci.http.formvalue(key) == self.option) +end + -- Returns the formvalue for this object function AbstractValue.formvalue(self, section) local key = "cbid."..self.map.config.."."..section.."."..self.option @@ -453,12 +509,8 @@ end function AbstractValue.parse(self, section) local fvalue = self:formvalue(section) - if fvalue == "" then - fvalue = nil - end - - if fvalue then -- If we have a form value, validate it and write it to UCI + if fvalue and fvalue ~= "" then -- If we have a form value, write it to UCI fvalue = self:validate(fvalue) if not fvalue then self.tag_invalid[section] = true @@ -469,16 +521,14 @@ function AbstractValue.parse(self, section) elseif ffluci.http.formvalue("cbi.submit") then -- Unset the UCI or error if self.rmempty or self.optional then self:remove(section) - else - self.tag_invalid[section] = true end end end -- Render if this value exists or if it is mandatory -function AbstractValue.render(self, section) - if not self.optional or self:cfgvalue(section) then - ffluci.template.render(self.template, {self=self, section=section}) +function AbstractValue.render(self, s) + if not self.optional or self:cfgvalue(s) or self:formcreated(s) then + ffluci.template.render(self.template, {self=self, section=s}) end end @@ -488,8 +538,8 @@ function AbstractValue.cfgvalue(self, section) end -- Validate the form value -function AbstractValue.validate(self, val) - return ffluci.util.validate(val, self.valid) +function AbstractValue.validate(self, value) + return value end -- Write to UCI @@ -529,7 +579,7 @@ function Value.validate(self, val) val = nil end - return ffluci.util.validate(val, self.valid, self.isnumber, self.isinteger) + return ffluci.util.validate(val, self.isnumber, self.isinteger) end @@ -585,7 +635,7 @@ function ListValue.__init__(self, ...) self.widget = "select" end -function ListValue.add_value(self, key, val) +function ListValue.value(self, key, val) val = val or key table.insert(self.keylist, tostring(key)) table.insert(self.vallist, tostring(val)) @@ -618,7 +668,7 @@ function MultiValue.__init__(self, ...) self.delimiter = " " end -function MultiValue.add_value(self, key, val) +function MultiValue.value(self, key, val) val = val or key table.insert(self.keylist, tostring(key)) table.insert(self.vallist, tostring(val)) diff --git a/src/ffluci/controller/admin/network.lua b/src/ffluci/controller/admin/network.lua index f76dce555..2774dfdb0 100644 --- a/src/ffluci/controller/admin/network.lua +++ b/src/ffluci/controller/admin/network.lua @@ -5,6 +5,7 @@ menu = { order = 20, entries = { {action = "vlan", descr = "VLAN"}, - {action = "ifaces", descr = "Schnittstellen"} + {action = "ifaces", descr = "Schnittstellen"}, + {action = "ptp", descr = "PPPoE / PPTP"}, } }
\ No newline at end of file diff --git a/src/ffluci/controller/admin/uci.lua b/src/ffluci/controller/admin/uci.lua index db70eb6a6..a1eb0d7d7 100644 --- a/src/ffluci/controller/admin/uci.lua +++ b/src/ffluci/controller/admin/uci.lua @@ -10,7 +10,7 @@ function action_apply() -- Collect files to be applied for i, line in ipairs(ffluci.util.split(changes)) do - local r = line:match("^[^.]+") + local r = line:match("^-?([^.]+)") if r then apply[r] = true end @@ -41,7 +41,7 @@ function action_revert() -- Collect files to be reverted for i, line in ipairs(ffluci.util.split(changes)) do - local r = line:match("^[^.]+") + local r = line:match("^-?([^.]+)") if r then revert[r] = true end diff --git a/src/ffluci/model/cbi/admin_network/ifaces.lua b/src/ffluci/model/cbi/admin_network/ifaces.lua index f1d808635..62e72462f 100644 --- a/src/ffluci/model/cbi/admin_network/ifaces.lua +++ b/src/ffluci/model/cbi/admin_network/ifaces.lua @@ -1,15 +1,32 @@ +-- ToDo: Translate, Add descriptions and help texts m = Map("network", "Schnittstellen") s = m:section(TypedSection, "interface") s.addremove = true +s:exclude("loopback") +s:depends("proto", "static") +s:depends("proto", "dhcp") p = s:option(ListValue, "proto", "Protokoll") -p:add_value("static", "statisch") -p:add_value("dhcp", "DHCP") -s:option(Value, "ipaddr", "IP-Adresse").optional = 1 -s:option(Value, "netmask", "Netzmaske").optional = 1 -s:option(Value, "gateway", "Gateway").optional = 1 -s:option(Value, "dns", "DNS").optional = 1 -s:option(Value, "mtu", "MTU").optional = 1 +p:value("static", "statisch") +p:value("dhcp", "DHCP") + +s:option(Value, "ifname", "Schnittstelle") + +s:option(Value, "ipaddr", "IP-Adresse") + +s:option(Value, "netmask", "Netzmaske"):depends("proto", "static") + +gw = s:option(Value, "gateway", "Gateway") +gw:depends("proto", "static") +gw.rmempty = true + +dns = s:option(Value, "dns", "DNS-Server") +dns:depends("proto", "static") +dns.optional = true + +mtu = s:option(Value, "mtu", "MTU") +mtu.optional = true +mtu.isinteger = true return m
\ No newline at end of file diff --git a/src/ffluci/model/cbi/admin_network/ptp.lua b/src/ffluci/model/cbi/admin_network/ptp.lua new file mode 100644 index 000000000..78fcf94b9 --- /dev/null +++ b/src/ffluci/model/cbi/admin_network/ptp.lua @@ -0,0 +1,31 @@ +-- ToDo: Translate, Add descriptions and help texts +m = Map("network", "Punkt-zu-Punkt Verbindungen") + +s = m:section(TypedSection, "interface") +s.addremove = true +s:depends("proto", "pppoe") +s:depends("proto", "pptp") + +p = s:option(ListValue, "proto", "Protokoll") +p:value("pppoe", "PPPoE") +p:value("pptp", "PPTP") +p.default = "pppoe" + +s:option(Value, "ifname", "Schnittstelle") + +s:option(Value, "username", "Benutzername") +s:option(Value, "password", "Passwort") + +s:option(Value, "keepalive", "Keep-Alive").optional = true + +s:option(Value, "demand", "Dial on Demand (idle time)").optional = true + +srv = s:option(Value, "server", "PPTP-Server") +srv:depends("proto", "pptp") +srv.optional = true + +mtu = s:option(Value, "mtu", "MTU") +mtu.optional = true +mtu.isinteger = true + +return m
\ No newline at end of file diff --git a/src/ffluci/model/cbi/admin_network/vlan.lua b/src/ffluci/model/cbi/admin_network/vlan.lua index 6a0115210..3186f2d9b 100644 --- a/src/ffluci/model/cbi/admin_network/vlan.lua +++ b/src/ffluci/model/cbi/admin_network/vlan.lua @@ -1,12 +1,10 @@ +-- ToDo: Autodetect things, maybe use MultiValue instead, Translate, Add descriptions m = Map("network", "VLAN", "Konfguriert den Switch des Routers.") s = m:section(TypedSection, "switch") --- ToDo: Autodetect things, maybe use MultiValue instead for i = 0, 15 do - local c = s:option(Value, "vlan"..i, "vlan"..i) - c.default = "5" - c.optional = true + s:option(Value, "vlan"..i, "vlan"..i).optional = true end return m
\ No newline at end of file diff --git a/src/ffluci/model/uci.lua b/src/ffluci/model/uci.lua index 75d34c5d6..6585c66cb 100644 --- a/src/ffluci/model/uci.lua +++ b/src/ffluci/model/uci.lua @@ -7,6 +7,9 @@ is comparable to the syntax of the uci application Any return value of false or nil can be interpreted as an error + +ToDo: Reimplement in Lua + FileId: $Id$ diff --git a/src/ffluci/util.lua b/src/ffluci/util.lua index f2180e7c0..85092f065 100644 --- a/src/ffluci/util.lua +++ b/src/ffluci/util.lua @@ -203,7 +203,7 @@ end -- Validates a variable -function validate(value, valid, cast_number, cast_int) +function validate(value, cast_number, cast_int) if cast_number or cast_int then value = tonumber(value) end @@ -212,15 +212,6 @@ function validate(value, valid, cast_number, cast_int) value = nil end - - if type(valid) == "function" then - value = valid(value) - elseif type(valid) == "table" then - if not contains(valid, value) then - value = nil - end - end - return value end diff --git a/src/ffluci/view/cbi/footer.htm b/src/ffluci/view/cbi/footer.htm index d6e49678e..0629bd6d6 100644 --- a/src/ffluci/view/cbi/footer.htm +++ b/src/ffluci/view/cbi/footer.htm @@ -1,4 +1,5 @@ <input type="submit" value="<%:save Speichern%>" /> <input type="reset" value="<%:reset Zurücksetzen%>" /> + <script type="text/javascript">cbi_d_init();</script> </form> <%+footer%>
\ No newline at end of file diff --git a/src/ffluci/view/cbi/fvalue.htm b/src/ffluci/view/cbi/fvalue.htm index 6cf9a8d87..cce116af3 100644 --- a/src/ffluci/view/cbi/fvalue.htm +++ b/src/ffluci/view/cbi/fvalue.htm @@ -1,10 +1,11 @@ - <div class="cbi-value"> - <div class="left"> - <div class="cbi-value-title"><%=self.title%></div> - <div class="cbi-value-description"><%=self.description%></div> - </div> + <div class="cbi-value" id="cbi-<%=self.config.."-"..section.."-"..self.option%>"> + <div class="cbi-value-title left"><%=self.title%></div> <div class="cbi-value-field"> - <input type="checkbox" name="cbid.<%=self.config.."."..section.."."..self.option%>"<% if self:cfgvalue(section) == self.enabled then %> checked="checked"<% end %> value="1" /> + <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" /> + <div class="cbi-value-description inline"><%=self.description%></div> </div> - <div class="clear"></div> - </div>
\ No newline at end of file + </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 %>
\ No newline at end of file diff --git a/src/ffluci/view/cbi/header.htm b/src/ffluci/view/cbi/header.htm index 2731b6c2f..e926b2091 100644 --- a/src/ffluci/view/cbi/header.htm +++ b/src/ffluci/view/cbi/header.htm @@ -1,4 +1,5 @@ <%+header%> <form method="post" action="<%=os.getenv("REQUEST_URI")%>"> + <script type="text/javascript" src="<%=media%>/cbi.js"></script> <input type="hidden" name="cbi.submit" value="1" /> <input type="submit" value="<%:cbi_save Speichern%>" class="hidden" /> diff --git a/src/ffluci/view/cbi/lvalue.htm b/src/ffluci/view/cbi/lvalue.htm index f2a5ff975..943a18886 100644 --- a/src/ffluci/view/cbi/lvalue.htm +++ b/src/ffluci/view/cbi/lvalue.htm @@ -1,9 +1,8 @@ - <div class="cbi-value"> + <div class="cbi-value" id="cbi-<%=self.config.."-"..section.."-"..self.option%>"> <div class="cbi-value-title left"><%=self.title%></div> - <div class="cbi-value-description right"><%=self.description%></div> <div class="cbi-value-field"> <% if self.widget == "select" then %> - <select name="cbid.<%=self.config.."."..section.."."..self.option%>"<% if self.size then %> size="<%=self.size%>"<% end %>> + <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 %> @@ -16,6 +15,10 @@ <% if c == self.size then c = 0 %><br /> <% end end %> <% end %> + <div class="cbi-value-description inline"><%=self.description%></div> </div> - <div class="clear"></div> - </div>
\ No newline at end of file + </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 %>
\ No newline at end of file diff --git a/src/ffluci/view/cbi/mvalue.htm b/src/ffluci/view/cbi/mvalue.htm index de7bd0c61..7becb4f48 100644 --- a/src/ffluci/view/cbi/mvalue.htm +++ b/src/ffluci/view/cbi/mvalue.htm @@ -1,11 +1,8 @@ <% local v = self:valuelist(section) %> - <div class="cbi-value"> - <div class="left"> - <div class="cbi-value-title"><%=self.title%></div> - <div class="cbi-value-description"><%=self.description%></div> - </div> + <div class="cbi-value" id="cbi-<%=self.config.."-"..section.."-"..self.option%>"> + <div class="cbi-value-title left"><%=self.title%></div> <div class="cbi-value-field"> <% if self.widget == "select" then %> <select multiple="multiple" name="cbid.<%=self.config.."."..section.."."..self.option%>[]"<% if self.size then %> size="<%=self.size%>"<% end %>> @@ -21,6 +18,10 @@ local v = self:valuelist(section) <% if c == self.size then c = 0 %><br /> <% end end %> <% end %> + <div class="cbi-value-description inline"><%=self.description%></div> </div> - <div class="clear"></div> - </div>
\ No newline at end of file + </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 %>
\ No newline at end of file diff --git a/src/ffluci/view/cbi/nsection.htm b/src/ffluci/view/cbi/nsection.htm index 7615104ad..c1f4c8bf3 100644 --- a/src/ffluci/view/cbi/nsection.htm +++ b/src/ffluci/view/cbi/nsection.htm @@ -2,27 +2,30 @@ <div class="cbi-section" id="cbi-<%=self.config%>-<%=self.section%>"> <h2><%=self.title%></h2> <div class="cbi-section-descr"><%=self.description%></div> + <% if self.addremove then %><div class="cbi-section-remove"> + <input type="submit" name="cbi.rns.<%=self.config%>.<%=self.section%>" value="<%:cbi_del Eintrag entfernen%>" /> + </div><% end %> <fieldset class="cbi-section-node"> <% self:render_children(self.section) %> <% if #self.optionals[self.section] > 0 or self.dynamic then %> <div class="cbi-optionals"> + <input type="submit" value="<%:cbi_addopt Feld hinzufügen%>" /> <% if self.dynamic then %> <input type="text" name="cbi.opt.<%=self.config%>.<%=self.section%>" /> <% else %> <select name="cbi.opt.<%=self.config%>.<%=self.section%>"> <option><%:cbi_selopt *** Zusätzliche Parameter ***%></option> <% for key, val in pairs(self.optionals[self.section]) do %> - <option value="<%=val.option%>"><%=val.title%></option> + <option id="cbi-<%=self.config.."-"..self.section.."-"..val.option%>" value="<%=val.option%>"><%=val.title%></option> + <% if #val.deps > 0 then %><script type="text/javascript"> + <% for j, d in ipairs(val.deps) do %>cbi_d_add("cbi-<%=self.config.."-"..self.section.."-"..val.option%>", "cbid.<%=self.config.."."..self.section.."."..d.field%>", "<%=d.value%>"); + <% end %> + </script><% end %> <% end %> </select> <% end %> - <input type="submit" value="<%:cbi_addopt Feld hinzufügen%>" /> </div> <% end %> - <br /> - <% if self.addremove then %> - <input type="submit" name="cbi.rns.<%=self.config%>.<%=self.section%>" value="<%:cbi_del Eintrag entfernen%>" /> - <% end %> </fieldset> </div> <% elseif self.addremove then %> diff --git a/src/ffluci/view/cbi/tsection.htm b/src/ffluci/view/cbi/tsection.htm index 920509531..15272f05f 100644 --- a/src/ffluci/view/cbi/tsection.htm +++ b/src/ffluci/view/cbi/tsection.htm @@ -2,8 +2,11 @@ <h2><%=self.title%></h2> <div class="cbi-section-descr"><%=self.description%></div> <% for k, v in pairs(self:cfgsections()) do%> - <fieldset class="cbi-section-node" id="cbi-<%=self.config%>-<%=k%>"> + <% if self.addremove then %><div class="cbi-section-remove right"> + <input type="submit" name="cbi.rts.<%=self.config%>.<%=k%>" value="<%:cbi_del Eintrag entfernen%>" /> + </div><% end %> <% if not self.anonymous then %><h3><%=k%></h3><% end %> + <fieldset class="cbi-section-node" id="cbi-<%=self.config%>-<%=k%>"> <% self:render_children(k) %> <% if #self.optionals[k] > 0 or self.dynamic then %> <div class="cbi-optionals"> @@ -11,19 +14,19 @@ <input type="text" name="cbi.opt.<%=self.config%>.<%=k%>" /> <% else %> <select name="cbi.opt.<%=self.config%>.<%=k%>"> - <option><%:cbi_selopt *** Zusätzliche Parameter ***%></option> + <option><%:cbi_addopt -- Feld --%></option> <% for key, val in pairs(self.optionals[k]) do %> - <option value="<%=val.option%>"><%=val.title%></option> + <option id="cbi-<%=self.config.."-"..k.."-"..val.option%>" value="<%=val.option%>"><%=val.title%></option> + <% if #val.deps > 0 then %><script type="text/javascript"> + <% for j, d in ipairs(val.deps) do %>cbi_d_add("cbi-<%=self.config.."-"..k.."-"..val.option%>", "cbid.<%=self.config.."."..k.."."..d.field%>", "<%=d.value%>"); + <% end %> + </script><% end %> <% end %> </select> <% end %> - <input type="submit" value="<%:cbi_addopt Feld hinzufügen%>" /> + <input type="submit" value="<%:add hinzufügen%>" /> </div> <% end %> - <br /> - <% if self.addremove then %> - <input type="submit" name="cbi.rts.<%=self.config%>.<%=k%>" value="<%:cbi_del Eintrag entfernen%>" /> - <% end %> </fieldset> <br /> <% end %> diff --git a/src/ffluci/view/cbi/value.htm b/src/ffluci/view/cbi/value.htm index ae4cd0eb5..d027bb448 100644 --- a/src/ffluci/view/cbi/value.htm +++ b/src/ffluci/view/cbi/value.htm @@ -1,9 +1,12 @@ - <div class="cbi-value"> + <div class="cbi-value clear" id="cbi-<%=self.config.."-"..section.."-"..self.option%>"> <div class="cbi-value-title left"><%=self.title%></div> - <div class="cbi-value-description right"><%=self.description%></div> <div class="cbi-value-field"> - <input type="text" <% if self.size then %>size="<%=self.size%>" <% end %><% if self.maxlength then %>maxlength="<%=self.maxlength%>" <% end %>name="cbid.<%=self.config.."."..section.."."..self.option%>" value="<%=(self:cfgvalue(section) or "")%>" /> + <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%>" value="<%=(self:cfgvalue(section) or "")%>" /> + <div class="cbi-value-description inline"><%=self.description%></div> </div> - <div class="clear"></div> <% if self.tag_invalid[section] then %><div class="cbi-error"><%:cbi_invalid Fehler: Ungültige Eingabe%></div><% end %> - </div>
\ No newline at end of file + </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 %> |