Merge branch 'mbostock-master'

Release 1.7.0. Adds partition & hierarchy layouts, step-{before,after}
interpolation for line & area, sorting for treemaps, and a few bug fixes for
time format. Oh, and a bunch of tests!
This commit is contained in:
Michael Bostock 2011-03-12 21:52:00 -08:00
Родитель 3fbded484a a00c9a5631
Коммит e6b0924aa8
40 изменённых файлов: 1271 добавлений и 358 удалений

Просмотреть файл

@ -95,8 +95,10 @@ d3.layout.js: \
src/layout/layout.js \
src/layout/chord.js \
src/layout/force.js \
src/layout/partition.js \
src/layout/pie.js \
src/layout/stack.js \
src/layout/hierarchy.js \
src/layout/treemap.js \
src/end.js
@ -138,10 +140,16 @@ tests: \
tests/test-attr.test \
tests/test-call.test \
tests/test-format.test \
tests/test-time-format.test \
tests/test-time-parse.test \
tests/test-transition.test \
tests/test-scale-linear.test \
tests/test-scale-sqrt.test \
tests/test-scale-pow.test
tests/test-scale-pow.test \
tests/test-svg-arc.test \
tests/test-svg-area.test \
tests/test-svg-line.test \
tests/test-svg-symbol.test
%.min.js: %.js Makefile
@rm -f $@
@ -152,7 +160,7 @@ d3.js d3%.js: Makefile
cat $(filter %.js,$^) > $@
@chmod a-w $@
%.test: %.js %.out d3.js
%.test: %.js %.out all
@/bin/echo -n "test: $* "
@node $< > $*.actual
@diff -U 3 $*.out $*.actual && rm -f $*.actual \

123
d3.js поставляемый
Просмотреть файл

