Merge pull request #1735 from sumpfralle/olsr-jsoninfo-parser-handle-empty-result
[oweals/luci.git] / applications / luci-app-travelmate / luasrc / view / travelmate / stations.htm
index 41c9f5267da1112b6526bf460355a4e5bddf0d69..5c28966339e1e821d76a2d3bb062e2d449cb318e 100644 (file)
 <%#
-Copyright 2017 Dirk Brenken (dev@brenken.org)
+Copyright 2017-2018 Dirk Brenken (dev@brenken.org)
 This is free software, licensed under the Apache License, Version 2.0
 -%>
 
 <%-
-  local write = io.write
-  local uci = require "luci.model.uci".cursor()
-  local trmiface = uci:get("travelmate", "global", "trm_iface") or "trm_wwan"
+       local uci      = require("luci.model.uci").cursor()
+       local trmiface = uci:get("travelmate", "global", "trm_iface") or "trm_wwan"
 -%>
 
 <%+header%>
 
+<script type="text/javascript">
+//<![CDATA[
+       function status_update(json)
+       {
+               var i;
+               var j;
+               var search;
+               var view;
+               var list;
+               var status = json.data.travelmate_status;
+               var faulty = json.data.faulty_stations;
+
+               if (faulty)
+               {
+                       var faulty_array = faulty.split(' ');
+                       for (i = 0; i < faulty_array.length; i++)
+                       {
+                               for (j = 1; j <= 5; j++)
+                               {
+                                       search = j + "_" + faulty_array[i];
+                                       view   = document.getElementById(search);
+                                       if (view)
+                                       {
+                                               view.setAttribute("name", "station_nok");
+                                               view.setAttribute("style", "text-align: left !important; color: #a22; font-weight: bold");
+                                       }
+                               }
+                       }
+               }
+               else
+               {
+                       list = document.getElementsByName("station_nok");
+                       if (list.length > 0)
+                       {
+                               for (i = 0; i < list.length; i++)
+                               {
+                                       list[i].removeAttribute("style");
+                               }
+                       }
+               }
+
+               if (status.startsWith("connected"))
+               {
+                       for (i = 1; i <= 5; i++)
+                       {
+                               search = i + "_" + json.data.station_id;
+                               view   = document.getElementById(search);
+                               if (view)
+                               {
+                                       view.setAttribute("style", "text-align: left !important; color: #37c; font-weight: bold");
+                               }
+                       }
+               }
+               else
+               {
+                       list = document.getElementsByName("station_ok");
+                       if (list.length > 0)
+                       {
+                               for (i = 0; i < list.length; i++)
+                               {
+                                       list[i].removeAttribute("style");
+                               }
+                       }
+               }
+       }
+
+       XHR.get('<%=luci.dispatcher.build_url("admin", "services", "travelmate", "status")%>', null,
+       function(x, json_info)
+       {
+               if (!x || !json_info)
+               {
+                       return;
+               }
+               status_update(json_info)
+       });
+
+       XHR.poll(-1, '<%=luci.dispatcher.build_url("admin", "services", "travelmate", "status")%>', null,
+       function(x, json_info)
+       {
+               if (!x || !json_info)
+               {
+                       return;
+               }
+               status_update(json_info)
+       });
+//]]>
+</script>
+
 <div class="cbi-map">
-<h2 name="content"><%:Wireless Stations%></h2>
-<div class="cbi-map-descr">
-  <%=translatef("Provides an overview of all configured uplinks for the travelmate interface (%s). You can edit, delete or re-order existing uplinks or scan for a new one. The currently used uplink is emphasized in blue.", trmiface)%>
-</div>
+       <div class="cbi-map-descr">
+               <%=translatef("Provides an overview of all configured uplinks for the travelmate interface (%s). You can edit, delete or re-order existing uplinks or scan for a new one. The currently used uplink is emphasized in blue, faulty stations in red.", trmiface)%>
+       </div>
 
