GUI -- Some cleanup in topo.js

Change-Id: Icee133a25d1638cdcc7be591ffc62fed4e3d9808
diff --git a/web/gui/src/main/webapp/topo2.js b/web/gui/src/main/webapp/topo2.js
index 31d7f7e..b1901ba 100644
--- a/web/gui/src/main/webapp/topo2.js
+++ b/web/gui/src/main/webapp/topo2.js
@@ -113,13 +113,11 @@
 
     // key bindings
     var keyDispatch = {
-        space: injectTestEvent,     // TODO: remove (testing only)
-        S: injectStartupEvents,     // TODO: remove (testing only)
-        A: testAlert,               // TODO: remove (testing only)
         M: testMe,                  // TODO: remove (testing only)
+        S: injectStartupEvents,     // TODO: remove (testing only)
+        space: injectTestEvent,     // TODO: remove (testing only)
 
         B: toggleBg,
-        G: toggleLayout,
         L: cycleLabels,
         P: togglePorts,
         U: unpin
@@ -127,6 +125,7 @@
 
     // state variables
     var network = {
+            view: null,     // view token reference
             nodes: [],
             links: [],
             lookup: {}
@@ -167,19 +166,19 @@
     // ==============================
     // Key Callbacks
 
-    function testAlert(view) {
-        alertNumber++;
-        view.alert("Test me! -- " + alertNumber);
-    }
-
     function testMe(view) {
+        view.alert('test');
     }
 
     function injectTestEvent(view) {
+        if (config.useLiveData) {
+            view.alert("Sorry, currently using live data..");
+            return;
+        }
+
         eventNumber++;
         var eventUrl = eventPrefix + eventNumber + '.json';
 
-        console.log('Fetching JSON: ' + eventUrl);
         d3.json(eventUrl, function(err, data) {
             if (err) {
                 view.dataLoadError(err, eventUrl);
@@ -190,6 +189,11 @@
     }
 
     function injectStartupEvents(view) {
+        if (config.useLiveData) {
+            view.alert("Sorry, currently using live data..");
+            return;
+        }
+
         var lastStartupEvent = 32;
         while (eventNumber < lastStartupEvent) {
             injectTestEvent(view);
@@ -201,10 +205,6 @@
         bgImg.style('visibility', (vis === 'hidden') ? 'visible' : 'hidden');
     }
 
-    function toggleLayout(view) {
-
-    }
-
     function cycleLabels() {
         labelIdx = (labelIdx === network.deviceLabelCount - 1) ? 0 : labelIdx + 1;
         network.nodes.forEach(function (d) {
@@ -232,11 +232,11 @@
     }
 
     function togglePorts(view) {
-
+        view.alert('togglePorts() callback')
     }
 
     function unpin(view) {
-
+        view.alert('unpin() callback')
     }
 
     // ==============================
@@ -248,19 +248,19 @@
 //        d3.selectAll('svg .port').classed('inactive', false);
 //        d3.selectAll('svg .portText').classed('inactive', false);
         // TODO ...
-        console.log('showAllLayers()');
+        network.view.alert('showAllLayers() callback');
     }
 
     function showPacketLayer() {
         showAllLayers();
         // TODO ...
-        console.log('showPacketLayer()');
+        network.view.alert('showPacketLayer() callback');
     }
 
     function showOpticalLayer() {
         showAllLayers();
         // TODO ...
-        console.log('showOpticalLayer()');
+        network.view.alert('showOpticalLayer() callback');
     }
 
     // ==============================
@@ -279,11 +279,6 @@
         });
     }
 
-    function establishWebSocket() {
-        // TODO: establish a real web-socket
-        // NOTE, for now, we are using the 'Q' key to artificially inject
-        //       "events" from the server.
-    }
 
     // ==============================
     // Event handlers for server-pushed events
@@ -334,8 +329,7 @@
     // ....
 
     function unknownEvent(data) {
-        // TODO: use dialog, not alert
-        alert('Unknown event type: "' + data.event + '"');
+        network.view.alert('Unknown event type: "' + data.event + '"');
     }
 
     function handleServerEvent(data) {
@@ -360,7 +354,9 @@
             lnk;
 
         if (!(srcNode && dstNode)) {
-            alert('nodes not on map');
+            // TODO: send warning message back to server on websocket
+            network.view.alert('nodes not on map for link\n\n' +
+                'src = ' + src + '\ndst = ' + dst);
             return null;
         }
 
@@ -381,6 +377,7 @@
 
     function linkWidth(w) {
         // w is number of links between nodes. Scale appropriately.
+        // TODO: use a d3.scale (linear, log, ... ?)
         return w * 1.2;
     }
 
@@ -705,7 +702,6 @@
             .on('tick', tick);
 
         network.drag = d3u.createDragBehavior(network.force, selectCb, atDragEnd);
-        webSock.connect();
     }
 
     function load(view, ctx) {
@@ -716,7 +712,9 @@
         view.setRadio(btnSet);
         view.setKeys(keyDispatch);
 
-        establishWebSocket();
+        if (config.useLiveData) {
+            webSock.connect();
+        }
     }
 
     function resize(view, ctx) {