applications/luci-olsr-services: Fix rowstyle, add proto and cleanups
authorManuel Munz <freifunk@somakoma.de>
Sun, 13 Nov 2011 12:14:39 +0000 (12:14 +0000)
committerManuel Munz <freifunk@somakoma.de>
Sun, 13 Nov 2011 12:14:39 +0000 (12:14 +0000)
applications/luci-olsr-services/luasrc/view/freifunk-services/services.htm

index 3b6a523d01997354391f3aa448d74fdf583ea918..2928b854d1273cc7434616a669a4a99362109ece 100644 (file)
@@ -14,66 +14,67 @@ You may obtain a copy of the License at
 <%
 local fs  = require "luci.fs"
 local utl = require "luci.util"
+local last_update
 local i = 1
-
--- check if nameservice plugin is enabled and where to find the services file
+local rawdata
+local services_file_empty
 local has_services = false
-
 local uci = require "luci.model.uci".cursor()
+
 uci:foreach("olsrd", "LoadPlugin", function(s)
        if s.library == "olsrd_nameservice.so.0.3" then
                if s.services_file and fs.access(s.services_file) then
                        has_services = true
-                       services_file = s.services_file
+                       rawdata = fs.readfile(s.services_file)
+                       
                else
                        if fs.access("/var/run/services_olsr") then
                                has_services = true
-                               services_file = "/var/run/services_olsr"
+                               rawdata = fs.readfile("/var/run/services_olsr")
                        end
                end
+               if rawdata and #rawdata == 0 then
+                       services_file_empty = true
+               end
        end
 end)
 
-function fetch_services()
-       local rawdata = fs.readfile(services_file)
-
-       if #rawdata == 0 then
-               return nil
-       end
 
-       local data = {}
+if not has_services or services_file_empty then
+%>
+       <%+header%>
+       <br />
+       <%:No services can be shown, because olsrd is not running or the olsrd-nameservice Plugin is not loaded.%>
+       <%+footer%>
+<%
+       return
+end
 
+function fetch_services()
        local tables = utl.split(utl.trim(rawdata), "\n", nil, true)
-       -- remove the first 3 lines
-       table.remove(tables,1)
-       table.remove(tables,1)
-       table.remove(tables,1)
+       -- remove first 3 lines
+       for i = 1,3 do
+               table.remove(tables,1)
+       end
 
         -- store last line in last_update and remove it, then remove another empty line at the end
         last_update=table.remove(tables)
        table.remove(tables)
-
-       for i, tbl in ipairs(tables) do
-               local lines = utl.split(tbl, "\n", nil, true)
-       end
-       
        return tables
 end
-local table = fetch_services()
+local services = fetch_services()
 
 if luci.http.formvalue("status") == "1" then
        local rv = {}
-       for k, line in ipairs(table) do
+       for k, line in ipairs(services) do
                local field = utl.split(line, "[#|]", split, true)
-               local url,descr,origin = pcdata(field[1]),pcdata(field[3]),pcdata(field[4])
-               local rs = i
+               local url, proto, descr, origin = pcdata(field[1]), pcdata(field[2]), utl.trim(pcdata(field[3])), pcdata(field[4])
                rv[#rv+1] = {
                        url = url,
+                       proto = proto,
                        origin = origin,
                        descr = descr,
-                       rs = rs
                        }
-               if i == 1 then i = 0 elseif i == 0 then i = 1 end
        end
        luci.http.prepare_content("application/json")
        luci.http.write_json(rv)
@@ -82,8 +83,6 @@ end
 
 %>
 
-<% if has_services then %>
-
 <%+header%>
 
 <script type="text/javascript" src="<%=resource%>/cbi.js"></script>
@@ -100,11 +99,12 @@ end
                                {
                                var service = info[idx];
                                s += String.format(
-                                       '<tr class="cbi-section-table-row cbi-rowstyle-%s">' +
+                                       '<tr class="cbi-section-table-row cbi-rowstyle-'+(1 + (idx % 2))+'">' +
                                                '<td class="cbi-section-table-cell"><a href="%s">%s</a></td>' +
                                                '<td class="cbi-section-table-cell">%s</td>' +
+                                               '<td class="cbi-section-table-cell"><a href="http://%s/cgi-bin-status.html">%s</a></td>' +
                                        '</tr>',
-                                       service.rs, service.url, service.descr,  service.origin || '?'
+                                       service.url, service.descr, service.proto, service.origin, service.origin || '?'
                                        );
                                }
                                tbody.innerHTML = s;
@@ -121,34 +121,33 @@ end
        <fieldset class="cbi-section">
        <legend><%:Internal services%></legend>
        <table class="cbi-section-table">
-               <tr class="cbi-section-table-titles">
-                       <th class="cbi-section-table-cell"><%:Url%></th>
-                       <th class="cbi-section-table-cell"><%:Source%></th>
-               </tr>
+               <thead>
+                       <tr class="cbi-section-table-titles">
+                               <th class="cbi-section-table-cell"><%:Url%></th>
+                               <th class="cbi-section-table-cell"><%:Protocol%></th>
+                               <th class="cbi-section-table-cell"><%:Source%></th>
+                       </tr>
+               </thead>
 
                <tbody id="olsr_services">
        <%
-               for k, line in ipairs(table) do
+               for k, line in ipairs(services) do
                        local field = {}
                        -- split line at # and |, 1=url, 2=proto, 3=description, 4=source
                        local field = utl.split(line, "[#|]", split, true)
-                       local url,descr,origin = pcdata(field[1]),pcdata(field[3]),pcdata(field[4])
+                       local url, proto, descr, origin = pcdata(field[1]), pcdata(field[2]), utl.trim(pcdata(field[3])), pcdata(field[4])
                        %>
 
                        <tr class="cbi-section-table-row cbi-rowstyle-<%=i%>">
                                <td class="cbi-section-table-cell"><a href="<%=url%>"><%=descr%></a></td>
-                               <td class="cbi-section-table-cell"><%=origin%></td>
+                               <td class="cbi-section-table-cell"><%=proto%></td>
+                               <td class="cbi-section-table-cell"><a href="http://<%=origin%>/cgi-bin-status.html"><%=origin%></a></td>
                </tr>
-                       <% if i == 1 then i = 0 elseif i == 0 then i = 1 end
+                       <% i = ((i % 2) + 1)
                end %>
                </tbody>
        </table>
        <br />
        <%=last_update%>
        </fieldset>
-
-<%else%>
-       <%:No services can be shown, because olsrd is not running or the olsrd-nameservice Plugin is not loaded.%>
-<%end%>
-
 <%+footer%>