GUI -- Ensure that topology view dialog is closed if we navigate away from the view,
  or if we switch overlays.
 - also add setTitle() function to dialog API.

Change-Id: I68bf1ff3f329e61bcf41512a9ebdefb1be7a0f95
diff --git a/web/gui/src/main/webapp/app/view/topo/topo.js b/web/gui/src/main/webapp/app/view/topo/topo.js
index 7ddfd13..702584a 100644
--- a/web/gui/src/main/webapp/app/view/topo/topo.js
+++ b/web/gui/src/main/webapp/app/view/topo/topo.js
@@ -30,7 +30,7 @@
 
     // references to injected services etc.
     var $scope, $log, $cookies, fs, ks, zs, gs, ms, sus, flash, wss, ps,
-        tes, tfs, tps, tis, tss, tls, tts, tos, fltr, ttbs, ttip, tov;
+        tds, tes, tfs, tps, tis, tss, tls, tts, tos, fltr, ttbs, ttip, tov;
 
     // DOM elements
     var ovtopo, svg, defs, zoomLayer, mapG, spriteG, forceG, noDevsLayer;
@@ -425,7 +425,7 @@
         .controller('OvTopoCtrl', ['$scope', '$log', '$location', '$timeout',
             '$cookies', 'FnService', 'MastService', 'KeyService', 'ZoomService',
             'GlyphService', 'MapService', 'SvgUtilService', 'FlashService',
-            'WebSocketService', 'PrefsService',
+            'WebSocketService', 'PrefsService', 'TopoDialogService',
             'TopoEventService', 'TopoForceService', 'TopoPanelService',
             'TopoInstService', 'TopoSelectService', 'TopoLinkService',
             'TopoTrafficService', 'TopoObliqueService', 'TopoFilterService',
@@ -433,9 +433,9 @@
             'TopoOverlayService',
 
         function (_$scope_, _$log_, $loc, $timeout, _$cookies_, _fs_, mast, _ks_,
-                  _zs_, _gs_, _ms_, _sus_, _flash_, _wss_, _ps_, _tes_, _tfs_,
-                  _tps_, _tis_, _tss_, _tls_, _tts_, _tos_, _fltr_, _ttbs_, tspr,
-                  _ttip_, _tov_) {
+                  _zs_, _gs_, _ms_, _sus_, _flash_, _wss_, _ps_, _tds_, _tes_,
+                  _tfs_, _tps_, _tis_, _tss_, _tls_, _tts_, _tos_, _fltr_,
+                  _ttbs_, tspr, _ttip_, _tov_) {
             var params = $loc.search(),
                 projection,
                 dim,
@@ -461,6 +461,7 @@
             flash = _flash_;
             wss = _wss_;
             ps = _ps_;
+            tds = _tds_;
             tes = _tes_;
             tfs = _tfs_;
             // TODO: consider funnelling actions through TopoForceService...
@@ -495,6 +496,7 @@
                 tes.stop();
                 ks.unbindKeys();
                 tps.destroyPanels();
+                tds.closeDialog();
                 tis.destroyInst();
                 tfs.destroyForce();
                 ttbs.destroyToolbar();
diff --git a/web/gui/src/main/webapp/app/view/topo/topoDialog.js b/web/gui/src/main/webapp/app/view/topo/topoDialog.js
index 9307918..0c47511 100644
--- a/web/gui/src/main/webapp/app/view/topo/topoDialog.js
+++ b/web/gui/src/main/webapp/app/view/topo/topoDialog.js
@@ -106,6 +106,13 @@
             .on('click', invoke);
     }
 
+    function setTitle(title) {
+        if (pApi) {
+            pApi.appendHeader('h2').text(title);
+        }
+        return dApi;
+    }
+
     function addContent(content) {
         if (pApi) {
             pApi.appendBody(content);
@@ -127,11 +134,11 @@
             pApi = createDialog();
         }
         pApi.reset();
-        pApi.appendHeader('h2').text('=dialog=');
         panel.show();
 
         // return the dialog object API
         dApi = {
+            setTitle: setTitle,
             addContent: addContent,
             addButton: addButton
         };
diff --git a/web/gui/src/main/webapp/app/view/topo/topoToolbar.js b/web/gui/src/main/webapp/app/view/topo/topoToolbar.js
index 0628544..804e2a3 100644
--- a/web/gui/src/main/webapp/app/view/topo/topoToolbar.js
+++ b/web/gui/src/main/webapp/app/view/topo/topoToolbar.js
@@ -23,7 +23,7 @@
     'use strict';
 
     // injected references
-    var $log, fs, tbs, ps, tov, api;
+    var $log, fs, tbs, ps, tov, tds, api;
 
     // API:
     //  getActionEntry
@@ -192,6 +192,8 @@
             });
         }
 
+        // ensure dialog has closed (if opened by outgoing overlay)
+        tds.closeDialog();
         thirdRow.clear();
 
         if (!order.length) {
@@ -271,14 +273,15 @@
     angular.module('ovTopo')
         .factory('TopoToolbarService',
         ['$log', 'FnService', 'ToolbarService', 'PrefsService',
-            'TopoOverlayService',
+            'TopoOverlayService', 'TopoDialogService',
 
-        function (_$log_, _fs_, _tbs_, _ps_, _tov_) {
+        function (_$log_, _fs_, _tbs_, _ps_, _tov_, _tds_) {
             $log = _$log_;
             fs = _fs_;
             tbs = _tbs_;
             ps = _ps_;
             tov = _tov_;
+            tds = _tds_;
 
             return {
                 init: init,