]> www.average.org Git - loctrkd.git/blobdiff - webdemo/index.html
webdemo: use flexbox css
[loctrkd.git] / webdemo / index.html
index fb7ab390131cace68396670d3bb05096399259c9..20beb34c86f0c9a1239ecf993252b0b0ea7ec080 100644 (file)
@@ -1,6 +1,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
 <head>
 <title>Location</title>
+<!-- This uses reeeally old 2.13.1 from 2013, also part of Debian distro -->
 <script src="http://www.openlayers.org/api/OpenLayers.js">
 </script>
 <script src="https://www.openstreetmap.org/openlayers/OpenStreetMap.js">
        const urlParams = new URLSearchParams(window.location.search);
        const qimei = urlParams.get("imei");
 
-       const ourl = new URL(window.location);
-       const wsproto = ourl.protocol === "https" ? "wss" : "ws";
-       const wshost = ourl.hostname ? ourl.hostname : "localhost";
-       const wsport = ourl.port ? ourl.port : 5049;
+       const wsproto = window.location.protocol === "https" ? "wss" : "ws";
+       const wshost = window.location.hostname ? window.location.hostname
+                                               : "localhost";
+       const wsport = window.location.port ? window.location.port : 5049;
+       const limei = window.location.pathname.substring(1)
 
        const imeis = new Set();
        const locations = new Array();
        const maxmarkers = 5;
+       const lineStyle = {
+               strokeColor: '#0000ff',
+               strokeOpacity: 0.5,
+               strokeWidth: 5
+       };
 
        var sts;
        var ws;
@@ -25,6 +32,7 @@
        var subslist;
        var tstamp;
        var map;
+       var line;
        var markers;
        var icon;
 
                send = document.getElementById("send");
                clear = document.getElementById("clear");
                subslist = document.getElementById("subslist");
+               devstatus = document.getElementById("devstatus");
                tstamp = document.getElementById("tstamp");
                if (qimei) {
                        imei.value = qimei;
+               } else if (limei) {
+                       imei.value = limei;
                }
                open_ws();
        }
                layerCycleMap =
                  new OpenLayers.Layer.OSM.CycleMap("CycleMap");
                map.addLayer(layerCycleMap);
+               line =
+                 new OpenLayers.Layer.Vector("Line Layer");
+               map.addLayer(line);
+               map.addControl(new
+                 OpenLayers.Control.DrawFeature(line,
+                                 OpenLayers.Handler.Path));
                markers =
                  new OpenLayers.Layer.Markers("Markers");
                map.addLayer(markers);
                }
                console.log("new marker list " + JSON.stringify(locations));
                tstamp.innerHTML = msg.timestamp;
-               var lonLat;
-               // TODO: figure how to have multiple markers and/or track
-               for (const loc of locations) {
-                       lonLat = new OpenLayers.LonLat(+loc.longitude,
-                                         +loc.latitude).transform(
-                           new OpenLayers.Projection("EPSG:4326"),
-                             map.getProjectionObject());
-                       markers.addMarker(new OpenLayers.Marker(lonLat,icon));
+               // Draw a line between backlog locations
+               for (var i = 1; i < locations.length; i++) {
+                       const p0 =
+                         new OpenLayers.Geometry.Point(
+                               locations[i-1].longitude,
+                               locations[i-1].latitude)
+                             .transform(new OpenLayers.Projection("EPSG:4326"),
+                                            map.getProjectionObject());
+                       const p1 =
+                         new OpenLayers.Geometry.Point(
+                               locations[i].longitude,
+                               locations[i].latitude)
+                             .transform(new OpenLayers.Projection("EPSG:4326"),
+                                            map.getProjectionObject());
+                       const leg =
+                         new OpenLayers.Geometry.LineString([p0, p1]);
+                       const lineFeature =
+                         new OpenLayers.Feature.Vector(leg, null, lineStyle);
+                       line.addFeatures([lineFeature]);
+
                }
-               map.setCenter(lonLat, 16);
+               // Set marker at the reported (last) location
+               const lonLat = new OpenLayers.LonLat(+msg.longitude,
+                                 +msg.latitude).transform(
+                   new OpenLayers.Projection("EPSG:4326"),
+                     map.getProjectionObject());
+               markers.addMarker(new OpenLayers.Marker(lonLat, icon));
+               map.setCenter(lonLat, 14);
+       }
+       function display_status(msg) {
+               console.log("status " + JSON.stringify(msg));
+               devstatus.innerHTML = "BAT: " + msg.battery;
        }
 
        function open_ws() {
                imei.disabled = false;
                send.disabled = false;
                clear.disabled = false;
+               locations.splice(0);
                sendIMEI();
        }
        function ws_onmessage(event) {
                console.log("message " + event.data);
-               set_marker(JSON.parse(event.data));
+               msg = JSON.parse(event.data);
+               if (msg.type === "location") {
+                       set_marker(msg);
+               } else if (msg.type === "status") {
+                       display_status(msg);
+               }
+
        }
        function ws_onerror(event) {
                console.log("error " + event);
 </script>
 
 </head>
-<body onload="init();">
-       <div style="width:100%; height:2%" id="hdr">
+<body onload="init();" style="height: 100%; margin: 0; display: flex;
+                               flex-direction: column; font-size: 2.0vh;">
+       <div style="margin: 0;" id="hdr">
                <input id="imei" type="text" name="imei"
                 size="16" maxlength="16" placeholder="Enter IMEI"
                 autocomplete="off" onkeyup="handleKey(event)">
                <input type="button" id="clear" name="clear" value="Clear"
                 onclick="sendIMEI(true)" disabled>
                <span id="subslist"></span>
-               <span id="tstamp" style="float:right"></span>
        </div>
-       <div style="width:100%; height:97%" id="map"></div>
-       <div style="width:100%; height:1%" id="sts"></div>
+       <div style="flex-grow: 1;" id="map"></div>
+       <div style="display: flex; flex-direction: row; width: 100%;">
+               <div id="sts" style="flex: none;"></div>
+               | <div id="devstatus" style="flex: auto;"></div>
+               | <div id="tstamp" style="flex: auto;"></div>
+               | <div id="about" style="flex: none; font-size: 2.0vmin;">
+                       <a href="http://www.average.org/loctrkd/">
+                               http://www.average.org/loctrkd/</a></div>
+       </div>
 </body>
 </html>