luci-0.10: merge r6821 and r6822 (#199)
authorJo-Philipp Wich <jow@openwrt.org>
Sat, 12 Feb 2011 16:33:05 +0000 (16:33 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Sat, 12 Feb 2011 16:33:05 +0000 (16:33 +0000)
libs/web/luasrc/cbi.lua
libs/web/luasrc/view/cbi/fvalue.htm
modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua

index 8bb3488a7066c23d92328cc38050054268ac73dc..5dd57e2e969aa17dd8a39b01389409d66877e5c6 100644 (file)
@@ -51,6 +51,7 @@ AUTO = true
 CREATE_PREFIX = "cbi.cts."
 REMOVE_PREFIX = "cbi.rts."
 RESORT_PREFIX = "cbi.sts."
+FEXIST_PREFIX = "cbi.cbe."
 
 -- Loads a CBI map from given file, creating an environment and returns it
 function load(cbimap, ...)
@@ -1481,29 +1482,31 @@ function Flag.__init__(self, ...)
        AbstractValue.__init__(self, ...)
        self.template  = "cbi/fvalue"
 
-       self.enabled = "1"
+       self.enabled  = "1"
        self.disabled = "0"
+       self.default  = self.disabled
 end
 
 -- A flag can only have two states: set or unset
 function Flag.parse(self, section)
-       local fvalue = self:formvalue(section)
-
-       if fvalue then
-               fvalue = self.enabled
-       else
-               fvalue = self.disabled
-       end
+       local fexists = self.map:formvalue(
+               FEXIST_PREFIX .. self.config .. "." .. section .. "." .. self.option)
 
-       if fvalue == self.enabled or (not self.optional and not self.rmempty) then
-               if not(fvalue == self:cfgvalue(section)) then
+       if fexists then
+               local fvalue = self:formvalue(section) and self.enabled or self.disabled
+               if fvalue ~= self.default or (not self.optional and not self.rmempty) then
                        self:write(section, fvalue)
+               else
+                       self:remove(section)
                end
        else
                self:remove(section)
        end
 end
 
+function Flag.cfgvalue(self, section)
+       return AbstractValue.cfgvalue(self, section) or self.default
+end
 
 
 --[[
index 013c54e684f2a9a4c0ded5e45decc06341e02662..df96fe2c6f79ed38284048e32e982dc13884285a 100644 (file)
@@ -13,6 +13,9 @@ $Id$
 
 -%>
 <%+cbi/valueheader%>
+       <input type="hidden" value="1"<%=
+               attr("name", "cbi.cbe." .. self.config .. "." .. section .. "." .. self.option)
+       %> />
        <input class="cbi-input-checkbox" onclick="cbi_d_update(this.id)" onchange="cbi_d_update(this.id)" type="checkbox"<%=
                attr("id", cbid) .. attr("name", cbid) .. attr("value", self.enabled or 1) ..
                ifattr((self:cfgvalue(section) or self.default) == self.enabled, "checked", "checked")
index 30254b4b994c5f002026f3ccee2c2068071cc33a..57a58056fe0554cd3fcb4865d417ef3809112e3f 100644 (file)
@@ -398,10 +398,7 @@ if has_pptp or has_pppd or has_pppoe or has_pppoa or has_3g then
        defaultroute:depends("proto", "pppoe")
        defaultroute:depends("proto", "pptp")
        defaultroute:depends("proto", "3g")
-       defaultroute.rmempty = false
-       function defaultroute.cfgvalue(...)
-               return ( AbstractValue.cfgvalue(...) or '1' )
-       end
+       defaultroute.default = defaultroute.enabled
 
        peerdns = s:taboption("ppp", Flag, "peerdns",
         translate("Use peer DNS"),
@@ -412,10 +409,7 @@ if has_pptp or has_pppd or has_pppoe or has_pppoa or has_3g then
        peerdns:depends("proto", "pppoe")
        peerdns:depends("proto", "pptp")
        peerdns:depends("proto", "3g")
-       peerdns.rmempty = false
-       function peerdns.cfgvalue(...)
-               return ( AbstractValue.cfgvalue(...) or '1' )
-       end
+       peerdns.default = peerdns.enabled
 
        if has_ipv6 then
                ipv6 = s:taboption("ppp", Flag, "ipv6", translate("Enable IPv6 on PPP link") )
@@ -573,11 +567,7 @@ if has_dnsmasq then
                translate("Dynamic <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr>"),
                translate("Dynamically allocate DHCP addresses for clients. If disabled, only " ..
                        "clients having static leases will be served."))
-
-       dd.rmempty = false
-       function dd.cfgvalue(self, section)
-               return Flag.cfgvalue(self, section) or "1"
-       end
+       dd.default = dd.enabled
 
        s:taboption("advanced", Flag, "force", translate("Force"),
                translate("Force DHCP on this network even if another server is detected."))