| 
<?php 
 include_once '../d3.classes.inc.php';
 
 $vars = d3::variables(array("width" => 960, "height" => 700, "color" => d3()->scale->category20c()));
 stack()->add($vars);
 $radius= d3::variable(d3::unescape( d3::concat( Math()->min($vars->width()->get(), $vars->height()->get()) ), d3::unescape("/2") ), "radius" );
 stack()->add($radius->linebreak(2));
 
 $svg = d3()->select("body")->append("svg")->linebreak()->tab()
 ->attr("width", $vars->width()->get())->linebreak()->tab()
 ->attr("height", $vars->height()->get())->linebreak()->tab()
 ->append("g")->linebreak()->tab()->attr("transform", d3::unescape('"translate("+width/2+","+height*.52+")"'))
 ->createVar("svg");
 stack()->add($svg->linebreak());
 
 $partition = d3()->layout->partition()->linebreak()->tab()
 ->sort(d3::unescape("null"))->linebreak()->tab()
 ->size(array(d3::concat(2,"*", "Math.PI"), d3::concat($radius->getVar(), "*", $radius->getVar())))->linebreak()->tab()
 ->value(function($d){return 1;})
 ->createVar("partition");
 stack()->add($partition->linebreak());
 
 $arc = d3()->svg->arc()->linebreak()->tab()
 ->startAngle(function($d){return $d->x;})->linebreak()->tab()
 ->endAngle(function($d){return $d->x + $d->dx;})->linebreak()->tab()
 ->innerRadius(function($d){return Math()->sqrt($d->y);})->linebreak()->tab()
 ->outerRadius(function($d){return Math()->sqrt($d->y + $d->dy);})
 ->createVar("arc");
 stack()->add($arc->linebreak());
 
 
 $f = f3("error","root");
 
 $path = $svg->get()->datum(d3::unescape("root"))->selectAll("path")->linebreak()->tab()
 ->data($partition->get()->nodes(d3::property))->linebreak()->tab()
 ->enter()->append("path")->linebreak()->tab()
 ->attr("display", function($d){return $d->depth ? null: "none";})->linebreak()->tab()
 ->attr("d", $arc->get())->linebreak()->tab()
 ->style("stroke", "#fff")->linebreak()->tab()
 ->style("fill", function($d){$v=($d->children?$d:$d->parent);return color($v->name);})->linebreak()->tab()
 ->style("fill-rule", "evenodd")->linebreak()->tab()
 ->each(d3::unescape("stash"))
 ->createVar("path")
 ;
 $f->add($path->linebreak());
 
 $change = f3()->name("change");
 $change->add( d3::ternary('value = this.value === "count"', f3()->add("return 1;"), f3("d")->add("return d.size;") ) );
 
 $change->add( $path->get()
 ->data($partition->get()->value(d3::unescape("value"))->nodes(d3::property) )->linebreak()->tab()
 ->transition()->duration(1500)->linebreak()->tab()->attrTween("d", d3::unescape("arcTween"))
 ->colon()
 );
 
 $f->add(d3()->selectAll("input")->on("change", $change));
 
 $load = d3()->json("data/flare.json", $f);
 
 stack()->add($load->colon()->linebreak());
 
 stack()->add( f3("d")->name("stash")->add("d.x0=d.x;")->add("d.dx0=d.x;")->colon()->linebreak() );
 stack()->add( f3("a")->name("arcTween")->add("var i = d3.interpolate({x: a.x0, dx: a.dx0}, a);
 return function(t) {
 var b = i(t);
 a.x0 = b.x;
 a.dx0 = b.dx;
 return arc(b);
 };")->colon()->linebreak() );
 
 stack()->add( d3()->select(d3::unescape("self.frameElement"))->style("height", d3::concat($vars->height()->getVar(), '+"px"'))->colon() );
 
 
 ?><!DOCTYPE html>
 <head>
 <meta charset="utf-8">
 <style>
 
 body {
 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
 margin: auto;
 position: relative;
 width: 960px;
 }
 
 form {
 position: absolute;
 right: 10px;
 top: 10px;
 }
 </style>
 <?php echo d3::script()?>
 </head>
 <body>
 <form>
 <label><input type="radio" name="mode" value="size"> Size</label>
 <label><input type="radio" name="mode" value="count" checked> Count</label>
 </form>
 
 <script type="text/javascript">
 <?php echo stack()->getInstance();?>
 
 </script>
 </body>
 </html>
 
 |