GUI -- Completed icon directive definition, and wired up device view.

Change-Id: Ia3cf0655fb17d47adc54f9f4540bb25eacbaaa62
diff --git a/web/gui/src/main/webapp/app/fw/svg/icon.js b/web/gui/src/main/webapp/app/fw/svg/icon.js
index 2013a63..deb1522 100644
--- a/web/gui/src/main/webapp/app/fw/svg/icon.js
+++ b/web/gui/src/main/webapp/app/fw/svg/icon.js
@@ -22,53 +22,89 @@
 (function () {
     'use strict';
 
-    var $log, fs;
+    var $log, fs, gs;
 
-    var viewBoxDim = 50,
-        viewBox = '0 0 ' + viewBoxDim + ' ' + viewBoxDim;
+    var vboxSize = 50,
+        cornerSize = vboxSize / 10,
+        viewBox = '0 0 ' + vboxSize + ' ' + vboxSize;
 
     // maps icon id to the glyph id it uses.
     // note: icon id maps to a CSS class for styling that icon
     var glyphMapping = {
-            deviceOnline: 'checkMark',
-            deviceOffline: 'xMark'
+            deviceOnline: 'crown',
+            deviceOffline: 'chain'
+            //deviceOnline: 'checkMark',
+            //deviceOffline: 'xMark'
         };
 
+    function ensureIconLibDefs() {
+        var body = d3.select('body'),
+            svg = body.select('svg#IconLibDefs'),
+            defs;
+
+        if (svg.empty()) {
+            svg = body.append('svg').attr('id', 'IconLibDefs');
+            defs = svg.append('defs');
+        }
+        return svg.select('defs');
+    }
+
     angular.module('onosSvg')
-        .factory('IconService', ['$log', 'FnService', function (_$log_, _fs_) {
+        .factory('IconService', ['$log', 'FnService', 'GlyphService',
+        function (_$log_, _fs_, _gs_) {
             $log = _$log_;
             fs = _fs_;
+            gs = _gs_;
 
             // div is a D3 selection of the <DIV> element into which icon should load
             // iconCls is the CSS class used to identify the icon
             // size is dimension of icon in pixels. Defaults to 20.
-            function loadIcon(div, iconCls, size) {
+            // installGlyph, if truthy, will cause the glyph to be added to
+            //      well-known defs element. Defaults to false.
+            // svgClass is the CSS class used to identify the SVG layer.
+            //      Defaults to 'embeddedIcon'.
+            function loadIcon(div, iconCls, size, installGlyph, svgClass) {
                 var dim = size || 20,
-                    gid = glyphMapping[iconCls] || 'unknown';
+                    svgCls = svgClass || 'embeddedIcon',
+                    gid = glyphMapping[iconCls] || 'unknown',
+                    svg, g;
 
-                var svg = div.append('svg').attr({
+                if (installGlyph) {
+                    gs.loadDefs(ensureIconLibDefs(), [gid], true);
+                }
+
+                svg = div.append('svg').attr({
+                        'class': svgCls,
                         width: dim,
                         height: dim,
                         viewBox: viewBox
                     });
-                var g = svg.append('g').attr({
+
+                g = svg.append('g').attr({
                     'class': 'icon ' + iconCls
                 });
+
                 g.append('rect').attr({
-                    width: viewBoxDim,
-                    height: viewBoxDim,
-                    rx: 4
+                    width: vboxSize,
+                    height: vboxSize,
+                    rx: cornerSize
                 });
+
                 g.append('use').attr({
-                    width: viewBoxDim,
-                    height: viewBoxDim,
+                    width: vboxSize,
+                    height: vboxSize,
                     'class': 'glyph',
                     'xlink:href': '#' + gid
                 });
             }
 
+            function loadEmbeddedIcon(div, iconCls, size) {
+                loadIcon(div, iconCls, size, true);
+            }
+
             return {
-                loadIcon: loadIcon
+                loadIcon: loadIcon,
+                loadEmbeddedIcon: loadEmbeddedIcon
             };
         }]);