From b09eed715b1fa05a0e6d2f12593b4afe5a7b50d1 Mon Sep 17 00:00:00 2001 From: Robert Best Date: Sat, 2 Aug 2014 14:32:07 -0400 Subject: [PATCH 1/2] specify redis gem version number --- Gemfile | 2 +- Gemfile.lock | 4 ++-- app/assets/javascripts/metamaps/Metamaps.Router.js | 4 ++-- app/assets/javascripts/metamaps/metamaps.js | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Gemfile b/Gemfile index 51ddc1db..8fd03a16 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ gem 'rails', '3.2.17' # gem 'rails', :git => 'git://github.com/rails/rails.git' gem 'devise' -gem 'redis' +gem 'redis', '2.2.2' gem 'pg' gem 'cancan' gem 'formula' diff --git a/Gemfile.lock b/Gemfile.lock index e4bbb146..b4efab8d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -117,7 +117,7 @@ GEM rake (10.3.2) rdoc (3.12.2) json (~> 1.4) - redis (3.0.7) + redis (2.2.2) sass (3.3.7) sass-rails (3.2.6) railties (~> 3.2.0) @@ -160,6 +160,6 @@ DEPENDENCIES pg rails (= 3.2.17) rails3-jquery-autocomplete - redis + redis (= 2.2.2) sass-rails uglifier (>= 1.0.3) diff --git a/app/assets/javascripts/metamaps/Metamaps.Router.js b/app/assets/javascripts/metamaps/Metamaps.Router.js index 812b9108..7ecb49b3 100644 --- a/app/assets/javascripts/metamaps/Metamaps.Router.js +++ b/app/assets/javascripts/metamaps/Metamaps.Router.js @@ -14,7 +14,7 @@ }); Metamaps.Router = new Router(); Metamaps.Router.init = function () { - Backbone.history.start({ + /*Backbone.history.start({ pushState: true, root: '' }); @@ -30,6 +30,6 @@ evt.preventDefault(); Backbone.history.navigate(href.attr, true); } - }); + });*/ } })(); \ No newline at end of file diff --git a/app/assets/javascripts/metamaps/metamaps.js b/app/assets/javascripts/metamaps/metamaps.js index cc796c14..fdc97cfa 100644 --- a/app/assets/javascripts/metamaps/metamaps.js +++ b/app/assets/javascripts/metamaps/metamaps.js @@ -2261,8 +2261,8 @@ Metamaps.Topic = { } else { Metamaps.Visualize.mGraph.loadJSON(newnode); nodeOnViz = Metamaps.Visualize.mGraph.graph.getNode(newnode.id); - mapping.set('node', nodeOnViz); - mapping.updateNode(); // links the topic and the mapping to the node + topic.set('node', nodeOnViz); + topic.updateNode(); // links the topic and the mapping to the node nodeOnViz.setData("dim", 1, "start"); nodeOnViz.setData("dim", 25, "end"); From c7b768d7f498297a6ee7dedf06b8cec2f99f64e0 Mon Sep 17 00:00:00 2001 From: Robert Best Date: Sun, 3 Aug 2014 18:34:22 -0400 Subject: [PATCH 2/2] Finished selectWithBox using right click and made Ctrl and Shift work in the 'typical' way... Also, holdig alt now selects only nodes --- .../javascripts/metamaps/Metamaps.JIT.js | 128 ++++++++++++++++-- app/assets/javascripts/metamaps/metamaps.js | 13 +- 2 files changed, 125 insertions(+), 16 deletions(-) diff --git a/app/assets/javascripts/metamaps/Metamaps.JIT.js b/app/assets/javascripts/metamaps/Metamaps.JIT.js index c05677b6..8c6cb11e 100644 --- a/app/assets/javascripts/metamaps/Metamaps.JIT.js +++ b/app/assets/javascripts/metamaps/Metamaps.JIT.js @@ -307,7 +307,7 @@ Metamaps.JIT = { if (Metamaps.Mouse.boxStartCoordinates) { Metamaps.Visualize.mGraph.busy = false; Metamaps.Mouse.boxEndCoordinates = eventInfo.getPos(); - Metamaps.JIT.selectNodesWithBox(); + Metamaps.JIT.selectNodesWithBox(e); return; } @@ -331,7 +331,7 @@ Metamaps.JIT = { if (Metamaps.Mouse.boxStartCoordinates) { Metamaps.Visualize.mGraph.busy = false; Metamaps.Mouse.boxEndCoordinates = eventInfo.getPos(); - Metamaps.JIT.selectNodesWithBox(); + Metamaps.JIT.selectNodesWithBox(e); return; } @@ -885,12 +885,11 @@ Metamaps.JIT = { // 4 this node and others were selected, so drag them (just return false) //return value: deselect node again after? if (Metamaps.Selected.Nodes.length == 0) { - Metamaps.Control.selectNode(node); - return 'deselect'; + return 'only-drag-this-one'; } if (Metamaps.Selected.Nodes.indexOf(node) == -1) { if (e.shiftKey) { - Metamaps.Control.selectNode(node); + Metamaps.Control.selectNode(node,e); return 'nothing'; } else { return 'only-drag-this-one'; @@ -898,26 +897,131 @@ Metamaps.JIT = { } return 'nothing'; //case 4? }, // handleSelectionBeforeDragging - selectNodesWithBox: function () { + selectNodesWithBox: function (e) { var sX = Metamaps.Mouse.boxStartCoordinates.x, sY = Metamaps.Mouse.boxStartCoordinates.y, eX = Metamaps.Mouse.boxEndCoordinates.x, eY = Metamaps.Mouse.boxEndCoordinates.y; + + if(!(e.shiftKey) && !(e.ctrlKey)){ + Metamaps.Control.deselectAllNodes(); + Metamaps.Control.deselectAllEdges(); + } - + //select all nodes, and their edges, that are within the box Metamaps.Visualize.mGraph.graph.eachNode(function (n) { var x = n.pos.x, y = n.pos.y; if ((sX < x && x < eX && sY < y && y < eY) || (sX > x && x > eX && sY > y && y > eY) || (sX > x && x > eX && sY < y && y < eY) || (sX < x && x < eX && sY > y && y > eY)) { - var nodeIsSelected = Metamaps.Selected.Nodes.indexOf(n); - if (nodeIsSelected == -1) Metamaps.Control.selectNode(n); // the node is not selected, so select it - else if (nodeIsSelected != -1) Metamaps.Control.deselectNode(n); // the node is selected, so deselect it - + if(e.ctrlKey){ + if(n.selected){ + Metamaps.Control.deselectNode(n); + } + else{ + Metamaps.Control.selectNode(n,e); + } + } + else{ + Metamaps.Control.selectNode(n,e); + } } }); + //Convert selection box coordinates to traditional coordinates (+,+) in upper right + sY = -1 * sY; + eY = -1 * eY + + Metamaps.Synapses.each(function(synapse) { + var fromNodeX = synapse.get('edge').nodeFrom.pos.x; + var fromNodeY = -1 * synapse.get('edge').nodeFrom.pos.y; + var toNodeX = synapse.get('edge').nodeTo.pos.x; + var toNodeY = -1 * synapse.get('edge').nodeTo.pos.y; + + var maxX = fromNodeX; + var maxY = fromNodeY; + var minX = fromNodeX; + var minY = fromNodeY; + + //Correct maxX, MaxY values + (toNodeX > maxX) ? (maxX = toNodeX):(minX = toNodeX); + (toNodeY > maxY) ? (maxY = toNodeY):(minY = toNodeY); + + var maxBoxX = sX; + var maxBoxY = sY; + var minBoxX = sX; + var minBoxY = sY; + + //Correct maxBoxX, maxBoxY values + (eX > maxBoxX) ? (maxBoxX = eX):(minBoxX = eX); + (eY > maxBoxY) ? (maxBoxY = eY):(minBoxY = eY); + + //Fins the slopes from the synapse fromNode to the 4 corners of the selection box + var slopes = []; + slopes.push( (sY - fromNodeY) / (sX - fromNodeX) ); + slopes.push( (sY - fromNodeY) / (eX - fromNodeX) ); + slopes.push( (eY - fromNodeY) / (eX - fromNodeX) ); + slopes.push( (eY - fromNodeY) / (sX - fromNodeX) ); + + var minSlope = slopes[0]; + var maxSlope = slopes[0]; + slopes.forEach(function(entry){ + if(entry > maxSlope) maxSlope = entry; + if(entry < minSlope) minSlope = entry; + }); + + //Find synapse-in-question's slope + var synSlope = (toNodeY - fromNodeY) / (toNodeX - fromNodeX); + var b = fromNodeY - synSlope * fromNodeX; + + var selectTest = false; + + //if the synapse slope is within a range that would intersect with the selection box + if (synSlope <= maxSlope && synSlope >= minSlope){ + var testX = sX; + var testY = synSlope * testX + b; + + if(testX >= minX && testX <= maxX && testY >= minY && testY <= maxY && testY >= minBoxY && testY <= maxBoxY){ + selectTest = true; + } + + testX = eX; + testY = synSlope * testX + b; + + if(testX >= minX && testX <= maxX && testY >= minY && testY <= maxY && testY >= minBoxY && testY <= maxBoxY){ + selectTest = true; + } + + testY = sY; + testX = (testY - b)/synSlope; + + if(testX >= minX && testX <= maxX && testY >= minY && testY <= maxY && testX >= minBoxX && testY <= maxBoxX){ + selectTest = true; + } + + testY = eY; + testX = (testY - b)/synSlope; + + if(testX >= minX && testX <= maxX && testY >= minY && testY <= maxY && testX >= minBoxX && testY <= maxBoxX){ + selectTest = true; + } + } + //The test synapse was selected! + if(selectTest){ + if(e.ctrlKey){ + if(Metamaps.Selected.Edges.indexOf(synapse.get('edge')) != -1 ){ + Metamaps.Control.deselectEdge(synapse.get('edge')); + } + else{ + Metamaps.Control.selectEdge(synapse.get('edge')); + } + } + else{ + Metamaps.Control.selectEdge(synapse.get('edge')); + } + } + }); Metamaps.Mouse.boxStartCoordinates = false; Metamaps.Mouse.boxEndCoordinates = false; Metamaps.Visualize.mGraph.plot(); @@ -974,7 +1078,7 @@ Metamaps.JIT = { if (node.selected) { Metamaps.Control.deselectNode(node); } else { - Metamaps.Control.selectNode(node); + Metamaps.Control.selectNode(node,e); } //trigger animation to final styles Metamaps.Visualize.mGraph.fx.animate({ diff --git a/app/assets/javascripts/metamaps/metamaps.js b/app/assets/javascripts/metamaps/metamaps.js index ea0addf8..8c7ef841 100644 --- a/app/assets/javascripts/metamaps/metamaps.js +++ b/app/assets/javascripts/metamaps/metamaps.js @@ -1595,13 +1595,16 @@ Metamaps.Control = { init: function () { }, - selectNode: function (node) { + selectNode: function (node,e) { if (Metamaps.Selected.Nodes.indexOf(node) != -1) return; node.selected = true; node.setData('dim', 30, 'current'); - node.eachAdjacency(function (adj) { - Metamaps.Control.selectEdge(adj); - }); + if(!(e.ctrlKey) && !(e.altKey)){ + node.eachAdjacency(function (adj) { + Metamaps.Control.selectEdge(adj); + }); + } + Metamaps.Selected.Nodes.push(node); }, deselectAllNodes: function () { @@ -1614,9 +1617,11 @@ Metamaps.Control = { }, deselectNode: function (node) { delete node.selected; + /* node.eachAdjacency(function (adj) { Metamaps.Control.deselectEdge(adj); }); + */ node.setData('dim', 25, 'current'); //remove the node