Simon Hunt

GUI -- Refactoring updateNodes() to make the code more readable.

Change-Id: Ib375b5573a4670a67dd94a6532caf078be33beb0
...@@ -164,11 +164,6 @@ ...@@ -164,11 +164,6 @@
164 } 164 }
165 165
166 166
167 - function updateNodes() {
168 - $log.debug('TODO updateNodes()...');
169 - // TODO...
170 - }
171 -
172 function fStart() { 167 function fStart() {
173 $log.debug('TODO fStart()...'); 168 $log.debug('TODO fStart()...');
174 // TODO... 169 // TODO...
...@@ -428,8 +423,8 @@ ...@@ -428,8 +423,8 @@
428 s = d.el.classed('selected'), 423 s = d.el.classed('selected'),
429 c = devBaseColor(d), 424 c = devBaseColor(d),
430 a = instColor(d.master, o), 425 a = instColor(d.master, o),
431 - g, r, 426 + icon = d.el.select('g.deviceIcon'),
432 - icon = d.el.select('g.deviceIcon'); 427 + g, r;
433 428
434 if (s) { 429 if (s) {
435 g = c.glyph; 430 g = c.glyph;
...@@ -442,10 +437,8 @@ ...@@ -442,10 +437,8 @@
442 r = c.rect; 437 r = c.rect;
443 } 438 }
444 439
445 - icon.select('use') 440 + icon.select('use').style('fill', g);
446 - .style('fill', g); 441 + icon.select('rect').style('fill', r);
447 - icon.select('rect')
448 - .style('fill', r);
449 } 442 }
450 443
451 function instColor(id, online) { 444 function instColor(id, online) {
...@@ -459,17 +452,8 @@ ...@@ -459,17 +452,8 @@
459 .data(network.nodes, function (d) { return d.id; }); 452 .data(network.nodes, function (d) { return d.id; });
460 453
461 // operate on existing nodes... 454 // operate on existing nodes...
462 - node.filter('.device').each(function (d) { 455 + node.filter('.device').each(deviceExisting);
463 - var node = d.el; 456 + node.filter('.host').each(hostExisting);
464 - node.classed('online', d.online);
465 - updateDeviceLabel(d);
466 - positionNode(d, true);
467 - });
468 -
469 - node.filter('.host').each(function (d) {
470 - updateHostLabel(d);
471 - positionNode(d, true);
472 - });
473 457
474 // operate on entering nodes: 458 // operate on entering nodes:
475 var entering = node.enter() 459 var entering = node.enter()
...@@ -486,15 +470,53 @@ ...@@ -486,15 +470,53 @@
486 .transition() 470 .transition()
487 .attr('opacity', 1); 471 .attr('opacity', 1);
488 472
489 - // augment device nodes... 473 + // augment nodes...
490 - entering.filter('.device').each(function (d) { 474 + entering.filter('.device').each(deviceEnter);
475 + entering.filter('.host').each(hostEnter);
476 +
477 + // operate on both existing and new nodes:
478 + updateDeviceColors();
479 +
480 + // operate on exiting nodes:
481 + // Note that the node is removed after 2 seconds.
482 + // Sub element animations should be shorter than 2 seconds.
483 + var exiting = node.exit()
484 + .transition()
485 + .duration(2000)
486 + .style('opacity', 0)
487 + .remove();
488 +
489 + // node specific....
490 + exiting.filter('.host').each(hostExit);
491 + exiting.filter('.device').each(deviceExit);
492 +
493 + // finally, resume the force layout
494 + fResume();
495 + }
496 +
497 + // ==========================
498 + // updateNodes - subfunctions
499 +
500 + function deviceExisting(d) {
501 + var node = d.el;
502 + node.classed('online', d.online);
503 + updateDeviceLabel(d);
504 + positionNode(d, true);
505 + }
506 +
507 + function hostExisting(d) {
508 + updateHostLabel(d);
509 + positionNode(d, true);
510 + }
511 +
512 + function deviceEnter(d) {
491 var node = d3.select(this), 513 var node = d3.select(this),
492 glyphId = d.type || 'unknown', 514 glyphId = d.type || 'unknown',
493 label = trimLabel(deviceLabel(d)), 515 label = trimLabel(deviceLabel(d)),
516 + devCfg = deviceIconConfig,
494 noLabel = !label, 517 noLabel = !label,
495 box, dx, dy, icon; 518 box, dx, dy, icon;
496 519
497 - // provide ref to element from backing data....
498 d.el = node; 520 d.el = node;
499 521
500 node.append('rect').attr({ rx: 5, ry: 5 }); 522 node.append('rect').attr({ rx: 5, ry: 5 });
...@@ -503,58 +525,43 @@ ...@@ -503,58 +525,43 @@
503 node.select('rect').attr(box); 525 node.select('rect').attr(box);
504 526
505 icon = is.addDeviceIcon(node, glyphId); 527 icon = is.addDeviceIcon(node, glyphId);
506 - d.iconDim = icon.dim;
507 528
508 if (noLabel) { 529 if (noLabel) {
509 dx = -icon.dim/2; 530 dx = -icon.dim/2;
510 dy = -icon.dim/2; 531 dy = -icon.dim/2;
511 } else { 532 } else {
512 box = adjustRectToFitText(node); 533 box = adjustRectToFitText(node);
513 - dx = box.x + iconConfig.xoff; 534 + dx = box.x + devCfg.xoff;
514 - dy = box.y + iconConfig.yoff; 535 + dy = box.y + devCfg.yoff;
515 } 536 }
516 537
517 icon.attr('transform', sus.translate(dx, dy)); 538 icon.attr('transform', sus.translate(dx, dy));
518 - }); 539 + }
519 540
520 - // augment host nodes... 541 + function hostEnter(d) {
521 - entering.filter('.host').each(function (d) { 542 + var node = d3.select(this);
522 - var node = d3.select(this), 543 +
523 - cfg = config.icons.host, 544 + //cfg = config.icons.host,
524 - r = cfg.radius[d.type] || cfg.defaultRadius, 545 + //r = cfg.radius[d.type] || cfg.defaultRadius,
525 - textDy = r + 10, 546 + //textDy = r + 10,
526 //TODO: iid = iconGlyphUrl(d), 547 //TODO: iid = iconGlyphUrl(d),
527 - _dummy; 548 + // _dummy;
528 549
529 - // provide ref to element from backing data....
530 d.el = node; 550 d.el = node;
531 551
532 //TODO: showHostVis(node); 552 //TODO: showHostVis(node);
533 553
534 node.append('circle').attr('r', r); 554 node.append('circle').attr('r', r);
535 - if (iid) { 555 + //if (iid) {
536 //TODO: addHostIcon(node, r, iid); 556 //TODO: addHostIcon(node, r, iid);
537 - } 557 + //}
538 node.append('text') 558 node.append('text')
539 .text(hostLabel) 559 .text(hostLabel)
540 - .attr('dy', textDy) 560 + //.attr('dy', textDy)
541 .attr('text-anchor', 'middle'); 561 .attr('text-anchor', 'middle');
542 - }); 562 + }
543 -
544 - // operate on both existing and new nodes, if necessary
545 - updateDeviceColors();
546 -
547 - // operate on exiting nodes:
548 - // Note that the node is removed after 2 seconds.
549 - // Sub element animations should be shorter than 2 seconds.
550 - var exiting = node.exit()
551 - .transition()
552 - .duration(2000)
553 - .style('opacity', 0)
554 - .remove();
555 563
556 - // host node exits.... 564 + function hostExit(d) {
557 - exiting.filter('.host').each(function (d) {
558 var node = d.el; 565 var node = d.el;
559 node.select('use') 566 node.select('use')
560 .style('opacity', 0.5) 567 .style('opacity', 0.5)
...@@ -575,10 +582,9 @@ ...@@ -575,10 +582,9 @@
575 .transition() 582 .transition()
576 .duration(1500) 583 .duration(1500)
577 .attr('r', 0); 584 .attr('r', 0);
578 - }); 585 + }
579 586
580 - // device node exits.... 587 + function deviceExit(d) {
581 - exiting.filter('.device').each(function (d) {
582 var node = d.el; 588 var node = d.el;
583 node.select('use') 589 node.select('use')
584 .style('opacity', 0.5) 590 .style('opacity', 0.5)
...@@ -590,8 +596,6 @@ ...@@ -590,8 +596,6 @@
590 .style('stroke-fill', '#555') 596 .style('stroke-fill', '#555')
591 .style('fill', '#888') 597 .style('fill', '#888')
592 .style('opacity', 0.5); 598 .style('opacity', 0.5);
593 - });
594 - fResume();
595 } 599 }
596 600
597 601
......