svgutils.js

70 lines | 1.626 kB Blame History Raw Download
function hasClass(el, name) 
{
	var classes = el.getAttribute("class");
	if (classes == null) {
		return false;
	}
   return new RegExp('(\\s|^)'+name+'(\\s|$)').test(classes);
}

function addClass(el, name)
{
   if (!hasClass(el, name)) { 
   		var classes = el.getAttribute("class");
   		if (classes) {
   			classes += ' ' + name;
   		}
   		else {
   			classes = name;
   		}
   		el.setAttribute("class", classes);
   }
}

function removeClass(el, name)
{
   if (hasClass(el, name)) {
      var classes = el.getAttribute("class");
      el.setAttribute("class", classes.replace(new RegExp('(\\s|^)'+name+'(\\s|$)'),' ').replace(/^\s+|\s+$/g, ''));
   }
}

function translateStr(x, y) {
	return "translate(" + x + "," + y + ")"; 
}

function animatePolylineEdge(svg, edge, newPoints, time) {
	var oldEdgeGuides = edge.oldpoints;
	
	var interval = 10;
	var numsteps = time/interval;
	
	var deltaEdges = new Array();
 	for (var i=0; i < oldEdgeGuides.length; ++i) {
		var startPoint = oldEdgeGuides[i];
		var endPoint = newPoints[i];
		
		var deltaX = (endPoint[0] - startPoint[0])/numsteps;
		var deltaY = (endPoint[1] - startPoint[1])/numsteps;
		deltaEdges.push([deltaX, deltaY]);
	}
	
	animatePolyLineLoop(svg, edge, oldEdgeGuides, deltaEdges, numsteps, 25);
}

function animatePolyLineLoop(svg, edge, lastPoints, deltaEdges, step, time) {
	for (var i=0; i < deltaEdges.length; ++i) {
		lastPoints[i][0] += deltaEdges[i][0];
		lastPoints[i][1] += deltaEdges[i][1];
	}
	
	svg.change(edge.line, {points: lastPoints});
	if (step > 0) {
		setTimeout(
			function(){
				animatePolyLineLoop(svg, edge, lastPoints, deltaEdges, step - 1);
			}, 
			time
		);
	}
}