cbi: Increare responsiveness of "Save & Apply"
[project/luci.git] / libs / cbi / luasrc / cbi.lua
index b00ccf8d2ab69b69c2bee4e0c4a56996fd563e8d..09ba553ec2f0f985b6ef8d6717bf2c8e306cf4ab 100644 (file)
@@ -211,6 +211,7 @@ function Map.__init__(self, config, ...)
        self.config = config
        self.parsechain = {self.config}
        self.template = "cbi/map"
+       self.apply_on_parse = nil
        self.uci = uci.cursor()
        self.save = true
        if not self.uci:load(self.config) then
@@ -252,7 +253,14 @@ function Map.parse(self, ...)
                                -- Refresh data because commit changes section names
                                self.uci:load(config)
                        end
-                       self.uci:apply(self.parsechain)
+                       if self.apply_on_parse then
+                               self.uci:apply(self.parsechain)
+                       else
+                               self._apply = function()
+                                       local cmd = self.uci:apply(self.parsechain, true)
+                                       return io.popen(cmd)
+                               end
+                       end
 
                        -- Reparse sections
                        Node.parse(self, ...)
@@ -264,6 +272,15 @@ function Map.parse(self, ...)
        end
 end
 
+function Map.render(self, ...)
+       Node.render(self, ...)
+       if self._apply then
+               local fp = self._apply()
+               fp:read("*a")
+               fp:close()
+       end
+end
+
 -- Creates a child section
 function Map.section(self, class, ...)
        if instanceof(class, AbstractSection) then