Committed by
Gerrit Code Review
GUI -- Detail pane now uses Glyphs for selected item (no longer png)
- deadwood removal. Change-Id: I804a0334b48f2e261fa108e43d23d3257d8a143d
Showing
3 changed files
with
47 additions
and
96 deletions
... | @@ -33,6 +33,9 @@ | ... | @@ -33,6 +33,9 @@ |
33 | padding: 10px; | 33 | padding: 10px; |
34 | color: black; | 34 | color: black; |
35 | font-size: 10pt; | 35 | font-size: 10pt; |
36 | + | ||
37 | + -moz-border-radius: 6px; | ||
38 | + border-radius: 6px; | ||
36 | box-shadow: 2px 2px 16px #777; | 39 | box-shadow: 2px 2px 16px #777; |
37 | } | 40 | } |
38 | 41 | ... | ... |
... | @@ -174,16 +174,26 @@ svg .node.host circle { | ... | @@ -174,16 +174,26 @@ svg .node.host circle { |
174 | /* gets base CSS from .fpanel in floatPanel.css */ | 174 | /* gets base CSS from .fpanel in floatPanel.css */ |
175 | } | 175 | } |
176 | 176 | ||
177 | -#topo-detail h2 { | 177 | +#topo-detail svg { |
178 | - margin: 8px 4px; | 178 | + display: inline-block; |
179 | - color: black; | 179 | + width: 42px; |
180 | - vertical-align: middle; | 180 | + height: 42px; |
181 | +} | ||
182 | + | ||
183 | +#topo-detail svg .glyphIcon { | ||
184 | + fill: black; | ||
185 | + stroke: none; | ||
186 | + fill-rule: evenodd; | ||
181 | } | 187 | } |
182 | 188 | ||
183 | -#topo-detail h2 img { | 189 | +#topo-detail h2 { |
184 | - height: 32px; | 190 | + position: absolute; |
185 | - padding-right: 8px; | 191 | + /*display: inline-block;*/ |
186 | - vertical-align: middle; | 192 | + /*vertical-align: bottom;*/ |
193 | + margin: 0px 4px; | ||
194 | + top: 20px; | ||
195 | + left: 50px; | ||
196 | + color: black; | ||
187 | } | 197 | } |
188 | 198 | ||
189 | #topo-detail p, table { | 199 | #topo-detail p, table { |
... | @@ -284,10 +294,6 @@ svg .node.host circle { | ... | @@ -284,10 +294,6 @@ svg .node.host circle { |
284 | fill-rule: evenodd; | 294 | fill-rule: evenodd; |
285 | } | 295 | } |
286 | 296 | ||
287 | -/*#topo-oibox .onosInst img {*/ | ||
288 | - /*opacity: 0.5;*/ | ||
289 | - /*padding: 3px;*/ | ||
290 | -/*}*/ | ||
291 | 297 | ||
292 | #topo-oibox .onosInst.online img { | 298 | #topo-oibox .onosInst.online img { |
293 | opacity: 1.0; | 299 | opacity: 1.0; |
... | @@ -316,7 +322,7 @@ svg .node.host circle { | ... | @@ -316,7 +322,7 @@ svg .node.host circle { |
316 | opacity: 0.2; | 322 | opacity: 0.2; |
317 | } | 323 | } |
318 | 324 | ||
319 | -/* Web Socket Closed Mask (starts hidden) */ | 325 | +/* Death Mask (starts hidden) */ |
320 | 326 | ||
321 | #topo-mask { | 327 | #topo-mask { |
322 | display: none; | 328 | display: none; | ... | ... |
... | @@ -18,6 +18,7 @@ | ... | @@ -18,6 +18,7 @@ |
18 | ONOS network topology viewer - version 1.1 | 18 | ONOS network topology viewer - version 1.1 |
19 | 19 | ||
20 | @author Simon Hunt | 20 | @author Simon Hunt |
21 | + @author Thomas Vachuska | ||
21 | */ | 22 | */ |
22 | 23 | ||
23 | (function (onos) { | 24 | (function (onos) { |
... | @@ -25,8 +26,7 @@ | ... | @@ -25,8 +26,7 @@ |
25 | 26 | ||
26 | // shorter names for library APIs | 27 | // shorter names for library APIs |
27 | var d3u = onos.lib.d3util, | 28 | var d3u = onos.lib.d3util, |
28 | - gly = onos.lib.glyphs, | 29 | + gly = onos.lib.glyphs; |
29 | - trace; | ||
30 | 30 | ||
31 | // configuration data | 31 | // configuration data |
32 | var config = { | 32 | var config = { |
... | @@ -887,9 +887,22 @@ | ... | @@ -887,9 +887,22 @@ |
887 | }); | 887 | }); |
888 | } | 888 | } |
889 | 889 | ||
890 | + // TODO: these should be moved out to utility module. | ||
890 | function stripPx(s) { | 891 | function stripPx(s) { |
891 | return s.replace(/px$/,''); | 892 | return s.replace(/px$/,''); |
892 | } | 893 | } |
894 | + | ||
895 | + function appendGlyph(svg, ox, oy, dim, iid) { | ||
896 | + svg.append('use').attr({ | ||
897 | + class: 'glyphIcon', | ||
898 | + transform: translate(ox,oy), | ||
899 | + 'xlink:href': iid, | ||
900 | + width: dim, | ||
901 | + height: dim | ||
902 | + | ||
903 | + }); | ||
904 | + } | ||
905 | + | ||
893 | // ============================== | 906 | // ============================== |
894 | // onos instance panel functions | 907 | // onos instance panel functions |
895 | 908 | ||
... | @@ -918,25 +931,13 @@ | ... | @@ -918,25 +931,13 @@ |
918 | height: h | 931 | height: h |
919 | }); | 932 | }); |
920 | var dim = 30; | 933 | var dim = 30; |
921 | - svg.append('use').attr({ | 934 | + appendGlyph(svg, 2, 2, 30, '#node'); |
922 | - class: 'glyphIcon', | ||
923 | - transform: translate(2,2), | ||
924 | - 'xlink:href': '#node', | ||
925 | - width: dim, | ||
926 | - height: dim | ||
927 | - | ||
928 | - }); | ||
929 | - | ||
930 | - //$('<img src="img/node.png">').appendTo(el); | ||
931 | - //img = el.select('img') | ||
932 | - // .attr({ | ||
933 | - // width: 30 | ||
934 | - // }); | ||
935 | 935 | ||
936 | $('<div>').attr('class', 'onosTitle').text(d.id).appendTo(el); | 936 | $('<div>').attr('class', 'onosTitle').text(d.id).appendTo(el); |
937 | 937 | ||
938 | // is the UI attached to this instance? | 938 | // is the UI attached to this instance? |
939 | // TODO: need uiAttached boolean in instance data | 939 | // TODO: need uiAttached boolean in instance data |
940 | + // TODO: use SVG glyph, not png.. | ||
940 | //if (d.uiAttached) { | 941 | //if (d.uiAttached) { |
941 | if (i === 0) { | 942 | if (i === 0) { |
942 | $('<img src="img/ui.png">').attr('class','ui').appendTo(el); | 943 | $('<img src="img/ui.png">').attr('class','ui').appendTo(el); |
... | @@ -1043,8 +1044,7 @@ | ... | @@ -1043,8 +1044,7 @@ |
1043 | } | 1044 | } |
1044 | 1045 | ||
1045 | function createLink(link) { | 1046 | function createLink(link) { |
1046 | - var lnk = linkEndPoints(link.src, link.dst), | 1047 | + var lnk = linkEndPoints(link.src, link.dst); |
1047 | - type = link.type; | ||
1048 | 1048 | ||
1049 | if (!lnk) { | 1049 | if (!lnk) { |
1050 | return null; | 1050 | return null; |
... | @@ -1223,18 +1223,7 @@ | ... | @@ -1223,18 +1223,7 @@ |
1223 | dy = p.y2 - p.y1, | 1223 | dy = p.y2 - p.y1, |
1224 | xMid = dx/2 + p.x1, | 1224 | xMid = dx/2 + p.x1, |
1225 | yMid = dy/2 + p.y1; | 1225 | yMid = dy/2 + p.y1; |
1226 | - //length = Math.sqrt(dx*dx + dy*dy), | ||
1227 | - //rads = Math.asin(dy/length), | ||
1228 | - //degs = rads / (Math.PI*2) * 360; | ||
1229 | - | ||
1230 | return translate(xMid, yMid); | 1226 | return translate(xMid, yMid); |
1231 | - | ||
1232 | - // TODO: consider making label parallel to line | ||
1233 | - //return [ | ||
1234 | - // translate(xMid, yMid), | ||
1235 | - // rotate(degs), | ||
1236 | - // translate(0, 8) | ||
1237 | - //].join(''); | ||
1238 | } | 1227 | } |
1239 | 1228 | ||
1240 | function createDeviceNode(device) { | 1229 | function createDeviceNode(device) { |
... | @@ -1437,19 +1426,13 @@ | ... | @@ -1437,19 +1426,13 @@ |
1437 | host.select('text').text(label); | 1426 | host.select('text').text(label); |
1438 | } | 1427 | } |
1439 | 1428 | ||
1429 | + // TODO: should be using updateNodes() to do the upates! | ||
1440 | function updateDeviceState(nodeData) { | 1430 | function updateDeviceState(nodeData) { |
1441 | nodeData.el.classed('online', nodeData.online); | 1431 | nodeData.el.classed('online', nodeData.online); |
1442 | updateDeviceLabel(nodeData); | 1432 | updateDeviceLabel(nodeData); |
1443 | // TODO: review what else might need to be updated | 1433 | // TODO: review what else might need to be updated |
1444 | } | 1434 | } |
1445 | 1435 | ||
1446 | - function updateLinkState(linkData) { | ||
1447 | - updateLinkWidth(linkData); | ||
1448 | - linkData.el.classed('inactive', !linkData.online); | ||
1449 | - // TODO: review what else might need to be updated | ||
1450 | - // update label, if showing | ||
1451 | - } | ||
1452 | - | ||
1453 | function updateHostState(hostData) { | 1436 | function updateHostState(hostData) { |
1454 | updateHostLabel(hostData); | 1437 | updateHostLabel(hostData); |
1455 | // TODO: review what else might need to be updated | 1438 | // TODO: review what else might need to be updated |
... | @@ -1569,7 +1552,6 @@ | ... | @@ -1569,7 +1552,6 @@ |
1569 | addHostIcon(node, r, iid); | 1552 | addHostIcon(node, r, iid); |
1570 | } | 1553 | } |
1571 | 1554 | ||
1572 | - | ||
1573 | node.append('text') | 1555 | node.append('text') |
1574 | .text(hostLabel) | 1556 | .text(hostLabel) |
1575 | .attr('dy', textDy) | 1557 | .attr('dy', textDy) |
... | @@ -1659,34 +1641,8 @@ | ... | @@ -1659,34 +1641,8 @@ |
1659 | height: cfg.dim | 1641 | height: cfg.dim |
1660 | }); | 1642 | }); |
1661 | 1643 | ||
1662 | -/* | ||
1663 | - if (icon) { | ||
1664 | - node.append('rect') | ||
1665 | - .attr({ | ||
1666 | - class: 'iconUnderlay', | ||
1667 | - x: box.x + config.icons.xoff, | ||
1668 | - y: box.y + config.icons.yoff, | ||
1669 | - width: cfg.w, | ||
1670 | - height: cfg.h, | ||
1671 | - rx: 4 | ||
1672 | - }).style({ | ||
1673 | - stroke: '#000', | ||
1674 | - fill: '#ddd' | ||
1675 | - }); | ||
1676 | - node.append('svg:image') | ||
1677 | - .attr({ | ||
1678 | - x: box.x + config.icons.xoff + 2, | ||
1679 | - y: box.y + config.icons.yoff + 2, | ||
1680 | - width: cfg.w - 4, | ||
1681 | - height: cfg.h - 4, | ||
1682 | - 'xlink:href': icon | ||
1683 | - }); | ||
1684 | - } | ||
1685 | -*/ | ||
1686 | } | 1644 | } |
1687 | 1645 | ||
1688 | - | ||
1689 | - | ||
1690 | function find(key, array) { | 1646 | function find(key, array) { |
1691 | for (var idx = 0, n = array.length; idx < n; idx++) { | 1647 | for (var idx = 0, n = array.length; idx < n; idx++) { |
1692 | if (array[idx].key === key) { | 1648 | if (array[idx].key === key) { |
... | @@ -1990,12 +1946,15 @@ | ... | @@ -1990,12 +1946,15 @@ |
1990 | function populateDetails(data) { | 1946 | function populateDetails(data) { |
1991 | detailPane.empty(); | 1947 | detailPane.empty(); |
1992 | 1948 | ||
1949 | + var svg = detailPane.append('svg'), | ||
1950 | + iid = iconGlyphUrl(data); | ||
1951 | + | ||
1993 | var title = detailPane.append("h2"), | 1952 | var title = detailPane.append("h2"), |
1994 | table = detailPane.append("table"), | 1953 | table = detailPane.append("table"), |
1995 | tbody = table.append("tbody"); | 1954 | tbody = table.append("tbody"); |
1996 | 1955 | ||
1997 | - $('<img src="img/' + data.type + '.png">').appendTo(title); | 1956 | + appendGlyph(svg, 0, 0, 40, iid); |
1998 | - $('<span>').attr('class', 'icon').text(data.id).appendTo(title); | 1957 | + title.text(data.id); |
1999 | 1958 | ||
2000 | data.propOrder.forEach(function(p) { | 1959 | data.propOrder.forEach(function(p) { |
2001 | if (p === '-') { | 1960 | if (p === '-') { |
... | @@ -2120,8 +2079,6 @@ | ... | @@ -2120,8 +2079,6 @@ |
2120 | } | 2079 | } |
2121 | 2080 | ||
2122 | showInstances = mkTogBtn('Show Instances', toggleInst); | 2081 | showInstances = mkTogBtn('Show Instances', toggleInst); |
2123 | - //doPanZoom = mkTogBtn('Pan/Zoom', togglePanZoom); | ||
2124 | - //showTrafficOnHover = mkTogBtn('Show traffic on hover', toggleTrafficHover); | ||
2125 | } | 2082 | } |
2126 | 2083 | ||
2127 | function instShown() { | 2084 | function instShown() { |
... | @@ -2138,10 +2095,6 @@ | ... | @@ -2138,10 +2095,6 @@ |
2138 | 2095 | ||
2139 | function panZoom() { | 2096 | function panZoom() { |
2140 | return false; | 2097 | return false; |
2141 | - //return doPanZoom.classed('active'); | ||
2142 | - } | ||
2143 | - function togglePanZoom() { | ||
2144 | - doPanZoom.classed('active', !panZoom()); | ||
2145 | } | 2098 | } |
2146 | 2099 | ||
2147 | function trafficHover() { | 2100 | function trafficHover() { |
... | @@ -2152,10 +2105,6 @@ | ... | @@ -2152,10 +2105,6 @@ |
2152 | return hoverModes[hoverMode] === 'flows'; | 2105 | return hoverModes[hoverMode] === 'flows'; |
2153 | } | 2106 | } |
2154 | 2107 | ||
2155 | - function toggleTrafficHover() { | ||
2156 | - showTrafficOnHover.classed('active', !trafficHover()); | ||
2157 | - } | ||
2158 | - | ||
2159 | function loadGlyphs(svg) { | 2108 | function loadGlyphs(svg) { |
2160 | var defs = svg.append('defs'); | 2109 | var defs = svg.append('defs'); |
2161 | gly.defBird(defs); | 2110 | gly.defBird(defs); |
... | @@ -2305,13 +2254,6 @@ | ... | @@ -2305,13 +2254,6 @@ |
2305 | 2254 | ||
2306 | // Load map data asynchronously; complete startup after that.. | 2255 | // Load map data asynchronously; complete startup after that.. |
2307 | loadGeoJsonData(); | 2256 | loadGeoJsonData(); |
2308 | - | ||
2309 | - //var dashIdx = 0; | ||
2310 | - //antTimer = setInterval(function () { | ||
2311 | - // // TODO: figure out how to choose Src-->Dst and Dst-->Src, per link | ||
2312 | - // dashIdx = dashIdx === 0 ? 14 : dashIdx - 2; | ||
2313 | - // d3.selectAll('.animated').style('stroke-dashoffset', dashIdx); | ||
2314 | - //}, 35); | ||
2315 | } | 2257 | } |
2316 | 2258 | ||
2317 | function startAntTimer() { | 2259 | function startAntTimer() { |
... | @@ -2338,7 +2280,7 @@ | ... | @@ -2338,7 +2280,7 @@ |
2338 | } | 2280 | } |
2339 | 2281 | ||
2340 | // TODO: move these to config/state portion of script | 2282 | // TODO: move these to config/state portion of script |
2341 | - var geoJsonUrl = 'json/map/continental_us.json', // TODO: Paul | 2283 | + var geoJsonUrl = 'json/map/continental_us.json', |
2342 | geoJson; | 2284 | geoJson; |
2343 | 2285 | ||
2344 | function loadGeoJsonData() { | 2286 | function loadGeoJsonData() { | ... | ... |
-
Please register or login to post a comment