diff options
Diffstat (limited to 'javascripts/graph.js')
| -rw-r--r-- | javascripts/graph.js | 48 | 
1 files changed, 29 insertions, 19 deletions
| diff --git a/javascripts/graph.js b/javascripts/graph.js index 1d7d17d..32353e3 100644 --- a/javascripts/graph.js +++ b/javascripts/graph.js @@ -1,5 +1,5 @@ -// source: http://raphaeljs.com/graffle.html (extended with labels and arrow heads) -Raphael.fn.connection = function (obj1, obj2, line, bg, strokeColor, symbol, labelFontSize) {	 +// Source: http://raphaeljs.com/graffle.html (extended with labels and arrow heads) +Raphael.fn.connection = function (obj1, obj2, line, bg, strokeColor, symbol, labelFontSize, name1, name2) {	      if (obj1.line && obj1.from && obj1.to) {          line = obj1;          obj1 = line.from; @@ -72,18 +72,20 @@ Raphael.fn.connection = function (obj1, obj2, line, bg, strokeColor, symbol, lab  			ah: this.circle(ahPoint.x, ahPoint.y, labelFontSize/4  					).attr({stroke: 'none', fill: strokeColor}),  			lbl: this.text(labelPoint.x+10, labelPoint.y+10, symbol -					).attr({fill:'#000', 'font-size': labelFontSize}) +					).attr({fill:'#000', 'font-size': labelFontSize}), +			name1: name1, +			name2: name2          };  		return ret;      };  }; -// source: http://stackoverflow.com/questions/2627436/svg-animation-along-path-with-raphael +// Source: http://stackoverflow.com/questions/2627436/svg-animation-along-path-with-raphael  Raphael.fn.circlePath = function(x , y, r) {        	return "M"+x+","+(y-r)+"A"+r+","+r+",0,1,1,"+(x-0.1)+","+(y-r)+" z";  }; -// nodes +// The nodes  Raphael.fn.aNode = function(x, y, r, isFinal, hasSelfConn, -			strokeWidth, strokeColor,labelText, labelFontSize) { +			strokeWidth, strokeColor,labelText, labelFontSize, name) {  	var res = this.set();  	// two circle element for dragging and binding connections  	var connector = this.circle(x, y, r).attr({stroke:0}).attr({fill: 'none'}); @@ -136,15 +138,20 @@ Raphael.fn.aNode = function(x, y, r, isFinal, hasSelfConn,  	if (isFinal) {  		res.push(ci);  	}; -	return res; +	return { +		node: res, +		name: name +	};  }; -// source: http://www.davidcramer.net/code/63/dir-in-javascript.html +// Source: http://www.davidcramer.net/code/63/dir-in-javascript.html  function dir(object) {      methods = [];      for (z in object) if (typeof(z) != 'number') methods.push(z);      return methods.join(', ');  }; + +// Drawing the graph.  function graph() {  	var nodeRadius 	 = 30;  	var nodeRadiusHi = nodeRadius + 10; @@ -162,8 +169,8 @@ function graph() {  	},  		move = function (dx, dy) {  			this.moveTo(dx, dy); -			for (var i = nodeById[this.id].length - 1; i >= 0; i--){ -				nodeById[this.id][i].translate(dx, dy); +			for (var i = nodeById[this.id].node.length - 1; i >= 0; i--){ +				nodeById[this.id].node[i].translate(dx, dy);  			};  			for (var i = connections.length; i--;) {  				r.connection(connections[i]); @@ -174,8 +181,9 @@ function graph() {  			this.animate({r:nodeRadius, opacity:nodeOpacity}, 500, ">");  		};  	// nodes -	var nodes 		= []; -	var nodeById	= []; +	var nodes 			= []; +	var nodeById		= []; +	var graphNodeByName = [];  	var i = 0, n, color, isFinal, selfConn = false, selfConnSymbol;  	var nx 	     = 30;  	var nxOffset = 100; @@ -204,11 +212,12 @@ function graph() {  			ny = ny + nyOffset;  		};  		n = r.aNode(nx, ny, nodeRadius, isFinal, selfConn, -					strokeWidth, strokeColor, symbol, labelFontSize); -		n[1].attr({fill:color, opacity:nodeOpacity, cursor:'move'}); -		n[1].drag(move, start, up); +					strokeWidth, strokeColor, symbol, labelFontSize, state); +		n.node[1].attr({fill:color, opacity:nodeOpacity, cursor:'move'}); +		n.node[1].drag(move, start, up);  		nodes.push(n); -		nodeById[n[1].id] = nodes[i]; +		nodeById[n.node[1].id] = nodes[i]; +		graphNodeByName[state] = n;  		nx = nx + nxOffset;  		i++;  	}; @@ -224,8 +233,9 @@ function graph() {  						if (state == statex) {  							continue;  						} else { -							connections.push(r.connection(nodes[k][0], nodes[l][0], -								strokeColor, strokeColor, strokeColor, ALPHABET[i], labelFontSize));								 +							connections.push(r.connection(nodes[k].node[0], nodes[l].node[0], +								strokeColor, strokeColor, strokeColor, ALPHABET[i], labelFontSize, +								nodes[k].name, nodes[l].name));								  						};  					};  					l++; @@ -239,6 +249,6 @@ function graph() {  		nodes: nodes,  		nodeById: nodeById,  		connections: connections, -		test: 'test' +		graphNodeByName: graphNodeByName  	};  }; | 