-<fieldset class="cbi-section">
-  <table class="cbi-section-table" style="empty-cells:hide">
-    <tr class="cbi-section-table-titles">
-      <th class="cbi-section-table-cell" style="text-align:left"><%:Device%></th>
-      <th class="cbi-section-table-cell" style="text-align:left"><%:SSID%></th>
-      <th class="cbi-section-table-cell" style="text-align:left"><%:Encryption%></th>
-      <th class="cbi-section-table-cell" style="text-align:center" colspan="2"><%:Actions%></th>
-    </tr>
-<%
-  uci:foreach("wireless", "wifi-iface", function(s)
-    local iface = s.network or ""
-    if iface == trmiface then
-      local section = s['.name']
-      local device = s.device or ""
-      local mode = s.mode or ""
-      local ssid = s.ssid or ""
-      local encryption = s.encryption or ""
-      local disabled = s.disabled or ""
-      local style = "color:#000000"
-      if disabled == "0" then
-        style = "color:#0069d6;font-weight:bold"
-      end
-%>
-    <tr class="cbi-section-table-row cbi-rowstyle-1" style="<%=style%>">
-      <td style="text-align:left"><%=device%></td>
-      <td style="text-align:left"><%=ssid%></td>
-      <td style="text-align:left"><%=encryption%></td>
-      <td class="cbi-value-field" style="width:70px;text-align:right">
-        <input class="cbi-button cbi-button-up" type="button" value="" onclick="location.href='<%=url('admin/services/travelmate/wifiorder')%>?cfg=<%=section%>;dir=up'" alt="<%:Move up%>" title="<%:Move up%>"/>
-        <input class="cbi-button cbi-button-down" type="button" value="" onclick="location.href='<%=url('admin/services/travelmate/wifiorder')%>?cfg=<%=section%>;dir=down'" alt="<%:Move down%>" title="<%:Move down%>"/>
-      </td>
-      <td class="cbi-value-field" style="width:150px;text-align:right">
-        <input type="button" class="cbi-button cbi-button-edit" onclick="location.href='<%=url('admin/services/travelmate/wifiedit')%>?cfg=<%=section%>'" title="<%:Edit this Uplink%>" value="<%:Edit%>"/>
-        <input type="button" class="cbi-button cbi-button-remove" onclick="location.href='<%=url('admin/services/travelmate/wifidelete')%>?cfg=<%=section%>'" title="<%:Delete this Uplink%>" value="<%:Delete%>"/>
-      </td>
-    </tr>
-<%
-    end
-  end)
-%>
-  </table>
-</fieldset>
-<div class="cbi-page-actions right">
-<%
-  uci:foreach("wireless", "wifi-device", function(s)
-    local device = s[".name"]
-%>
-  <form class="inline" action="<%=url('admin/services/travelmate/wifiscan')%>" method="post">
-    <input type="hidden" name="device" value="<%=device%>"/>
-    <input type="hidden" name="token" value="<%=token%>"/>
-    <input type="submit" class="cbi-button cbi-button-find" title="<%:Find and join network on %><%=device%>" value="<%:Scan %><%=device%>"/>
-  </form>
-<%
-  end)
-%>
-</div>
+       <div class="cbi-section">
+               <div class="table cbi-section-table">
+                       <div class="tr cbi-section-table-titles">
+                               <div class="th left"><%:Device%></div>
+                               <div class="th left"><%:SSID%></div>
+                               <div class="th left"><%:BSSID%></div>
+                               <div class="th left"><%:Encryption%></div>
+                               <div class="th center"><%:Action%></div>
+                       </div>
+                       <%- uci:foreach("wireless", "wifi-iface", function(s)
+                                       local iface = s.network or ""
+                                       if iface == trmiface then
+                                               local section = s['.name'] or ""
+                                               local device  = s.device or "-"
+                                               local ssid    = s.ssid or "-"
+                                               local bssid   = s.bssid or "-"
+                                               local encr    = s.encryption or "-"
+                       -%>
+                       <div class="tr cbi-section-table-row cbi-rowstyle-1" name="station_ok" id="1_<%=device%>/<%=ssid%>/<%=bssid%>">
+                               <div class="td left" style="text-align: left !important" name="station_ok" id="2_<%=device%>/<%=ssid%>/<%=bssid%>"><%=device%></div>
+                               <div class="td left" style="text-align: left !important" name="station_ok" id="3_<%=device%>/<%=ssid%>/<%=bssid%>"><%=ssid%></div>
+                               <div class="td left" style="text-align: left !important" name="station_ok" id="4_<%=device%>/<%=ssid%>/<%=bssid%>"><%=bssid%></div>
+                               <div class="td left" style="text-align: left !important" name="station_ok" id="5_<%=device%>/<%=ssid%>/<%=bssid%>"><%=encr%></div>
+                               <div class="td middle cbi-section-actions">
+                                       <div>
+                                               <input class="cbi-button cbi-button-up" type="button" value="<%:Up%>" onclick="location.href='<%=luci.dispatcher.build_url('admin/services/travelmate/wifiorder')%>?cfg=<%=section%>&amp;dir=up'" alt="<%:Move up%>" title="<%:Move up%>" />
+                                               <input class="cbi-button cbi-button-down" type="button" value="<%:Down%>" onclick="location.href='<%=luci.dispatcher.build_url('admin/services/travelmate/wifiorder')%>?cfg=<%=section%>&amp;dir=down'" alt="<%:Move down%>" title="<%:Move down%>" />
+                                               <input class="cbi-button cbi-button-edit" type="button" value="<%:Edit%>" onclick="location.href='<%=luci.dispatcher.build_url('admin/services/travelmate/wifiedit')%>?cfg=<%=section%>'" title="<%:Edit this Uplink%>" />
+                                               <input class="cbi-button cbi-button-remove" type="button" value="<%:Delete%>" onclick="location.href='<%=luci.dispatcher.build_url('admin/services/travelmate/wifidelete')%>?cfg=<%=section%>'" title="<%:Delete this Uplink%>" />
+                                       </div>
+                               </div>
+                       </div>
+               <%- end; end) -%>
+               </div>
+       </div>
+       <div class="cbi-page-actions right">
+               <%- uci:foreach("wireless", "wifi-device", function(s)
+                       local device = s[".name"]
+                       local hwmode = s.hwmode or "-" -%>
+               <form class="inline" action="<%=luci.dispatcher.build_url('admin/services/travelmate/wifiscan')%>" method="post">
+                       <input type="hidden" name="device" value="<%=device%>" />
+                       <input type="hidden" name="token" value="<%=token%>" />
+                       <input type="submit" class="cbi-button cbi-button-action important" title="<%:Find and join network on%> <%=device%>" value="<%:Scan%> <%=device%> (<%=hwmode%>)" />
+               </form>
+               <%- end) -%>
+       </div>
 </div>
 
 <%+footer%>