GUI -- Persisted state of hosts/offline-devices/port-hilite; and a little refactoring to boot.
- Added asNumbers() to prefs.js.

Change-Id: I58b98bb660a525bc1af2498d81e86be6a4b06e66
diff --git a/web/gui/src/main/webapp/app/view/topo/topoForce.js b/web/gui/src/main/webapp/app/view/topo/topoForce.js
index 425a87f..3097343 100644
--- a/web/gui/src/main/webapp/app/view/topo/topoForce.js
+++ b/web/gui/src/main/webapp/app/view/topo/topoForce.js
@@ -392,16 +392,24 @@
         return b ? 'visible' : 'hidden';
     }
 
-    function toggleHosts() {
-        showHosts = !showHosts;
+    function toggleHosts(x) {
+        var kev = (x === 'keyev'),
+            on = kev ? !showHosts : !!x;
+
+        showHosts = on;
         updateHostVisibility();
-        flash.flash('Hosts ' + vis(showHosts));
+        flash.flash('Hosts ' + vis(on));
+        return on;
     }
 
-    function toggleOffline() {
-        showOffline = !showOffline;
+    function toggleOffline(x) {
+        var kev = (x === 'keyev'),
+            on = kev ? !showOffline : !!x;
+
+        showOffline = on;
         updateOfflineVisibility();
-        flash.flash('Offline devices ' + vis(showOffline));
+        flash.flash('Offline devices ' + vis(on));
+        return on;
     }
 
     function cycleDeviceLabels() {