CBI: Fix subdependencies
[project/luci.git] / libs / cbi / luasrc / cbi.lua
index 7c20129be8a1a64404a67b638fefda8a1aa6e087..f6a2694b2ca3fa9664291aa6813d0a7eb2e72e99 100644 (file)
@@ -74,8 +74,7 @@ function load(cbimap, ...)
 
        assert(func, err)
 
-       luci.i18n.loadc("cbi")
-       luci.i18n.loadc("uvl")
+       luci.i18n.loadc("base")
 
        local env = {
                translate=i18n.translate,
@@ -222,22 +221,6 @@ function Node.__init__(self, title, description)
        self.template = "cbi/node"
 end
 
--- i18n helper
-function Node._i18n(self, config, section, option, title, description)
-
-       -- i18n loaded?
-       if type(luci.i18n) == "table" then
-
-               local key = config and config:gsub("[^%w]+", "") or ""
-
-               if section then key = key .. "_" .. section:lower():gsub("[^%w]+", "") end
-               if option  then key = key .. "_" .. tostring(option):lower():gsub("[^%w]+", "")  end
-
-               self.title = title or luci.i18n.translate( key, option or section or config )
-               self.description = description or luci.i18n.translate( key .. "_desc", "" )
-       end
-end
-
 -- hook helper
 function Node._run_hooks(self, ...)
        local f
@@ -313,7 +296,6 @@ Map = class(Node)
 
 function Map.__init__(self, config, ...)
        Node.__init__(self, ...)
-       Node._i18n(self, config, nil, nil, ...)
 
        self.config = config
        self.parsechain = {self.config}
@@ -369,6 +351,7 @@ end
 -- Use optimized UCI writing
 function Map.parse(self, readinput, ...)
        self.readinput = (readinput ~= false)
+       self:_run_hooks("on_parse")
 
        if self:formvalue("cbi.skip") then
                self.state = FORM_SKIP
@@ -689,6 +672,10 @@ function SimpleForm.parse(self, readinput, ...)
                return FORM_SKIP
        end
 
+       if self:formvalue("cbi.cancel") and self:_run_hooks("on_cancel") then
+               return FORM_DONE
+       end
+
        if self:submitstate() then
                Node.parse(self, 1, ...)
        end
@@ -842,9 +829,6 @@ function AbstractSection.option(self, class, option, ...)
 
        if instanceof(class, AbstractValue) then
                local obj  = class(self.map, self, option, ...)
-
-               Node._i18n(obj, self.config, self.section or self.sectiontype, option, ...)
-
                self:append(obj)
                self.fields[option] = obj
                return obj
@@ -1059,7 +1043,6 @@ NamedSection = class(AbstractSection)
 
 function NamedSection.__init__(self, map, section, stype, ...)
        AbstractSection.__init__(self, map, stype, ...)
-       Node._i18n(self, map.config, section, nil, ...)
 
        -- Defaults
        self.addremove = false
@@ -1124,7 +1107,6 @@ TypedSection = class(AbstractSection)
 
 function TypedSection.__init__(self, map, type, ...)
        AbstractSection.__init__(self, map, type, ...)
-       Node._i18n(self, map.config, type, nil, ...)
 
        self.template  = "cbi/tsection"
        self.deps = {}
@@ -1283,6 +1265,7 @@ function AbstractValue.__init__(self, map, section, option, ...)
        self.tag_reqerror = {}
        self.tag_error = {}
        self.deps = {}
+       self.subdeps = {}
        --self.cast = "string"
 
        self.track_missing = false
@@ -1613,7 +1596,7 @@ function ListValue.value(self, key, val, ...)
        table.insert(self.vallist, tostring(val))
 
        for i, deps in ipairs({...}) do
-               table.insert(self.deps, {add = "-"..key, deps=deps})
+               self.subdeps[#self.subdeps + 1] = {add = "-"..key, deps=deps}
        end
 end