GUI Topo -- Badges - Fixed glyph positioning. Added CSS for info/warn/error statuses.

Change-Id: I9e37863a3425df9a9ecd2d20f5526e4f63c6ad00
diff --git a/web/gui/src/main/webapp/app/view/topo/topo.css b/web/gui/src/main/webapp/app/view/topo/topo.css
index f4b089a..255ddbc 100644
--- a/web/gui/src/main/webapp/app/view/topo/topo.css
+++ b/web/gui/src/main/webapp/app/view/topo/topo.css
@@ -427,6 +427,39 @@
     fill: #f90;
 }
 
+/* Badges */
+/* (... works for both light and dark themes...) */
+#ov-topo svg .node .badge circle {
+    stroke: #aaa;
+}
+
+#ov-topo svg .node .badge.badgeInfo circle {
+    fill: #ccf;
+}
+
+#ov-topo svg .node .badge.badgeWarn circle {
+    fill: #da2;
+}
+
+#ov-topo svg .node .badge.badgeError circle {
+    fill: #e44;
+}
+
+#ov-topo svg .node .badge use {
+    fill: white;
+}
+
+#ov-topo svg .node .badge.badgeInfo use {
+    fill: #448;
+}
+
+#ov-topo svg .node .badge text {
+    fill: white;
+}
+
+#ov-topo svg .node .badge.badgeInfo text {
+    fill: #448;
+}
 
 /* Host Nodes */
 
diff --git a/web/gui/src/main/webapp/app/view/topo/topoD3.js b/web/gui/src/main/webapp/app/view/topo/topoD3.js
index 8353de5..1d2c5b1 100644
--- a/web/gui/src/main/webapp/app/view/topo/topoD3.js
+++ b/web/gui/src/main/webapp/app/view/topo/topoD3.js
@@ -57,7 +57,8 @@
         },
         badgeConfig = {
             radius: 12,
-            yoff: 5
+            yoff: 5,
+            gdelta: 10
         },
         icfg;
 
@@ -207,7 +208,8 @@
             dim = icfg.device.dim,
             box, dx, dy, bsel,
             bdg = d.badge,
-            bcr = badgeConfig.radius;
+            bcr = badgeConfig.radius,
+            bcgd = badgeConfig.gdelta;
 
         node.select('text')
             .text(label)
