diff --git a/frontend/src/Metamaps/Control.js b/frontend/src/Metamaps/Control.js index 3bd17e52..81b4b39a 100644 --- a/frontend/src/Metamaps/Control.js +++ b/frontend/src/Metamaps/Control.js @@ -20,6 +20,21 @@ const Control = { node.setData('dim', 30, 'current') Selected.Nodes.push(node) }, + selectNeighbors: function() { + if (Selected.Nodes.length > 0) { + //For each selected node, select all connected node and the synapses too + Selected.Nodes.forEach((item) => { + if (Visualize.mGraph.graph.getNode(item.id).adjacencies) { + for (const adjID in Visualize.mGraph.graph.getNode(item.id).adjacencies) { + Control.selectNode(Visualize.mGraph.graph.getNode(adjID)) + Control.selectEdge(Visualize.mGraph.graph.getNode(item.id).adjacencies[adjID]) + } + } + }) + + Visualize.mGraph.plot() + } + }, deselectAllNodes: function() { var l = Selected.Nodes.length for (var i = l - 1; i >= 0; i -= 1) { diff --git a/frontend/src/Metamaps/Listeners.js b/frontend/src/Metamaps/Listeners.js index d55abf92..4a2a1f56 100644 --- a/frontend/src/Metamaps/Listeners.js +++ b/frontend/src/Metamaps/Listeners.js @@ -20,7 +20,7 @@ const Listeners = { if (!(Active.Map || Active.Topic)) return const onCanvas = e.target.tagName === 'BODY' - + switch (e.which) { case 13: // if enter key is pressed // prevent topic creation if sending a message @@ -31,8 +31,13 @@ const Listeners = { case 27: // if esc key is pressed JIT.escKeyHandler() break + case 38: // if UP key is pressed + if ((e.ctrlKey || e.metaKey) && e.shiftKey){ + Control.selectNeighbors() + } + break case 46: // if DEL is pressed - if(e.target.tagName !== "INPUT" && e.target.tagName !== "TEXTAREA" && (Selected.Nodes.length + Selected.Edges.length) > 0){ + if (e.target.tagName !== 'INPUT' && e.target.tagName !== 'TEXTAREA' && (Selected.Nodes.length + Selected.Edges.length) > 0) { e.preventDefault() Control.removeSelectedNodes() Control.removeSelectedEdges() diff --git a/frontend/src/Metamaps/Util.js b/frontend/src/Metamaps/Util.js index e371e4e0..2bc49159 100644 --- a/frontend/src/Metamaps/Util.js +++ b/frontend/src/Metamaps/Util.js @@ -204,31 +204,31 @@ const Util = { }, zoomOnPoint: function(graph, ans, zoomPoint) { var s = graph.canvas.getSize(), - p = graph.canvas.getPos(), - ox = graph.canvas.translateOffsetX, - oy = graph.canvas.translateOffsetY, - sx = graph.canvas.scaleOffsetX, - sy = graph.canvas.scaleOffsetY; - - var pointerCoordX = (zoomPoint.x - p.x - s.width / 2 - ox) * (1 / sx), - pointerCoordY = (zoomPoint.y - p.y - s.height / 2 - oy) * (1 / sy); - - //This translates the canvas to be centred over the zoomPoint, then the canvas is zoomed as intended. - graph.canvas.translate(-pointerCoordX,-pointerCoordY); - graph.canvas.scale(ans, ans); - - //Get the canvas attributes again now that is has changed - s = graph.canvas.getSize(), p = graph.canvas.getPos(), ox = graph.canvas.translateOffsetX, oy = graph.canvas.translateOffsetY, sx = graph.canvas.scaleOffsetX, - sy = graph.canvas.scaleOffsetY; - var newX = (zoomPoint.x - p.x - s.width / 2 - ox) * (1 / sx), - newY = (zoomPoint.y - p.y - s.height / 2 - oy) * (1 / sy); - - //Translate the canvas to put the pointer back over top the same coordinate it was over before - graph.canvas.translate(newX-pointerCoordX,newY-pointerCoordY); + sy = graph.canvas.scaleOffsetY + + var pointerCoordX = (zoomPoint.x - p.x - s.width / 2 - ox) * (1 / sx), + pointerCoordY = (zoomPoint.y - p.y - s.height / 2 - oy) * (1 / sy) + + // This translates the canvas to be centred over the zoomPoint, then the canvas is zoomed as intended. + graph.canvas.translate(-pointerCoordX, -pointerCoordY) + graph.canvas.scale(ans, ans) + + // Get the canvas attributes again now that is has changed + s = graph.canvas.getSize(), + p = graph.canvas.getPos(), + ox = graph.canvas.translateOffsetX, + oy = graph.canvas.translateOffsetY, + sx = graph.canvas.scaleOffsetX, + sy = graph.canvas.scaleOffsetY + var newX = (zoomPoint.x - p.x - s.width / 2 - ox) * (1 / sx), + newY = (zoomPoint.y - p.y - s.height / 2 - oy) * (1 / sy) + + // Translate the canvas to put the pointer back over top the same coordinate it was over before + graph.canvas.translate(newX - pointerCoordX, newY - pointerCoordY) } }