diff --git a/demo.html b/demo.html index 8035277..2a3cce8 100644 --- a/demo.html +++ b/demo.html @@ -36,7 +36,16 @@ graph: graph, nodeSelected: function(node){ console.log('Node selected: ' + JSON.stringify(node.data)); + }, + + nodeMouseUp: function(node, e){ + console.log('MouseUp on '+node.data.label); + }, + + nodeDoubleClick: function(node, e){ + console.log('Double clicked on '+node.data.label); } + }); }); diff --git a/springyui.js b/springyui.js index 2ae8d37..7ffb382 100755 --- a/springyui.js +++ b/springyui.js @@ -32,6 +32,8 @@ jQuery.fn.springy = function(params) { var repulsion = params.repulsion || 400.0; var damping = params.damping || 0.5; var nodeSelected = params.nodeSelected || null; + var nodeMouseUp = params.nodeMouseUp || null; + var nodeDoubleClick = params.nodeDoubleClick || null; var canvas = this[0]; var ctx = canvas.getContext("2d"); @@ -76,31 +78,48 @@ jQuery.fn.springy = function(params) { var nearest = null; var dragged = null; - jQuery(canvas).mousedown(function(e) { - var pos = jQuery(this).offset(); - var p = fromScreen({x: e.pageX - pos.left, y: e.pageY - pos.top}); - selected = nearest = dragged = layout.nearest(p); + function fireNodeEvent(method, e, callback){ - if (selected.node !== null) { - dragged.point.m = 10000.0; + var pos = jQuery(this).offset(); + var p = fromScreen({x: e.pageX - pos.left, y: e.pageY - pos.top}); + selected = nearest = dragged = layout.nearest(p); - if (nodeSelected) { - nodeSelected(selected.node); - } - } + if (selected.node !== null) { + dragged.point.m = 10000.0; - renderer.start(); + if (method) { + method(selected.node, e); + } + + if(callback){ + callback(selected.node); + } + + } + + renderer.start(); + + } + + jQuery(canvas).mousedown(function(e) { + fireNodeEvent.call(this, nodeSelected, e); }); + jQuery(canvas).mouseup(function(e) { + fireNodeEvent.call(this, nodeMouseUp, e); + }); + // Basic double click handler jQuery(canvas).dblclick(function(e) { - var pos = jQuery(this).offset(); - var p = fromScreen({x: e.pageX - pos.left, y: e.pageY - pos.top}); - selected = layout.nearest(p); - node = selected.node; - if (node && node.data && node.data.ondoubleclick) { - node.data.ondoubleclick(); - } + + fireNodeEvent.call(this, nodeDoubleClick, e, function(node){ + + if (node && node.data && node.data.ondoubleclick) { + node.data.ondoubleclick(e); + } + + }); + }); jQuery(canvas).mousemove(function(e) {