luci-0.10: olsr-services: Merge r7908 and r7926
authorManuel Munz <freifunk@somakoma.de>
Tue, 6 Mar 2012 18:13:02 +0000 (18:13 +0000)
committerManuel Munz <freifunk@somakoma.de>
Tue, 6 Mar 2012 18:13:02 +0000 (18:13 +0000)
applications/luci-olsr-services/luasrc/view/freifunk-services/services.htm

index c9385cd..2928b85 100644 (file)
-<%+header%>
+<%#
+LuCI - Lua Configuration Interface
+
+Copyright 2011 Manuel Munz <freifunk at somakoma dot de>
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+-%>
 
 <%
 local fs  = require "luci.fs"
 local utl = require "luci.util"
-
--- check if nameservice plugin is enabled and where to find the services file
+local last_update
+local i = 1
+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)
+       return tables
+end
+local services = fetch_services()
 
-       for i, tbl in ipairs(tables) do
-               local lines = utl.split(tbl, "\n", nil, true)
+if luci.http.formvalue("status") == "1" then
+       local rv = {}
+       for k, line in ipairs(services) do
+               local field = utl.split(line, "[#|]", split, true)
+               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,
+                       }
        end
-       
-       return tables
+       luci.http.prepare_content("application/json")
+       luci.http.write_json(rv)
+       return
 end
+
 %>
 
-<% if has_services then %>
-<div class="cbi-map">
+<%+header%>
+
+<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
+<script type="text/javascript">//<![CDATA[
+
+       XHR.poll(10 , '<%=REQUEST_URI%>', { status: 1 },
+               function(x, info)
+               {
+               var tbody = document.getElementById('olsr_services');
+                       if (tbody)
+                       {
+                               var s = '';
+                               for (var idx = 0; idx < info.length; idx++)
+                               {
+                               var service = info[idx];
+                               s += String.format(
+                                       '<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.url, service.descr, service.proto, service.origin, service.origin || '?'
+                                       );
+                               }
+                               tbody.innerHTML = s;
+                       }
+               }
+       );
+//]]></script>
+       
+
+
+
        <h2><a id="content" name="content"><%:Services%></a></h2>
-       <div class="cbi-map-descr"/>
-                <div class="cbi-section">
-                        <div class="cbi-section-node">
-                                <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>
-
-       <% table=fetch_services()
-       local i = 1
-       for k, line in ipairs(table) 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])
-               %>
-                                       <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>
-                                       </tr>
-       <% if i == 1 then i = 0 elseif i == 0 then i = 1 end %>
-       <%end%>
-                               </table>
-                       </div>
-               </div>
-       </div>
-       <br />
-       <%=last_update%>
 
-<%else%>
-       <%:No services can be shown, because olsrd is not running or the olsrd-nameservice Plugin is not loaded.%>
-<%end%>
+       <fieldset class="cbi-section">
+       <legend><%:Internal services%></legend>
+       <table class="cbi-section-table">
+               <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(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, 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"><%=proto%></td>
+                               <td class="cbi-section-table-cell"><a href="http://<%=origin%>/cgi-bin-status.html"><%=origin%></a></td>
+               </tr>
+                       <% i = ((i % 2) + 1)
+               end %>
+               </tbody>
+       </table>
+       <br />
+       <%=last_update%>
+       </fieldset>
 <%+footer%>