From 9cb974531bad63bae63e2b8099e68c4e6636488d Mon Sep 17 00:00:00 2001 From: Michael Hackstein Date: Mon, 8 Apr 2013 13:11:43 +0200 Subject: [PATCH] GraphViewer: EventDispatchion for edge-creation finished --- .../js/graphViewer/graph/eventDispatcher.js | 50 +++++++++++-------- .../specEvents/eventDispatcherSpec.js | 42 ++++++++++++++-- 2 files changed, 68 insertions(+), 24 deletions(-) diff --git a/html/admin/js/graphViewer/graph/eventDispatcher.js b/html/admin/js/graphViewer/graph/eventDispatcher.js index 980ef29a8c..56ba1232ce 100644 --- a/html/admin/js/graphViewer/graph/eventDispatcher.js +++ b/html/admin/js/graphViewer/graph/eventDispatcher.js @@ -71,14 +71,38 @@ function EventDispatcher(nodeShaper, edgeShaper, config) { if (eventlib.checkEdgeEditorConfig(config)) { var insert = new eventlib.InsertEdge(config), patch = new eventlib.PatchEdge(config), - del = new eventlib.DeleteEdge(config); - /* - self.events.CREATEEDGE = function(callback) { - return function() { - insert(callback); + del = new eventlib.DeleteEdge(config), + edgeStart = null, + didInsert = false; + + self.events.STARTCREATEEDGE = function(callback) { + return function(node) { + edgeStart = node; + didInsert = false; + if (callback !== undefined) { + callback(); + } } }; - */ + + self.events.CANCELCREATEEDGE = function(callback) { + return function() { + edgeStart = null; + if (callback !== undefined && !didInsert) { + callback(); + } + } + }; + + self.events.FINISHCREATEEDGE = function(callback) { + return function(node) { + if (edgeStart !== null && node !== edgeStart) { + insert(edgeStart, node, callback); + didInsert = true; + } + } + }; + self.events.PATCHEDGE = function(edge, getNewData, callback) { if (!_.isFunction(getNewData)) { throw "Please give a function to extract the new node data"; @@ -93,20 +117,6 @@ function EventDispatcher(nodeShaper, edgeShaper, config) { del(edge, callback); } }; - - /* - var insert = new eventlib.InsertEdge(config.edgeEditor); - self.events.CREATEEDGE = function(callback) { - return function() { - insert(callback); - } - }; - */ - self.events.CREATEEDGE = new eventlib.InsertEdge(config); - /* - self.events.PATCHEDGE = new eventlib.PatchEdge(config.edgeEditor); - self.events.DELETEEDGE = new eventlib.DeleteEdge(config.edgeEditor); - */ } }; diff --git a/html/admin/js/graphViewer/jasmine_test/specEvents/eventDispatcherSpec.js b/html/admin/js/graphViewer/jasmine_test/specEvents/eventDispatcherSpec.js index 77768f121c..45401f92cc 100644 --- a/html/admin/js/graphViewer/jasmine_test/specEvents/eventDispatcherSpec.js +++ b/html/admin/js/graphViewer/jasmine_test/specEvents/eventDispatcherSpec.js @@ -521,16 +521,44 @@ }); }); - it('should be able to bind the create edge event', function() { + it('should be able to bind the events to create an edge', function() { + nodes = [{_id: 1}, {_id: 2}, {_id: 3}]; + edges = [{source: nodes[0], target: nodes[2]}]; + nodeShaper.drawNodes(nodes); + edgeShaper.drawEdges(edges); + + var started = 0, + canceled = 0; + runs(function() { - dispatcher.bind($("svg"), "click", dispatcher.events.CREATEEDGE( + dispatcher.bind("nodes", "mousedown", dispatcher.events.STARTCREATEEDGE( + function() { + started++; + } + )); + dispatcher.bind("nodes", "mouseup", dispatcher.events.FINISHCREATEEDGE( function() { // Never reached as the spy stops propagation return 0; } )); + dispatcher.bind($("svg"), "mouseup", dispatcher.events.CANCELCREATEEDGE( + function() { + return canceled++; + } + )); + helper.simulateMouseEvent("mousedown", "1"); + helper.simulateMouseEvent("mouseup", "svg"); + + helper.simulateMouseEvent("mousedown", "1"); + helper.simulateMouseEvent("mouseup", "1-3"); + + helper.simulateMouseEvent("mousedown", "1"); + helper.simulateMouseEvent("mouseup", "1"); + + helper.simulateMouseEvent("mousedown", "1"); + helper.simulateMouseEvent("mouseup", "2"); - helper.simulateMouseEvent("click", "svg"); }); waitsFor(function() { @@ -538,7 +566,13 @@ }, 1000, "The event should have been triggered."); runs(function() { - expect(true).toBeTruthy(); + expect(started).toEqual(4); + expect(canceled).toEqual(3); + expect(adapter.createEdge.calls.length).toEqual(1); + expect(adapter.createEdge).toHaveBeenCalledWith({ + source: nodes[0], + target: nodes[1] + }, jasmine.any(Function)); }); });