@@ -235,6 +237,8 @@
 
         // handle badge, if defined
         if (bdg) {
+            node.select('g.badge').remove();
+
             bsel = node.append('g')
                 .classed('badge', true)
                 .classed(badgeStatus(bdg), true)
@@ -251,8 +255,9 @@
             } else if (bdg.gid) {
                 bsel.append('use')
                     .attr({
-                        width: bcr * 2,
-                        height: bcr * 2,
+                        width: bcgd * 2,
+                        height: bcgd * 2,
+                        transform: sus.translate(-bcgd, -bcgd),
                         'xlink:href': '#' + bdg.gid
                     });
 
diff --git a/web/gui/src/test/_karma/ev/badges/ev_10_showHighlights_stuff.json b/web/gui/src/test/_karma/ev/badges/ev_10_showHighlights_stuff.json
new file mode 100644
index 0000000..4f35403
--- /dev/null
+++ b/web/gui/src/test/_karma/ev/badges/ev_10_showHighlights_stuff.json
@@ -0,0 +1,63 @@
+{
+  "event": "showHighlights",
+  "payload": {
+    "devices": [
+      {
+        "id": "of:0000000000000001",
+        "badge": {
+          "status": "i",
+          "gid": "xMark",
+          "msg": "x marks the spot"
+        }
+      },
+      {
+        "id": "of:0000000000000002",
+        "badge": {
+          "status": "w",
+          "gid": "crown",
+          "msg": "it's good to be the King"
+        }
+      },
+      {
+        "id": "of:0000000000000003",
+        "badge": {
+          "status": "e",
+          "gid": "chain",
+          "msg": "the weakest link"
+        }
+      },
+      {
+        "id": "of:0000000000000004",
+        "badge": {
+          "status": "i",
+          "txt": "1",
+          "msg": "singular sensation"
+        }
+      },
+      {
+        "id": "of:0000000000000005",
+        "badge": {
+          "status": "w",
+          "txt": "42",
+          "msg": "life, the universe, and everything!"
+        }
+      },
+      {
+        "id": "of:0000000000000006",
+        "badge": {
+          "status": "e",
+          "txt": "99",
+          "msg": "cadbury's flake"
+        }
+      }
+    ],
+    "hosts": [],
+    "links": [
+      {
+        "css": "primary",
+        "id": "of:0000000000000001/5-of:0000000000000002/7",
+        "label": "Foo!"
+      }
+    ]
+  }
+}
diff --git a/web/gui/src/test/_karma/ev/badges/ev_5_showHighlights_clear.json b/web/gui/src/test/_karma/ev/badges/ev_11_showHighlights_clear.json
similarity index 100%
copy from web/gui/src/test/_karma/ev/badges/ev_5_showHighlights_clear.json
copy to web/gui/src/test/_karma/ev/badges/ev_11_showHighlights_clear.json
diff --git a/web/gui/src/test/_karma/ev/badges/ev_4_addDevice_s3.json b/web/gui/src/test/_karma/ev/badges/ev_4_addDevice_s3.json
new file mode 100644
index 0000000..57f3251
--- /dev/null
+++ b/web/gui/src/test/_karma/ev/badges/ev_4_addDevice_s3.json
@@ -0,0 +1,18 @@
+{
+  "event": "addDevice",
+  "payload": {
+    "id": "of:0000000000000003",
+    "type": "switch",
+    "online": true,
+    "master": "ONOS",
+    "labels": [
+      "",
+      "switch-3",
+      "of:0000000000000003"
+    ],
+    "metaUi": {
+      "x": 600,
+      "y": 200
+    }
+  }
+}
diff --git a/web/gui/src/test/_karma/ev/badges/ev_5_addDevice_s4.json b/web/gui/src/test/_karma/ev/badges/ev_5_addDevice_s4.json
new file mode 100644
index 0000000..bab0048
--- /dev/null
+++ b/web/gui/src/test/_karma/ev/badges/ev_5_addDevice_s4.json
@@ -0,0 +1,18 @@
+{
+  "event": "addDevice",
+  "payload": {
+    "id": "of:0000000000000004",
+    "type": "switch",
+    "online": true,
+    "master": "ONOS",
+    "labels": [
+      "",
+      "switch-4",
+      "of:0000000000000004"
+    ],
+    "metaUi": {
+      "x": 200,
+      "y": 400
+    }
+  }
+}
diff --git a/web/gui/src/test/_karma/ev/badges/ev_6_addDevice_s5.json b/web/gui/src/test/_karma/ev/badges/ev_6_addDevice_s5.json
new file mode 100644
index 0000000..6ee1808
--- /dev/null
+++ b/web/gui/src/test/_karma/ev/badges/ev_6_addDevice_s5.json
@@ -0,0 +1,18 @@
+{
+  "event": "addDevice",
+  "payload": {
+    "id": "of:0000000000000005",
+    "type": "switch",
+    "online": true,
+    "master": "ONOS",
+    "labels": [
+      "",
+      "switch-5",
+      "of:0000000000000005"
+    ],
+    "metaUi": {
+      "x": 400,
+      "y": 420
+    }
+  }
+}
diff --git a/web/gui/src/test/_karma/ev/badges/ev_6_showHighlights_stuff.json b/web/gui/src/test/_karma/ev/badges/ev_6_showHighlights_stuff.json
deleted file mode 100644
index 74c42c5..0000000
--- a/web/gui/src/test/_karma/ev/badges/ev_6_showHighlights_stuff.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
-  "event": "showHighlights",
-  "payload": {
-    "devices": [
-      {
-        "id": "of:0000000000000001",
-        "badge": {
-          "status": "e",
-          "gid": "xMark",
-          "msg": "x marks the spot"
-        }
-      },
-      {
-        "id": "of:0000000000000002",
-        "badge": {
-          "status": "w",
-          "txt": "7"
-        }
-      }
-    ],
-    "hosts": [],
-    "links": [
-      {
-        "css": "primary",
-        "id": "of:0000000000000001/5-of:0000000000000002/7",
-        "label": "Antz!"
-      }
-    ]
-  }
-}
diff --git a/web/gui/src/test/_karma/ev/badges/ev_7_addDevice_s6.json b/web/gui/src/test/_karma/ev/badges/ev_7_addDevice_s6.json
new file mode 100644
index 0000000..4554996
--- /dev/null
+++ b/web/gui/src/test/_karma/ev/badges/ev_7_addDevice_s6.json
@@ -0,0 +1,18 @@
+{
+  "event": "addDevice",
+  "payload": {
+    "id": "of:0000000000000006",
+    "type": "switch",
+    "online": true,
+    "master": "ONOS",
+    "labels": [
+      "",
+      "switch-6",
+      "of:0000000000000006"
+    ],
+    "metaUi": {
+      "x": 600,
+      "y": 400
+    }
+  }
+}
diff --git a/web/gui/src/test/_karma/ev/badges/ev_7_showHighlights_clear.json b/web/gui/src/test/_karma/ev/badges/ev_7_showHighlights_clear.json
deleted file mode 100644
index 615efd2..0000000
--- a/web/gui/src/test/_karma/ev/badges/ev_7_showHighlights_clear.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "event": "showHighlights",
-  "payload": {
-    "devices": [],
-    "hosts": [],
-    "links": []
-  }
-}
diff --git a/web/gui/src/test/_karma/ev/badges/ev_4_addLink_1_2.json b/web/gui/src/test/_karma/ev/badges/ev_8_addLink_1_2.json
similarity index 100%
rename from web/gui/src/test/_karma/ev/badges/ev_4_addLink_1_2.json
rename to web/gui/src/test/_karma/ev/badges/ev_8_addLink_1_2.json
diff --git a/web/gui/src/test/_karma/ev/badges/ev_5_showHighlights_clear.json b/web/gui/src/test/_karma/ev/badges/ev_9_showHighlights_clear.json
similarity index 100%
rename from web/gui/src/test/_karma/ev/badges/ev_5_showHighlights_clear.json
rename to web/gui/src/test/_karma/ev/badges/ev_9_showHighlights_clear.json
diff --git a/web/gui/src/test/_karma/ev/badges/scenario.json b/web/gui/src/test/_karma/ev/badges/scenario.json
index 0ca4f4f..ae093d6 100644
--- a/web/gui/src/test/_karma/ev/badges/scenario.json
+++ b/web/gui/src/test/_karma/ev/badges/scenario.json
@@ -4,7 +4,7 @@
   ],
   "title": "Demo adding badges",
   "params": {
-    "lastAuto": 5
+    "lastAuto": 9
   },
   "description": [
     "Demonstrate the device badging feature."