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));
});
});