Topo2: Reset node position and unpin
Refactored NodeModel
Added class to the surrounding rect for selected class
Renamed Panels to avoid conflict with classic topo
Topo2: Details Panel for single device selection
Topo2: Added Equalize Masters keyboard shortcut
Topo2: Toggle Link Port highlighting
Topo2: Node Labels was returning empty string
       if friendly name was null
Topo2: Reset map zoom and panning

Change-Id: I0a949b2f8205e1abcfcac5aaec65c18d76e77cff
diff --git a/web/gui/src/main/webapp/app/view/topo2/topo2KeyCommands.js b/web/gui/src/main/webapp/app/view/topo2/topo2KeyCommands.js
index 8571575..8885a89 100644
--- a/web/gui/src/main/webapp/app/view/topo2/topo2KeyCommands.js
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2KeyCommands.js
@@ -17,9 +17,9 @@
 (function () {
 
     // Injected Services
-    var ks, t2ps, t2ms, ps, t2is, t2sp;
+    var ks, flash, wss, t2ps, t2ms, ps, t2is, t2sp, t2vs;
 
-    var topo2ForceService;
+    var t2fs;
 
     // Commmands
     var actionMap = {
@@ -27,11 +27,16 @@
         G: [openMapSelection, 'Select background geo map'],
         B: [toggleMap, 'Toggle background geo map'],
         I: [toggleInstancePanel, 'Toggle ONOS Instance Panel'],
-        O: [toggleSummary, 'Toggle the Summary Panel']
+        O: [toggleSummary, 'Toggle the Summary Panel'],
+        R: [resetZoom, 'Reset pan / zoom'],
+        P: [togglePorts, 'Toggle Port Highlighting'],
+        E: [equalizeMasters, 'Equalize mastership roles'],
+        X: [resetAllNodeLocations, 'Reset Node Location'],
+        U: [unpinNode, 'Unpin node (mouse over)']
     };
 
-    function init(t2fs) {
-        topo2ForceService = t2fs;
+    function init(_t2fs_) {
+        t2fs = _t2fs_;
         bindCommands();
     }
 
@@ -58,7 +63,7 @@
     function cycleDeviceLabels() {
         var deviceLabelIndex = t2ps.get('dlbls') + 1;
         t2ps.set('dlbls', deviceLabelIndex % 3);
-        topo2ForceService.updateNodes();
+        t2fs.updateNodes();
     }
 
     function openMapSelection() {
@@ -77,17 +82,47 @@
         t2sp.toggle();
     }
 
+    function resetZoom() {
+        t2ms.resetZoom();
+        flash.flash('Pan and zoom reset');
+    }
+
+    function togglePorts(x) {
+        updatePrefsState('porthl', t2vs.togglePortHighlights(x));
+        t2fs.updateLinks();
+    }
+
+    function equalizeMasters() {
+        wss.sendEvent('equalizeMasters');
+        flash.flash('Equalizing master roles');
+    }
+
+    function resetAllNodeLocations() {
+        t2fs.resetAllLocations();
+        flash.flash('Reset node locations');
+    }
+
+    function unpinNode() {
+        t2fs.unpin();
+        flash.flash('Unpin node');
+    }
+
     angular.module('ovTopo2')
     .factory('Topo2KeyCommandService',
-    ['KeyService', 'Topo2PrefsService', 'Topo2MapService', 'PrefsService',
-    'Topo2InstanceService', 'Topo2SummaryPanelService',
-        function (_ks_, _t2ps_, _t2ms_, _ps_, _t2is_, _t2sp_) {
+    ['KeyService', 'FlashService', 'WebSocketService', 'Topo2PrefsService',
+    'Topo2MapService', 'PrefsService', 'Topo2InstanceService',
+    'Topo2SummaryPanelService', 'Topo2ViewService',
+        function (_ks_, _flash_, _wss_, _t2ps_, _t2ms_, _ps_, _t2is_, _t2sp_, _t2vs_) {
+
+            ks = _ks_;
+            flash = _flash_;
+            wss = _wss_;
             t2ps = _t2ps_;
             t2ms = _t2ms_;
             t2is = _t2is_;
             ps = _ps_;
-            ks = _ks_;
             t2sp = _t2sp_;
+            t2vs = _t2vs_;
 
             return {
                 init: init,