+SimpleSection = class(AbstractSection)
+
+function SimpleSection.__init__(self, form, ...)
+ AbstractSection.__init__(self, form, nil, ...)
+ self.template = "cbi/nullsection"
+end
+
+
+Table = class(AbstractSection)
+
+function Table.__init__(self, form, data, ...)
+ local datasource = {}
+ datasource.config = "table"
+ self.data = data
+
+ function datasource.get(self, section, option)
+ return data[section] and data[section][option]
+ end
+
+ function datasource.del(...)
+ return true
+ end
+
+ AbstractSection.__init__(self, datasource, "table", ...)
+ self.template = "cbi/tblsection"
+ self.rowcolors = true
+ self.anonymous = true
+end
+
+function Table.parse(self)
+ for i, k in ipairs(self:cfgsections()) do
+ if luci.http.formvalue("cbi.submit") then
+ Node.parse(self, k)
+ end
+ end
+end
+
+function Table.cfgsections(self)
+ local sections = {}
+
+ for i, v in luci.util.kspairs(self.data) do
+ table.insert(sections, i)
+ end
+
+ return sections
+end
+
+