JSFiddle - React, Tailwind, and code Playground

by Rajagopal CR

HTML

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<script src="http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore-min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/d3/3.4.9/d3.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.2/backbone.js"></script>
  <button onclick="changeStyle()">Change Style</button>

JavaScript

var width=500;
var height=500;
var radius=800;

var svgcontainer=d3.select("body").append("svg")
								  .attr("width",width)
								  .attr("height",height)
								  .append("g").attr("id","container")
								  .attr("transform","translate(100,500)");

var json={"name":"Main","children":[{"name":"sub1"},{"name":"sub2"},{"name":"sub3"},{"name":"sub4"},{"name":"sub5"}]};

var partition=d3.layout.partition().size([Math.PI/2, radius]).value(function (d) { return d.depth; });

var node=partition.nodes(json);

var arc=d3.svg.arc()
              .startAngle(function (d) {return d.x;})
              .endAngle(function (d) { return d.x + d.dx - 0.01 / (d.depth + 2.6); })
              .innerRadius(function (d) {return radius / 5 * d.depth;})
              .outerRadius(function (d) {return radius / 5 * (d.depth + 1) - 1;});    

var paths=svgcontainer.selectAll("path")
                      .data(node)
                      .enter()
                      .append("path")
                      .attr("d",arc)
                      .style("fill","red")
                      .style("opacity", 1)
                      .on("click",changeStyle)
                      .style("stroke","#c8c8c8");

svgcontainer.selectAll("text")
			.data(node)
            .enter()
            .append("svg:text")
            .attr("transform", function(d) { return "translate("+arc.centroid(d)+")rotate(" + (d.x + d.dx / 2 - Math.PI / 2) / Math.PI * 180 + ")"})
            .attr("text-anchor","middle")
            .text(names);

function changeStyle(){
    paths.transition()
         .duration(750)
         .attrTween("d", arcTween(d));
}

function arcTween(d) {
  var my = maxY(d),
      xd = d3.interpolate(x.domain(), [d.x, d.x + d.dx]),
      yd = d3.interpolate(y.domain(), [d.y, my]),
      yr = d3.interpolate(y.range(), [d.y ? 20 : 0, radius]);
  return function(d) {
    return function(t) { x.domain(xd(t)); y.domain(yd(t)).range(yr(t)); return arc(d); };
  };
}


function names(d){
    return...