function radialAxis()

in src/core/radialAxis.ts [29:224]


  function radialAxis(selection) {
    selection.each(function (data) {
      var g = d3.select(this);

      if (moment(data[0]).year() <= 0) {
        bc_origin = true;
      } else {
        bc_origin = false;
      }

      num_ticks = data.length;

      if (globals.segment_granularity === "days" && time.hour.count(time.day.floor(data[0]), time.day.ceil(data[num_ticks - 1])) > 24) {
        longer_than_a_day = true;
      } else {
        longer_than_a_day = false;
      }

      // stash the new scale and quantiles
      this.__chart__ = radial_axis_scale;

      // concentric track circles
      var radial_axis_tracks = g.selectAll(".radial_tracks")
        .data(d3.range(-1, track_bounds));

      var radial_axis_tracks_enter = radial_axis_tracks.enter()
        .append("g")
        .attr("class", "radial_tracks");

      radial_axis_tracks_enter.append("path")
        .attr("class", "rad_track")
        .attr("id", function (d, i) {
          return "rad_track" + i;
        })
        .attr("transform", function () {
          return "translate(" + x_pos + " ," + y_pos + ")";
        })
        .style("opacity", 0)
        .attr("d", d3.svg.arc()
          .innerRadius(function () {
            return globals.centre_radius;
          })
          .outerRadius(function () {
            return globals.centre_radius;
          })
          .startAngle(0)
          .endAngle(radial_axis_scale(final_quantile)));

      var radial_axis_tracks_update = radial_axis_tracks.transition()
        .duration(duration);

      var radial_axis_tracks_delayed_update = radial_axis_tracks.transition()
        .delay(function (d, i) {
          return duration + i / track_bounds * duration;
        })
        .duration(duration);

      var radial_axis_tracks_exit = radial_axis_tracks.exit().transition()
        .delay(duration)
        .duration(duration)
        .remove();

      radial_axis_tracks_update.selectAll(".rad_track")
        .attr("transform", function () {
          return "translate(" + x_pos + " ," + y_pos + ")";
        });

      radial_axis_tracks_delayed_update.selectAll(".rad_track")
        .style("opacity", 1)
        .attrTween("d", arcTween(d3.svg.arc()
          .innerRadius(function (d) {
            return globals.centre_radius + d * globals.track_height;
          })
          .outerRadius(function (d) {
            return globals.centre_radius + d * globals.track_height;
          })
          .startAngle(0)
          .endAngle(radial_axis_scale(final_quantile))));

      radial_axis_tracks_exit.selectAll(".rad_track")
        .attr("transform", function () {
          return "translate(" + x_pos + " ," + y_pos + ")";
        })
        .attrTween("d", arcTween(d3.svg.arc()
          .innerRadius(function () {
            return globals.centre_radius;
          })
          .outerRadius(function () {
            return globals.centre_radius;
          })
          .startAngle(0)
          .endAngle(radial_axis_scale(final_quantile))));

      // radial ticks
      var radial_axis_tick = g.selectAll(".radial_axis_tick")
        .data(data);

      var radial_axis_tick_enter = radial_axis_tick.enter()
        .append("g")
        .attr("class", "radial_axis_tick");

      var radial_axis_tick_exit = radial_axis_tick.exit().transition()
        .duration(duration)
        .remove();

      radial_axis_tick_enter.append("path")
        .attr("class", "radial_axis_tick_path")
        .style("opacity", 0)
        .attr("transform", function () {
          return "translate(" + x_pos + " ," + y_pos + ")";
        });

      radial_axis_tick_enter.append("text")
        .attr("class", "radial_axis_tick_label")
        .attr("text-anchor", "middle")
        .attr("dominant-baseline", "central")
        .style("opacity", 0)
        .text(function () {
          return "";
        })
        .attr("transform", function () {
          return "translate(" + x_pos + " ," + y_pos + ")";
        });

      var radial_axis_tick_update = radial_axis_tick.transition()
        .duration(duration);

      var radial_axis_tick_delayed_update = radial_axis_tick.transition()
        .delay(function (d, i) {
          return duration + i / data.length * duration;
        })
        .duration(duration);

      radial_axis_tick_update.select("path")
        .attr("transform", function () {
          return "translate(" + x_pos + " ," + y_pos + ")";
        });

      radial_axis_tick_delayed_update.select("path")
        .style("opacity", 1)
        .attrTween("d", arcTween(d3.svg.arc()
          .innerRadius(globals.centre_radius - globals.track_height)
          .outerRadius(globals.centre_radius + track_bounds * globals.track_height - 0.25 * unit_width)
          .startAngle(function (d) {
            return radial_axis_scale(d);
          })
          .endAngle(function (d) {
            return radial_axis_scale(d);
          })));

      radial_axis_tick_update.select("text")
        .style("opacity", 0)
        .text("")
        .attr("transform", function () {
          return "translate(" + x_pos + " ," + y_pos + ")";
        });

      radial_axis_tick_delayed_update.select("text")
        .style("opacity", 1)
        .attr("x", function (d) {
          return (globals.centre_radius + track_bounds * globals.track_height + 0.5 * unit_width) * Math.sin(radial_axis_scale(d));
        })
        .attr("y", function (d) {
          return -1 * (globals.centre_radius + track_bounds * globals.track_height + 0.5 * unit_width) * Math.cos(radial_axis_scale(d));
        })
        .text(function (d, i) {
          return formatTick(d, i);
        })
        .attr("transform", function (d) {
          var angle = radial_axis_scale(d) * (180 / Math.PI);
          if (angle > 90 && angle <= 180) {
            angle = angle + 180;
          } else if (angle < 270 && angle > 180) {
            angle = angle - 180;
          }
          return "translate(" + x_pos + " ," + y_pos + ")rotate(" + angle + "," + (globals.centre_radius + track_bounds * globals.track_height + 0.5 * unit_width) * Math.sin(radial_axis_scale(d)) + " ," + (-1 * (globals.centre_radius + track_bounds * globals.track_height + 0.5 * unit_width) * Math.cos(radial_axis_scale(d))) + ")";
        });

      radial_axis_tick_exit.select("path")
        .attrTween("d", arcTween(d3.svg.arc()
          .innerRadius(globals.centre_radius)
          .outerRadius(globals.centre_radius)
          .startAngle(function (d) {
            return radial_axis_scale(d);
          })
          .endAngle(function (d) {
            return radial_axis_scale(d);
          })));

      radial_axis_tick_exit.select("text")
        .text(function () {
          return "";
        });
    });
    d3.timer.flush();
  }