libs/cbi: don't run apply on render, this is a quick hack and will be reworked soon
[project/luci.git] / libs / cbi / luasrc / cbi.lua
index cc22229..8dd16b1 100644 (file)
@@ -165,7 +165,7 @@ end
 function Node._run_hook(self, hook)
        if type(self[hook]) == "function" then
                return self[hook](self)
-       end 
+       end
 end
 
 function Node._run_hooks(self, ...)
@@ -356,7 +356,7 @@ end
 function Map.render(self, ...)
        self:_run_hooks("on_init")
        Node.render(self, ...)
-       if self._apply then
+       if false and self._apply then
                local fp = self._apply()
                fp:read("*a")
                fp:close()
@@ -514,7 +514,7 @@ function Delegator.parse(self, ...)
                        return FORM_DONE
                end
        end
-       
+
        if not Map.formvalue(self, "cbi.delg.current") then
                self:_run_hooks("on_init")
        end
@@ -524,11 +524,11 @@ function Delegator.parse(self, ...)
        self.current = self.current or self:get_active()
        self.active = self.active or self:get(self.current)
        assert(self.active, "Invalid state")
-       
+
        local stat = FORM_DONE
        if type(self.active) ~= "function" then
                self.active:populate_delegator(self)
-               stat = self.active:parse() 
+               stat = self.active:parse()
        else
                self:active()
        end
@@ -542,11 +542,11 @@ function Delegator.parse(self, ...)
        elseif stat < FORM_PROCEED then
                return stat
        end
-       
+
 
        if not Map.formvalue(self, "cbi.submit") then
                return FORM_NODATA
-       elseif stat > FORM_PROCEED 
+       elseif stat > FORM_PROCEED
        and (not newcurrent or not self:get(newcurrent)) then
                return self:_run_hook("on_done") or FORM_DONE
        else
@@ -764,6 +764,11 @@ function AbstractSection.tab(self, tab, title, desc)
        }
 end
 
+-- Check whether the section has tabs
+function AbstractSection.has_tabs(self)
+       return (self.tabs ~= nil) and (next(self.tabs) ~= nil)
+end
+
 -- Appends a new option
 function AbstractSection.option(self, class, option, ...)
        if instanceof(class, AbstractValue) then
@@ -813,7 +818,7 @@ function AbstractSection.parse_optionals(self, section)
 
        local field = self.map:formvalue("cbi.opt."..self.config.."."..section)
        for k,v in ipairs(self.children) do
-               if v.optional and not v:cfgvalue(section) and not next(self.tabs) then
+               if v.optional and not v:cfgvalue(section) and not self:has_tabs() then
                        if field == v.option then
                                field = nil
                                self.map.proceed = true
@@ -1259,7 +1264,7 @@ function AbstractValue.parse(self, section, novld)
                                table.insert(self.section.error[section], "invalid")
                        else
                                self.section.error = {[section] = {"invalid"}}
-                       end 
+                       end
                        self.map.save = false
                end
                if fvalue and not (fvalue == cvalue) then
@@ -1290,7 +1295,7 @@ end
 
 -- Render if this value exists or if it is mandatory
 function AbstractValue.render(self, s, scope)
-       if not self.optional or next(self.section.tabs) or self:cfgvalue(s) or self:formcreated(s) then
+       if not self.optional or self.section:has_tabs() or self:cfgvalue(s) or self:formcreated(s) then
                scope = scope or {}
                scope.section   = s
                scope.cbid      = self:cbid(s)