d3.demo.util = {}; d3.demo.util.bringToFront = function(element) { element.parentNode.appendChild(element); }; d3.demo.util.getXYFromTranslate = function(translateString) { var split = translateString.split(","); var x = split[0] ? ~~split[0].split("(")[1] : 0; var y = split[1] ? ~~split[1].split(")")[0] : 0; return [x, y]; }; d3.demo.util.getXYFromTranslateOnNode = function(element) { return d3.demo.util.getXYFromTranslate(element.getAttribute("transform")); }; d3.demo.util.makePoint = function(element, sourceElement, xy) { var p = element.nearestViewportElement.createSVGPoint(); var matrix = element.getTransformToElement(sourceElement.nearestViewportElement); //matrix.scale(d3.demo.scale); matrix.scale(1); p.x = xy[0]; p.y = xy[1]; var sp = p.matrixTransform(matrix); return sp; }; d3.demo.util.getScreenCoords = function(x, y, translate, scale) { var xn = (x - translate[0]) / scale; var yn = (y - translate[1]) / scale; return { x: xn, y: yn }; }; d3.demo.util.getCTMCoords = function(x, y, ctm) { var xn = ctm.e + x * ctm.a; var yn = ctm.f + y * ctm.d; return { x: xn, y: yn }; }; d3.demo.util.uuid = function() { return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4(); }; function s4() { return Math.floor((1 + Math.random()) * 0x10000) .toString(16) .substring(1); } function log(message, args) { console.log(message, args); }