define(['tools'], function(Tools){ var _ = Tools._; var Manager = Tools.Manager; function Labels(parent, scales, df_id, _options){ var options = { color: "#000", fill_by: null, x: null, text: null, stroke_width: 4, text_size: '1em', layer: 1 }; if(arguments.length>3)_.extend(options, _options); this.model = (function(){ var center = scales.getCenter(); return parent.append("g").attr('transform', 'translate(' + center.x + ',' + center.y + ')'); })(); this.scales = scales; this.df = Manager.getData(df_id); this.uuid = options.uuid; this.options = options; } Labels.prototype.update = function(){ var groups = this.scales.groups(); var thisObj = this; _.each(groups, function(group, i){ var x = thisObj.df.nested_column(i, thisObj.options.x); var text = thisObj.df.nested_column(i, thisObj.options.text); var data = thisObj.processData(group, x, text); thisObj.updateModels(data); }); }; Labels.prototype.processData = function(group, x, text){ var scales = this.scales, layer = this.options.layer; return _.filter(_.map(_.zip(x, text), function(row){ return {theta: scales.get(layer, group, row[0]).theta,text: row[1]}; }), function(row){return row.text != null && row.text.length > 0;}); }; Labels.prototype.updateModels = function(data){ var scales = this.scales, layer = this.options.layer, options = this.options; var inner_radius = scales.getRange(layer)[0]; var groups = this.model.append("g") .selectAll("g") .data(data) .enter() .append("g") .attr("transform", function(d){ return "rotate(" + 180*((d.theta-Math.PI/2)/Math.PI) + ")"; }); groups.append("text") .text(function(d){return d.text;}) .attr("text-anchor", "start") .attr("dominant-baseline", "middle") .attr("fill", options.color) .attr("x", inner_radius + 10) .attr("y", 0) .attr("font-size", options.text_size); groups.append("line") .attr("x1", inner_radius) .attr("x2", inner_radius + 5) .attr("y1", 0) .attr("y2", 0) .attr("stroke", "#000"); }; Labels.prototype.getLegend = function(){ return; }; Labels.prototype.checkSelectedData = function(ranges){ return; }; return Labels; });