Fix Save & Apply for lists
authorSteven Barth <steven@midlink.org>
Thu, 24 Sep 2009 16:40:32 +0000 (16:40 +0000)
committerSteven Barth <steven@midlink.org>
Thu, 24 Sep 2009 16:40:32 +0000 (16:40 +0000)
libs/cbi/luasrc/cbi.lua

index 33b0c7cb474914c2066d91143d7ff02d5a73e36a..23a5f01a56ba578c5ae95974eabaa8ec7b8b6200 100644 (file)
@@ -369,7 +369,7 @@ function Map.parse(self, readinput, ...)
                for i, config in ipairs(self.parsechain) do
                        self.uci:save(config)
                end
-               if self:submitstate() and not self.proceed and (self.flow.autoapply or luci.http.formvalue("cbi.apply")) then
+               if self:submitstate() and ((not self.proceed and self.flow.autoapply) or luci.http.formvalue("cbi.apply")) then
                        for i, config in ipairs(self.parsechain) do
                                self.uci:commit(config)
 
@@ -1330,6 +1330,22 @@ function AbstractValue.parse(self, section, novld)
        local fvalue = self:formvalue(section)
        local cvalue = self:cfgvalue(section)
 
+       -- If favlue and cvalue are both tables and have the same content
+       -- make them identical
+       if type(fvalue) == "table" and type(cvalue) == "table" then
+               local equal = #fvalue == #cvalue
+               if equal then
+                       for i=1, #fvalue do
+                               if cvalue[i] ~= fvalue[i] then
+                                       equal = false
+                               end
+                       end
+               end
+               if equal then
+                       fvalue = cvalue
+               end
+       end
+
        if fvalue and #fvalue > 0 then -- If we have a form value, write it to UCI
                fvalue = self:transform(self:validate(fvalue, section))
                if not fvalue and not novld then