* CBI: Changed parser to list UCI sections in order of their appearance
authorSteven Barth <steven@midlink.org>
Mon, 21 Apr 2008 21:27:53 +0000 (21:27 +0000)
committerSteven Barth <steven@midlink.org>
Mon, 21 Apr 2008 21:27:53 +0000 (21:27 +0000)
core/src/ffluci/cbi.lua
core/src/ffluci/model/uci.lua
core/src/ffluci/view/cbi/tsection.htm

index 7a50189992bb9198e59cea3b315af5a3511531d5..435977a1720e50c92ce0de0cfa4219f292e6fd42 100644 (file)
@@ -147,6 +147,7 @@ function Map.add(self, sectiontype)
        if name then
                self.ucidata[name] = {}
                self.ucidata[name][".type"] = sectiontype
+               table.insert(self.ucidata[".order"], name)
        end
        return name
 end
@@ -163,6 +164,7 @@ function Map.set(self, section, option, value)
                                self.ucidata[section] = {}
                        end
                        self.ucidata[section][".type"] = val
+                       table.insert(self.ucidata[".order"], section)
                end
        end
        return stat
@@ -360,10 +362,11 @@ end
 -- Return all matching UCI sections for this TypedSection
 function TypedSection.cfgsections(self)
        local sections = {}
-       for k, v in pairs(self.map:get()) do
-               if v[".type"] == self.sectiontype then
+       local map = self.map:get()
+       for i, k in pairs(map[".order"]) do
+               if map[k][".type"] == self.sectiontype then
                        if self:checkscope(k) then
-                               sections[k] = v
+                               table.insert(sections, k)
                        end
                end
        end
@@ -435,7 +438,7 @@ function TypedSection.parse(self)
                end             
        end
        
-       for k, v in pairs(self:cfgsections()) do
+       for i, k in ipairs(self:cfgsections()) do
                AbstractSection.parse_dynamic(self, k)
                if ffluci.http.formvalue("cbi.submit") then
                        Node.parse(self, k)
index 82865978076e6e6899071e1234554e1dd3ec47c0..0e3a79fcbe5e853fa00c4c354f62dfd08e558ff6 100644 (file)
@@ -161,23 +161,26 @@ function Session._uci3(self, cmd)
                return nil, res[1]
        end
 
-       table = {}
+       tbl = {}
 
        for k,line in pairs(res) do
                c, s, t = line:match("^([^.]-)%.([^.]-)=(.-)$")
                if c then
-                       table[c] = table[c] or {}
-                       table[c][s] = {}
-                       table[c][s][".type"] = t
+                       tbl[c] = tbl[c] or {}
+                       tbl[c][".order"] = tbl[c][".order"] or {}
+                       
+                       tbl[c][s] = {}
+                       table.insert(tbl[c][".order"], s)
+                       tbl[c][s][".type"] = t
                end
        
                c, s, o, v = line:match("^([^.]-)%.([^.]-)%.([^.]-)=(.-)$")
                if c then
-                       table[c][s][o] = v
+                       tbl[c][s][o] = v
                end
        end
        
-       return table
+       return tbl
 end
 
 -- Build path (config.section.option=value) and prevent command injection
index 8da0b4a1da0b44aac0157878811aeb5436ba65c6..666c14b2e61108708190d4192bcd6716284717c3 100644 (file)
@@ -1,7 +1,7 @@
                                <div class="cbi-section" id="cbi-<%=self.config%>-<%=self.sectiontype%>">
                                        <h2><%=self.title%></h2>
                                        <div class="cbi-section-descr"><%=self.description%></div>
-<% for k, v in pairs(self:cfgsections()) do%>
+<% for i, k in ipairs(self:cfgsections()) do%>
                                                <% if self.addremove then %><div class="cbi-section-remove right">
                                                        <input type="submit" name="cbi.rts.<%=self.config%>.<%=k%>" value="<%:cbi_del Eintrag entfernen%>" />
                                                </div><% end %>