From 4a0511d45962721baf86e6d79b7f30ee96846dc5 Mon Sep 17 00:00:00 2001 From: daminglu Date: Tue, 3 Apr 2018 17:38:39 -0700 Subject: [PATCH] Add 'Node Info' part to config panel once a node is clicked. (#358) --- frontend/src/graph/Graph.vue | 10 +++-- frontend/src/graph/ui/Chart.vue | 37 +++++++++++++--- frontend/src/graph/ui/Config.vue | 76 ++++++++++++++++++++++---------- 3 files changed, 89 insertions(+), 34 deletions(-) diff --git a/frontend/src/graph/Graph.vue b/frontend/src/graph/Graph.vue index 6efaae4a..dafc9390 100644 --- a/frontend/src/graph/Graph.vue +++ b/frontend/src/graph/Graph.vue @@ -5,12 +5,15 @@ :fitScreen="fitScreen" :download="download" :scale="config.scale" + :curNode="curNode" + @curNodeUpdated="curNode = $event" >
@@ -37,7 +40,8 @@ export default { scale: 0.5 }, fitScreen: {fitScreen: false}, - download: {download: false} + download: {download: false}, + curNode: {} } }, mounted() { @@ -45,11 +49,11 @@ export default { }, methods: { handleFitScreen() { - this.fitScreen = {fitScreen: true} + this.fitScreen = {fitScreen: true}; this.config.scale = 0.5; }, handleDownload() { - this.download = {fitScreen: true} + this.download = {fitScreen: true}; } } }; diff --git a/frontend/src/graph/ui/Chart.vue b/frontend/src/graph/ui/Chart.vue index a73a2684..3f23e436 100644 --- a/frontend/src/graph/ui/Chart.vue +++ b/frontend/src/graph/ui/Chart.vue @@ -25,7 +25,7 @@ import * as dagreD3 from 'dagre-d3'; export default { - props: ['fitScreen', 'download', 'scale'], + props: ['fitScreen', 'download', 'scale', 'curNode'], computed: { computedWidth() { let scale = this.scale; @@ -54,7 +54,7 @@ }, mounted() { this.getOriginChartsData(); - + let chartScope = this; getPluginGraphsGraph().then(({errno, data}) => { var raw_data = data.data; var data = raw_data; @@ -131,6 +131,26 @@ // adjust viewBox so that the whole graph can be shown, with scroll bar svg.attr('viewBox', '0 0 ' + g.graph().width + ' ' + g.graph().height); + + svg.selectAll(".node").on("click", function(d, i){ + this.curNode = g.node(d); + var nodeType = this.curNode.class; + var nodeInfo = null; + if (nodeType === "operator") { + var opIndex = d.slice(7); // remove prefix "opNode_" + nodeInfo = data.node[opIndex]; + } else if (nodeType === "input") { + nodeInfo = data.input[d-1]; + } else { + nodeInfo = "output"; + } + + chartScope.$emit('curNodeUpdated', + { + 'nodeType': nodeType, + 'nodeInfo': nodeInfo + }); + }); }); }, @@ -175,7 +195,7 @@ }, addDragEventForImg() { - let that = this; + let chartScope = this; // target elements with the "draggable" class interact('.draggable').draggable({ // enable inertial throwing @@ -186,8 +206,8 @@ dragMovelHandler(event, (target, x, y) => { tansformElement(target, x, y); // compute the proportional value - let triggerEl = that.getBigImgEl(); - let relativeEl = that.getSmallImgDragHandler(); + let triggerEl = chartScope.getBigImgEl(); + let relativeEl = chartScope.getSmallImgDragHandler(); relativeMove({triggerEl, x, y}, relativeEl); }); @@ -213,8 +233,8 @@ dragMovelHandler(event, (target, x, y) => { tansformElement(target, x, y); // compute the proportional value - let triggerEl = that.getSmallImgEl(); - let relativeEl = that.getBigImgEl(); + let triggerEl = chartScope.getSmallImgEl(); + let relativeEl = chartScope.getBigImgEl(); relativeMove({triggerEl, x, y}, relativeEl); }); @@ -245,6 +265,9 @@ rx: 10; ry: 10; + .node + cursor: pointer + .output fill: #c38d9e diff --git a/frontend/src/graph/ui/Config.vue b/frontend/src/graph/ui/Config.vue index e575fd5c..7e012153 100644 --- a/frontend/src/graph/ui/Config.vue +++ b/frontend/src/graph/ui/Config.vue @@ -1,36 +1,60 @@