(function() { var drag, dragging, highlight, rota_1, svg, zoom, zoom_group; svg = d3.select('svg'); zoom_group = svg.select('#zoom_group'); zoom = d3.behavior.zoom().scaleExtent([1, 4]).on('zoom', function() { return zoom_group.attr({ transform: "translate(" + (zoom.translate()) + ")scale(" + (zoom.scale()) + ")" }); }); svg.call(zoom); rota_1 = svg.select('#rota_1').datum({ offset: 6, pinch_offset: null }); rota_1.transition().duration(1600).attr('transform', 'rotate(' + rota_1.datum().offset + ')'); dragging = false; drag = d3.behavior.drag().on('dragstart', function() { d3.event.sourceEvent.stopPropagation(); dragging = true; return d3.select(this).classed('highlighted', true); }).on('drag', function() { var angle, d, rota; rota = d3.select(this); d = rota.datum(); if (d.pinch_offset == null) { d.pinch_offset = 180 / Math.PI * Math.atan2(d3.event.y, d3.event.x) + 180 - d.offset; } angle = 180 / Math.PI * Math.atan2(d3.event.y, d3.event.x) + 180; d.offset = angle - d.pinch_offset; return rota.attr('transform', 'rotate(' + d.offset + ')'); }).on('dragend', function() { d3.select(this).datum().pinch_offset = null; dragging = false; return d3.select(this).classed('highlighted', false); }); highlight = function(rota) { return rota.on('mousemove', function() { if (!dragging) { return d3.select(this).classed('highlighted', true); } }).on('mouseout', function() { if (!dragging) { return d3.select(this).classed('highlighted', false); } }); }; rota_1.call(drag).call(highlight); d3.select(self.frameElement).style('height', '800px'); }).call(this);