@ -1,4 +1,4 @@
(function(){d3 = {version: "1.6.1"}; // semver
(function(){d3 = {version: "1.7.0"}; // semver
if (!Date.now) Date.now = function() {
return +new Date();
};
@ -28,12 +28,12 @@ function d3_functor(v) {
return typeof v == "function" ? v : function() { return v; };
}
// A getter-setter method that preserves the appropriate `this` context.
function d3_rebind(object, method) {
d3.rebind = function(object, method) {
return function() {
var x = method.apply(object, arguments);
return arguments.length ? object : x;
};
}
};
d3.ascending = function(a, b) {
return a < b ? -1 : a > b ? 1 : 0;
};
@ -2060,9 +2060,9 @@ d3.scale.log = function() {
return scale;
};
scale.range = d3_rebind(scale, linear.range);
scale.rangeRound = d3_rebind(scale, linear.rangeRound);
scale.interpolate = d3_rebind(scale, linear.interpolate);
scale.range = d3.rebind(scale, linear.range);
scale.rangeRound = d3.rebind(scale, linear.rangeRound);
scale.interpolate = d3.rebind(scale, linear.interpolate);
scale.ticks = function() {
var d = linear.domain(),
@ -2117,9 +2117,9 @@ d3.scale.pow = function() {
return scale;
};
scale.range = d3_rebind(scale, linear.range);
scale.rangeRound = d3_rebind(scale, linear.rangeRound);
scale.interpolate = d3_rebind(scale, linear.interpolate);
scale.range = d3.rebind(scale, linear.range);
scale.rangeRound = d3.rebind(scale, linear.rangeRound);
scale.interpolate = d3.rebind(scale, linear.interpolate);
scale.ticks = tick.ticks;
scale.tickFormat = tick.tickFormat;
@ -2481,12 +2481,10 @@ d3.svg.line = function() {
return line;
};
/**
* @private Converts the specified array of data into an array of points
* (x-y tuples), by evaluating the specified `x` and `y` functions on each
* data point. The `this` context of the evaluated functions is the specified
* "self" object; each function is passed the current datum and index.
*/
// Converts the specified array of data into an array of points
// (x-y tuples), by evaluating the specified `x` and `y` functions on each
// data point. The `this` context of the evaluated functions is the specified
// "self" object; each function is passed the current datum and index.
function d3_svg_linePoints(self, d, x, y) {
var points = [],
i = -1,
@ -2509,34 +2507,28 @@ function d3_svg_linePoints(self, d, x, y) {
return points;
}
/**
* @private The default `x` property, which references d[0].
*/
// The default `x` property, which references d[0].
function d3_svg_lineX(d) {
return d[0];
}
/**
* @private The default `y` property, which references d[1].
*/
// The default `y` property, which references d[1].
function d3_svg_lineY(d) {
return d[1];
}
/**
* @private The various interpolators supported by the `line` class.
*/
// The various interpolators supported by the `line` class.
var d3_svg_lineInterpolators = {
"linear": d3_svg_lineLinear,
"step-before": d3_svg_lineStepBefore,
"step-after": d3_svg_lineStepAfter,
"basis": d3_svg_lineBasis,
"basis-closed": d3_svg_lineBasisClosed,
"cardinal": d3_svg_lineCardinal,
"cardinal-closed": d3_svg_lineCardinalClosed
};
/**
* @private Linear interpolation; generates "L" commands.
*/
// Linear interpolation; generates "L" commands.
function d3_svg_lineLinear(points) {
var path = [],
i = 0,
@ -2547,27 +2539,46 @@ function d3_svg_lineLinear(points) {
return path.join("");
}
/**
* @private Closed cardinal spline interpolation; generates "C" commands.
*/
// Step interpolation; generates "H" and "V" commands.
function d3_svg_lineStepBefore(points) {
var path = [],
i = 0,
n = points.length,
p = points[0];
path.push(p[0], ",", p[1]);
while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]);
return path.join("");
}
// Step interpolation; generates "H" and "V" commands.
function d3_svg_lineStepAfter(points) {
var path = [],
i = 0,
n = points.length,
p = points[0];
path.push(p[0], ",", p[1]);
while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]);
return path.join("");
}
// Closed cardinal spline interpolation; generates "C" commands.
function d3_svg_lineCardinalClosed(points, tension) {
if (points.length < 3) return d3_svg_lineLinear(points);
return points[0] + d3_svg_lineHermite(points,
d3_svg_lineCardinalTangents([points[points.length - 2]].concat(points, [points[1]]), tension));
return points.length < 3
? d3_svg_lineLinear(points)
: points[0] + d3_svg_lineHermite(points,
d3_svg_lineCardinalTangents([points[points.length - 2]]
.concat(points, [points[1]]), tension));
}
/**
* @private Cardinal spline interpolation; generates "C" commands.
*/
// Cardinal spline interpolation; generates "C" commands.
function d3_svg_lineCardinal(points, tension, closed) {
if (points.length < 3) return d3_svg_lineLinear(points);
return points[0] + d3_svg_lineHermite(points,
d3_svg_lineCardinalTangents(points, tension));
return points.length < 3
? d3_svg_lineLinear(points)
: points[0] + d3_svg_lineHermite(points,
d3_svg_lineCardinalTangents(points, tension));
}
/**
* @private Hermite spline construction; generates "C" commands.
*/
// Hermite spline construction; generates "C" commands.
function d3_svg_lineHermite(points, tangents) {
if (tangents.length < 1
|| (points.length != tangents.length
@ -2614,9 +2625,7 @@ function d3_svg_lineHermite(points, tangents) {
return path;
}
/**
* @private Generates tangents for a cardinal spline.
*/
// Generates tangents for a cardinal spline.
function d3_svg_lineCardinalTangents(points, tension) {
var tangents = [],
a = (1 - tension) / 2,
@ -2635,9 +2644,7 @@ function d3_svg_lineCardinalTangents(points, tension) {
return tangents;
}
/**
* @private Open B-spline interpolation; generates "C" commands.
*/
// Open B-spline interpolation; generates "C" commands.
function d3_svg_lineBasis(points) {
if (points.length < 3) return d3_svg_lineLinear(points);
var path = [],
@ -2665,9 +2672,7 @@ function d3_svg_lineBasis(points) {
return path.join("");
}
/**
* @private Closed B-spline interpolation; generates "C" commands.
*/
// Closed B-spline interpolation; generates "C" commands.
function d3_svg_lineBasisClosed(points) {
var path,
i = -1,
@ -2694,25 +2699,19 @@ function d3_svg_lineBasisClosed(points) {
return path.join("");
}
/**
* @private Returns the dot product of the given four-element vectors.
*/
// Returns the dot product of the given four-element vectors.
function d3_svg_lineDot4(a, b) {
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
}
/*
* @private Matrix to transform basis (b-spline) control points to bezier
* control points. Derived from FvD 11.2.8.
*/
// Matrix to transform basis (b-spline) control points to bezier
// control points. Derived from FvD 11.2.8.
var d3_svg_lineBasisBezier1 = [0, 2/3, 1/3, 0],
d3_svg_lineBasisBezier2 = [0, 1/3, 2/3, 0],
d3_svg_lineBasisBezier3 = [0, 1/6, 2/3, 1/6];
/**
* @private Pushes a "C" Bézier curve onto the specified path array, given the
* two specified four-element arrays which define the control points.
*/
// Pushes a "C" Bézier curve onto the specified path array, given the
// two specified four-element arrays which define the control points.
function d3_svg_lineBasisBezier(path, x, y) {
path.push(
"C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x),

Просмотреть файл

@ -338,6 +338,58 @@ d3.layout.force = function() {
return force;
};
d3.layout.partition = function() {
var hierarchy = d3.layout.hierarchy(),
size = [1, 1]; // width, height
function position(node, x, dx, dy) {
var children = node.children;
node.x = x;
node.y = node.depth * dy;
node.dx = dx;
node.dy = dy;
if (children) {
var i = -1,
n = children.length,
c,
d;
dx /= node.value;
while (++i < n) {
position(c = children[i], x, d = c.value * dx, dy);
x += d;
}
}
}
function depth(node) {
var children = node.children,
d = 0;
if (children) {
var i = -1,
n = children.length;
while (++i < n) d = Math.max(d, depth(children[i]));
}
return 1 + d;
}
function partition(d, i) {
var nodes = hierarchy.call(this, d, i);
position(nodes[0], 0, size[0], size[1] / depth(nodes[0]));
return nodes;
}
partition.sort = d3.rebind(partition, hierarchy.sort);
partition.children = d3.rebind(partition, hierarchy.children);
partition.value = d3.rebind(partition, hierarchy.value);
partition.size = function(x) {
if (!arguments.length) return size;
size = x;
return partition;
};
return partition;
};
d3.layout.pie = function() {
var value = Number,
sort = null,
@ -595,18 +647,15 @@ function d3_layout_stackMaxIndex(array) {
function d3_layout_stackSum(p, d) {
return p + d.y;
}
// Squarified Treemaps by Mark Bruls, Kees Huizing, and Jarke J. van Wijk
d3.layout.treemap = function() {
var children = d3_layout_treemapChildren,
value = d3_layout_treemapValue,
round = Math.round,
size = [1, 1]; // width, height
d3.layout.hierarchy = function() {
var sort = d3_layout_hierarchySort,
children = d3_layout_hierarchyChildren,
value = d3_layout_hierarchyValue;
// Recursively compute the node depth and value.
// Also converts the data representation into a standard tree structure.
// Also sorts child nodes by descending value to optimize squarification.
function sum(data, depth, nodes) {
var datas = children.call(treemap, data, depth),
// Also converts the data representation into a standard hierarchy structure.
function recurse(data, depth, nodes) {
var datas = children.call(hierarchy, data, depth),
node = {depth: depth, data: data};
nodes.push(node);
if (datas) {
@ -616,20 +665,65 @@ d3.layout.treemap = function() {
v = 0,
j = depth + 1;
while (++i < n) {
d = sum(datas[i], j, nodes);
d = recurse(datas[i], j, nodes);
if (d.value > 0) { // ignore NaN, negative, etc.
c.push(d);
v += d.value;
d.parent = node;
}
}
if (sort) c.sort(sort);
node.value = v;
} else {
node.value = value.call(treemap, data, depth);
node.value = value.call(hierarchy, data, depth);
}
if (!depth) scale(node, size[0] * size[1] / node.value); // root
return node;
}
function hierarchy(d) {
var nodes = [];
recurse(d, 0, nodes);
return nodes;
}
hierarchy.sort = function(x) {
if (!arguments.length) return sort;
sort = x;
return hierarchy;
};
hierarchy.children = function(x) {
if (!arguments.length) return children;
children = x;
return hierarchy;
};
hierarchy.value = function(x) {
if (!arguments.length) return value;
value = x;
return hierarchy;
};
return hierarchy;
}
function d3_layout_hierarchyChildren(d) {
return d.children;
}
function d3_layout_hierarchyValue(d) {
return d.value;
}
function d3_layout_hierarchySort(a, b) {
return b.value - a.value;
}
// Squarified Treemaps by Mark Bruls, Kees Huizing, and Jarke J. van Wijk
d3.layout.treemap = function() {
var hierarchy = d3.layout.hierarchy(),
round = Math.round,
size = [1, 1]; // width, height
// Recursively compute the node area based on value & scale.
function scale(node, k) {
var children = node.children;
@ -642,11 +736,12 @@ d3.layout.treemap = function() {
}
// Recursively arranges the specified node's children into squarified rows.
// Also sorts child nodes by descending value to optimize squarification.
function squarify(node) {
if (!node.children) return;
var rect = {x: node.x, y: node.y, dx: node.dx, dy: node.dy},
row = [],
children = node.children.slice().sort(d3_layout_treemapSort),
children = node.children.slice(), // copy-on-write
child,
best = Infinity, // the best row score so far
score, // the current row score
@ -727,28 +822,21 @@ d3.layout.treemap = function() {
}
}
function treemap(d) {
var nodes = [],
root = sum(d, 0, nodes);
function treemap(d, i) {
var nodes = hierarchy.call(this, d, i),
root = nodes[0];
root.x = 0;
root.y = 0;
root.dx = size[0];
root.dy = size[1];
scale(root, size[0] * size[1] / root.value);
squarify(root);
return nodes;
}
treemap.children = function(x) {
if (!arguments.length) return children;
children = x;
return treemap;
};
treemap.value = function(x) {
if (!arguments.length) return value;
value = x;
return treemap;
};
treemap.sort = d3.rebind(treemap, hierarchy.sort);
treemap.children = d3.rebind(treemap, hierarchy.children);
treemap.value = d3.rebind(treemap, hierarchy.value);
treemap.size = function(x) {
if (!arguments.length) return size;
@ -764,16 +852,4 @@ d3.layout.treemap = function() {
return treemap;
};
function d3_layout_treemapChildren(d) {
return d.children;
}
function d3_layout_treemapValue(d) {
return d.value;
}
function d3_layout_treemapSort(a, b) {
return b.area - a.area;
}
})()

30
d3.layout.min.js поставляемый
Просмотреть файл

@ -1,14 +1,16 @@
(function(){function A(e){return e.reduce(B,0)}function C(e){for(var h=1,k=0,i=e[0].y,l,j=e.length;h<j;++h)if((l=e[h].y)>i){k=h;i=l}return k}function B(e,h){return e+h.y}function D(e){return e.children}function E(e){return e.value}function F(e,h){return h.area-e.area}d3.layout={};d3.layout.chord=function(){function e(){var b={},g=[],m=d3.range(f),s=[],o,p,t,r,u;i=[];l=[];o=0;for(r=-1;++r<f;){p=0;for(u=-1;++u<f;)p+=j[r][u];g.push(p);s.push(d3.range(f));o+=p}q&&m.sort(function(y,x){return q(g[y],g[x])});
a&&s.forEach(function(y,x){y.sort(function(G,H){return a(j[x][G],j[x][H])})});o=(2*Math.PI-n*f)/o;p=0;for(r=-1;++r<f;){t=p;for(u=-1;++u<f;){var v=m[r],w=s[r][u],z=j[v][w];b[v+"-"+w]={index:v,subindex:w,startAngle:p,endAngle:p+=z*o,value:z}}l.push({index:v,startAngle:t,endAngle:p,value:(p-t)/o});p+=n}for(r=-1;++r<f;)for(u=r-1;++u<f;){m=b[r+"-"+u];s=b[u+"-"+r];if(m.value||s.value)i.push({source:m,target:s})}c&&h()}function h(){i.sort(function(b,g){b=Math.min(b.source.value,b.target.value);g=Math.min(g.source.value,
g.target.value);return c(b,g)})}var k={},i,l,j,f,n=0,q,a,c;k.matrix=function(b){if(!arguments.length)return j;f=(j=b)&&j.length;i=l=null;return k};k.padding=function(b){if(!arguments.length)return n;n=b;i=l=null;return k};k.sortGroups=function(b){if(!arguments.length)return q;q=b;i=l=null;return k};k.sortSubgroups=function(b){if(!arguments.length)return a;a=b;i=null;return k};k.sortChords=function(b){if(!arguments.length)return c;c=b;i&&h();return k};k.chords=function(){i||e();return i};k.groups=
function(){l||e();return l};return k};d3.layout.force=function(){function e(){var a=q.length,c,b,g,m,s,o,p;for(c=0;c<a;++c){b=q[c];g=b.source;m=b.target;o=m.x-g.x;p=m.y-g.y;if(s=Math.sqrt(o*o+p*p)){s=l/(b.distance*b.distance)*(s-j*b.distance)/s;o*=s;p*=s;if(!m.fixed){m.x-=o;m.y-=p}if(!g.fixed){g.x+=o;g.y+=p}}}k.tick.dispatch({type:"tick"});return(l*=0.99)<0.0050}var h={},k=d3.dispatch("tick"),i=[1,1],l=0.5,j=30,f,n,q;h.on=function(a,c){k[a].add(c);return h};h.nodes=function(a){if(!arguments.length)return f;
f=a;return h};h.links=function(a){if(!arguments.length)return n;n=a;return h};h.size=function(a){if(!arguments.length)return i;i=a;return h};h.distance=function(a){if(!arguments.length)return j;j=a;return h};h.start=function(){var a,c,b,g=f.length;b=n.length;var m=i[0],s=i[1],o=[];for(a=0;a<g;++a){c=f[a];c.x=c.x||Math.random()*m;c.y=c.y||Math.random()*s;c.fixed=0;o[a]=[];for(c=0;c<g;++c)o[a][c]=Infinity;o[a][a]=0}for(a=0;a<b;++a){c=n[a];o[c.source][c.target]=1;o[c.target][c.source]=1;c.source=f[c.source];
c.target=f[c.target]}for(b=0;b<g;++b)for(a=0;a<g;++a)for(c=0;c<g;++c)o[a][c]=Math.min(o[a][c],o[a][b]+o[b][c]);q=[];for(a=0;a<g;++a)for(c=a+1;c<g;++c)q.push({source:f[a],target:f[c],distance:o[a][c]*o[a][c]});q.sort(function(p,t){return p.distance-t.distance});d3.timer(e);return h};h.resume=function(){l=0.1;d3.timer(e);return h};h.stop=function(){l=0;return h};h.drag=function(){function a(){if(c){var g=d3.svg.mouse(b);c.x=g[0];c.y=g[1];h.resume()}}var c,b;this.on("mouseover",function(g){g.fixed=true}).on("mouseout",
function(g){if(g!=c)g.fixed=false}).on("mousedown",function(g){(c=g).fixed=true;b=this;d3.event.preventDefault()});d3.select(window).on("mousemove",a).on("mouseup",function(){if(c){a();c.fixed=false;c=b=null}});return h};return h};d3.layout.pie=function(){function e(j){var f=+(typeof i=="function"?i.apply(this,arguments):i),n=(typeof l=="function"?l.apply(this,arguments):l)-i,q=d3.range(j.length);k!=null&&q.sort(function(b,g){return k(j[b],j[g])});var a=j.map(h);n/=a.reduce(function(b,g){return b+
g},0);var c=q.map(function(b){return{value:d=a[b],startAngle:f,endAngle:f+=d*n}});return j.map(function(b,g){return c[q[g]]})}var h=Number,k=null,i=0,l=2*Math.PI;e.value=function(j){if(!arguments.length)return h;h=j;return e};e.sort=function(j){if(!arguments.length)return k;k=j;return e};e.startAngle=function(j){if(!arguments.length)return i;i=j;return e};e.endAngle=function(j){if(!arguments.length)return l;l=j;return e};return e};d3.layout.stack=function(){function e(i){var l=i.length,j=i[0].length,
f,n,q,a=I[h](i);J[k](i,a);for(n=0;n<j;++n){f=1;for(q=i[a[0]][n].y0;f<l;++f)i[a[f]][n].y0=q+=i[a[f-1]][n].y}return i}var h="default",k="zero";e.order=function(i){if(!arguments.length)return h;h=i;return e};e.offset=function(i){if(!arguments.length)return k;k=i;return e};return e};var I={"inside-out":function(e){var h=e.length,k,i=e.map(C),l=e.map(A),j=d3.range(h).sort(function(c,b){return i[c]-i[b]}),f=0,n=0,q=[],a=[];for(e=0;e<h;e++){k=j[e];if(f<n){f+=l[k];q.push(k)}else{n+=l[k];a.push(k)}}return a.reverse().concat(q)},
reverse:function(e){return d3.range(e.length).reverse()},"default":function(e){return d3.range(e.length)}},J={silhouette:function(e,h){var k=e.length,i=e[0].length,l=[],j=0,f,n,q;for(n=0;n<i;++n){for(q=f=0;f<k;f++)q+=e[f][n].y;if(q>j)j=q;l.push(q)}n=0;for(f=h[0];n<i;++n)e[f][n].y0=(j-l[n])/2},wiggle:function(e,h){var k=e.length,i=e[0],l=i.length,j,f,n,q,a,c=h[0],b,g,m,s,o,p;e[c][0].y0=o=p=0;for(f=1;f<l;++f){for(b=j=0;j<k;++j)b+=e[j][f].y;g=j=0;for(s=i[f].x-i[f-1].x;j<k;++j){n=0;q=h[j];for(m=(e[q][f].y-
e[q][f-1].y)/(2*s);n<j;++n)m+=(e[a=h[n]][f].y-e[a][f-1].y)/s;g+=m*e[q][f].y}e[c][f].y0=o-=b?g/b*s:0;if(o<p)p=o}for(f=0;f<l;++f)e[c][f].y0-=p},zero:function(e,h){for(var k=0,i=e[0].length,l=h[0];k<i;++k)e[l][k].y0=0}};d3.layout.treemap=function(){function e(a,c,b){var g=j.call(l,a,c),m={depth:c,data:a};b.push(m);if(g){a=-1;for(var s=g.length,o=m.children=[],p=0,t=c+1;++a<s;){d=e(g[a],t,b);if(d.value>0){o.push(d);p+=d.value}}m.value=p}else m.value=f.call(l,a,c);c||h(m,q[0]*q[1]/m.value);return m}function h(a,
c){var b=a.children;a.area=a.value*c;if(b)for(var g=-1,m=b.length;++g<m;)h(b[g],c)}function k(a){if(a.children){var c={x:a.x,y:a.y,dx:a.dx,dy:a.dy},b=[],g=a.children.slice().sort(F),m,s=Infinity,o=Math.min(c.dx,c.dy);for(b.area=0;(m=g.length)>0;){b.push(m=g[m-1]);b.area+=m.area;m=o;for(var p=b.area,t=void 0,r=0,u=Infinity,v=-1,w=b.length;++v<w;){t=b[v].area;if(t<u)u=t;if(t>r)r=t}p*=p;m*=m;if((m=Math.max(m*r/p,p/(m*u)))<=s){g.pop();s=m}else{b.area-=b.pop().area;i(b,o,c,false);o=Math.min(c.dx,c.dy);
b.length=b.area=0;s=Infinity}}if(b.length){i(b,o,c,true);b.length=b.area=0}a.children.forEach(k)}}function i(a,c,b,g){var m=-1,s=a.length,o=b.x,p=b.y,t=c?n(a.area/c):0,r;if(c==b.dx){if(g||t>b.dy)t=b.dy;for(;++m<s;){r=a[m];r.x=o;r.y=p;r.dy=t;o+=r.dx=n(r.area/t)}r.dx+=b.x+b.dx-o;b.y+=t;b.dy-=t}else{if(g||t>b.dx)t=b.dx;for(;++m<s;){r=a[m];r.x=o;r.y=p;r.dx=t;p+=r.dy=n(r.area/t)}r.dy+=b.y+b.dy-p;b.x+=t;b.dx-=t}}function l(a){var c=[];a=e(a,0,c);a.x=0;a.y=0;a.dx=q[0];a.dy=q[1];k(a);return c}var j=D,f=E,
n=Math.round,q=[1,1];l.children=function(a){if(!arguments.length)return j;j=a;return l};l.value=function(a){if(!arguments.length)return f;f=a;return l};l.size=function(a){if(!arguments.length)return q;q=a;return l};l.round=function(a){if(!arguments.length)return n!=Number;n=a?Math.round:Number;return l};return l}})();
(function(){function A(f){return f.reduce(B,0)}function C(f){for(var j=1,k=0,i=f[0].y,o,b=f.length;j<b;++j)if((o=f[j].y)>i){k=j;i=o}return k}function B(f,j){return f+j.y}function D(f){return f.children}function E(f){return f.value}function F(f,j){return j.value-f.value}d3.layout={};d3.layout.chord=function(){function f(){var g={},m=[],r=d3.range(e),q=[],n,p,u,s,t;i=[];o=[];n=0;for(s=-1;++s<e;){p=0;for(t=-1;++t<e;)p+=b[s][t];m.push(p);q.push(d3.range(e));n+=p}l&&r.sort(function(x,v){return l(m[x],
m[v])});a&&q.forEach(function(x,v){x.sort(function(G,H){return a(b[v][G],b[v][H])})});n=(2*Math.PI-h*e)/n;p=0;for(s=-1;++s<e;){u=p;for(t=-1;++t<e;){var w=r[s],y=q[s][t],z=b[w][y];g[w+"-"+y]={index:w,subindex:y,startAngle:p,endAngle:p+=z*n,value:z}}o.push({index:w,startAngle:u,endAngle:p,value:(p-u)/n});p+=h}for(s=-1;++s<e;)for(t=s-1;++t<e;){r=g[s+"-"+t];q=g[t+"-"+s];if(r.value||q.value)i.push({source:r,target:q})}c&&j()}function j(){i.sort(function(g,m){g=Math.min(g.source.value,g.target.value);m=
Math.min(m.source.value,m.target.value);return c(g,m)})}var k={},i,o,b,e,h=0,l,a,c;k.matrix=function(g){if(!arguments.length)return b;e=(b=g)&&b.length;i=o=null;return k};k.padding=function(g){if(!arguments.length)return h;h=g;i=o=null;return k};k.sortGroups=function(g){if(!arguments.length)return l;l=g;i=o=null;return k};k.sortSubgroups=function(g){if(!arguments.length)return a;a=g;i=null;return k};k.sortChords=function(g){if(!arguments.length)return c;c=g;i&&j();return k};k.chords=function(){i||
f();return i};k.groups=function(){o||f();return o};return k};d3.layout.force=function(){function f(){var a=l.length,c,g,m,r,q,n,p;for(c=0;c<a;++c){g=l[c];m=g.source;r=g.target;n=r.x-m.x;p=r.y-m.y;if(q=Math.sqrt(n*n+p*p)){q=o/(g.distance*g.distance)*(q-b*g.distance)/q;n*=q;p*=q;if(!r.fixed){r.x-=n;r.y-=p}if(!m.fixed){m.x+=n;m.y+=p}}}k.tick.dispatch({type:"tick"});return(o*=0.99)<0.0050}var j={},k=d3.dispatch("tick"),i=[1,1],o=0.5,b=30,e,h,l;j.on=function(a,c){k[a].add(c);return j};j.nodes=function(a){if(!arguments.length)return e;
e=a;return j};j.links=function(a){if(!arguments.length)return h;h=a;return j};j.size=function(a){if(!arguments.length)return i;i=a;return j};j.distance=function(a){if(!arguments.length)return b;b=a;return j};j.start=function(){var a,c,g,m=e.length;g=h.length;var r=i[0],q=i[1],n=[];for(a=0;a<m;++a){c=e[a];c.x=c.x||Math.random()*r;c.y=c.y||Math.random()*q;c.fixed=0;n[a]=[];for(c=0;c<m;++c)n[a][c]=Infinity;n[a][a]=0}for(a=0;a<g;++a){c=h[a];n[c.source][c.target]=1;n[c.target][c.source]=1;c.source=e[c.source];
c.target=e[c.target]}for(g=0;g<m;++g)for(a=0;a<m;++a)for(c=0;c<m;++c)n[a][c]=Math.min(n[a][c],n[a][g]+n[g][c]);l=[];for(a=0;a<m;++a)for(c=a+1;c<m;++c)l.push({source:e[a],target:e[c],distance:n[a][c]*n[a][c]});l.sort(function(p,u){return p.distance-u.distance});d3.timer(f);return j};j.resume=function(){o=0.1;d3.timer(f);return j};j.stop=function(){o=0;return j};j.drag=function(){function a(){if(c){var m=d3.svg.mouse(g);c.x=m[0];c.y=m[1];j.resume()}}var c,g;this.on("mouseover",function(m){m.fixed=true}).on("mouseout",
function(m){if(m!=c)m.fixed=false}).on("mousedown",function(m){(c=m).fixed=true;g=this;d3.event.preventDefault()});d3.select(window).on("mousemove",a).on("mouseup",function(){if(c){a();c.fixed=false;c=g=null}});return j};return j};d3.layout.partition=function(){function f(b,e,h,l){var a=b.children;b.x=e;b.y=b.depth*l;b.dx=h;b.dy=l;if(a){var c=-1,g=a.length,m;for(h/=b.value;++c<g;){f(m=a[c],e,b=m.value*h,l);e+=b}}}function j(b){b=b.children;var e=0;if(b)for(var h=-1,l=b.length;++h<l;)e=Math.max(e,
j(b[h]));return 1+e}function k(b,e){var h=i.call(this,b,e);f(h[0],0,o[0],o[1]/j(h[0]));return h}var i=d3.layout.hierarchy(),o=[1,1];k.sort=d3.rebind(k,i.sort);k.children=d3.rebind(k,i.children);k.value=d3.rebind(k,i.value);k.size=function(b){if(!arguments.length)return o;o=b;return k};return k};d3.layout.pie=function(){function f(b){var e=+(typeof i=="function"?i.apply(this,arguments):i),h=(typeof o=="function"?o.apply(this,arguments):o)-i,l=d3.range(b.length);k!=null&&l.sort(function(g,m){return k(b[g],
b[m])});var a=b.map(j);h/=a.reduce(function(g,m){return g+m},0);var c=l.map(function(g){return{value:d=a[g],startAngle:e,endAngle:e+=d*h}});return b.map(function(g,m){return c[l[m]]})}var j=Number,k=null,i=0,o=2*Math.PI;f.value=function(b){if(!arguments.length)return j;j=b;return f};f.sort=function(b){if(!arguments.length)return k;k=b;return f};f.startAngle=function(b){if(!arguments.length)return i;i=b;return f};f.endAngle=function(b){if(!arguments.length)return o;o=b;return f};return f};d3.layout.stack=
function(){function f(i){var o=i.length,b=i[0].length,e,h,l,a=I[j](i);J[k](i,a);for(h=0;h<b;++h){e=1;for(l=i[a[0]][h].y0;e<o;++e)i[a[e]][h].y0=l+=i[a[e-1]][h].y}return i}var j="default",k="zero";f.order=function(i){if(!arguments.length)return j;j=i;return f};f.offset=function(i){if(!arguments.length)return k;k=i;return f};return f};var I={"inside-out":function(f){var j=f.length,k,i=f.map(C),o=f.map(A),b=d3.range(j).sort(function(c,g){return i[c]-i[g]}),e=0,h=0,l=[],a=[];for(f=0;f<j;f++){k=b[f];if(e<
h){e+=o[k];l.push(k)}else{h+=o[k];a.push(k)}}return a.reverse().concat(l)},reverse:function(f){return d3.range(f.length).reverse()},"default":function(f){return d3.range(f.length)}},J={silhouette:function(f,j){var k=f.length,i=f[0].length,o=[],b=0,e,h,l;for(h=0;h<i;++h){for(l=e=0;e<k;e++)l+=f[e][h].y;if(l>b)b=l;o.push(l)}h=0;for(e=j[0];h<i;++h)f[e][h].y0=(b-o[h])/2},wiggle:function(f,j){var k=f.length,i=f[0],o=i.length,b,e,h,l,a,c=j[0],g,m,r,q,n,p;f[c][0].y0=n=p=0;for(e=1;e<o;++e){for(g=b=0;b<k;++b)g+=
f[b][e].y;m=b=0;for(q=i[e].x-i[e-1].x;b<k;++b){h=0;l=j[b];for(r=(f[l][e].y-f[l][e-1].y)/(2*q);h<b;++h)r+=(f[a=j[h]][e].y-f[a][e-1].y)/q;m+=r*f[l][e].y}f[c][e].y0=n-=g?m/g*q:0;if(n<p)p=n}for(e=0;e<o;++e)f[c][e].y0-=p},zero:function(f,j){for(var k=0,i=f[0].length,o=j[0];k<i;++k)f[o][k].y0=0}};d3.layout.hierarchy=function(){function f(b,e,h){var l=i.call(j,b,e),a={depth:e,data:b};h.push(a);if(l){b=-1;var c=l.length,g=a.children=[],m=0;for(e+=1;++b<c;){d=f(l[b],e,h);if(d.value>0){g.push(d);m+=d.value;
d.parent=a}}k&&g.sort(k);a.value=m}else a.value=o.call(j,b,e);return a}function j(b){var e=[];f(b,0,e);return e}var k=F,i=D,o=E;j.sort=function(b){if(!arguments.length)return k;k=b;return j};j.children=function(b){if(!arguments.length)return i;i=b;return j};j.value=function(b){if(!arguments.length)return o;o=b;return j};return j};d3.layout.treemap=function(){function f(h,l){var a=h.children;h.area=h.value*l;if(a)for(var c=-1,g=a.length;++c<g;)f(a[c],l)}function j(h){if(h.children){var l={x:h.x,y:h.y,
dx:h.dx,dy:h.dy},a=[],c=h.children.slice(),g,m=Infinity,r=Math.min(l.dx,l.dy);for(a.area=0;(g=c.length)>0;){a.push(g=c[g-1]);a.area+=g.area;g=r;for(var q=a.area,n=void 0,p=0,u=Infinity,s=-1,t=a.length;++s<t;){n=a[s].area;if(n<u)u=n;if(n>p)p=n}q*=q;g*=g;if((g=Math.max(g*p/q,q/(g*u)))<=m){c.pop();m=g}else{a.area-=a.pop().area;k(a,r,l,false);r=Math.min(l.dx,l.dy);a.length=a.area=0;m=Infinity}}if(a.length){k(a,r,l,true);a.length=a.area=0}h.children.forEach(j)}}function k(h,l,a,c){var g=-1,m=h.length,
r=a.x,q=a.y,n=l?b(h.area/l):0,p;if(l==a.dx){if(c||n>a.dy)n=a.dy;for(;++g<m;){p=h[g];p.x=r;p.y=q;p.dy=n;r+=p.dx=b(p.area/n)}p.dx+=a.x+a.dx-r;a.y+=n;a.dy-=n}else{if(c||n>a.dx)n=a.dx;for(;++g<m;){p=h[g];p.x=r;p.y=q;p.dx=n;q+=p.dy=b(p.area/n)}p.dy+=a.y+a.dy-q;a.x+=n;a.dx-=n}}function i(h,l){var a=o.call(this,h,l),c=a[0];c.x=0;c.y=0;c.dx=e[0];c.dy=e[1];f(c,e[0]*e[1]/c.value);j(c);return a}var o=d3.layout.hierarchy(),b=Math.round,e=[1,1];i.sort=d3.rebind(i,o.sort);i.children=d3.rebind(i,o.children);i.value=
d3.rebind(i,o.value);i.size=function(h){if(!arguments.length)return e;e=h;return i};i.round=function(h){if(!arguments.length)return b!=Number;b=h?Math.round:Number;return i};return i}})();

139
d3.min.js поставляемый
Просмотреть файл

@ -1,69 +1,70 @@
(function(){function xa(a){for(var b=-1,d=a.length,g=[];++b<d;)g.push(a[b]);return g}function v(a){return typeof a=="function"?a:function(){return a}}function C(a,b){return function(){var d=b.apply(a,arguments);return arguments.length?a:d}}function ya(a){return a==null}function da(a){return a.replace(/(^\s+)|(\s+$)/g,"").replace(/\s+/g," ")}function ea(a){a.apply(this,(arguments[0]=this,arguments));return this}function za(){var a={},b=[];a.add=function(d){for(var g=0;g<b.length;g++)if(b[g].listener==
d)return a;b.push({listener:d,on:true});return a};a.remove=function(d){for(var g=0;g<b.length;g++){var e=b[g];if(e.listener==d){e.on=false;b=b.slice(0,g).concat(b.slice(g+1));break}}return a};a.dispatch=function(){for(var d=b,g=0,e=d.length;g<e;g++){var c=d[g];c.on&&c.listener.apply(this,arguments)}};return a}function fa(a){for(var b=a.lastIndexOf("."),d=b>=0?a.substring(b):(b=a.length,""),g=[];b>0;)g.push(a.substring(b-=3,b+3));return g.reverse().join(",")+d}function ga(a){return function(b){return 1-
a(1-b)}}function ha(a){return function(b){return 0.5*(b<0.5?a(2*b):2-a(2-2*b))}}function Aa(a){return a}function R(a){return function(b){return Math.pow(b,a)}}function Ba(a){return 1-Math.cos(a*Math.PI/2)}function Ca(a){return a?Math.pow(2,10*(a-1))-0.0010:0}function Da(a){return 1-Math.sqrt(1-a*a)}function Ea(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+0.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+0.9375:7.5625*(a-=2.625/2.75)*a+0.984375}function J(a,b,d){return{r:a,g:b,b:d,toString:Fa}}
function Fa(){return"#"+S(this.r)+S(this.g)+S(this.b)}function S(a){return a<16?"0"+a.toString(16):a.toString(16)}function T(a,b,d){var g=0,e=0,c=0,f,h;if(f=/([a-z]+)\((.*)\)/i.exec(a)){h=f[2].split(",");switch(f[1]){case "hsl":return d(parseFloat(h[0]),parseFloat(h[1])/100,parseFloat(h[2])/100);case "rgb":return b(U(h[0]),U(h[1]),U(h[2]))}}if(d=G[a])return b(d.r,d.g,d.b);if(a!=null&&a.charAt(0)=="#"){if(a.length==4){g=a.charAt(1);g+=g;e=a.charAt(2);e+=e;c=a.charAt(3);c+=c}else if(a.length==7){g=
a.substring(1,3);e=a.substring(3,5);c=a.substring(5,7)}g=parseInt(g,16);e=parseInt(e,16);c=parseInt(c,16)}return b(g,e,c)}function Ga(a,b,d){var g=Math.min(a/=255,b/=255,d/=255),e=Math.max(a,b,d),c=e-g,f=(e+g)/2;if(c){g=f<0.5?c/(e+g):c/(2-e-g);a=a==e?(b-d)/c+(b<d?6:0):b==e?(d-a)/c+2:(a-b)/c+4;a*=60}else g=a=0;return V(a,g,f)}function U(a){var b=parseFloat(a);return a.charAt(a.length-1)=="%"?Math.round(b*2.55):b}function V(a,b,d){return{h:a,s:b,l:d,toString:Ha}}function Ha(){return"hsl("+this.h+","+
this.s*100+"%,"+this.l*100+"%)"}function W(a,b,d){function g(f){if(f>360)f-=360;else if(f<0)f+=360;if(f<60)return e+(c-e)*f/60;if(f<180)return c;if(f<240)return e+(c-e)*(240-f)/60;return e}var e,c;a%=360;if(a<0)a+=360;b=b<0?0:b>1?1:b;d=d<0?0:d>1?1:d;c=d<=0.5?d*(1+b):d+b-d*b;e=2*d-c;return J(Math.round(g(a+120)*255),Math.round(g(a)*255),Math.round(g(a-120)*255))}function y(a){function b(e){for(var c=[],f,h,i,k,j=0,o=a.length;j<o;j++){i=a[j];c.push(f=[]);f.parentNode=i.parentNode;f.parentData=i.parentData;
for(var p=0,m=i.length;p<m;p++)if(k=i[p]){f.push(h=e(k));if(h&&"__data__"in k)h.__data__=k.__data__}else f.push(null)}return y(c)}function d(e){for(var c=[],f,h,i,k=0,j=a.length;k<j;k++){h=a[k];for(var o=0,p=h.length;o<p;o++)if(i=h[o]){c.push(f=e(i));f.parentNode=i;f.parentData=i.__data__}}return y(c)}function g(e){for(var c=0,f=a.length;c<f;c++)for(var h=a[c],i=0,k=h.length;i<k;i++){var j=h[i];if(j)return e.call(j,j.__data__,i)}return null}a.select=function(e){return b(function(c){return D(e,c)})};
a.selectAll=function(e){return d(function(c){return ia(e,c)})};a.filter=function(e){for(var c=[],f,h,i,k=0,j=a.length;k<j;k++){h=a[k];c.push(f=[]);f.parentNode=h.parentNode;f.parentData=h.parentData;for(var o=0,p=h.length;o<p;o++)if((i=h[o])&&e.call(i,i.__data__,o))f.push(i)}return y(c)};a.map=function(e){for(var c,f,h=0,i=a.length;h<i;h++){c=a[h];for(var k=0,j=c.length;k<j;k++)if(f=c[k])f.__data__=e.call(f,f.__data__,k)}return a};a.data=function(e,c){function f(m,n){var l=0,q=m.length,r=n.length,
t=Math.min(q,r),u=Math.max(q,r),s=[],z=[],w=[],x,A;if(c){t={};u=[];var E;A=n.length;for(l=0;l<q;l++){E=c.call(x=m[l],x.__data__,l);if(E in t)w[A++]=m[l];else{t[E]=x;u.push(E)}}for(l=0;l<r;l++){if(x=t[E=c.call(n,A=n[l],l)]){x.__data__=A;s[l]=x;z[l]=w[l]=null}else{z[l]={__data__:A};s[l]=w[l]=null}delete t[E]}for(l=0;l<q;l++)if(u[l]in t)w[l]=m[l]}else{for(;l<t;l++){x=m[l];A=n[l];if(x){x.__data__=A;s[l]=x;z[l]=w[l]=null}else{z[l]={__data__:A};s[l]=w[l]=null}}for(;l<r;l++){z[l]={__data__:n[l]};s[l]=w[l]=
null}for(;l<u;l++){w[l]=m[l];z[l]=s[l]=null}}z.parentNode=s.parentNode=w.parentNode=m.parentNode;z.parentData=s.parentData=w.parentData=m.parentData;h.push(z);i.push(s);k.push(w)}var h=[],i=[],k=[],j=-1,o=a.length,p;if(typeof e=="function")for(;++j<o;)f(p=a[j],e.call(p,p.parentData,j));else for(;++j<o;)f(p=a[j],e);j=y(i);j.enter=function(){return Ia(h)};j.exit=function(){return y(k)};return j};a.each=function(e){for(var c=0,f=a.length;c<f;c++)for(var h=a[c],i=0,k=h.length;i<k;i++){var j=h[i];j&&e.call(j,
j.__data__,i)}return a};a.empty=function(){return!g(function(){return true})};a.node=function(){return g(function(){return this})};a.attr=function(e,c){function f(){this.removeAttribute(e)}function h(){this.removeAttributeNS(e.space,e.local)}function i(){this.setAttribute(e,c)}function k(){this.setAttributeNS(e.space,e.local,c)}function j(){var p=c.apply(this,arguments);p==null?this.removeAttribute(e):this.setAttribute(e,p)}function o(){var p=c.apply(this,arguments);p==null?this.removeAttributeNS(e.space,
e.local):this.setAttributeNS(e.space,e.local,p)}e=d3.ns.qualify(e);if(arguments.length<2)return g(e.local?function(){return this.getAttributeNS(e.space,e.local)}:function(){return this.getAttribute(e)});return a.each(c==null?e.local?h:f:typeof c=="function"?e.local?o:j:e.local?k:i)};a.classed=function(e,c){function f(){var j=this.className;k.lastIndex=0;if(!k.test(j))this.className=da(j+" "+e)}function h(){var j=da(this.className.replace(k," "));this.className=j.length?j:null}function i(){(c.apply(this,
arguments)?f:h).call(this)}var k=RegExp("(^|\\s+)"+d3.requote(e)+"(\\s+|$)","g");if(arguments.length<2)return g(function(){k.lastIndex=0;return k.test(this.className)});return a.each(typeof c=="function"?i:c?f:h)};a.style=function(e,c,f){function h(){this.style.removeProperty(e)}function i(){this.style.setProperty(e,c,f)}function k(){var j=c.apply(this,arguments);j==null?this.style.removeProperty(e):this.style.setProperty(e,j,f)}if(arguments.length<3)f=null;if(arguments.length<2)return g(function(){return window.getComputedStyle(this,
null).getPropertyValue(e)});return a.each(c==null?h:typeof c=="function"?k:i)};a.property=function(e,c){function f(){delete this[e]}function h(){this[e]=c}function i(){var k=c.apply(this,arguments);if(k==null)delete this[e];else this[e]=k}e=d3.ns.qualify(e);if(arguments.length<2)return g(function(){return this[e]});return a.each(c==null?f:typeof c=="function"?i:h)};a.text=function(e){function c(){this.appendChild(document.createTextNode(e))}function f(){var h=e.apply(this,arguments);h!=null&&this.appendChild(document.createTextNode(h))}
if(arguments.length<1)return g(function(){return this.textContent});a.each(function(){for(;this.lastChild;)this.removeChild(this.lastChild)});return e==null?a:a.each(typeof e=="function"?f:c)};a.html=function(e){function c(){this.innerHTML=e}function f(){this.innerHTML=e.apply(this,arguments)}if(arguments.length<1)return g(function(){return this.innerHTML});return a.each(typeof e=="function"?f:c)};a.append=function(e){function c(h){return h.appendChild(document.createElement(e))}function f(h){return h.appendChild(document.createElementNS(e.space,
e.local))}e=d3.ns.qualify(e);return b(e.local?f:c)};a.insert=function(e,c){function f(i){return i.insertBefore(document.createElement(e),D(c,i))}function h(i){return i.insertBefore(document.createElementNS(e.space,e.local),D(c,i))}e=d3.ns.qualify(e);return b(e.local?h:f)};a.remove=function(){return b(function(e){var c=e.parentNode;c.removeChild(e);return c})};a.sort=function(e){e=Ja.apply(this,arguments);for(var c=0,f=a.length;c<f;c++){var h=a[c];h.sort(e);for(var i=1,k=h.length,j=h[0];i<k;i++){var o=
h[i];if(o){j&&j.parentNode.insertBefore(o,j.nextSibling);j=o}}}return a};a.on=function(e,c){var f=e.indexOf("."),h=f==-1?e:e.substring(0,f),i="__on"+e;return a.each(function(k,j){function o(p){var m=d3.event;d3.event=p;try{c.call(this,k,j)}finally{d3.event=m}}this[i]&&this.removeEventListener(h,this[i],false);if(c)this.addEventListener(h,this[i]=o,false)})};a.transition=function(){return X(a)};a.call=ea;return a}function Ia(a){function b(d){for(var g=[],e,c,f,h,i=0,k=a.length;i<k;i++){f=a[i];g.push(e=
[]);e.parentNode=f.parentNode;e.parentData=f.parentData;for(var j=0,o=f.length;j<o;j++)if(h=f[j]){e.push(c=d(f.parentNode));c.__data__=h.__data__}else e.push(null)}return y(g)}a.append=function(d){function g(c){return c.appendChild(document.createElement(d))}function e(c){return c.appendChild(document.createElementNS(d.space,d.local))}d=d3.ns.qualify(d);return b(d.local?e:g)};a.insert=function(d,g){function e(f){return f.insertBefore(document.createElement(d),D(g,f))}function c(f){return f.insertBefore(document.createElementNS(d.space,
d.local),D(g,f))}d=d3.ns.qualify(d);return b(d.local?c:e)};return a}function Ja(a){if(!arguments.length)a=d3.ascending;return function(b,d){return a(b&&b.__data__,d&&d.__data__)}}function X(a){function b(m){var n=true,l=-1;a.each(function(){if(i[++l]!=2){var q=(m-k[l])/j[l],r=this.__transition__,t,u,s=c[l];if(q<1){n=false;if(q<0)return}else q=1;if(i[l]){if(!r||r.active!=g){i[l]=2;return}}else if(!r||r.active>g){i[l]=2;return}else{i[l]=1;h.start.dispatch.apply(this,arguments);s=c[l]={};r.active=g;
for(u in e)s[u]=e[u].apply(this,arguments)}t=p(q);for(u in e)s[u].call(this,t);if(q==1){i[l]=2;if(r.active==g){q=r.owner;if(q==g){delete this.__transition__;f&&this.parentNode.removeChild(this)}Y=g;h.end.dispatch.apply(this,arguments);Y=0;r.owner=q}}}});return n}var d={},g=Y||++Ka,e={},c=[],f=false,h=d3.dispatch("start","end"),i=[],k=[],j=[],o,p=d3.ease("cubic-in-out");a.each(function(){(this.__transition__||(this.__transition__={})).owner=g});d.delay=function(m){var n=Infinity,l=-1;if(typeof m==
"function")a.each(function(){var q=k[++l]=+m.apply(this,arguments);if(q<n)n=q});else{n=+m;a.each(function(){k[++l]=n})}ja(b,n);return d};d.duration=function(m){var n=-1;if(typeof m=="function"){o=0;a.each(function(){var l=j[++n]=+m.apply(this,arguments);if(l>o)o=l})}else{o=+m;a.each(function(){j[++n]=o})}return d};d.ease=function(m){p=typeof m=="string"?d3.ease(m):m;return d};d.attrTween=function(m,n){function l(r,t){var u=n.call(this,r,t,this.getAttribute(m));return function(s){this.setAttribute(m,
u(s))}}function q(r,t){var u=n.call(this,r,t,this.getAttributeNS(m.space,m.local));return function(s){this.setAttributeNS(m.space,m.local,u(s))}}e["attr."+m]=m.local?q:l;return d};d.attr=function(m,n){return d.attrTween(m,ka(n))};d.styleTween=function(m,n,l){if(arguments.length<3)l=null;e["style."+m]=function(q,r){var t=n.call(this,q,r,window.getComputedStyle(this,null).getPropertyValue(m));return function(u){this.style.setProperty(m,t(u),l)}};return d};d.style=function(m,n,l){if(arguments.length<
3)l=null;return d.styleTween(m,ka(n),l)};d.select=function(m){var n;m=X(a.select(m)).ease(p);n=-1;m.delay(function(){return k[++n]});n=-1;m.duration(function(){return j[++n]});return m};d.selectAll=function(m){var n;m=X(a.selectAll(m)).ease(p);n=-1;m.delay(function(l,q){return k[q?n:++n]});n=-1;m.duration(function(l,q){return j[q?n:++n]});return m};d.remove=function(){f=true;return d};d.each=function(m,n){h[m].add(n);return d};d.call=ea;return d.delay(0).duration(250)}function ka(a){return typeof a==
"function"?function(b,d,g){return d3.interpolate(g,String(a.call(this,b,d)))}:(a=String(a),function(b,d,g){return d3.interpolate(g,a)})}function ja(a,b){var d=Date.now(),g=false,e=d+b,c=F;if(isFinite(b)){for(;c;){if(c.callback==a){c.then=d;c.delay=b;g=true}else{var f=c.then+c.delay;if(f<e)e=f}c=c.next}g||(F={callback:a,then:d,delay:b,next:F});if(!K){clearTimeout(Z);Z=setTimeout(La,Math.max(24,e-d))}}}function La(){K=1;Z=0;la(ma)}function ma(){for(var a,b=Date.now(),d=F;d;){a=b-d.then;if(a>d.delay)d.flush=
d.callback(a);d=d.next}a=null;for(b=F;b;)b=b.flush?a?a.next=b.next:F=b.next:(a=b).next;a||(K=0);K&&la(ma)}function Ma(a){return function(b){return Math.pow(b,a)}}function Na(a){return function(b){return-Math.pow(-b,a)}}function Oa(a){return a.innerRadius}function Pa(a){return a.outerRadius}function na(a){return a.startAngle}function oa(a){return a.endAngle}function $(a,b,d,g){var e=[],c=-1,f=b.length,h=typeof d=="function",i=typeof g=="function",k;if(h&&i)for(;++c<f;)e.push([d.call(a,k=b[c],c),g.call(a,
k,c)]);else if(h)for(;++c<f;)e.push([d.call(a,b[c],c),g]);else if(i)for(;++c<f;)e.push([d,g.call(a,b[c],c)]);else for(;++c<f;)e.push([d,g]);return e}function pa(a){return a[0]}function qa(a){return a[1]}function H(a){var b=[],d=0,g=a.length,e=a[0];for(b.push(e[0],",",e[1]);++d<g;)b.push("L",(e=a[d])[0],",",e[1]);return b.join("")}function ra(a,b){if(b.length<1||a.length!=b.length&&a.length!=b.length+2)return H(a);var d=a.length!=b.length,g="",e=a[0],c=a[1],f=b[0],h=f,i=1;if(d){g+="Q"+(c[0]-f[0]*2/
3)+","+(c[1]-f[1]*2/3)+","+c[0]+","+c[1];e=a[1];i=2}if(b.length>1){h=b[1];c=a[i];i++;g+="C"+(e[0]+f[0])+","+(e[1]+f[1])+","+(c[0]-h[0])+","+(c[1]-h[1])+","+c[0]+","+c[1];for(e=2;e<b.length;e++,i++){c=a[i];h=b[e];g+="S"+(c[0]-h[0])+","+(c[1]-h[1])+","+c[0]+","+c[1]}}if(d){d=a[i];g+="Q"+(c[0]+h[0]*2/3)+","+(c[1]+h[1]*2/3)+","+d[0]+","+d[1]}return g}function sa(a,b){for(var d=[],g=(1-b)/2,e=a[0],c=a[1],f=a[2],h=2,i=a.length;++h<i;){d.push([g*(f[0]-e[0]),g*(f[1]-e[1])]);e=c;c=f;f=a[h]}d.push([g*(f[0]-
e[0]),g*(f[1]-e[1])]);return d}function B(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3]}function L(a,b,d){a.push("C",B(ta,b),",",B(ta,d),",",B(ua,b),",",B(ua,d),",",B(M,b),",",B(M,d))}function Qa(){return 0}function Ra(a){return a.source}function Sa(a){return a.target}function Ta(a){return a.radius}function Ua(){return 64}function Va(){return"circle"}d3={version:"1.6.1"};if(!Date.now)Date.now=function(){return+new Date};if(!Object.create)Object.create=function(a){function b(){}b.prototype=a;
return new b};var N=function(a){return Array.prototype.slice.call(a)};try{N(document.documentElement.childNodes)}catch(hb){N=xa}d3.ascending=function(a,b){return a<b?-1:a>b?1:0};d3.descending=function(a,b){return b<a?-1:b>a?1:0};d3.min=function(a,b){var d=0,g=a.length,e=a[0],c;if(arguments.length==1)for(;++d<g;){if(e>(c=a[d]))e=c}else for(e=b(a[0]);++d<g;)if(e>(c=b(a[d])))e=c;return e};d3.max=function(a,b){var d=0,g=a.length,e=a[0],c;if(arguments.length==1)for(;++d<g;){if(e<(c=a[d]))e=c}else for(e=
b(e);++d<g;)if(e<(c=b(a[d])))e=c;return e};d3.nest=function(){function a(h,i){if(i>=g.length)return f?f.call(d,h):c?h.sort(c):h;for(var k=-1,j=h.length,o=g[i++],p,m,n={};++k<j;)if((p=o(m=h[k]))in n)n[p].push(m);else n[p]=[m];for(p in n)n[p]=a(n[p],i);return n}function b(h,i){if(i>=g.length)return h;var k=[],j=e[i++],o;for(o in h)k.push({key:o,values:b(h[o],i)});j&&k.sort(function(p,m){return j(p.key,m.key)});return k}var d={},g=[],e=[],c,f;d.map=function(h){return a(h,0)};d.entries=function(h){return b(a(h,
0),0)};d.key=function(h){g.push(h);return d};d.sortKeys=function(h){e[g.length-1]=h;return d};d.sortValues=function(h){c=h;return d};d.rollup=function(h){f=h;return d};return d};d3.keys=function(a){var b=[],d;for(d in a)b.push(d);return b};d3.values=function(a){var b=[],d;for(d in a)b.push(a[d]);return b};d3.entries=function(a){var b=[],d;for(d in a)b.push({key:d,value:a[d]});return b};d3.merge=function(a){return Array.prototype.concat.apply([],a)};d3.split=function(a,b){var d=[],g=[],e,c=-1,f=a.length;
if(arguments.length<2)b=ya;for(;++c<f;)if(b.call(g,e=a[c],c))g=[];else{g.length||d.push(g);g.push(e)}return d};d3.range=function(a,b,d){if(arguments.length==1){b=a;a=0}if(d==null)d=1;if((b-a)/d==Infinity)throw Error("infinite range");var g=[],e=-1,c;if(d<0)for(;(c=a+d*++e)>b;)g.push(c);else for(;(c=a+d*++e)<b;)g.push(c);return g};d3.requote=function(a){return a.replace(Wa,"\\$&")};var Wa=/[\\\^\$\*\+\?\[\]\(\)\.\{\}]/g;d3.xhr=function(a,b,d){var g=new XMLHttpRequest;if(arguments.length<3)d=b;else b&&
g.overrideMimeType(b);g.open("GET",a,true);g.onreadystatechange=function(){if(g.readyState==4)d(g.status<300?g:null)};g.send(null)};d3.text=function(a,b,d){if(arguments.length<3){d=b;b=null}d3.xhr(a,b,function(g){d(g&&g.responseText)})};d3.json=function(a,b){d3.text(a,"application/json",function(d){b(d?JSON.parse(d):null)})};d3.html=function(a,b){d3.text(a,"text/html",function(d){if(d!=null){var g=document.createRange();g.selectNode(document.body);d=g.createContextualFragment(d)}b(d)})};d3.xml=function(a,
b,d){if(arguments.length<3){d=b;b=null}d3.xhr(a,b,function(g){d(g&&g.responseXML)})};d3.ns={prefix:{svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},qualify:function(a){var b=a.indexOf(":");return b<0?a:{space:d3.ns.prefix[a.substring(0,b)],local:a.substring(b+1)}}};d3.dispatch=function(){for(var a={},b,d=0,g=arguments.length;d<g;d++){b=arguments[d];a[b]=za(b)}return a};
d3.format=function(a){a=Xa.exec(a);var b=a[1]||" ",d=a[3]||"",g=a[5],e=+a[6],c=a[7],f=a[8],h=a[9];if(f)f=f.substring(1);if(g){b="0";if(c)e-=Math.floor((e-1)/4)}if(h=="d")f="0";return function(i){i=+i;var k=i<0&&(i=-i)?"":d;if(h=="d"&&i%1)return"";i=f?i.toFixed(f):""+i;if(g){var j=i.length+k.length;if(j<e)i=Array(e-j+1).join(b)+i;if(c)i=fa(i);i=k+i}else{if(c)i=fa(i);i=k+i;j=i.length;if(j<e)i=Array(e-j+1).join(b)+i}return i}};var Xa=/(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/,
Ya=R(2),Za=R(3),$a={linear:function(){return Aa},poly:R,quad:function(){return Ya},cubic:function(){return Za},sin:function(){return Ba},exp:function(){return Ca},circle:function(){return Da},elastic:function(a,b){var d;if(arguments.length<2)b=0.45;if(arguments.length<1){a=1;d=b/4}else d=b/(2*Math.PI)*Math.asin(1/a);return function(g){return 1+a*Math.pow(2,10*-g)*Math.sin((g-d)*2*Math.PI/b)}},back:function(a){a||(a=1.70158);return function(b){return b*b*((a+1)*b-a)}},bounce:function(){return Ea}},
ab={"in":function(a){return a},out:ga,"in-out":ha,"out-in":function(a){return ha(ga(a))}};d3.ease=function(a){var b=a.indexOf("-"),d=b>=0?a.substring(0,b):a;b=b>=0?a.substring(b+1):"in";return ab[b]($a[d].apply(null,Array.prototype.slice.call(arguments,1)))};d3.event=null;d3.interpolate=function(a,b){if(typeof b=="number")return d3.interpolateNumber(+a,b);if(typeof b=="string")return b in G||/^(#|rgb\(|hsl\()/.test(b)?d3.interpolateRgb(String(a),b):d3.interpolateString(String(a),b);if(b instanceof
Array)return d3.interpolateArray(a,b);return d3.interpolateObject(a,b)};d3.interpolateNumber=function(a,b){b-=a;return function(d){return a+b*d}};d3.interpolateRound=function(a,b){b-=a;return function(d){return Math.round(a+b*d)}};d3.interpolateString=function(a,b){var d,g,e=0,c=[],f=[],h,i;for(g=0;d=aa.exec(b);++g){d.index&&c.push(b.substring(e,d.index));f.push({i:c.length,x:d[0]});c.push(null);e=aa.lastIndex}e<b.length&&c.push(b.substring(e));g=0;for(h=f.length;(d=aa.exec(a))&&g<h;++g){i=f[g];if(i.x==
d[0]){if(i.i)if(c[i.i+1]==null){c[i.i-1]+=i.x;c.splice(i.i,1);for(d=g+1;d<h;++d)f[d].i--}else{c[i.i-1]+=i.x+c[i.i+1];c.splice(i.i,2);for(d=g+1;d<h;++d)f[d].i-=2}else if(c[i.i+1]==null)c[i.i]=i.x;else{c[i.i]=i.x+c[i.i+1];c.splice(i.i+1,1);for(d=g+1;d<h;++d)f[d].i--}f.splice(g,1);h--;g--}else i.x=d3.interpolateNumber(parseFloat(d[0]),parseFloat(i.x))}for(;g<h;){i=f.pop();if(c[i.i+1]==null)c[i.i]=i.x;else{c[i.i]=i.x+c[i.i+1];c.splice(i.i+1,1)}h--}if(c.length==1)return c[0]==null?f[0].x:function(){return b};
return function(k){for(g=0;g<h;++g)c[(i=f[g]).i]=i.x(k);return c.join("")}};d3.interpolateRgb=function(a,b){a=d3.rgb(a);b=d3.rgb(b);var d=a.r,g=a.g,e=a.b,c=b.r-d,f=b.g-g,h=b.b-e;return function(i){return"rgb("+Math.round(d+c*i)+","+Math.round(g+f*i)+","+Math.round(e+h*i)+")"}};d3.interpolateHsl=function(a,b){a=d3.hsl(a);b=d3.hsl(b);var d=a.h,g=a.s,e=a.l,c=b.h-d,f=b.s-g,h=b.l-e;return function(i){return W(d+c*i,g+f*i,e+h*i).toString()}};d3.interpolateArray=function(a,b){var d=[],g=[],e=a.length,c=
b.length,f=Math.min(a.length,b.length),h;for(h=0;h<f;++h)d.push(d3.interpolate(a[h],b[h]));for(;h<e;++h)g[h]=a[h];for(;h<c;++h)g[h]=b[h];return function(i){for(h=0;h<f;++h)g[h]=d[h](i);return g}};d3.interpolateObject=function(a,b){var d={},g={},e;for(e in a)if(e in b)d[e]=(e in bb||/\bcolor\b/.test(e)?d3.interpolateRgb:d3.interpolate)(a[e],b[e]);else g[e]=a[e];for(e in b)e in a||(g[e]=b[e]);return function(c){for(e in d)g[e]=d[e](c);return g}};var aa=/[-+]?(?:\d+\.\d+|\d+\.|\.\d+|\d+)(?:[eE][-]?\d+)?/g,
bb={background:1,fill:1,stroke:1};d3.rgb=function(a,b,d){return arguments.length==1?T(""+a,J,W):J(~~a,~~b,~~d)};var G={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",
darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",
firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",
lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",
mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",
rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},
ba;for(ba in G)G[ba]=T(G[ba],J,W);d3.hsl=function(a,b,d){return arguments.length==1?T(""+a,Ga,V):V(+a,+b,+d)};var D=function(a,b){return b.querySelector(a)},ia=function(a,b){return N(b.querySelectorAll(a))};if(typeof Sizzle=="function"){D=function(a,b){return Sizzle(a,b)[0]};ia=function(a,b){return Sizzle.uniqueSort(Sizzle(a,b))}}var O=y([[document]]);O[0].parentNode=document.documentElement;d3.select=function(a){return typeof a=="string"?O.select(a):y([[a]])};d3.selectAll=function(a){return typeof a==
"string"?O.selectAll(a):y([N(a)])};d3.transition=O.transition;var Ka=0,Y=0,F=null,Z=0,K;d3.timer=function(a){ja(a,0)};var la=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){setTimeout(a,17)};d3.scale={};d3.scale.linear=function(){function a(j){return k((j-d)*f)}function b(j){var o=Math.min(d,g),p=Math.max(d,g),m=p-o,n=Math.pow(10,Math.floor(Math.log(m/j)/Math.LN10));j/=m/n;
if(j<=0.15)n*=10;else if(j<=0.35)n*=5;else if(j<=0.75)n*=2;return{start:Math.ceil(o/n)*n,stop:Math.floor(p/n)*n+n*0.5,step:n}}var d=0,g=1,e=0,c=1,f=1/(g-d),h=(g-d)/(c-e),i=d3.interpolate,k=i(e,c);a.invert=function(j){return(j-e)*h+d};a.domain=function(j){if(!arguments.length)return[d,g];d=j[0];g=j[1];f=1/(g-d);h=(g-d)/(c-e);return a};a.range=function(j){if(!arguments.length)return[e,c];e=j[0];c=j[1];h=(g-d)/(c-e);k=i(e,c);return a};a.rangeRound=function(j){return a.range(j).interpolate(d3.interpolateRound)};
a.interpolate=function(j){if(!arguments.length)return i;k=(i=j)(e,c);return a};a.ticks=function(j){j=b(j);return d3.range(j.start,j.stop,j.step)};a.tickFormat=function(j){j=Math.max(0,-Math.floor(Math.log(b(j).step)/Math.LN10+0.01));return d3.format(",."+j+"f")};return a};d3.scale.log=function(){function a(c){return(e?-Math.log(-c):Math.log(c))/Math.LN10}function b(c){return e?-Math.pow(10,-c):Math.pow(10,c)}function d(c){return g(a(c))}var g=d3.scale.linear(),e=false;d.invert=function(c){return b(g.invert(c))};
d.domain=function(c){if(!arguments.length)return g.domain().map(b);e=(c[0]||c[1])<0;g.domain(c.map(a));return d};d.range=C(d,g.range);d.rangeRound=C(d,g.rangeRound);d.interpolate=C(d,g.interpolate);d.ticks=function(){var c=g.domain(),f=[];if(c.every(isFinite)){var h=Math.floor(c[0]),i=Math.ceil(c[1]),k=b(c[0]);c=b(c[1]);if(e)for(f.push(b(h));h++<i;)for(var j=9;j>0;j--)f.push(b(h)*j);else{for(;h<i;h++)for(j=1;j<10;j++)f.push(b(h)*j);f.push(b(h))}for(h=0;f[h]<k;h++);for(i=f.length;f[i-1]>c;i--);f=f.slice(h,
i)}return f};d.tickFormat=function(){return function(c){return c.toPrecision(1)}};return d};d3.scale.pow=function(){function a(f){return b(e(f))}var b=d3.scale.linear(),d=d3.scale.linear(),g=1,e=Number,c=e;a.invert=function(f){return c(b.invert(f))};a.domain=function(f){if(!arguments.length)return b.domain().map(c);var h=(f[0]||f[1])<0?Na:Ma;e=h(g);c=h(1/g);b.domain(f.map(e));d.domain(f);return a};a.range=C(a,b.range);a.rangeRound=C(a,b.rangeRound);a.interpolate=C(a,b.interpolate);a.ticks=d.ticks;
a.tickFormat=d.tickFormat;a.exponent=function(f){if(!arguments.length)return g;var h=a.domain();g=f;return a.domain(h)};return a};d3.scale.sqrt=function(){return d3.scale.pow().exponent(0.5)};d3.scale.ordinal=function(){function a(c){c=c in d?d[c]:d[c]=b.push(c)-1;return g[c%g.length]}var b=[],d={},g=[],e=0;a.domain=function(c){if(!arguments.length)return b;b=c;d={};for(var f=-1,h=-1,i=b.length;++f<i;){c=b[f];c in d||(d[c]=++h)}return a};a.range=function(c){if(!arguments.length)return g;g=c;return a};
a.rangePoints=function(c,f){if(arguments.length<2)f=0;var h=c[0],i=c[1],k=(i-h)/(b.length-1+f);g=b.length==1?[(h+i)/2]:d3.range(h+k*f/2,i+k/2,k);e=0;return a};a.rangeBands=function(c,f){if(arguments.length<2)f=0;var h=c[0],i=c[1],k=(i-h)/(b.length+f);g=d3.range(h+k*f,i,k);e=k*(1-f);return a};a.rangeRoundBands=function(c,f){if(arguments.length<2)f=0;var h=c[0],i=c[1],k=i-h,j=Math.floor(k/(b.length+f));g=d3.range(h+Math.round((k-(b.length-f)*j)/2),i,j);e=Math.round(j*(1-f));return a};a.rangeBand=function(){return e};
return a};d3.scale.category10=function(){return d3.scale.ordinal().range(cb)};d3.scale.category20=function(){return d3.scale.ordinal().range(db)};d3.scale.category20b=function(){return d3.scale.ordinal().range(eb)};d3.scale.category20c=function(){return d3.scale.ordinal().range(fb)};var cb=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],db=["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b",
"#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"],eb=["#393b79","#5254a3","#6b6ecf","#9c9ede","#637939","#8ca252","#b5cf6b","#cedb9c","#8c6d31","#bd9e39","#e7ba52","#e7cb94","#843c39","#ad494a","#d6616b","#e7969c","#7b4173","#a55194","#ce6dbd","#de9ed6"],fb=["#3182bd","#6baed6","#9ecae1","#c6dbef","#e6550d","#fd8d3c","#fdae6b","#fdd0a2","#31a354","#74c476","#a1d99b","#c7e9c0","#756bb1","#9e9ac8","#bcbddc","#dadaeb","#636363","#969696","#bdbdbd","#d9d9d9"];
d3.scale.quantile=function(){function a(){for(var f=-1,h=c.length=e.length,i=g.length/h;++f<h;)c[f]=g[~~(f*i)]}function b(f){if(isNaN(f=+f))return NaN;for(var h=0,i=c.length-1;h<=i;){var k=h+i>>1,j=c[k];if(j<f)h=k+1;else if(j>f)i=k-1;else return k}return i<0?0:i}function d(f){return e[b(f)]}var g=[],e=[],c=[];d.domain=function(f){if(!arguments.length)return g;g=f.filter(function(h){return!isNaN(h)}).sort(d3.ascending);a();return d};d.range=function(f){if(!arguments.length)return e;e=f;a();return d};
d.quantiles=function(){return c};return d};d3.scale.quantize=function(){function a(f){return c[Math.max(0,Math.min(e,Math.floor(g*(f-b))))]}var b=0,d=1,g=2,e=1,c=[0,1];a.domain=function(f){if(!arguments.length)return[b,d];b=f[0];d=f[1];g=c.length/(d-b);return a};a.range=function(f){if(!arguments.length)return c;c=f;g=c.length/(d-b);e=c.length-1;return a};return a};d3.svg={};d3.svg.arc=function(){function a(){var c=b.apply(this,arguments),f=d.apply(this,arguments),h=g.apply(this,arguments)+I,i=e.apply(this,
arguments)+I,k=i-h,j=k<Math.PI?"0":"1",o=Math.cos(h);h=Math.sin(h);var p=Math.cos(i);i=Math.sin(i);return k>=gb?c?"M0,"+f+"A"+f+","+f+" 0 1,1 0,"+-f+"A"+f+","+f+" 0 1,1 0,"+f+"M0,"+c+"A"+c+","+c+" 0 1,1 0,"+-c+"A"+c+","+c+" 0 1,1 0,"+c+"Z":"M0,"+f+"A"+f+","+f+" 0 1,1 0,"+-f+"A"+f+","+f+" 0 1,1 0,"+f+"Z":c?"M"+f*o+","+f*h+"A"+f+","+f+" 0 "+j+",1 "+f*p+","+f*i+"L"+c*p+","+c*i+"A"+c+","+c+" 0 "+j+",0 "+c*o+","+c*h+"Z":"M"+f*o+","+f*h+"A"+f+","+f+" 0 "+j+",1 "+f*p+","+f*i+"L0,0Z"}var b=Oa,d=Pa,g=na,e=
oa;a.innerRadius=function(c){if(!arguments.length)return b;b=v(c);return a};a.outerRadius=function(c){if(!arguments.length)return d;d=v(c);return a};a.startAngle=function(c){if(!arguments.length)return g;g=v(c);return a};a.endAngle=function(c){if(!arguments.length)return e;e=v(c);return a};a.centroid=function(){var c=(b.apply(this,arguments)+d.apply(this,arguments))/2,f=(g.apply(this,arguments)+e.apply(this,arguments))/2+I;return[Math.cos(f)*c,Math.sin(f)*c]};return a};var I=-Math.PI/2,gb=2*Math.PI-
1.0E-6;d3.svg.line=function(){function a(f){return f.length<1?null:"M"+e($(this,f,b,d),c)}var b=pa,d=qa,g="linear",e=P[g],c=0.7;a.x=function(f){if(!arguments.length)return b;b=f;return a};a.y=function(f){if(!arguments.length)return d;d=f;return a};a.interpolate=function(f){if(!arguments.length)return g;e=P[g=f];return a};a.tension=function(f){if(!arguments.length)return c;c=f;return a};return a};var P={linear:H,basis:function(a){if(a.length<3)return H(a);var b=[],d=1,g=a.length,e=a[0],c=e[0],f=e[1],
h=[c,c,c,(e=a[1])[0]],i=[f,f,f,e[1]];b.push(c,",",f);for(L(b,h,i);++d<g;){e=a[d];h.shift();h.push(e[0]);i.shift();i.push(e[1]);L(b,h,i)}for(d=-1;++d<2;){h.shift();h.push(e[0]);i.shift();i.push(e[1]);L(b,h,i)}return b.join("")},"basis-closed":function(a){for(var b,d=-1,g=a.length,e=g+4,c,f=[],h=[];++d<4;){c=a[d%g];f.push(c[0]);h.push(c[1])}b=[B(M,f),",",B(M,h)];for(--d;++d<e;){c=a[d%g];f.shift();f.push(c[0]);h.shift();h.push(c[1]);L(b,f,h)}return b.join("")},cardinal:function(a,b){if(a.length<3)return H(a);
return a[0]+ra(a,sa(a,b))},"cardinal-closed":function(a,b){if(a.length<3)return H(a);return a[0]+ra(a,sa([a[a.length-2]].concat(a,[a[1]]),b))}},ta=[0,2/3,1/3,0],ua=[0,1/3,2/3,0],M=[0,1/6,2/3,1/6];d3.svg.area=function(){function a(h){return h.length<1?null:"M"+c($(this,h,b,g),f)+"L"+c($(this,h,b,d).reverse(),f)+"Z"}var b=pa,d=Qa,g=qa,e="linear",c=P[e],f=0.7;a.x=function(h){if(!arguments.length)return b;b=h;return a};a.y0=function(h){if(!arguments.length)return d;d=h;return a};a.y1=function(h){if(!arguments.length)return g;
g=h;return a};a.interpolate=function(h){if(!arguments.length)return e;c=P[e=h];return a};a.tension=function(h){if(!arguments.length)return f;f=h;return a};return a};d3.svg.chord=function(){function a(h,i){var k=b(this,d,h,i),j=b(this,g,h,i);return"M"+k.p0+("A"+k.r+","+k.r+" 0 0,1 "+k.p1)+(k.a0==j.a0&&k.a1==j.a1?"Q 0,0 "+k.p0:"Q 0,0 "+j.p0+("A"+j.r+","+j.r+" 0 0,1 "+j.p1)+("Q 0,0 "+k.p0))+"Z"}function b(h,i,k,j){var o=i.call(h,k,j);i=e.call(h,o,j);k=c.call(h,o,j)+I;h=f.call(h,o,j)+I;return{r:i,a0:k,
a1:h,p0:[i*Math.cos(k),i*Math.sin(k)],p1:[i*Math.cos(h),i*Math.sin(h)]}}var d=Ra,g=Sa,e=Ta,c=na,f=oa;a.radius=function(h){if(!arguments.length)return e;e=v(h);return a};a.source=function(h){if(!arguments.length)return d;d=v(h);return a};a.target=function(h){if(!arguments.length)return g;g=v(h);return a};a.startAngle=function(h){if(!arguments.length)return c;c=v(h);return a};a.endAngle=function(h){if(!arguments.length)return f;f=v(h);return a};return a};d3.svg.mouse=function(a){var b=(a.ownerSVGElement||
a).createSVGPoint();if(ca<0&&(window.scrollX||window.scrollY)){var d=d3.select(document.body).append("svg:svg").style("position","absolute").style("top",0).style("left",0),g=d[0][0].getScreenCTM();ca=!(g.f||g.e);d.remove()}if(ca){b.x=d3.event.pageX;b.y=d3.event.pageY}else{b.x=d3.event.clientX;b.y=d3.event.clientY}b=b.matrixTransform(a.getScreenCTM().inverse());return[b.x,b.y]};var ca=/WebKit/.test(navigator.userAgent)?-1:0;d3.svg.symbol=function(){function a(g,e){return(va[b.call(this,g,e)]||va.circle)(d.call(this,
g,e))}var b=Va,d=Ua;a.type=function(g){if(!arguments.length)return b;b=v(g);return a};a.size=function(g){if(!arguments.length)return d;d=v(g);return a};return a};d3.svg.symbolTypes=["circle","cross","diamond","square","triangle-down","triangle-up"];var va={circle:function(a){a=Math.sqrt(a/Math.PI);return"M0,"+a+"A"+a+","+a+" 0 1,1 0,"+-a+"A"+a+","+a+" 0 1,1 0,"+a+"Z"},cross:function(a){a=Math.sqrt(a/5)/2;return"M"+-3*a+","+-a+"H"+-a+"V"+-3*a+"H"+a+"V"+-a+"H"+3*a+"V"+a+"H"+a+"V"+3*a+"H"+-a+"V"+a+"H"+
-3*a+"Z"},diamond:function(a){a=Math.sqrt(a/(2*wa));var b=a*wa;return"M0,"+-a+"L"+b+",0 0,"+a+" "+-b+",0Z"},square:function(a){a=Math.sqrt(a)/2;return"M"+-a+","+-a+"L"+a+","+-a+" "+a+","+a+" "+-a+","+a+"Z"},"triangle-down":function(a){a=Math.sqrt(a/Q);var b=a*Q/2;return"M0,"+b+"L"+a+","+-b+" "+-a+","+-b+"Z"},"triangle-up":function(a){a=Math.sqrt(a/Q);var b=a*Q/2;return"M0,"+-b+"L"+a+","+b+" "+-a+","+b+"Z"}},Q=Math.sqrt(3),wa=Math.tan(30*Math.PI/180)})();
(function(){function wa(a){for(var b=-1,d=a.length,g=[];++b<d;)g.push(a[b]);return g}function v(a){return typeof a=="function"?a:function(){return a}}function xa(a){return a==null}function ca(a){return a.replace(/(^\s+)|(\s+$)/g,"").replace(/\s+/g," ")}function da(a){a.apply(this,(arguments[0]=this,arguments));return this}function ya(){var a={},b=[];a.add=function(d){for(var g=0;g<b.length;g++)if(b[g].listener==d)return a;b.push({listener:d,on:true});return a};a.remove=function(d){for(var g=0;g<b.length;g++){var e=
b[g];if(e.listener==d){e.on=false;b=b.slice(0,g).concat(b.slice(g+1));break}}return a};a.dispatch=function(){for(var d=b,g=0,e=d.length;g<e;g++){var c=d[g];c.on&&c.listener.apply(this,arguments)}};return a}function ea(a){for(var b=a.lastIndexOf("."),d=b>=0?a.substring(b):(b=a.length,""),g=[];b>0;)g.push(a.substring(b-=3,b+3));return g.reverse().join(",")+d}function fa(a){return function(b){return 1-a(1-b)}}function ga(a){return function(b){return 0.5*(b<0.5?a(2*b):2-a(2-2*b))}}function za(a){return a}
function Q(a){return function(b){return Math.pow(b,a)}}function Aa(a){return 1-Math.cos(a*Math.PI/2)}function Ba(a){return a?Math.pow(2,10*(a-1))-0.0010:0}function Ca(a){return 1-Math.sqrt(1-a*a)}function Da(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+0.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+0.9375:7.5625*(a-=2.625/2.75)*a+0.984375}function I(a,b,d){return{r:a,g:b,b:d,toString:Ea}}function Ea(){return"#"+R(this.r)+R(this.g)+R(this.b)}function R(a){return a<16?"0"+a.toString(16):a.toString(16)}
function S(a,b,d){var g=0,e=0,c=0,f,h;if(f=/([a-z]+)\((.*)\)/i.exec(a)){h=f[2].split(",");switch(f[1]){case "hsl":return d(parseFloat(h[0]),parseFloat(h[1])/100,parseFloat(h[2])/100);case "rgb":return b(T(h[0]),T(h[1]),T(h[2]))}}if(d=F[a])return b(d.r,d.g,d.b);if(a!=null&&a.charAt(0)=="#"){if(a.length==4){g=a.charAt(1);g+=g;e=a.charAt(2);e+=e;c=a.charAt(3);c+=c}else if(a.length==7){g=a.substring(1,3);e=a.substring(3,5);c=a.substring(5,7)}g=parseInt(g,16);e=parseInt(e,16);c=parseInt(c,16)}return b(g,
e,c)}function Fa(a,b,d){var g=Math.min(a/=255,b/=255,d/=255),e=Math.max(a,b,d),c=e-g,f=(e+g)/2;if(c){g=f<0.5?c/(e+g):c/(2-e-g);a=a==e?(b-d)/c+(b<d?6:0):b==e?(d-a)/c+2:(a-b)/c+4;a*=60}else g=a=0;return U(a,g,f)}function T(a){var b=parseFloat(a);return a.charAt(a.length-1)=="%"?Math.round(b*2.55):b}function U(a,b,d){return{h:a,s:b,l:d,toString:Ga}}function Ga(){return"hsl("+this.h+","+this.s*100+"%,"+this.l*100+"%)"}function V(a,b,d){function g(f){if(f>360)f-=360;else if(f<0)f+=360;if(f<60)return e+
(c-e)*f/60;if(f<180)return c;if(f<240)return e+(c-e)*(240-f)/60;return e}var e,c;a%=360;if(a<0)a+=360;b=b<0?0:b>1?1:b;d=d<0?0:d>1?1:d;c=d<=0.5?d*(1+b):d+b-d*b;e=2*d-c;return I(Math.round(g(a+120)*255),Math.round(g(a)*255),Math.round(g(a-120)*255))}function y(a){function b(e){for(var c=[],f,h,i,k,j=0,o=a.length;j<o;j++){i=a[j];c.push(f=[]);f.parentNode=i.parentNode;f.parentData=i.parentData;for(var p=0,m=i.length;p<m;p++)if(k=i[p]){f.push(h=e(k));if(h&&"__data__"in k)h.__data__=k.__data__}else f.push(null)}return y(c)}
function d(e){for(var c=[],f,h,i,k=0,j=a.length;k<j;k++){h=a[k];for(var o=0,p=h.length;o<p;o++)if(i=h[o]){c.push(f=e(i));f.parentNode=i;f.parentData=i.__data__}}return y(c)}function g(e){for(var c=0,f=a.length;c<f;c++)for(var h=a[c],i=0,k=h.length;i<k;i++){var j=h[i];if(j)return e.call(j,j.__data__,i)}return null}a.select=function(e){return b(function(c){return C(e,c)})};a.selectAll=function(e){return d(function(c){return ha(e,c)})};a.filter=function(e){for(var c=[],f,h,i,k=0,j=a.length;k<j;k++){h=
a[k];c.push(f=[]);f.parentNode=h.parentNode;f.parentData=h.parentData;for(var o=0,p=h.length;o<p;o++)if((i=h[o])&&e.call(i,i.__data__,o))f.push(i)}return y(c)};a.map=function(e){for(var c,f,h=0,i=a.length;h<i;h++){c=a[h];for(var k=0,j=c.length;k<j;k++)if(f=c[k])f.__data__=e.call(f,f.__data__,k)}return a};a.data=function(e,c){function f(m,n){var l=0,q=m.length,r=n.length,t=Math.min(q,r),u=Math.max(q,r),s=[],z=[],w=[],x,A;if(c){t={};u=[];var D;A=n.length;for(l=0;l<q;l++){D=c.call(x=m[l],x.__data__,
l);if(D in t)w[A++]=m[l];else{t[D]=x;u.push(D)}}for(l=0;l<r;l++){if(x=t[D=c.call(n,A=n[l],l)]){x.__data__=A;s[l]=x;z[l]=w[l]=null}else{z[l]={__data__:A};s[l]=w[l]=null}delete t[D]}for(l=0;l<q;l++)if(u[l]in t)w[l]=m[l]}else{for(;l<t;l++){x=m[l];A=n[l];if(x){x.__data__=A;s[l]=x;z[l]=w[l]=null}else{z[l]={__data__:A};s[l]=w[l]=null}}for(;l<r;l++){z[l]={__data__:n[l]};s[l]=w[l]=null}for(;l<u;l++){w[l]=m[l];z[l]=s[l]=null}}z.parentNode=s.parentNode=w.parentNode=m.parentNode;z.parentData=s.parentData=w.parentData=
m.parentData;h.push(z);i.push(s);k.push(w)}var h=[],i=[],k=[],j=-1,o=a.length,p;if(typeof e=="function")for(;++j<o;)f(p=a[j],e.call(p,p.parentData,j));else for(;++j<o;)f(p=a[j],e);j=y(i);j.enter=function(){return Ha(h)};j.exit=function(){return y(k)};return j};a.each=function(e){for(var c=0,f=a.length;c<f;c++)for(var h=a[c],i=0,k=h.length;i<k;i++){var j=h[i];j&&e.call(j,j.__data__,i)}return a};a.empty=function(){return!g(function(){return true})};a.node=function(){return g(function(){return this})};
a.attr=function(e,c){function f(){this.removeAttribute(e)}function h(){this.removeAttributeNS(e.space,e.local)}function i(){this.setAttribute(e,c)}function k(){this.setAttributeNS(e.space,e.local,c)}function j(){var p=c.apply(this,arguments);p==null?this.removeAttribute(e):this.setAttribute(e,p)}function o(){var p=c.apply(this,arguments);p==null?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,p)}e=d3.ns.qualify(e);if(arguments.length<2)return g(e.local?function(){return this.getAttributeNS(e.space,
e.local)}:function(){return this.getAttribute(e)});return a.each(c==null?e.local?h:f:typeof c=="function"?e.local?o:j:e.local?k:i)};a.classed=function(e,c){function f(){var j=this.className;k.lastIndex=0;if(!k.test(j))this.className=ca(j+" "+e)}function h(){var j=ca(this.className.replace(k," "));this.className=j.length?j:null}function i(){(c.apply(this,arguments)?f:h).call(this)}var k=RegExp("(^|\\s+)"+d3.requote(e)+"(\\s+|$)","g");if(arguments.length<2)return g(function(){k.lastIndex=0;return k.test(this.className)});
return a.each(typeof c=="function"?i:c?f:h)};a.style=function(e,c,f){function h(){this.style.removeProperty(e)}function i(){this.style.setProperty(e,c,f)}function k(){var j=c.apply(this,arguments);j==null?this.style.removeProperty(e):this.style.setProperty(e,j,f)}if(arguments.length<3)f=null;if(arguments.length<2)return g(function(){return window.getComputedStyle(this,null).getPropertyValue(e)});return a.each(c==null?h:typeof c=="function"?k:i)};a.property=function(e,c){function f(){delete this[e]}
function h(){this[e]=c}function i(){var k=c.apply(this,arguments);if(k==null)delete this[e];else this[e]=k}e=d3.ns.qualify(e);if(arguments.length<2)return g(function(){return this[e]});return a.each(c==null?f:typeof c=="function"?i:h)};a.text=function(e){function c(){this.appendChild(document.createTextNode(e))}function f(){var h=e.apply(this,arguments);h!=null&&this.appendChild(document.createTextNode(h))}if(arguments.length<1)return g(function(){return this.textContent});a.each(function(){for(;this.lastChild;)this.removeChild(this.lastChild)});
return e==null?a:a.each(typeof e=="function"?f:c)};a.html=function(e){function c(){this.innerHTML=e}function f(){this.innerHTML=e.apply(this,arguments)}if(arguments.length<1)return g(function(){return this.innerHTML});return a.each(typeof e=="function"?f:c)};a.append=function(e){function c(h){return h.appendChild(document.createElement(e))}function f(h){return h.appendChild(document.createElementNS(e.space,e.local))}e=d3.ns.qualify(e);return b(e.local?f:c)};a.insert=function(e,c){function f(i){return i.insertBefore(document.createElement(e),
C(c,i))}function h(i){return i.insertBefore(document.createElementNS(e.space,e.local),C(c,i))}e=d3.ns.qualify(e);return b(e.local?h:f)};a.remove=function(){return b(function(e){var c=e.parentNode;c.removeChild(e);return c})};a.sort=function(e){e=Ia.apply(this,arguments);for(var c=0,f=a.length;c<f;c++){var h=a[c];h.sort(e);for(var i=1,k=h.length,j=h[0];i<k;i++){var o=h[i];if(o){j&&j.parentNode.insertBefore(o,j.nextSibling);j=o}}}return a};a.on=function(e,c){var f=e.indexOf("."),h=f==-1?e:e.substring(0,
f),i="__on"+e;return a.each(function(k,j){function o(p){var m=d3.event;d3.event=p;try{c.call(this,k,j)}finally{d3.event=m}}this[i]&&this.removeEventListener(h,this[i],false);if(c)this.addEventListener(h,this[i]=o,false)})};a.transition=function(){return W(a)};a.call=da;return a}function Ha(a){function b(d){for(var g=[],e,c,f,h,i=0,k=a.length;i<k;i++){f=a[i];g.push(e=[]);e.parentNode=f.parentNode;e.parentData=f.parentData;for(var j=0,o=f.length;j<o;j++)if(h=f[j]){e.push(c=d(f.parentNode));c.__data__=
h.__data__}else e.push(null)}return y(g)}a.append=function(d){function g(c){return c.appendChild(document.createElement(d))}function e(c){return c.appendChild(document.createElementNS(d.space,d.local))}d=d3.ns.qualify(d);return b(d.local?e:g)};a.insert=function(d,g){function e(f){return f.insertBefore(document.createElement(d),C(g,f))}function c(f){return f.insertBefore(document.createElementNS(d.space,d.local),C(g,f))}d=d3.ns.qualify(d);return b(d.local?c:e)};return a}function Ia(a){if(!arguments.length)a=
d3.ascending;return function(b,d){return a(b&&b.__data__,d&&d.__data__)}}function W(a){function b(m){var n=true,l=-1;a.each(function(){if(i[++l]!=2){var q=(m-k[l])/j[l],r=this.__transition__,t,u,s=c[l];if(q<1){n=false;if(q<0)return}else q=1;if(i[l]){if(!r||r.active!=g){i[l]=2;return}}else if(!r||r.active>g){i[l]=2;return}else{i[l]=1;h.start.dispatch.apply(this,arguments);s=c[l]={};r.active=g;for(u in e)s[u]=e[u].apply(this,arguments)}t=p(q);for(u in e)s[u].call(this,t);if(q==1){i[l]=2;if(r.active==
g){q=r.owner;if(q==g){delete this.__transition__;f&&this.parentNode.removeChild(this)}X=g;h.end.dispatch.apply(this,arguments);X=0;r.owner=q}}}});return n}var d={},g=X||++Ja,e={},c=[],f=false,h=d3.dispatch("start","end"),i=[],k=[],j=[],o,p=d3.ease("cubic-in-out");a.each(function(){(this.__transition__||(this.__transition__={})).owner=g});d.delay=function(m){var n=Infinity,l=-1;if(typeof m=="function")a.each(function(){var q=k[++l]=+m.apply(this,arguments);if(q<n)n=q});else{n=+m;a.each(function(){k[++l]=
n})}ia(b,n);return d};d.duration=function(m){var n=-1;if(typeof m=="function"){o=0;a.each(function(){var l=j[++n]=+m.apply(this,arguments);if(l>o)o=l})}else{o=+m;a.each(function(){j[++n]=o})}return d};d.ease=function(m){p=typeof m=="string"?d3.ease(m):m;return d};d.attrTween=function(m,n){function l(r,t){var u=n.call(this,r,t,this.getAttribute(m));return function(s){this.setAttribute(m,u(s))}}function q(r,t){var u=n.call(this,r,t,this.getAttributeNS(m.space,m.local));return function(s){this.setAttributeNS(m.space,
m.local,u(s))}}e["attr."+m]=m.local?q:l;return d};d.attr=function(m,n){return d.attrTween(m,ja(n))};d.styleTween=function(m,n,l){if(arguments.length<3)l=null;e["style."+m]=function(q,r){var t=n.call(this,q,r,window.getComputedStyle(this,null).getPropertyValue(m));return function(u){this.style.setProperty(m,t(u),l)}};return d};d.style=function(m,n,l){if(arguments.length<3)l=null;return d.styleTween(m,ja(n),l)};d.select=function(m){var n;m=W(a.select(m)).ease(p);n=-1;m.delay(function(){return k[++n]});
n=-1;m.duration(function(){return j[++n]});return m};d.selectAll=function(m){var n;m=W(a.selectAll(m)).ease(p);n=-1;m.delay(function(l,q){return k[q?n:++n]});n=-1;m.duration(function(l,q){return j[q?n:++n]});return m};d.remove=function(){f=true;return d};d.each=function(m,n){h[m].add(n);return d};d.call=da;return d.delay(0).duration(250)}function ja(a){return typeof a=="function"?function(b,d,g){return d3.interpolate(g,String(a.call(this,b,d)))}:(a=String(a),function(b,d,g){return d3.interpolate(g,
a)})}function ia(a,b){var d=Date.now(),g=false,e=d+b,c=E;if(isFinite(b)){for(;c;){if(c.callback==a){c.then=d;c.delay=b;g=true}else{var f=c.then+c.delay;if(f<e)e=f}c=c.next}g||(E={callback:a,then:d,delay:b,next:E});if(!J){clearTimeout(Y);Y=setTimeout(Ka,Math.max(24,e-d))}}}function Ka(){J=1;Y=0;ka(la)}function la(){for(var a,b=Date.now(),d=E;d;){a=b-d.then;if(a>d.delay)d.flush=d.callback(a);d=d.next}a=null;for(b=E;b;)b=b.flush?a?a.next=b.next:E=b.next:(a=b).next;a||(J=0);J&&ka(la)}function La(a){return function(b){return Math.pow(b,
a)}}function Ma(a){return function(b){return-Math.pow(-b,a)}}function Na(a){return a.innerRadius}function Oa(a){return a.outerRadius}function ma(a){return a.startAngle}function na(a){return a.endAngle}function Z(a,b,d,g){var e=[],c=-1,f=b.length,h=typeof d=="function",i=typeof g=="function",k;if(h&&i)for(;++c<f;)e.push([d.call(a,k=b[c],c),g.call(a,k,c)]);else if(h)for(;++c<f;)e.push([d.call(a,b[c],c),g]);else if(i)for(;++c<f;)e.push([d,g.call(a,b[c],c)]);else for(;++c<f;)e.push([d,g]);return e}function oa(a){return a[0]}
function pa(a){return a[1]}function G(a){var b=[],d=0,g=a.length,e=a[0];for(b.push(e[0],",",e[1]);++d<g;)b.push("L",(e=a[d])[0],",",e[1]);return b.join("")}function qa(a,b){if(b.length<1||a.length!=b.length&&a.length!=b.length+2)return G(a);var d=a.length!=b.length,g="",e=a[0],c=a[1],f=b[0],h=f,i=1;if(d){g+="Q"+(c[0]-f[0]*2/3)+","+(c[1]-f[1]*2/3)+","+c[0]+","+c[1];e=a[1];i=2}if(b.length>1){h=b[1];c=a[i];i++;g+="C"+(e[0]+f[0])+","+(e[1]+f[1])+","+(c[0]-h[0])+","+(c[1]-h[1])+","+c[0]+","+c[1];for(e=
2;e<b.length;e++,i++){c=a[i];h=b[e];g+="S"+(c[0]-h[0])+","+(c[1]-h[1])+","+c[0]+","+c[1]}}if(d){d=a[i];g+="Q"+(c[0]+h[0]*2/3)+","+(c[1]+h[1]*2/3)+","+d[0]+","+d[1]}return g}function ra(a,b){for(var d=[],g=(1-b)/2,e=a[0],c=a[1],f=a[2],h=2,i=a.length;++h<i;){d.push([g*(f[0]-e[0]),g*(f[1]-e[1])]);e=c;c=f;f=a[h]}d.push([g*(f[0]-e[0]),g*(f[1]-e[1])]);return d}function B(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3]}function K(a,b,d){a.push("C",B(sa,b),",",B(sa,d),",",B(ta,b),",",B(ta,d),",",B(L,
b),",",B(L,d))}function Pa(){return 0}function Qa(a){return a.source}function Ra(a){return a.target}function Sa(a){return a.radius}function Ta(){return 64}function Ua(){return"circle"}d3={version:"1.7.0"};if(!Date.now)Date.now=function(){return+new Date};if(!Object.create)Object.create=function(a){function b(){}b.prototype=a;return new b};var M=function(a){return Array.prototype.slice.call(a)};try{M(document.documentElement.childNodes)}catch(gb){M=wa}d3.rebind=function(a,b){return function(){var d=
b.apply(a,arguments);return arguments.length?a:d}};d3.ascending=function(a,b){return a<b?-1:a>b?1:0};d3.descending=function(a,b){return b<a?-1:b>a?1:0};d3.min=function(a,b){var d=0,g=a.length,e=a[0],c;if(arguments.length==1)for(;++d<g;){if(e>(c=a[d]))e=c}else for(e=b(a[0]);++d<g;)if(e>(c=b(a[d])))e=c;return e};d3.max=function(a,b){var d=0,g=a.length,e=a[0],c;if(arguments.length==1)for(;++d<g;){if(e<(c=a[d]))e=c}else for(e=b(e);++d<g;)if(e<(c=b(a[d])))e=c;return e};d3.nest=function(){function a(h,
i){if(i>=g.length)return f?f.call(d,h):c?h.sort(c):h;for(var k=-1,j=h.length,o=g[i++],p,m,n={};++k<j;)if((p=o(m=h[k]))in n)n[p].push(m);else n[p]=[m];for(p in n)n[p]=a(n[p],i);return n}function b(h,i){if(i>=g.length)return h;var k=[],j=e[i++],o;for(o in h)k.push({key:o,values:b(h[o],i)});j&&k.sort(function(p,m){return j(p.key,m.key)});return k}var d={},g=[],e=[],c,f;d.map=function(h){return a(h,0)};d.entries=function(h){return b(a(h,0),0)};d.key=function(h){g.push(h);return d};d.sortKeys=function(h){e[g.length-
1]=h;return d};d.sortValues=function(h){c=h;return d};d.rollup=function(h){f=h;return d};return d};d3.keys=function(a){var b=[],d;for(d in a)b.push(d);return b};d3.values=function(a){var b=[],d;for(d in a)b.push(a[d]);return b};d3.entries=function(a){var b=[],d;for(d in a)b.push({key:d,value:a[d]});return b};d3.merge=function(a){return Array.prototype.concat.apply([],a)};d3.split=function(a,b){var d=[],g=[],e,c=-1,f=a.length;if(arguments.length<2)b=xa;for(;++c<f;)if(b.call(g,e=a[c],c))g=[];else{g.length||
d.push(g);g.push(e)}return d};d3.range=function(a,b,d){if(arguments.length==1){b=a;a=0}if(d==null)d=1;if((b-a)/d==Infinity)throw Error("infinite range");var g=[],e=-1,c;if(d<0)for(;(c=a+d*++e)>b;)g.push(c);else for(;(c=a+d*++e)<b;)g.push(c);return g};d3.requote=function(a){return a.replace(Va,"\\$&")};var Va=/[\\\^\$\*\+\?\[\]\(\)\.\{\}]/g;d3.xhr=function(a,b,d){var g=new XMLHttpRequest;if(arguments.length<3)d=b;else b&&g.overrideMimeType(b);g.open("GET",a,true);g.onreadystatechange=function(){if(g.readyState==
4)d(g.status<300?g:null)};g.send(null)};d3.text=function(a,b,d){if(arguments.length<3){d=b;b=null}d3.xhr(a,b,function(g){d(g&&g.responseText)})};d3.json=function(a,b){d3.text(a,"application/json",function(d){b(d?JSON.parse(d):null)})};d3.html=function(a,b){d3.text(a,"text/html",function(d){if(d!=null){var g=document.createRange();g.selectNode(document.body);d=g.createContextualFragment(d)}b(d)})};d3.xml=function(a,b,d){if(arguments.length<3){d=b;b=null}d3.xhr(a,b,function(g){d(g&&g.responseXML)})};
d3.ns={prefix:{svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},qualify:function(a){var b=a.indexOf(":");return b<0?a:{space:d3.ns.prefix[a.substring(0,b)],local:a.substring(b+1)}}};d3.dispatch=function(){for(var a={},b,d=0,g=arguments.length;d<g;d++){b=arguments[d];a[b]=ya(b)}return a};d3.format=function(a){a=Wa.exec(a);var b=a[1]||" ",d=a[3]||"",g=a[5],e=+a[6],
c=a[7],f=a[8],h=a[9];if(f)f=f.substring(1);if(g){b="0";if(c)e-=Math.floor((e-1)/4)}if(h=="d")f="0";return function(i){i=+i;var k=i<0&&(i=-i)?"":d;if(h=="d"&&i%1)return"";i=f?i.toFixed(f):""+i;if(g){var j=i.length+k.length;if(j<e)i=Array(e-j+1).join(b)+i;if(c)i=ea(i);i=k+i}else{if(c)i=ea(i);i=k+i;j=i.length;if(j<e)i=Array(e-j+1).join(b)+i}return i}};var Wa=/(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/,Xa=Q(2),Ya=Q(3),Za={linear:function(){return za},poly:Q,quad:function(){return Xa},
cubic:function(){return Ya},sin:function(){return Aa},exp:function(){return Ba},circle:function(){return Ca},elastic:function(a,b){var d;if(arguments.length<2)b=0.45;if(arguments.length<1){a=1;d=b/4}else d=b/(2*Math.PI)*Math.asin(1/a);return function(g){return 1+a*Math.pow(2,10*-g)*Math.sin((g-d)*2*Math.PI/b)}},back:function(a){a||(a=1.70158);return function(b){return b*b*((a+1)*b-a)}},bounce:function(){return Da}},$a={"in":function(a){return a},out:fa,"in-out":ga,"out-in":function(a){return ga(fa(a))}};
d3.ease=function(a){var b=a.indexOf("-"),d=b>=0?a.substring(0,b):a;b=b>=0?a.substring(b+1):"in";return $a[b](Za[d].apply(null,Array.prototype.slice.call(arguments,1)))};d3.event=null;d3.interpolate=function(a,b){if(typeof b=="number")return d3.interpolateNumber(+a,b);if(typeof b=="string")return b in F||/^(#|rgb\(|hsl\()/.test(b)?d3.interpolateRgb(String(a),b):d3.interpolateString(String(a),b);if(b instanceof Array)return d3.interpolateArray(a,b);return d3.interpolateObject(a,b)};d3.interpolateNumber=
function(a,b){b-=a;return function(d){return a+b*d}};d3.interpolateRound=function(a,b){b-=a;return function(d){return Math.round(a+b*d)}};d3.interpolateString=function(a,b){var d,g,e=0,c=[],f=[],h,i;for(g=0;d=$.exec(b);++g){d.index&&c.push(b.substring(e,d.index));f.push({i:c.length,x:d[0]});c.push(null);e=$.lastIndex}e<b.length&&c.push(b.substring(e));g=0;for(h=f.length;(d=$.exec(a))&&g<h;++g){i=f[g];if(i.x==d[0]){if(i.i)if(c[i.i+1]==null){c[i.i-1]+=i.x;c.splice(i.i,1);for(d=g+1;d<h;++d)f[d].i--}else{c[i.i-
1]+=i.x+c[i.i+1];c.splice(i.i,2);for(d=g+1;d<h;++d)f[d].i-=2}else if(c[i.i+1]==null)c[i.i]=i.x;else{c[i.i]=i.x+c[i.i+1];c.splice(i.i+1,1);for(d=g+1;d<h;++d)f[d].i--}f.splice(g,1);h--;g--}else i.x=d3.interpolateNumber(parseFloat(d[0]),parseFloat(i.x))}for(;g<h;){i=f.pop();if(c[i.i+1]==null)c[i.i]=i.x;else{c[i.i]=i.x+c[i.i+1];c.splice(i.i+1,1)}h--}if(c.length==1)return c[0]==null?f[0].x:function(){return b};return function(k){for(g=0;g<h;++g)c[(i=f[g]).i]=i.x(k);return c.join("")}};d3.interpolateRgb=
function(a,b){a=d3.rgb(a);b=d3.rgb(b);var d=a.r,g=a.g,e=a.b,c=b.r-d,f=b.g-g,h=b.b-e;return function(i){return"rgb("+Math.round(d+c*i)+","+Math.round(g+f*i)+","+Math.round(e+h*i)+")"}};d3.interpolateHsl=function(a,b){a=d3.hsl(a);b=d3.hsl(b);var d=a.h,g=a.s,e=a.l,c=b.h-d,f=b.s-g,h=b.l-e;return function(i){return V(d+c*i,g+f*i,e+h*i).toString()}};d3.interpolateArray=function(a,b){var d=[],g=[],e=a.length,c=b.length,f=Math.min(a.length,b.length),h;for(h=0;h<f;++h)d.push(d3.interpolate(a[h],b[h]));for(;h<
e;++h)g[h]=a[h];for(;h<c;++h)g[h]=b[h];return function(i){for(h=0;h<f;++h)g[h]=d[h](i);return g}};d3.interpolateObject=function(a,b){var d={},g={},e;for(e in a)if(e in b)d[e]=(e in ab||/\bcolor\b/.test(e)?d3.interpolateRgb:d3.interpolate)(a[e],b[e]);else g[e]=a[e];for(e in b)e in a||(g[e]=b[e]);return function(c){for(e in d)g[e]=d[e](c);return g}};var $=/[-+]?(?:\d+\.\d+|\d+\.|\.\d+|\d+)(?:[eE][-]?\d+)?/g,ab={background:1,fill:1,stroke:1};d3.rgb=function(a,b,d){return arguments.length==1?S(""+a,I,
V):I(~~a,~~b,~~d)};var F={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",
darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",
gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",
lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",
mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",
seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},aa;for(aa in F)F[aa]=S(F[aa],I,V);d3.hsl=function(a,b,d){return arguments.length==1?S(""+a,Fa,U):U(+a,
+b,+d)};var C=function(a,b){return b.querySelector(a)},ha=function(a,b){return M(b.querySelectorAll(a))};if(typeof Sizzle=="function"){C=function(a,b){return Sizzle(a,b)[0]};ha=function(a,b){return Sizzle.uniqueSort(Sizzle(a,b))}}var N=y([[document]]);N[0].parentNode=document.documentElement;d3.select=function(a){return typeof a=="string"?N.select(a):y([[a]])};d3.selectAll=function(a){return typeof a=="string"?N.selectAll(a):y([M(a)])};d3.transition=N.transition;var Ja=0,X=0,E=null,Y=0,J;d3.timer=
function(a){ia(a,0)};var ka=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){setTimeout(a,17)};d3.scale={};d3.scale.linear=function(){function a(j){return k((j-d)*f)}function b(j){var o=Math.min(d,g),p=Math.max(d,g),m=p-o,n=Math.pow(10,Math.floor(Math.log(m/j)/Math.LN10));j/=m/n;if(j<=0.15)n*=10;else if(j<=0.35)n*=5;else if(j<=0.75)n*=2;return{start:Math.ceil(o/n)*n,stop:Math.floor(p/
n)*n+n*0.5,step:n}}var d=0,g=1,e=0,c=1,f=1/(g-d),h=(g-d)/(c-e),i=d3.interpolate,k=i(e,c);a.invert=function(j){return(j-e)*h+d};a.domain=function(j){if(!arguments.length)return[d,g];d=j[0];g=j[1];f=1/(g-d);h=(g-d)/(c-e);return a};a.range=function(j){if(!arguments.length)return[e,c];e=j[0];c=j[1];h=(g-d)/(c-e);k=i(e,c);return a};a.rangeRound=function(j){return a.range(j).interpolate(d3.interpolateRound)};a.interpolate=function(j){if(!arguments.length)return i;k=(i=j)(e,c);return a};a.ticks=function(j){j=
b(j);return d3.range(j.start,j.stop,j.step)};a.tickFormat=function(j){j=Math.max(0,-Math.floor(Math.log(b(j).step)/Math.LN10+0.01));return d3.format(",."+j+"f")};return a};d3.scale.log=function(){function a(c){return(e?-Math.log(-c):Math.log(c))/Math.LN10}function b(c){return e?-Math.pow(10,-c):Math.pow(10,c)}function d(c){return g(a(c))}var g=d3.scale.linear(),e=false;d.invert=function(c){return b(g.invert(c))};d.domain=function(c){if(!arguments.length)return g.domain().map(b);e=(c[0]||c[1])<0;g.domain(c.map(a));
return d};d.range=d3.rebind(d,g.range);d.rangeRound=d3.rebind(d,g.rangeRound);d.interpolate=d3.rebind(d,g.interpolate);d.ticks=function(){var c=g.domain(),f=[];if(c.every(isFinite)){var h=Math.floor(c[0]),i=Math.ceil(c[1]),k=b(c[0]);c=b(c[1]);if(e)for(f.push(b(h));h++<i;)for(var j=9;j>0;j--)f.push(b(h)*j);else{for(;h<i;h++)for(j=1;j<10;j++)f.push(b(h)*j);f.push(b(h))}for(h=0;f[h]<k;h++);for(i=f.length;f[i-1]>c;i--);f=f.slice(h,i)}return f};d.tickFormat=function(){return function(c){return c.toPrecision(1)}};
return d};d3.scale.pow=function(){function a(f){return b(e(f))}var b=d3.scale.linear(),d=d3.scale.linear(),g=1,e=Number,c=e;a.invert=function(f){return c(b.invert(f))};a.domain=function(f){if(!arguments.length)return b.domain().map(c);var h=(f[0]||f[1])<0?Ma:La;e=h(g);c=h(1/g);b.domain(f.map(e));d.domain(f);return a};a.range=d3.rebind(a,b.range);a.rangeRound=d3.rebind(a,b.rangeRound);a.interpolate=d3.rebind(a,b.interpolate);a.ticks=d.ticks;a.tickFormat=d.tickFormat;a.exponent=function(f){if(!arguments.length)return g;
var h=a.domain();g=f;return a.domain(h)};return a};d3.scale.sqrt=function(){return d3.scale.pow().exponent(0.5)};d3.scale.ordinal=function(){function a(c){c=c in d?d[c]:d[c]=b.push(c)-1;return g[c%g.length]}var b=[],d={},g=[],e=0;a.domain=function(c){if(!arguments.length)return b;b=c;d={};for(var f=-1,h=-1,i=b.length;++f<i;){c=b[f];c in d||(d[c]=++h)}return a};a.range=function(c){if(!arguments.length)return g;g=c;return a};a.rangePoints=function(c,f){if(arguments.length<2)f=0;var h=c[0],i=c[1],k=
(i-h)/(b.length-1+f);g=b.length==1?[(h+i)/2]:d3.range(h+k*f/2,i+k/2,k);e=0;return a};a.rangeBands=function(c,f){if(arguments.length<2)f=0;var h=c[0],i=c[1],k=(i-h)/(b.length+f);g=d3.range(h+k*f,i,k);e=k*(1-f);return a};a.rangeRoundBands=function(c,f){if(arguments.length<2)f=0;var h=c[0],i=c[1],k=i-h,j=Math.floor(k/(b.length+f));g=d3.range(h+Math.round((k-(b.length-f)*j)/2),i,j);e=Math.round(j*(1-f));return a};a.rangeBand=function(){return e};return a};d3.scale.category10=function(){return d3.scale.ordinal().range(bb)};
d3.scale.category20=function(){return d3.scale.ordinal().range(cb)};d3.scale.category20b=function(){return d3.scale.ordinal().range(db)};d3.scale.category20c=function(){return d3.scale.ordinal().range(eb)};var bb=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],cb=["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf",
"#9edae5"],db=["#393b79","#5254a3","#6b6ecf","#9c9ede","#637939","#8ca252","#b5cf6b","#cedb9c","#8c6d31","#bd9e39","#e7ba52","#e7cb94","#843c39","#ad494a","#d6616b","#e7969c","#7b4173","#a55194","#ce6dbd","#de9ed6"],eb=["#3182bd","#6baed6","#9ecae1","#c6dbef","#e6550d","#fd8d3c","#fdae6b","#fdd0a2","#31a354","#74c476","#a1d99b","#c7e9c0","#756bb1","#9e9ac8","#bcbddc","#dadaeb","#636363","#969696","#bdbdbd","#d9d9d9"];d3.scale.quantile=function(){function a(){for(var f=-1,h=c.length=e.length,i=g.length/
h;++f<h;)c[f]=g[~~(f*i)]}function b(f){if(isNaN(f=+f))return NaN;for(var h=0,i=c.length-1;h<=i;){var k=h+i>>1,j=c[k];if(j<f)h=k+1;else if(j>f)i=k-1;else return k}return i<0?0:i}function d(f){return e[b(f)]}var g=[],e=[],c=[];d.domain=function(f){if(!arguments.length)return g;g=f.filter(function(h){return!isNaN(h)}).sort(d3.ascending);a();return d};d.range=function(f){if(!arguments.length)return e;e=f;a();return d};d.quantiles=function(){return c};return d};d3.scale.quantize=function(){function a(f){return c[Math.max(0,
Math.min(e,Math.floor(g*(f-b))))]}var b=0,d=1,g=2,e=1,c=[0,1];a.domain=function(f){if(!arguments.length)return[b,d];b=f[0];d=f[1];g=c.length/(d-b);return a};a.range=function(f){if(!arguments.length)return c;c=f;g=c.length/(d-b);e=c.length-1;return a};return a};d3.svg={};d3.svg.arc=function(){function a(){var c=b.apply(this,arguments),f=d.apply(this,arguments),h=g.apply(this,arguments)+H,i=e.apply(this,arguments)+H,k=i-h,j=k<Math.PI?"0":"1",o=Math.cos(h);h=Math.sin(h);var p=Math.cos(i);i=Math.sin(i);
return k>=fb?c?"M0,"+f+"A"+f+","+f+" 0 1,1 0,"+-f+"A"+f+","+f+" 0 1,1 0,"+f+"M0,"+c+"A"+c+","+c+" 0 1,1 0,"+-c+"A"+c+","+c+" 0 1,1 0,"+c+"Z":"M0,"+f+"A"+f+","+f+" 0 1,1 0,"+-f+"A"+f+","+f+" 0 1,1 0,"+f+"Z":c?"M"+f*o+","+f*h+"A"+f+","+f+" 0 "+j+",1 "+f*p+","+f*i+"L"+c*p+","+c*i+"A"+c+","+c+" 0 "+j+",0 "+c*o+","+c*h+"Z":"M"+f*o+","+f*h+"A"+f+","+f+" 0 "+j+",1 "+f*p+","+f*i+"L0,0Z"}var b=Na,d=Oa,g=ma,e=na;a.innerRadius=function(c){if(!arguments.length)return b;b=v(c);return a};a.outerRadius=function(c){if(!arguments.length)return d;
d=v(c);return a};a.startAngle=function(c){if(!arguments.length)return g;g=v(c);return a};a.endAngle=function(c){if(!arguments.length)return e;e=v(c);return a};a.centroid=function(){var c=(b.apply(this,arguments)+d.apply(this,arguments))/2,f=(g.apply(this,arguments)+e.apply(this,arguments))/2+H;return[Math.cos(f)*c,Math.sin(f)*c]};return a};var H=-Math.PI/2,fb=2*Math.PI-1.0E-6;d3.svg.line=function(){function a(f){return f.length<1?null:"M"+e(Z(this,f,b,d),c)}var b=oa,d=pa,g="linear",e=O[g],c=0.7;a.x=
function(f){if(!arguments.length)return b;b=f;return a};a.y=function(f){if(!arguments.length)return d;d=f;return a};a.interpolate=function(f){if(!arguments.length)return g;e=O[g=f];return a};a.tension=function(f){if(!arguments.length)return c;c=f;return a};return a};var O={linear:G,"step-before":function(a){var b=[],d=0,g=a.length,e=a[0];for(b.push(e[0],",",e[1]);++d<g;)b.push("V",(e=a[d])[1],"H",e[0]);return b.join("")},"step-after":function(a){var b=[],d=0,g=a.length,e=a[0];for(b.push(e[0],",",
e[1]);++d<g;)b.push("H",(e=a[d])[0],"V",e[1]);return b.join("")},basis:function(a){if(a.length<3)return G(a);var b=[],d=1,g=a.length,e=a[0],c=e[0],f=e[1],h=[c,c,c,(e=a[1])[0]],i=[f,f,f,e[1]];b.push(c,",",f);for(K(b,h,i);++d<g;){e=a[d];h.shift();h.push(e[0]);i.shift();i.push(e[1]);K(b,h,i)}for(d=-1;++d<2;){h.shift();h.push(e[0]);i.shift();i.push(e[1]);K(b,h,i)}return b.join("")},"basis-closed":function(a){for(var b,d=-1,g=a.length,e=g+4,c,f=[],h=[];++d<4;){c=a[d%g];f.push(c[0]);h.push(c[1])}b=[B(L,
f),",",B(L,h)];for(--d;++d<e;){c=a[d%g];f.shift();f.push(c[0]);h.shift();h.push(c[1]);K(b,f,h)}return b.join("")},cardinal:function(a,b){return a.length<3?G(a):a[0]+qa(a,ra(a,b))},"cardinal-closed":function(a,b){return a.length<3?G(a):a[0]+qa(a,ra([a[a.length-2]].concat(a,[a[1]]),b))}},sa=[0,2/3,1/3,0],ta=[0,1/3,2/3,0],L=[0,1/6,2/3,1/6];d3.svg.area=function(){function a(h){return h.length<1?null:"M"+c(Z(this,h,b,g),f)+"L"+c(Z(this,h,b,d).reverse(),f)+"Z"}var b=oa,d=Pa,g=pa,e="linear",c=O[e],f=0.7;
a.x=function(h){if(!arguments.length)return b;b=h;return a};a.y0=function(h){if(!arguments.length)return d;d=h;return a};a.y1=function(h){if(!arguments.length)return g;g=h;return a};a.interpolate=function(h){if(!arguments.length)return e;c=O[e=h];return a};a.tension=function(h){if(!arguments.length)return f;f=h;return a};return a};d3.svg.chord=function(){function a(h,i){var k=b(this,d,h,i),j=b(this,g,h,i);return"M"+k.p0+("A"+k.r+","+k.r+" 0 0,1 "+k.p1)+(k.a0==j.a0&&k.a1==j.a1?"Q 0,0 "+k.p0:"Q 0,0 "+
j.p0+("A"+j.r+","+j.r+" 0 0,1 "+j.p1)+("Q 0,0 "+k.p0))+"Z"}function b(h,i,k,j){var o=i.call(h,k,j);i=e.call(h,o,j);k=c.call(h,o,j)+H;h=f.call(h,o,j)+H;return{r:i,a0:k,a1:h,p0:[i*Math.cos(k),i*Math.sin(k)],p1:[i*Math.cos(h),i*Math.sin(h)]}}var d=Qa,g=Ra,e=Sa,c=ma,f=na;a.radius=function(h){if(!arguments.length)return e;e=v(h);return a};a.source=function(h){if(!arguments.length)return d;d=v(h);return a};a.target=function(h){if(!arguments.length)return g;g=v(h);return a};a.startAngle=function(h){if(!arguments.length)return c;
c=v(h);return a};a.endAngle=function(h){if(!arguments.length)return f;f=v(h);return a};return a};d3.svg.mouse=function(a){var b=(a.ownerSVGElement||a).createSVGPoint();if(ba<0&&(window.scrollX||window.scrollY)){var d=d3.select(document.body).append("svg:svg").style("position","absolute").style("top",0).style("left",0),g=d[0][0].getScreenCTM();ba=!(g.f||g.e);d.remove()}if(ba){b.x=d3.event.pageX;b.y=d3.event.pageY}else{b.x=d3.event.clientX;b.y=d3.event.clientY}b=b.matrixTransform(a.getScreenCTM().inverse());
return[b.x,b.y]};var ba=/WebKit/.test(navigator.userAgent)?-1:0;d3.svg.symbol=function(){function a(g,e){return(ua[b.call(this,g,e)]||ua.circle)(d.call(this,g,e))}var b=Ua,d=Ta;a.type=function(g){if(!arguments.length)return b;b=v(g);return a};a.size=function(g){if(!arguments.length)return d;d=v(g);return a};return a};d3.svg.symbolTypes=["circle","cross","diamond","square","triangle-down","triangle-up"];var ua={circle:function(a){a=Math.sqrt(a/Math.PI);return"M0,"+a+"A"+a+","+a+" 0 1,1 0,"+-a+"A"+
a+","+a+" 0 1,1 0,"+a+"Z"},cross:function(a){a=Math.sqrt(a/5)/2;return"M"+-3*a+","+-a+"H"+-a+"V"+-3*a+"H"+a+"V"+-a+"H"+3*a+"V"+a+"H"+a+"V"+3*a+"H"+-a+"V"+a+"H"+-3*a+"Z"},diamond:function(a){a=Math.sqrt(a/(2*va));var b=a*va;return"M0,"+-a+"L"+b+",0 0,"+a+" "+-b+",0Z"},square:function(a){a=Math.sqrt(a)/2;return"M"+-a+","+-a+"L"+a+","+-a+" "+a+","+a+" "+-a+","+a+"Z"},"triangle-down":function(a){a=Math.sqrt(a/P);var b=a*P/2;return"M0,"+b+"L"+a+","+-b+" "+-a+","+-b+"Z"},"triangle-up":function(a){a=Math.sqrt(a/
P);var b=a*P/2;return"M0,"+-b+"L"+a+","+b+" "+-a+","+b+"Z"}},P=Math.sqrt(3),va=Math.tan(30*Math.PI/180)})();

Просмотреть файл

@ -63,7 +63,7 @@ function d3_time_parse(date, template, string, j) {
var d3_time_zfill2 = d3.format("02d"),
d3_time_zfill3 = d3.format("03d"),
d3_time_zfill4 = d3.format("04d"),
d3_time_sfill2 = d3.format(" 2d");
d3_time_sfill2 = d3.format("2d");
var d3_time_formats = {
a: function(d) { return d3_time_weekdays[d.getDay()].substring(0, 3); },
@ -223,14 +223,14 @@ function d3_time_parseLocaleTime(date, string, i) {
}
function d3_time_parseFullYear(date, string, i) {
d3_time_number4Re.lastIndex = 0;
var n = d3_time_number4Re.exec(string.substring(i, i + 4));
d3_time_numberRe.lastIndex = 0;
var n = d3_time_numberRe.exec(string.substring(i, i + 4));
return n ? (date.setFullYear(n[0]), i += n[0].length) : -1;
}
function d3_time_parseYear(date, string, i) {
d3_time_number2Re.lastIndex = 0;
var n = d3_time_number2Re.exec(string.substring(i, i + 2));
d3_time_numberRe.lastIndex = 0;
var n = d3_time_numberRe.exec(string.substring(i, i + 2));
return n ? (date.setFullYear(d3_time_century() + +n[0]), i += n[0].length) : -1;
}
@ -239,21 +239,21 @@ function d3_time_century() {
}
function d3_time_parseMonthNumber(date, string, i) {
d3_time_number2Re.lastIndex = 0;
var n = d3_time_number2Re.exec(string.substring(i, i + 2));
d3_time_numberRe.lastIndex = 0;
var n = d3_time_numberRe.exec(string.substring(i, i + 2));
return n ? (date.setMonth(n[0] - 1), i += n[0].length) : -1;
}
function d3_time_parseDay(date, string, i) {
d3_time_number2Re.lastIndex = 0;
var n = d3_time_number2Re.exec(string.substring(i, i + 2));
d3_time_numberRe.lastIndex = 0;
var n = d3_time_numberRe.exec(string.substring(i, i + 2));
return n ? (date.setDate(+n[0]), i += n[0].length) : -1;
}
// Note: we don't validate that the hour is in the range [0,23].
function d3_time_parseHour24(date, string, i) {
d3_time_number2Re.lastIndex = 0;
var n = d3_time_number2Re.exec(string.substring(i, i + 2));
d3_time_numberRe.lastIndex = 0;
var n = d3_time_numberRe.exec(string.substring(i, i + 2));
return n ? (date.setHours(+n[0]), i += n[0].length) : -1;
}
@ -264,20 +264,19 @@ function d3_time_parseHour12(date, string, i) {
}
function d3_time_parseMinutes(date, string, i) {
d3_time_number2Re.lastIndex = 0;
var n = d3_time_number2Re.exec(string.substring(i, i + 2));
d3_time_numberRe.lastIndex = 0;
var n = d3_time_numberRe.exec(string.substring(i, i + 2));
return n ? (date.setMinutes(+n[0]), i += n[0].length) : -1;
}
function d3_time_parseSeconds(date, string, i) {
d3_time_number2Re.lastIndex = 0;
var n = d3_time_number2Re.exec(string.substring(i, i + 2));
d3_time_numberRe.lastIndex = 0;
var n = d3_time_numberRe.exec(string.substring(i, i + 2));
return n ? (date.setSeconds(+n[0]), i += n[0].length) : -1;
}
// Note: we don't look at the next directive.
var d3_time_number2Re = /[\s\d]{1,2}/,
d3_time_number4Re = /[\s\d]{1,4}/;
var d3_time_numberRe = /\s*\d+/;
function d3_time_parseAmPm(date, string, i) {
var n = d3_time_amPmLookup[string.substring(i, i += 2).toLowerCase()];

16
d3.time.min.js поставляемый
Просмотреть файл

@ -1,8 +1,8 @@
(function(){function j(a,b,c,e){for(var d,h=0,i=b.length,k=c.length;h<i;){if(e>=k)return-1;d=b.charCodeAt(h++);if(d==37){d=u[b.charAt(h++)];if(!d||(e=d(a,c,e))<0)return-1}else if(d!=c.charCodeAt(e++))return-1}return e}function m(a,b,c){f.lastIndex=0;return(b=f.exec(b.substring(c,c+2)))?(a.setDate(+b[0]),c+b[0].length):-1}function n(a,b,c){f.lastIndex=0;return(b=f.exec(b.substring(c,c+2)))?(a.setHours(+b[0]),c+b[0].length):-1}d3.time={};d3.time.format=function(a){function b(e){for(var d=[],h=-1,i=
0,k,o;++h<c;)if(a.charCodeAt(h)==37){d.push(a.substring(i,h),(o=l[k=a.charAt(++h)])?o(e):k);i=h+1}d.push(a.substring(i,h));return d.join("")}var c=a.length;b.parse=function(e){var d=new Date(1900,0,1);if(j(d,a,e,0)!=e.length)return null;if(d.hour12){e=d.getHours()%12;d.setHours(d.hour12pm?e+12:e)}delete d.hour12;delete d.hour12pm;return d};b.toString=function(){return a};return b};var g=d3.format("02d"),v=d3.format("03d"),w=d3.format("04d"),x=d3.format(" 2d"),l={a:function(a){return p[a.getDay()].substring(0,
3)},A:function(a){return p[a.getDay()]},b:function(a){return q[a.getMonth()].substring(0,3)},B:function(a){return q[a.getMonth()]},c:d3.time.format("%a %b %e %H:%M:%S %Y"),d:function(a){return g(a.getDate())},e:function(a){return x(a.getDate())},H:function(a){return g(a.getHours())},I:function(a){return g(a.getHours()%12||12)},j:function(a){return v(1+~~((a-new Date(a.getFullYear(),0,1))/864E5))},m:function(a){return g(a.getMonth()+1)},M:function(a){return g(a.getMinutes())},p:function(a){return a.getHours()>=
12?"PM":"AM"},S:function(a){return g(a.getSeconds())},U:function(a){var b=new Date(a.getFullYear(),0,1);return g(~~(((a-b)/864E5+b.getDay())/7))},w:function(a){return a.getDay()},W:function(a){var b=new Date(a.getFullYear(),0,1);return g(~~(((a-b)/864E5+(b.getDay()+6)%7)/7))},x:d3.time.format("%m/%d/%y"),X:d3.time.format("%H:%M:%S"),y:function(a){return g(a.getYear()%100)},Y:function(a){return w(a.getFullYear()%1E4)},Z:function(a){a=a.getTimezoneOffset();var b=Math.abs(a)%60;return(a>0?"-":"+")+g(~~(Math.abs(a)/
60))+g(b)},"%":function(){return"%"}},u={a:function(a,b,c){return b.substring(c,c+=3).toLowerCase()in y?c:-1},A:function(a,b,c){r.lastIndex=0;return(a=r.exec(b.substring(c,c+10)))?c+a[0].length:-1},b:function(a,b,c){b=z[b.substring(c,c+=3).toLowerCase()];return b==null?-1:(a.setMonth(b),c)},B:function(a,b,c){s.lastIndex=0;return(b=s.exec(b.substring(c,c+12)))?(a.setMonth(A[b[0].toLowerCase()]),c+b[0].length):-1},c:function(a,b,c){return j(a,l.c.toString(),b,c)},d:m,e:m,H:n,I:function(a,b,c){a.hour12=
true;return n(a,b,c)},m:function(a,b,c){f.lastIndex=0;return(b=f.exec(b.substring(c,c+2)))?(a.setMonth(b[0]-1),c+b[0].length):-1},M:function(a,b,c){f.lastIndex=0;return(b=f.exec(b.substring(c,c+2)))?(a.setMinutes(+b[0]),c+b[0].length):-1},p:function(a,b,c){b=B[b.substring(c,c+=2).toLowerCase()];return b==null?-1:(a.hour12pm=b,c)},S:function(a,b,c){f.lastIndex=0;return(b=f.exec(b.substring(c,c+2)))?(a.setSeconds(+b[0]),c+b[0].length):-1},x:function(a,b,c){return j(a,l.x.toString(),b,c)},X:function(a,
b,c){return j(a,l.X.toString(),b,c)},y:function(a,b,c){f.lastIndex=0;return(b=f.exec(b.substring(c,c+2)))?(a.setFullYear(~~((new Date).getFullYear()/1E3)*1E3+ +b[0]),c+b[0].length):-1},Y:function(a,b,c){t.lastIndex=0;return(b=t.exec(b.substring(c,c+4)))?(a.setFullYear(b[0]),c+b[0].length):-1}},y={sun:3,mon:3,tue:3,wed:3,thu:3,fri:3,sat:3},r=/^(?:Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)/ig,p=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],z={jan:0,feb:1,mar:2,
apr:3,may:4,jun:5,jul:6,aug:7,sep:8,oct:9,nov:10,dec:11},s=/^(?:January|February|March|April|May|June|July|August|September|October|November|December)/ig,A={january:0,february:1,march:2,april:3,may:4,june:5,july:6,august:7,september:8,october:9,november:10,december:11},q=["January","February","March","April","May","June","July","August","September","October","November","December"],f=/[\s\d]{1,2}/,t=/[\s\d]{1,4}/,B={am:0,pm:1}})();
(function(){function j(a,b,c,f){for(var d,h=0,i=b.length,k=c.length;h<i;){if(f>=k)return-1;d=b.charCodeAt(h++);if(d==37){d=t[b.charAt(h++)];if(!d||(f=d(a,c,f))<0)return-1}else if(d!=c.charCodeAt(f++))return-1}return f}function m(a,b,c){e.lastIndex=0;return(b=e.exec(b.substring(c,c+2)))?(a.setDate(+b[0]),c+b[0].length):-1}function n(a,b,c){e.lastIndex=0;return(b=e.exec(b.substring(c,c+2)))?(a.setHours(+b[0]),c+b[0].length):-1}d3.time={};d3.time.format=function(a){function b(f){for(var d=[],h=-1,i=
0,k,o;++h<c;)if(a.charCodeAt(h)==37){d.push(a.substring(i,h),(o=l[k=a.charAt(++h)])?o(f):k);i=h+1}d.push(a.substring(i,h));return d.join("")}var c=a.length;b.parse=function(f){var d=new Date(1900,0,1);if(j(d,a,f,0)!=f.length)return null;if(d.hour12){f=d.getHours()%12;d.setHours(d.hour12pm?f+12:f)}delete d.hour12;delete d.hour12pm;return d};b.toString=function(){return a};return b};var g=d3.format("02d"),u=d3.format("03d"),v=d3.format("04d"),w=d3.format("2d"),l={a:function(a){return p[a.getDay()].substring(0,
3)},A:function(a){return p[a.getDay()]},b:function(a){return q[a.getMonth()].substring(0,3)},B:function(a){return q[a.getMonth()]},c:d3.time.format("%a %b %e %H:%M:%S %Y"),d:function(a){return g(a.getDate())},e:function(a){return w(a.getDate())},H:function(a){return g(a.getHours())},I:function(a){return g(a.getHours()%12||12)},j:function(a){return u(1+~~((a-new Date(a.getFullYear(),0,1))/864E5))},m:function(a){return g(a.getMonth()+1)},M:function(a){return g(a.getMinutes())},p:function(a){return a.getHours()>=
12?"PM":"AM"},S:function(a){return g(a.getSeconds())},U:function(a){var b=new Date(a.getFullYear(),0,1);return g(~~(((a-b)/864E5+b.getDay())/7))},w:function(a){return a.getDay()},W:function(a){var b=new Date(a.getFullYear(),0,1);return g(~~(((a-b)/864E5+(b.getDay()+6)%7)/7))},x:d3.time.format("%m/%d/%y"),X:d3.time.format("%H:%M:%S"),y:function(a){return g(a.getYear()%100)},Y:function(a){return v(a.getFullYear()%1E4)},Z:function(a){a=a.getTimezoneOffset();var b=Math.abs(a)%60;return(a>0?"-":"+")+g(~~(Math.abs(a)/
60))+g(b)},"%":function(){return"%"}},t={a:function(a,b,c){return b.substring(c,c+=3).toLowerCase()in x?c:-1},A:function(a,b,c){r.lastIndex=0;return(a=r.exec(b.substring(c,c+10)))?c+a[0].length:-1},b:function(a,b,c){b=y[b.substring(c,c+=3).toLowerCase()];return b==null?-1:(a.setMonth(b),c)},B:function(a,b,c){s.lastIndex=0;return(b=s.exec(b.substring(c,c+12)))?(a.setMonth(z[b[0].toLowerCase()]),c+b[0].length):-1},c:function(a,b,c){return j(a,l.c.toString(),b,c)},d:m,e:m,H:n,I:function(a,b,c){a.hour12=
true;return n(a,b,c)},m:function(a,b,c){e.lastIndex=0;return(b=e.exec(b.substring(c,c+2)))?(a.setMonth(b[0]-1),c+b[0].length):-1},M:function(a,b,c){e.lastIndex=0;return(b=e.exec(b.substring(c,c+2)))?(a.setMinutes(+b[0]),c+b[0].length):-1},p:function(a,b,c){b=A[b.substring(c,c+=2).toLowerCase()];return b==null?-1:(a.hour12pm=b,c)},S:function(a,b,c){e.lastIndex=0;return(b=e.exec(b.substring(c,c+2)))?(a.setSeconds(+b[0]),c+b[0].length):-1},x:function(a,b,c){return j(a,l.x.toString(),b,c)},X:function(a,
b,c){return j(a,l.X.toString(),b,c)},y:function(a,b,c){e.lastIndex=0;return(b=e.exec(b.substring(c,c+2)))?(a.setFullYear(~~((new Date).getFullYear()/1E3)*1E3+ +b[0]),c+b[0].length):-1},Y:function(a,b,c){e.lastIndex=0;return(b=e.exec(b.substring(c,c+4)))?(a.setFullYear(b[0]),c+b[0].length):-1}},x={sun:3,mon:3,tue:3,wed:3,thu:3,fri:3,sat:3},r=/^(?:Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)/ig,p=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],y={jan:0,feb:1,mar:2,
apr:3,may:4,jun:5,jul:6,aug:7,sep:8,oct:9,nov:10,dec:11},s=/^(?:January|February|March|April|May|June|July|August|September|October|November|December)/ig,z={january:0,february:1,march:2,april:3,may:4,june:5,july:6,august:7,september:8,october:9,november:10,december:11},q=["January","February","March","April","May","June","July","August","September","October","November","December"],e=/\s*\d+/,A={am:0,pm:1}})();

Просмотреть файл

@ -14,5 +14,5 @@ if __name__ == "__main__":
})
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(tornado.options.options.port)
print "http://0.0.0.0:%d/examples/index.html" % tornado.options.options.port
print "http://localhost:%d/examples/index.html" % tornado.options.options.port
tornado.ioloop.IOLoop.instance().start()

Просмотреть файл

@ -2,7 +2,8 @@ button {
font: 14px Helvetica Neue;
background-color: #222;
background-image: -moz-linear-gradient(top, rgba(255,255,255,.25), rgba(255,255,255,.11));
background-image: -webkit-linear-gradient(top, rgba(255,255,255,.25), rgba(255,255,255,.11));
background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, rgba(255,255,255,.25)),color-stop(1, rgba(255,255,255,.11)));
background-image: -webkit-linear-gradient(rgba(255,255,255,.25), rgba(255,255,255,.11));
color: #fff;
text-rendering: optimizeLegibility;
text-shadow: 0 -1px 1px #222;

Просмотреть файл

@ -12,8 +12,8 @@
<li><a href="calendar/dji.html">calendar-dji</a></li>
<li><a href="calendar/vix.html">calendar-vix</a></li>
<li><a href="cartogram/cartogram.html">cartogram</a></li>
<li><a href="choropleth/choropleth.html">choropleth</a></li>
<li><a href="chord/chord.html">chord</a></li>
<li><a href="choropleth/choropleth.html">choropleth</a></li>
<li><a href="contour/contour.html">contour</a></li>
<li><a href="delaunay/delaunay.html">delaunay</a></li>
<li><a href="donut/donut.html">donut</a></li>
@ -25,6 +25,8 @@
<li><a href="line/line.html">line</a></li>
<li><a href="mercator/mercator.html">mercator</a></li>
<li><a href="moire/moire.html">moire</a></li>
<li><a href="partition/partition-icicle.html">partition-icicle</a></li>
<li><a href="partition/partition-sunburst.html">partition-sunburst</a></li>
<li><a href="pie/pie.html">pie</a></li>
<li><a href="pie/pie-transition.html">pie-transition</a></li>
<li><a href="quadtree/quadtree.html">quadtree</a></li>
@ -32,8 +34,10 @@
<li><a href="stream/stream.html">stream</a></li>
<li><a href="stream/stack.html">stack</a></li>
<li><a href="symbol-map/symbol-map.html">symbol-map</a></li>
<li><a href="treemap/treemap.html">treemap</a></li>
<li><a href="voronoi/voronoi.html">voronoi</a></li>
<li><a href="zoom/zoom.html">zoom</a></li>
<li><a href="zoom-pan/zoom-pan.html">zoom-pan</a></li>
</ul>
</body>
</html>

Просмотреть файл

@ -0,0 +1,40 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>Partition - Icicle</title>
<script type="text/javascript" src="../../d3.js"></script>
<script type="text/javascript" src="../../d3.layout.js"></script>
</head>
<body>
<div id="chart"></div>
<script type="text/javascript">
var w = 960,
h = 250,
color = d3.scale.category20c();
var vis = d3.select("#chart").append("svg:svg")
.attr("width", w)
.attr("height", h);
var partition = d3.layout.partition()
.size([w, h])
.children(function(d) { return isNaN(d.value) ? d3.entries(d.value) : null; })
.value(function(d) { return d.value; });
d3.json("../treemap/flare.json", function(json) {
vis.data(d3.entries(json)).selectAll("rect")
.data(partition)
.enter().append("svg:rect")
.attr("x", function(d) { return d.x; })
.attr("y", function(d) { return d.y; })
.attr("width", function(d) { return d.dx; })
.attr("height", function(d) { return d.dy; })
.attr("stroke", "#fff")
.attr("fill", function(d) { return color((d.children ? d : d.parent).data.key); });
});
</script>
</body>
</html>

Просмотреть файл

@ -0,0 +1,99 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>Partition - Icicle</title>
<script type="text/javascript" src="../../d3.js"></script>
<script type="text/javascript" src="../../d3.layout.js"></script>
<link type="text/css" rel="stylesheet" href="../button.css"/>
</head>
<body>
<div id="chart">
<button id="size" class="first">
Size
</button
><button id="count" class="active last">
Count
</button><p>
</div>
<script type="text/javascript">
var w = 960,
h = 700,
r = Math.min(w, h) / 2,
color = d3.scale.category20c();
var vis = d3.select("#chart").append("svg:svg")
.attr("width", w)
.attr("height", h)
.append("svg:g")
.attr("transform", "translate(" + w / 2 + "," + h / 2 + ")");
var partition = d3.layout.partition()
.sort(null)
.size([2 * Math.PI, r * r])
.children(function(d) { return isNaN(d.value) ? d3.entries(d.value) : null; })
.value(function(d) { return 1; });
var arc = d3.svg.arc()
.startAngle(function(d) { return d.x; })
.endAngle(function(d) { return d.x + d.dx; })
.innerRadius(function(d) { return Math.sqrt(d.y); })
.outerRadius(function(d) { return Math.sqrt(d.y + d.dy); });
d3.json("../treemap/flare.json", function(json) {
vis.data(d3.entries(json)).selectAll("path")
.data(partition)
.enter().append("svg:path")
.attr("display", function(d) { return d.depth ? null : "none"; }) // hide inner ring
.attr("d", arc)
.attr("stroke", "#fff")
.attr("fill", function(d) { return color((d.children ? d : d.parent).data.key); })
.attr("fill-rule", "evenodd");
d3.select("#size").on("click", function() {
vis.selectAll("path")
.data(repartition(function(d) { return d.value; }))
.transition()
.duration(1500)
.attrTween("d", arcTween);
d3.select("#size").classed("active", true);
d3.select("#count").classed("active", false);
});
d3.select("#count").on("click", function() {
vis.selectAll("path")
.data(repartition(function(d) { return 1; }))
.transition()
.duration(1500)
.attrTween("d", arcTween);
d3.select("#size").classed("active", false);
d3.select("#count").classed("active", true);
});
});
// Compute a new partition, stashing the old value for transition.
function repartition(value) {
return function(d) {
var olds = partition(d),
news = partition.value(value)(d);
news.forEach(function(d, i) {
d.prev = olds[i];
});
return news;
};
}
// Interpolate the arcs in data space.
function arcTween(a) {
var i = d3.interpolate({x: a.prev.x, dx: a.prev.dx}, a);
return function(t) {
return arc(i(t));
};
}
</script>
</body>
</html>

Просмотреть файл

@ -5,7 +5,7 @@
<script type="text/javascript" src="../../d3.js"></script>
<script type="text/javascript" src="../../d3.layout.js"></script>
<script type="text/javascript" src="stream_layers.js"></script>
<link type="text/css" rel="stylesheet" href="button.css"/>
<link type="text/css" rel="stylesheet" href="../button.css"/>
<link type="text/css" rel="stylesheet" href="stack.css"/>
</head>
<body>

Просмотреть файл

@ -5,7 +5,7 @@
<script type="text/javascript" src="../../d3.js"></script>
<script type="text/javascript" src="../../d3.layout.js"></script>
<script type="text/javascript" src="stream_layers.js"></script>
<link type="text/css" rel="stylesheet" href="button.css"/>
<link type="text/css" rel="stylesheet" href="../button.css"/>
<link type="text/css" rel="stylesheet" href="stream.css"/>
</head>
<body>

Просмотреть файл

@ -5,7 +5,7 @@
<title>Treemap</title>
<script type="text/javascript" src="../../d3.js"></script>
<script type="text/javascript" src="../../d3.layout.js"></script>
<link type="text/css" rel="stylesheet" href="treemap.css"></script>
<link type="text/css" rel="stylesheet" href="treemap.css"/>
</head>
<body>
<div id="chart"></div>

Просмотреть файл

@ -4,7 +4,7 @@ var w = 960,
var treemap = d3.layout.treemap()
.size([w, h])
.children(function(d) { return typeof d.value == "object" && d3.entries(d.value); })
.children(function(d) { return isNaN(d.value) ? d3.entries(d.value) : null; })
.value(function(d) { return d.value; });
var div = d3.select("#chart").append("div")

Просмотреть файл

@ -1 +1 @@
d3 = {version: "1.6.1"}; // semver
d3 = {version: "1.7.0"}; // semver

Просмотреть файл

@ -1,7 +1,7 @@
// A getter-setter method that preserves the appropriate `this` context.
function d3_rebind(object, method) {
d3.rebind = function(object, method) {
return function() {
var x = method.apply(object, arguments);
return arguments.length ? object : x;
};
}
};

71
src/layout/hierarchy.js Normal file
Просмотреть файл

@ -0,0 +1,71 @@
d3.layout.hierarchy = function() {
var sort = d3_layout_hierarchySort,
children = d3_layout_hierarchyChildren,
value = d3_layout_hierarchyValue;
// Recursively compute the node depth and value.
// Also converts the data representation into a standard hierarchy structure.
function recurse(data, depth, nodes) {
var datas = children.call(hierarchy, data, depth),
node = {depth: depth, data: data};
nodes.push(node);
if (datas) {
var i = -1,
n = datas.length,
c = node.children = [],
v = 0,
j = depth + 1;
while (++i < n) {
d = recurse(datas[i], j, nodes);
if (d.value > 0) { // ignore NaN, negative, etc.
c.push(d);
v += d.value;
d.parent = node;
}
}
if (sort) c.sort(sort);
node.value = v;
} else {
node.value = value.call(hierarchy, data, depth);
}
return node;
}
function hierarchy(d) {
var nodes = [];
recurse(d, 0, nodes);
return nodes;
}
hierarchy.sort = function(x) {
if (!arguments.length) return sort;
sort = x;
return hierarchy;
};
hierarchy.children = function(x) {
if (!arguments.length) return children;
children = x;
return hierarchy;
};
hierarchy.value = function(x) {
if (!arguments.length) return value;
value = x;
return hierarchy;
};
return hierarchy;
}
function d3_layout_hierarchyChildren(d) {
return d.children;
}
function d3_layout_hierarchyValue(d) {
return d.value;
}
function d3_layout_hierarchySort(a, b) {
return b.value - a.value;
}

52
src/layout/partition.js Normal file
Просмотреть файл

@ -0,0 +1,52 @@
d3.layout.partition = function() {
var hierarchy = d3.layout.hierarchy(),
size = [1, 1]; // width, height
function position(node, x, dx, dy) {
var children = node.children;
node.x = x;
node.y = node.depth * dy;
node.dx = dx;
node.dy = dy;
if (children) {
var i = -1,
n = children.length,
c,
d;
dx /= node.value;
while (++i < n) {
position(c = children[i], x, d = c.value * dx, dy);
x += d;
}
}
}
function depth(node) {
var children = node.children,
d = 0;
if (children) {
var i = -1,
n = children.length;
while (++i < n) d = Math.max(d, depth(children[i]));
}
return 1 + d;
}
function partition(d, i) {
var nodes = hierarchy.call(this, d, i);
position(nodes[0], 0, size[0], size[1] / depth(nodes[0]));
return nodes;
}
partition.sort = d3.rebind(partition, hierarchy.sort);
partition.children = d3.rebind(partition, hierarchy.children);
partition.value = d3.rebind(partition, hierarchy.value);
partition.size = function(x) {
if (!arguments.length) return size;
size = x;
return partition;
};
return partition;
};

Просмотреть файл

@ -1,38 +1,9 @@
// Squarified Treemaps by Mark Bruls, Kees Huizing, and Jarke J. van Wijk
d3.layout.treemap = function() {
var children = d3_layout_treemapChildren,
value = d3_layout_treemapValue,
var hierarchy = d3.layout.hierarchy(),
round = Math.round,
size = [1, 1]; // width, height
// Recursively compute the node depth and value.
// Also converts the data representation into a standard tree structure.
// Also sorts child nodes by descending value to optimize squarification.
function sum(data, depth, nodes) {
var datas = children.call(treemap, data, depth),
node = {depth: depth, data: data};
nodes.push(node);
if (datas) {
var i = -1,
n = datas.length,
c = node.children = [],
v = 0,
j = depth + 1;
while (++i < n) {
d = sum(datas[i], j, nodes);
if (d.value > 0) { // ignore NaN, negative, etc.
c.push(d);
v += d.value;
}
}
node.value = v;
} else {
node.value = value.call(treemap, data, depth);
}
if (!depth) scale(node, size[0] * size[1] / node.value); // root
return node;
}
// Recursively compute the node area based on value & scale.
function scale(node, k) {
var children = node.children;
@ -45,11 +16,12 @@ d3.layout.treemap = function() {
}
// Recursively arranges the specified node's children into squarified rows.
// Also sorts child nodes by descending value to optimize squarification.
function squarify(node) {
if (!node.children) return;
var rect = {x: node.x, y: node.y, dx: node.dx, dy: node.dy},
row = [],
children = node.children.slice().sort(d3_layout_treemapSort),
children = node.children.slice(), // copy-on-write
child,
best = Infinity, // the best row score so far
score, // the current row score
@ -130,28 +102,21 @@ d3.layout.treemap = function() {
}
}
function treemap(d) {
var nodes = [],
root = sum(d, 0, nodes);
function treemap(d, i) {
var nodes = hierarchy.call(this, d, i),
root = nodes[0];
root.x = 0;
root.y = 0;
root.dx = size[0];
root.dy = size[1];
scale(root, size[0] * size[1] / root.value);
squarify(root);
return nodes;
}
treemap.children = function(x) {
if (!arguments.length) return children;
children = x;
return treemap;
};
treemap.value = function(x) {
if (!arguments.length) return value;
value = x;
return treemap;
};
treemap.sort = d3.rebind(treemap, hierarchy.sort);
treemap.children = d3.rebind(treemap, hierarchy.children);
treemap.value = d3.rebind(treemap, hierarchy.value);
treemap.size = function(x) {
if (!arguments.length) return size;
@ -167,15 +132,3 @@ d3.layout.treemap = function() {
return treemap;
};
function d3_layout_treemapChildren(d) {
return d.children;
}
function d3_layout_treemapValue(d) {
return d.value;
}
function d3_layout_treemapSort(a, b) {
return b.area - a.area;
}

Просмотреть файл

@ -25,9 +25,9 @@ d3.scale.log = function() {
return scale;
};
scale.range = d3_rebind(scale, linear.range);
scale.rangeRound = d3_rebind(scale, linear.rangeRound);
scale.interpolate = d3_rebind(scale, linear.interpolate);
scale.range = d3.rebind(scale, linear.range);
scale.rangeRound = d3.rebind(scale, linear.rangeRound);
scale.interpolate = d3.rebind(scale, linear.interpolate);
scale.ticks = function() {
var d = linear.domain(),

Просмотреть файл

@ -23,9 +23,9 @@ d3.scale.pow = function() {
return scale;
};
scale.range = d3_rebind(scale, linear.range);
scale.rangeRound = d3_rebind(scale, linear.rangeRound);
scale.interpolate = d3_rebind(scale, linear.interpolate);
scale.range = d3.rebind(scale, linear.range);
scale.rangeRound = d3.rebind(scale, linear.rangeRound);
scale.interpolate = d3.rebind(scale, linear.interpolate);
scale.ticks = tick.ticks;
scale.tickFormat = tick.tickFormat;

Просмотреть файл

@ -37,12 +37,10 @@ d3.svg.line = function() {
return line;
};
/**
* @private Converts the specified array of data into an array of points
* (x-y tuples), by evaluating the specified `x` and `y` functions on each
* data point. The `this` context of the evaluated functions is the specified
* "self" object; each function is passed the current datum and index.
*/
// Converts the specified array of data into an array of points
// (x-y tuples), by evaluating the specified `x` and `y` functions on each
// data point. The `this` context of the evaluated functions is the specified
// "self" object; each function is passed the current datum and index.
function d3_svg_linePoints(self, d, x, y) {
var points = [],
i = -1,
@ -65,34 +63,28 @@ function d3_svg_linePoints(self, d, x, y) {
return points;
}
/**
* @private The default `x` property, which references d[0].
*/
// The default `x` property, which references d[0].
function d3_svg_lineX(d) {
return d[0];
}
/**
* @private The default `y` property, which references d[1].
*/
// The default `y` property, which references d[1].
function d3_svg_lineY(d) {
return d[1];
}
/**
* @private The various interpolators supported by the `line` class.
*/
// The various interpolators supported by the `line` class.
var d3_svg_lineInterpolators = {
"linear": d3_svg_lineLinear,
"step-before": d3_svg_lineStepBefore,
"step-after": d3_svg_lineStepAfter,
"basis": d3_svg_lineBasis,
"basis-closed": d3_svg_lineBasisClosed,
"cardinal": d3_svg_lineCardinal,
"cardinal-closed": d3_svg_lineCardinalClosed
};
/**
* @private Linear interpolation; generates "L" commands.
*/
// Linear interpolation; generates "L" commands.
function d3_svg_lineLinear(points) {
var path = [],
i = 0,
@ -103,27 +95,46 @@ function d3_svg_lineLinear(points) {
return path.join("");
}
/**
* @private Closed cardinal spline interpolation; generates "C" commands.
*/
// Step interpolation; generates "H" and "V" commands.
function d3_svg_lineStepBefore(points) {
var path = [],
i = 0,
n = points.length,
p = points[0];
path.push(p[0], ",", p[1]);
while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]);
return path.join("");
}
// Step interpolation; generates "H" and "V" commands.
function d3_svg_lineStepAfter(points) {
var path = [],
i = 0,
n = points.length,
p = points[0];
path.push(p[0], ",", p[1]);
while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]);
return path.join("");
}
// Closed cardinal spline interpolation; generates "C" commands.
function d3_svg_lineCardinalClosed(points, tension) {
if (points.length < 3) return d3_svg_lineLinear(points);
return points[0] + d3_svg_lineHermite(points,
d3_svg_lineCardinalTangents([points[points.length - 2]].concat(points, [points[1]]), tension));
return points.length < 3
? d3_svg_lineLinear(points)
: points[0] + d3_svg_lineHermite(points,
d3_svg_lineCardinalTangents([points[points.length - 2]]
.concat(points, [points[1]]), tension));
}
/**
* @private Cardinal spline interpolation; generates "C" commands.
*/
// Cardinal spline interpolation; generates "C" commands.
function d3_svg_lineCardinal(points, tension, closed) {
if (points.length < 3) return d3_svg_lineLinear(points);
return points[0] + d3_svg_lineHermite(points,
d3_svg_lineCardinalTangents(points, tension));
return points.length < 3
? d3_svg_lineLinear(points)
: points[0] + d3_svg_lineHermite(points,
d3_svg_lineCardinalTangents(points, tension));
}
/**
* @private Hermite spline construction; generates "C" commands.
*/
// Hermite spline construction; generates "C" commands.
function d3_svg_lineHermite(points, tangents) {
if (tangents.length < 1
|| (points.length != tangents.length
@ -170,9 +181,7 @@ function d3_svg_lineHermite(points, tangents) {
return path;
}
/**
* @private Generates tangents for a cardinal spline.
*/
// Generates tangents for a cardinal spline.
function d3_svg_lineCardinalTangents(points, tension) {
var tangents = [],
a = (1 - tension) / 2,
@ -191,9 +200,7 @@ function d3_svg_lineCardinalTangents(points, tension) {
return tangents;
}
/**
* @private Open B-spline interpolation; generates "C" commands.
*/
// Open B-spline interpolation; generates "C" commands.
function d3_svg_lineBasis(points) {
if (points.length < 3) return d3_svg_lineLinear(points);
var path = [],
@ -221,9 +228,7 @@ function d3_svg_lineBasis(points) {
return path.join("");
}
/**
* @private Closed B-spline interpolation; generates "C" commands.
*/
// Closed B-spline interpolation; generates "C" commands.
function d3_svg_lineBasisClosed(points) {
var path,
i = -1,
@ -250,25 +255,19 @@ function d3_svg_lineBasisClosed(points) {
return path.join("");
}
/**
* @private Returns the dot product of the given four-element vectors.
*/
// Returns the dot product of the given four-element vectors.
function d3_svg_lineDot4(a, b) {
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
}
/*
* @private Matrix to transform basis (b-spline) control points to bezier
* control points. Derived from FvD 11.2.8.
*/
// Matrix to transform basis (b-spline) control points to bezier
// control points. Derived from FvD 11.2.8.
var d3_svg_lineBasisBezier1 = [0, 2/3, 1/3, 0],
d3_svg_lineBasisBezier2 = [0, 1/3, 2/3, 0],
d3_svg_lineBasisBezier3 = [0, 1/6, 2/3, 1/6];
/**
* @private Pushes a "C" Bézier curve onto the specified path array, given the
* two specified four-element arrays which define the control points.
*/
// Pushes a "C" Bézier curve onto the specified path array, given the
// two specified four-element arrays which define the control points.
function d3_svg_lineBasisBezier(path, x, y) {
path.push(
"C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x),

Просмотреть файл

@ -62,7 +62,7 @@ function d3_time_parse(date, template, string, j) {
var d3_time_zfill2 = d3.format("02d"),
d3_time_zfill3 = d3.format("03d"),
d3_time_zfill4 = d3.format("04d"),
d3_time_sfill2 = d3.format(" 2d");
d3_time_sfill2 = d3.format("2d");
var d3_time_formats = {
a: function(d) { return d3_time_weekdays[d.getDay()].substring(0, 3); },
@ -222,14 +222,14 @@ function d3_time_parseLocaleTime(date, string, i) {
}
function d3_time_parseFullYear(date, string, i) {
d3_time_number4Re.lastIndex = 0;
var n = d3_time_number4Re.exec(string.substring(i, i + 4));
d3_time_numberRe.lastIndex = 0;
var n = d3_time_numberRe.exec(string.substring(i, i + 4));
return n ? (date.setFullYear(n[0]), i += n[0].length) : -1;
}
function d3_time_parseYear(date, string, i) {
d3_time_number2Re.lastIndex = 0;
var n = d3_time_number2Re.exec(string.substring(i, i + 2));
d3_time_numberRe.lastIndex = 0;
var n = d3_time_numberRe.exec(string.substring(i, i + 2));
return n ? (date.setFullYear(d3_time_century() + +n[0]), i += n[0].length) : -1;
}
@ -238,21 +238,21 @@ function d3_time_century() {
}
function d3_time_parseMonthNumber(date, string, i) {
d3_time_number2Re.lastIndex = 0;
var n = d3_time_number2Re.exec(string.substring(i, i + 2));
d3_time_numberRe.lastIndex = 0;
var n = d3_time_numberRe.exec(string.substring(i, i + 2));
return n ? (date.setMonth(n[0] - 1), i += n[0].length) : -1;
}
function d3_time_parseDay(date, string, i) {
d3_time_number2Re.lastIndex = 0;
var n = d3_time_number2Re.exec(string.substring(i, i + 2));
d3_time_numberRe.lastIndex = 0;
var n = d3_time_numberRe.exec(string.substring(i, i + 2));
return n ? (date.setDate(+n[0]), i += n[0].length) : -1;
}
// Note: we don't validate that the hour is in the range [0,23].
function d3_time_parseHour24(date, string, i) {
d3_time_number2Re.lastIndex = 0;
var n = d3_time_number2Re.exec(string.substring(i, i + 2));
d3_time_numberRe.lastIndex = 0;
var n = d3_time_numberRe.exec(string.substring(i, i + 2));
return n ? (date.setHours(+n[0]), i += n[0].length) : -1;
}
@ -263,20 +263,19 @@ function d3_time_parseHour12(date, string, i) {
}
function d3_time_parseMinutes(date, string, i) {
d3_time_number2Re.lastIndex = 0;
var n = d3_time_number2Re.exec(string.substring(i, i + 2));
d3_time_numberRe.lastIndex = 0;
var n = d3_time_numberRe.exec(string.substring(i, i + 2));
return n ? (date.setMinutes(+n[0]), i += n[0].length) : -1;
}
function d3_time_parseSeconds(date, string, i) {
d3_time_number2Re.lastIndex = 0;
var n = d3_time_number2Re.exec(string.substring(i, i + 2));
d3_time_numberRe.lastIndex = 0;
var n = d3_time_numberRe.exec(string.substring(i, i + 2));
return n ? (date.setSeconds(+n[0]), i += n[0].length) : -1;
}
// Note: we don't look at the next directive.
var d3_time_number2Re = /[\s\d]{1,2}/,
d3_time_number4Re = /[\s\d]{1,4}/;
var d3_time_numberRe = /\s*\d+/;
function d3_time_parseAmPm(date, string, i) {
var n = d3_time_amPmLookup[string.substring(i, i += 2).toLowerCase()];

Просмотреть файл

@ -1,7 +1,6 @@
require("./../lib/env-js/envjs/node");
require("./../lib/sizzle/sizzle");
require("./../d3");
require("./../d3.time");
var f = d3.format(" .3f");

Просмотреть файл

@ -1,7 +1,6 @@
require("./../lib/env-js/envjs/node");
require("./../lib/sizzle/sizzle");
require("./../d3");
require("./../d3.time");
var f = d3.format(" .3f");

Просмотреть файл

@ -1,7 +1,6 @@
require("./../lib/env-js/envjs/node");
require("./../lib/sizzle/sizzle");
require("./../d3");
require("./../d3.time");
var f = d3.format(" .3f");

12
tests/test-svg-arc.js Normal file
Просмотреть файл

@ -0,0 +1,12 @@
require("./../lib/env-js/envjs/node");
require("./../d3");
var arc = d3.svg.arc();
console.log("default:");
console.log(" [0, 1] [0, π]:", arc({innerRadius: 0, outerRadius: 1, startAngle: 0, endAngle: Math.PI}));
console.log("");
var arc = d3.svg.arc().innerRadius(0).outerRadius(1).startAngle(0).endAngle(Math.PI);
console.log("[0, 1] [0, π]:");
console.log(" undefined:", arc());
console.log("");

6
tests/test-svg-arc.out Normal file
Просмотреть файл

@ -0,0 +1,6 @@
default:
[0, 1] [0, π]: M6.123233995736766e-17,-1A1,1 0 1,1 6.123031769111886e-17,1L0,0Z
[0, 1] [0, π]:
undefined: M6.123233995736766e-17,-1A1,1 0 1,1 6.123031769111886e-17,1L0,0Z

95
tests/test-svg-area.js Normal file
Просмотреть файл

@ -0,0 +1,95 @@
require("./../lib/env-js/envjs/node");
require("./../lib/sizzle/sizzle");
require("./../d3");
var area = d3.svg.area();
console.log("default:");
console.log(" [[0, 0]]:", area([[0, 0]]));
console.log(" [[0, 0], [1, 1]]:", area([[0, 0], [1, 1]]));
console.log(" [[0, 0], [1, 1], [2, 0]]:", area([[0, 0], [1, 1], [2, 0]]));
console.log("");
var area = d3.svg.area()
.y0(-1);
console.log("y0(-1):");
console.log(" [[0, 0]]:", area([[0, 0]]));
console.log(" [[0, 0], [1, 1]]:", area([[0, 0], [1, 1]]));
console.log(" [[0, 0], [1, 1], [2, 0]]:", area([[0, 0], [1, 1], [2, 0]]));
console.log("");
var area = d3.svg.area()
.x(function(d) { return d.x; })
.y1(function(d) { return d.y; });
console.log("x(d.x).y1(d.y):");
console.log(" [{x:0,y:0}]:", area([{x:0,y:0}]));
console.log(" [{x:0,y:0},{x:1,y:1}]:", area([{x:0,y:0},{x:1,y:1}]));
console.log(" [{x:0,y:0},{x:1,y:1},{x:2,y:0}]:", area([{x:0,y:0},{x:1,y:1},{x:2,y:0}]));
console.log("");
var area = d3.svg.area()
.x(function(d) { return d.x; })
.y0(function(d) { return -d.y; })
.y1(function(d) { return d.y; });
console.log("x(d.x).y0(-d.y).y1(d.y):");
console.log(" [{x:0,y:0}]:", area([{x:0,y:0}]));
console.log(" [{x:0,y:0},{x:1,y:1}]:", area([{x:0,y:0},{x:1,y:1}]));
console.log(" [{x:0,y:0},{x:1,y:1},{x:2,y:0}]:", area([{x:0,y:0},{x:1,y:1},{x:2,y:0}]));
console.log("");
var area = d3.svg.area()
.interpolate("step-before");
console.log("interpolate(step-before):");
console.log(" [[0, 0]]:", area([[0, 0]]));
console.log(" [[0, 0], [1, 1]]:", area([[0, 0], [1, 1]]));
console.log(" [[0, 0], [1, 1], [2, 0]]:", area([[0, 0], [1, 1], [2, 0]]));
console.log("");
var area = d3.svg.area()
.interpolate("step-after");
console.log("interpolate(step-after):");
console.log(" [[0, 0]]:", area([[0, 0]]));
console.log(" [[0, 0], [1, 1]]:", area([[0, 0], [1, 1]]));
console.log(" [[0, 0], [1, 1], [2, 0]]:", area([[0, 0], [1, 1], [2, 0]]));
console.log("");
var area = d3.svg.area()
.interpolate("basis");
console.log("interpolate(basis):");
console.log(" [[0, 0]]:", area([[0, 0]]));
console.log(" [[0, 0], [1, 1]]:", area([[0, 0], [1, 1]]));
console.log(" [[0, 0], [6, 6], [12, 0]]:", area([[0, 0], [6, 6], [12, 0]]));
console.log("");
var area = d3.svg.area()
.interpolate("basis-closed");
console.log("interpolate(basis-closed):");
console.log(" [[0, 0]]:", area([[0, 0]]));
console.log(" [[0, 0], [6, 6]]:", area([[0, 0], [6, 6]]));
console.log(" [[0, 0], [6, 6], [12, 0]]:", area([[0, 0], [6, 6], [12, 0]]));
console.log("");
var area = d3.svg.area()
.interpolate("cardinal");
console.log("interpolate(cardinal):");
console.log(" [[0, 0]]:", area([[0, 0]]));
console.log(" [[0, 0], [5, 5]]:", area([[0, 0], [5, 5]]));
console.log(" [[0, 0], [5, 5], [10, 0]]:", area([[0, 0], [5, 5], [10, 0]]));
console.log("");
var area = d3.svg.area()
.interpolate("cardinal-closed");
console.log("interpolate(cardinal-closed):");
console.log(" [[0, 0]]:", area([[0, 0]]));
console.log(" [[0, 0], [5, 5]]:", area([[0, 0], [5, 5]]));
console.log(" [[0, 0], [5, 5], [10, 0]]:", area([[0, 0], [5, 5], [10, 0]]));
console.log("");

50
tests/test-svg-area.out Normal file
Просмотреть файл

@ -0,0 +1,50 @@
default:
[[0, 0]]: M0,0L0,0Z
[[0, 0], [1, 1]]: M0,0L1,1L1,0L0,0Z
[[0, 0], [1, 1], [2, 0]]: M0,0L1,1L2,0L2,0L1,0L0,0Z
y0(-1):
[[0, 0]]: M0,0L0,-1Z
[[0, 0], [1, 1]]: M0,0L1,1L1,-1L0,-1Z
[[0, 0], [1, 1], [2, 0]]: M0,0L1,1L2,0L2,-1L1,-1L0,-1Z
x(d.x).y1(d.y):
[{x:0,y:0}]: M0,0L0,0Z
[{x:0,y:0},{x:1,y:1}]: M0,0L1,1L1,0L0,0Z
[{x:0,y:0},{x:1,y:1},{x:2,y:0}]: M0,0L1,1L2,0L2,0L1,0L0,0Z
x(d.x).y0(-d.y).y1(d.y):
[{x:0,y:0}]: M0,0L0,0Z
[{x:0,y:0},{x:1,y:1}]: M0,0L1,1L1,-1L0,0Z
[{x:0,y:0},{x:1,y:1},{x:2,y:0}]: M0,0L1,1L2,0L2,0L1,-1L0,0Z
interpolate(step-before):
[[0, 0]]: M0,0L0,0Z
[[0, 0], [1, 1]]: M0,0V1H1L1,0V0H0Z
[[0, 0], [1, 1], [2, 0]]: M0,0V1H1V0H2L2,0V0H1V0H0Z
interpolate(step-after):
[[0, 0]]: M0,0L0,0Z
[[0, 0], [1, 1]]: M0,0H1V1L1,0H0V0Z
[[0, 0], [1, 1], [2, 0]]: M0,0H1V1H2V0L2,0H1V0H0V0Z
interpolate(basis):
[[0, 0]]: M0,0L0,0Z
[[0, 0], [1, 1]]: M0,0L1,1L1,0L0,0Z
[[0, 0], [6, 6], [12, 0]]: M0,0C0,0,0,0,1,1C2,2,4,4,6,4C8,4,10,2,11,1C12,0,12,0,12,0L12,0C12,0,12,0,11,0C10,0,8,0,6,0C4,0,2,0,1,0C0,0,0,0,0,0Z
interpolate(basis-closed):
[[0, 0]]: M0,0C0,0,0,0,0,0L0,0C0,0,0,0,0,0Z
[[0, 0], [6, 6]]: M2,2C2,2,4,4,4,4C4,4,2,2,2,2L4,0C4,0,2,0,2,0C2,0,4,0,4,0Z
[[0, 0], [6, 6], [12, 0]]: M9,1C8,0,4,0,3,1C2,2,4,4,6,4C8,4,10,2,9,1L3,0C4,0,8,0,9,0C10,0,8,0,6,0C4,0,2,0,3,0Z
interpolate(cardinal):
[[0, 0]]: M0,0L0,0Z
[[0, 0], [5, 5]]: M0,0L5,5L5,0L0,0Z
[[0, 0], [5, 5], [10, 0]]: M0,0Q4,5,5,5Q6,5,10,0L10,0Q6,0,5,0Q4,0,0,0Z
interpolate(cardinal-closed):
[[0, 0]]: M0,0L0,0Z
[[0, 0], [5, 5]]: M0,0L5,5L5,0L0,0Z
[[0, 0], [5, 5], [10, 0]]: M0,0C0,0,3.5,5,5,5S10,0,10,0L10,0C10,0,6.5,0,5,0S0,0,0,0Z

84
tests/test-svg-line.js Normal file
Просмотреть файл

@ -0,0 +1,84 @@
require("./../lib/env-js/envjs/node");
require("./../lib/sizzle/sizzle");
require("./../d3");
var line = d3.svg.line();
console.log("default:");
console.log(" [[0, 0]]:", line([[0, 0]]));
console.log(" [[0, 0], [1, 1]]:", line([[0, 0], [1, 1]]));
console.log(" [[0, 0], [1, 1], [2, 0]]:", line([[0, 0], [1, 1], [2, 0]]));
console.log("");
var line = d3.svg.line()
.y(-1);
console.log("y(-1):");
console.log(" [[0, 0]]:", line([[0, 0]]));
console.log(" [[0, 0], [1, 1]]:", line([[0, 0], [1, 1]]));
console.log(" [[0, 0], [1, 1], [2, 0]]:", line([[0, 0], [1, 1], [2, 0]]));
console.log("");
var line = d3.svg.line()
.x(function(d) { return d.x; })
.y(function(d) { return d.y; });
console.log("x(d.x).y(d.y):");
console.log(" [{x:0,y:0}]:", line([{x:0,y:0}]));
console.log(" [{x:0,y:0},{x:1,y:1}]:", line([{x:0,y:0},{x:1,y:1}]));
console.log(" [{x:0,y:0},{x:1,y:1},{x:2,y:0}]:", line([{x:0,y:0},{x:1,y:1},{x:2,y:0}]));
console.log("");
var line = d3.svg.line()
.interpolate("step-before");
console.log("interpolate(step-before):");
console.log(" [[0, 0]]:", line([[0, 0]]));
console.log(" [[0, 0], [1, 1]]:", line([[0, 0], [1, 1]]));
console.log(" [[0, 0], [1, 1], [2, 0]]:", line([[0, 0], [1, 1], [2, 0]]));
console.log("");
var line = d3.svg.line()
.interpolate("step-after");
console.log("interpolate(step-after):");
console.log(" [[0, 0]]:", line([[0, 0]]));
console.log(" [[0, 0], [1, 1]]:", line([[0, 0], [1, 1]]));
console.log(" [[0, 0], [1, 1], [2, 0]]:", line([[0, 0], [1, 1], [2, 0]]));
console.log("");
var line = d3.svg.line()
.interpolate("basis");
console.log("interpolate(basis):");
console.log(" [[0, 0]]:", line([[0, 0]]));
console.log(" [[0, 0], [1, 1]]:", line([[0, 0], [1, 1]]));
console.log(" [[0, 0], [6, 6], [12, 0]]:", line([[0, 0], [6, 6], [12, 0]]));
console.log("");
var line = d3.svg.line()
.interpolate("basis-closed");
console.log("interpolate(basis-closed):");
console.log(" [[0, 0]]:", line([[0, 0]]));
console.log(" [[0, 0], [6, 6]]:", line([[0, 0], [6, 6]]));
console.log(" [[0, 0], [6, 6], [12, 0]]:", line([[0, 0], [6, 6], [12, 0]]));
console.log("");
var line = d3.svg.line()
.interpolate("cardinal");
console.log("interpolate(cardinal):");
console.log(" [[0, 0]]:", line([[0, 0]]));
console.log(" [[0, 0], [5, 5]]:", line([[0, 0], [5, 5]]));
console.log(" [[0, 0], [5, 5], [10, 0]]:", line([[0, 0], [5, 5], [10, 0]]));
console.log("");
var line = d3.svg.line()
.interpolate("cardinal-closed");
console.log("interpolate(cardinal-closed):");
console.log(" [[0, 0]]:", line([[0, 0]]));
console.log(" [[0, 0], [5, 5]]:", line([[0, 0], [5, 5]]));
console.log(" [[0, 0], [5, 5], [10, 0]]:", line([[0, 0], [5, 5], [10, 0]]));
console.log("");

45
tests/test-svg-line.out Normal file
Просмотреть файл

@ -0,0 +1,45 @@
default:
[[0, 0]]: M0,0
[[0, 0], [1, 1]]: M0,0L1,1
[[0, 0], [1, 1], [2, 0]]: M0,0L1,1L2,0
y(-1):
[[0, 0]]: M0,-1
[[0, 0], [1, 1]]: M0,-1L1,-1
[[0, 0], [1, 1], [2, 0]]: M0,-1L1,-1L2,-1
x(d.x).y(d.y):
[{x:0,y:0}]: M0,0
[{x:0,y:0},{x:1,y:1}]: M0,0L1,1
[{x:0,y:0},{x:1,y:1},{x:2,y:0}]: M0,0L1,1L2,0
interpolate(step-before):
[[0, 0]]: M0,0
[[0, 0], [1, 1]]: M0,0V1H1
[[0, 0], [1, 1], [2, 0]]: M0,0V1H1V0H2
interpolate(step-after):
[[0, 0]]: M0,0
[[0, 0], [1, 1]]: M0,0H1V1
[[0, 0], [1, 1], [2, 0]]: M0,0H1V1H2V0
interpolate(basis):
[[0, 0]]: M0,0
[[0, 0], [1, 1]]: M0,0L1,1
[[0, 0], [6, 6], [12, 0]]: M0,0C0,0,0,0,1,1C2,2,4,4,6,4C8,4,10,2,11,1C12,0,12,0,12,0
interpolate(basis-closed):
[[0, 0]]: M0,0C0,0,0,0,0,0
[[0, 0], [6, 6]]: M2,2C2,2,4,4,4,4C4,4,2,2,2,2
[[0, 0], [6, 6], [12, 0]]: M9,1C8,0,4,0,3,1C2,2,4,4,6,4C8,4,10,2,9,1
interpolate(cardinal):
[[0, 0]]: M0,0
[[0, 0], [5, 5]]: M0,0L5,5
[[0, 0], [5, 5], [10, 0]]: M0,0Q4,5,5,5Q6,5,10,0
interpolate(cardinal-closed):
[[0, 0]]: M0,0
[[0, 0], [5, 5]]: M0,0L5,5
[[0, 0], [5, 5], [10, 0]]: M0,0C0,0,3.5,5,5,5S10,0,10,0

63
tests/test-svg-symbol.js Normal file
Просмотреть файл

@ -0,0 +1,63 @@
require("./../lib/env-js/envjs/node");
require("./../d3");
var symbol = d3.svg.symbol();
console.log("default:");
console.log(" undefined:", symbol());
console.log("");
var symbol = d3.svg.symbol().size(Number);
console.log("size(Number):");
console.log(" 0:", symbol(0));
console.log(" π:", symbol(Math.PI));
console.log(" 4π:", symbol(4 * Math.PI));
console.log("");
var symbol = d3.svg.symbol().size(function(d) { return d.z; });
console.log("size(d.z):");
console.log(" 0:", symbol({z: 0}));
console.log(" π:", symbol({z: Math.PI}));
console.log(" 4π:", symbol({z: 4 * Math.PI}));
console.log("");
var symbol = d3.svg.symbol().type("cross").size(Number);
console.log("type(cross).size(Number):");
console.log(" 0:", symbol(0));
console.log(" 20:", symbol(20));
console.log("");
var symbol = d3.svg.symbol().type("diamond").size(Number);
console.log("type(diamond).size(Number):");
console.log(" 0:", symbol(0));
console.log(" 10:", symbol(10));
console.log("");
var symbol = d3.svg.symbol().type("square").size(Number);
console.log("type(square).size(Number):");
console.log(" 0:", symbol(0));
console.log(" 4:", symbol(4));
console.log(" 16:", symbol(16));
console.log("");
var symbol = d3.svg.symbol().type("triangle-down").size(Number);
console.log("type(triangle-down).size(Number):");
console.log(" 0:", symbol(0));
console.log(" 10:", symbol(10));
console.log("");
var symbol = d3.svg.symbol().type("triangle-up").size(Number);
console.log("type(triangle-up).size(Number):");
console.log(" 0:", symbol(0));
console.log(" 10:", symbol(10));
console.log("");
var symbol = d3.svg.symbol().type(String);
console.log("type(String):");
console.log(" undefined:", symbol());
console.log(" circle:", symbol("circle"));
console.log(" cross:", symbol("cross"));
console.log(" diamond:", symbol("diamond"));
console.log(" square:", symbol("square"));
console.log(" triangle-down:", symbol("triangle-down"));
console.log(" triangle-up:", symbol("triangle-up"));
console.log("");

43
tests/test-svg-symbol.out Normal file
Просмотреть файл

@ -0,0 +1,43 @@
default:
undefined: M0,4.51351666838205A4.51351666838205,4.51351666838205 0 1,1 0,-4.51351666838205A4.51351666838205,4.51351666838205 0 1,1 0,4.51351666838205Z
size(Number):
0: M0,0A0,0 0 1,1 0,0A0,0 0 1,1 0,0Z
π: M0,1A1,1 0 1,1 0,-1A1,1 0 1,1 0,1Z
4π: M0,2A2,2 0 1,1 0,-2A2,2 0 1,1 0,2Z
size(d.z):
0: M0,0A0,0 0 1,1 0,0A0,0 0 1,1 0,0Z
π: M0,1A1,1 0 1,1 0,-1A1,1 0 1,1 0,1Z
4π: M0,2A2,2 0 1,1 0,-2A2,2 0 1,1 0,2Z
type(cross).size(Number):
0: M0,0H0V0H0V0H0V0H0V0H0V0H0Z
20: M-3,-1H-1V-3H1V-1H3V1H1V3H-1V1H-3Z
type(diamond).size(Number):
0: M0,0L0,0 0,0 0,0Z
10: M0,-2.9428309563827124L1.6990442448471224,0 0,2.9428309563827124 -1.6990442448471224,0Z
type(square).size(Number):
0: M0,0L0,0 0,0 0,0Z
4: M-1,-1L1,-1 1,1 -1,1Z
16: M-2,-2L2,-2 2,2 -2,2Z
type(triangle-down).size(Number):
0: M0,0L0,0 0,0Z
10: M0,2.0808957251439084L2.4028114141347543,-2.0808957251439084 -2.4028114141347543,-2.0808957251439084Z
type(triangle-up).size(Number):
0: M0,0L0,0 0,0Z
10: M0,-2.0808957251439084L2.4028114141347543,2.0808957251439084 -2.4028114141347543,2.0808957251439084Z
type(String):
undefined: M0,4.51351666838205A4.51351666838205,4.51351666838205 0 1,1 0,-4.51351666838205A4.51351666838205,4.51351666838205 0 1,1 0,4.51351666838205Z
circle: M0,4.51351666838205A4.51351666838205,4.51351666838205 0 1,1 0,-4.51351666838205A4.51351666838205,4.51351666838205 0 1,1 0,4.51351666838205Z
cross: M-5.366563145999495,-1.7888543819998317H-1.7888543819998317V-5.366563145999495H1.7888543819998317V-1.7888543819998317H5.366563145999495V1.7888543819998317H1.7888543819998317V5.366563145999495H-1.7888543819998317V1.7888543819998317H-5.366563145999495Z
diamond: M0,-7.444838872816797L4.298279727294167,0 0,7.444838872816797 -4.298279727294167,0Z
square: M-4,-4L4,-4 4,4 -4,4Z
triangle-down: M0,5.26429605180997L6.078685485212741,-5.26429605180997 -6.078685485212741,-5.26429605180997Z
triangle-up: M0,-5.26429605180997L6.078685485212741,5.26429605180997 -6.078685485212741,5.26429605180997Z

22
tests/test-time-format.js Normal file
Просмотреть файл

@ -0,0 +1,22 @@
require("./../lib/env-js/envjs/node");
require("./../d3");
require("./../d3.time");
var formats = [
"a", "A", "b", "B", "c", "d", "e", "H", "I", "j", "m", "M",
"p", "S", "U", "w", "W", "x", "X", "y", "Y", "Z", "%"
];
var now = new Date(1990, 0, 1);
console.log("format 01/01/1990 00:00:00:");
formats.forEach(function(f) {
console.log(" " + f + ":", d3.time.format("%" + f)(now));
});
console.log("");
var now = new Date(2011, 11, 31, 23, 59, 59);
console.log("format 12/31/2011 23:59:59:");
formats.forEach(function(f) {
console.log(" " + f + ":", d3.time.format("%" + f)(now));
});
console.log("");

Просмотреть файл

@ -0,0 +1,50 @@
format 01/01/1990 00:00:00:
a: Mon
A: Monday
b: Jan
B: January
c: Mon Jan 1 00:00:00 1990
d: 01
e: 1
H: 00
I: 12
j: 001
m: 01
M: 00
p: AM
S: 00
U: 00
w: 1
W: 00
x: 01/01/90
X: 00:00:00
y: 90
Y: 1990
Z: -0800
%: %
format 12/31/2011 23:59:59:
a: Sat
A: Saturday
b: Dec
B: December
c: Sat Dec 31 23:59:59 2011
d: 31
e: 31
H: 23
I: 11
j: 365
m: 12
M: 59
p: PM
S: 59
U: 52
w: 6
W: 52
x: 12/31/11
X: 23:59:59
y: 11
Y: 2011
Z: -0800
%: %

79
tests/test-time-parse.js Normal file
Просмотреть файл

@ -0,0 +1,79 @@
require("./../lib/env-js/envjs/node");
require("./../d3");
require("./../d3.time");
var f = d3.time.format("%c");
console.log("parse a m/d/Y:");
console.log(" Sun 01/01/1990:", f(d3.time.format("%a %m/%d/%Y").parse("Sun 01/01/1990")));
console.log(" Wed 01/01/1990:", f(d3.time.format("%a %m/%d/%Y").parse("Wed 01/01/1990")));
console.log(" XXX 01/01/1990:", d3.time.format("%a %m/%d/%Y").parse("XXX 01/01/1990"));
console.log("");
console.log("parse A m/d/Y:");
console.log(" Sunday 01/01/1990:", f(d3.time.format("%A %m/%d/%Y").parse("Sunday 01/01/1990")));
console.log(" Wednesday 01/01/1990:", f(d3.time.format("%A %m/%d/%Y").parse("Wednesday 01/01/1990")));
console.log(" Caturday 01/01/1990:", d3.time.format("%A %m/%d/%Y").parse("Caturday 01/01/1990"));
console.log("");
console.log("parse m/d/y:");
console.log(" 1/1/90:", f(d3.time.format("%m/%d/%y").parse("1/1/90")));
console.log(" 1/1/10:", f(d3.time.format("%m/%d/%y").parse("1/1/10")));
console.log("");
console.log("parse x:");
console.log(" 1/1/90:", f(d3.time.format("%x").parse("1/1/90")));
console.log(" 1/1/10:", f(d3.time.format("%x").parse("1/1/10")));
console.log("");
console.log("parse b d Y:");
console.log(" jan 01, 1990:", f(d3.time.format("%b %d, %Y").parse("jan 01, 1990")));
console.log(" jan 1, 1990:", f(d3.time.format("%b %d, %Y").parse("jan 1, 1990")));
console.log(" 1 Feb., 1990:", f(d3.time.format("%d %b., %Y").parse("1 Feb., 1990")));
console.log(" 01 Feb., 1990:", f(d3.time.format("%d %b., %Y").parse("01 Feb., 1990")));
console.log(" 1 Feb., 1990:", f(d3.time.format("%d %b., %Y").parse(" 1 Feb., 1990")));
console.log(" 1 Feb., 1990:", f(d3.time.format(" %d %b., %Y").parse(" 1 Feb., 1990")));
console.log(" Moy 1 1990:", d3.time.format("%b %d %Y").parse("Moy 1 1990"));
console.log("");
console.log("parse B d Y:");
console.log(" January 01, 1990:", f(d3.time.format("%B %d, %Y").parse("January 01, 1990")));
console.log(" january 1, 1990:", f(d3.time.format("%B %d, %Y").parse("january 1, 1990")));
console.log(" 1 February, 1990:", f(d3.time.format("%d %B, %Y").parse("1 February, 1990")));
console.log(" 01 February, 1990:", f(d3.time.format("%d %B, %Y").parse("01 February, 1990")));
console.log(" 1 February, 1990:", f(d3.time.format("%d %B, %Y").parse(" 1 February, 1990")));
console.log(" 1 February, 1990:", f(d3.time.format(" %d %B, %Y").parse(" 1 February, 1990")));
console.log(" Juin 1 1990:", d3.time.format("%B %d %Y").parse("Join 1 1990"));
console.log("");
console.log("parse c:");
console.log(" Mon Jan 1 00:00:00 1990:", f(d3.time.format("%c").parse("Mon Jan 1 00:00:00 1990")));
console.log(" Sun Jan 1 00:00:00 1990:", f(d3.time.format("%c").parse("Sun Jan 1 00:00:00 1990")));
console.log(" Mon Jan 01 00:00:00 1990:", f(d3.time.format("%c").parse("Mon Jan 01 00:00:00 1990")));
console.log(" Mon Jan 1 00:00:00 1990:", f(d3.time.format("%c").parse("Mon Jan 1 00:00:00 1990")));
console.log(" Mon Jan 1 0:0:0 1990:", f(d3.time.format("%c").parse("Mon Jan 1 0:0:0 1990")));
console.log("");
console.log("parse H M S:");
console.log(" 00:00:00:", f(d3.time.format("%H:%M:%S").parse("00:00:00")));
console.log(" 11:59:59:", f(d3.time.format("%H:%M:%S").parse("11:59:59")));
console.log(" 12:00:00:", f(d3.time.format("%H:%M:%S").parse("12:00:00")));
console.log(" 12:00:01:", f(d3.time.format("%H:%M:%S").parse("12:00:01")));
console.log(" 23:59:59:", f(d3.time.format("%H:%M:%S").parse("23:59:59")));
console.log("");
console.log("parse X:");
console.log(" 00:00:00:", f(d3.time.format("%X").parse("00:00:00")));
console.log(" 11:59:59:", f(d3.time.format("%X").parse("11:59:59")));
console.log(" 12:00:00:", f(d3.time.format("%X").parse("12:00:00")));
console.log(" 12:00:01:", f(d3.time.format("%X").parse("12:00:01")));
console.log(" 23:59:59:", f(d3.time.format("%X").parse("23:59:59")));
console.log("");
console.log("parse I M S p:");
console.log(" 12:00:00 am:", f(d3.time.format("%I:%M:%S %p").parse("12:00:00 am")));
console.log(" 11:59:59 AM:", f(d3.time.format("%I:%M:%S %p").parse("11:59:59 AM")));
console.log(" 12:00:00 pm:", f(d3.time.format("%I:%M:%S %p").parse("12:00:00 pm")));
console.log(" 12:00:01 pm:", f(d3.time.format("%I:%M:%S %p").parse("12:00:01 pm")));
console.log(" 11:59:59 PM:", f(d3.time.format("%I:%M:%S %p").parse("11:59:59 PM")));
console.log("");

64
tests/test-time-parse.out Normal file
Просмотреть файл

@ -0,0 +1,64 @@
parse a m/d/Y:
Sun 01/01/1990: Mon Jan 1 00:00:00 1990
Wed 01/01/1990: Mon Jan 1 00:00:00 1990
XXX 01/01/1990: null
parse A m/d/Y:
Sunday 01/01/1990: Mon Jan 1 00:00:00 1990
Wednesday 01/01/1990: Mon Jan 1 00:00:00 1990
Caturday 01/01/1990: null
parse m/d/y:
1/1/90: Sun Jan 1 00:00:00 2090
1/1/10: Fri Jan 1 00:00:00 2010
parse x:
1/1/90: Sun Jan 1 00:00:00 2090
1/1/10: Fri Jan 1 00:00:00 2010
parse b d Y:
jan 01, 1990: Mon Jan 1 00:00:00 1990
jan 1, 1990: Mon Jan 1 00:00:00 1990
1 Feb., 1990: Thu Feb 1 00:00:00 1990
01 Feb., 1990: Thu Feb 1 00:00:00 1990
1 Feb., 1990: Thu Feb 1 00:00:00 1990
1 Feb., 1990: Thu Feb 1 00:00:00 1990
Moy 1 1990: null
parse B d Y:
January 01, 1990: Mon Jan 1 00:00:00 1990
january 1, 1990: Mon Jan 1 00:00:00 1990
1 February, 1990: Thu Feb 1 00:00:00 1990
01 February, 1990: Thu Feb 1 00:00:00 1990
1 February, 1990: Thu Feb 1 00:00:00 1990
1 February, 1990: Thu Feb 1 00:00:00 1990
Juin 1 1990: null
parse c:
Mon Jan 1 00:00:00 1990: Mon Jan 1 00:00:00 1990
Sun Jan 1 00:00:00 1990: Mon Jan 1 00:00:00 1990
Mon Jan 01 00:00:00 1990: Mon Jan 1 00:00:00 1990
Mon Jan 1 00:00:00 1990: Mon Jan 1 00:00:00 1990
Mon Jan 1 0:0:0 1990: Mon Jan 1 00:00:00 1990
parse H M S:
00:00:00: Mon Jan 1 00:00:00 1900
11:59:59: Mon Jan 1 11:59:59 1900
12:00:00: Mon Jan 1 12:00:00 1900
12:00:01: Mon Jan 1 12:00:01 1900
23:59:59: Mon Jan 1 23:59:59 1900
parse X:
00:00:00: Mon Jan 1 00:00:00 1900
11:59:59: Mon Jan 1 11:59:59 1900
12:00:00: Mon Jan 1 12:00:00 1900
12:00:01: Mon Jan 1 12:00:01 1900
23:59:59: Mon Jan 1 23:59:59 1900
parse I M S p:
12:00:00 am: Mon Jan 1 00:00:00 1900
11:59:59 AM: Mon Jan 1 11:59:59 1900
12:00:00 pm: Mon Jan 1 12:00:00 1900
12:00:01 pm: Mon Jan 1 12:00:01 1900
11:59:59 PM: Mon Jan 1 23:59:59 1900