Custom easing. Public d3.dispatch.

This commit is contained in:
Michael Bostock 2010-10-24 12:37:59 -07:00
Родитель 18a6e2941a
Коммит 27dbb5a0fa
12 изменённых файлов: 155 добавлений и 154 удалений

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

@ -12,8 +12,7 @@ SRC_FILES = \
src/blend.js \
src/range.js \
src/ns.js \
src/dispatcher.js \
src/dispatchers.js \
src/dispatch.js \
src/ease.js \
src/event.js \
src/interpolate.js \

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

@ -50,19 +50,30 @@ d3.ns = {
}
};
function d3_dispatcher(type) {
var dispatcher = {},
/** @param {...string} types */
d3.dispatch = function(types) {
var dispatch = {},
type;
for (var i = 0, n = arguments.length; i < n; i++) {
type = arguments[i];
dispatch[type] = d3_dispatch(type);
}
return dispatch;
};
function d3_dispatch(type) {
var dispatch = {},
listeners = [];
dispatcher.add = function(listener) {
dispatch.add = function(listener) {
for (var i = 0; i < listeners.length; i++) {
if (listeners[i].listener == listener) return dispatcher; // already registered
if (listeners[i].listener == listener) return dispatch; // already registered
}
listeners.push({listener: listener, on: true});
return dispatcher;
return dispatch;
};
dispatcher.remove = function(listener) {
dispatch.remove = function(listener) {
for (var i = 0; i < listeners.length; i++) {
var l = listeners[i];
if (l.listener == listener) {
@ -71,10 +82,10 @@ function d3_dispatcher(type) {
break;
}
}
return dispatcher;
return dispatch;
};
dispatcher.dispatch = function() {
dispatch.dispatch = function() {
var ls = listeners; // defensive reference
for (var i = 0, n = ls.length; i < n; i++) {
var l = ls[i];
@ -82,18 +93,8 @@ function d3_dispatcher(type) {
}
};
return dispatcher;
return dispatch;
};
/** @param {...string} types */
function d3_dispatchers(types) {
var dispatchers = {},
type;
for (var i = 0, n = arguments.length; i < n; i++) {
type = arguments[i];
dispatchers[type] = d3_dispatcher(type);
}
return dispatchers;
}
/*
* TERMS OF USE - EASING EQUATIONS
*
@ -1200,7 +1201,7 @@ function d3_transition(groups) {
timeout = setTimeout(start, 1),
interval,
then = Date.now(),
event = d3_dispatchers("start", "end"),
event = d3.dispatch("start", "end"),
stage = [],
delay = [],
duration = [],
@ -1274,9 +1275,8 @@ function d3_transition(groups) {
return transition;
};
// TODO register custom easing functions?
transition.ease = function(value) {
ease = d3.ease(value);
ease = typeof value == "string" ? d3.ease(value) : value;
return transition;
};

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

@ -1,35 +1,35 @@
if(!Date.now)Date.now=function(){return+new Date};if(!Object.create)Object.create=function(F){function D(){}D.prototype=F;return new D};
(function(F){function D(){var a={},b=[];a.add=function(e){for(var f=0;f<b.length;f++)if(b[f].listener==e)return a;b.push({listener:e,on:true});return a};a.remove=function(e){for(var f=0;f<b.length;f++){var c=b[f];if(c.listener==e){c.on=false;b=b.slice(0,f).concat(b.slice(f+1));break}}return a};a.dispatch=function(){for(var e=b,f=0,c=e.length;f<c;f++){var d=e[f];d.on&&d.listener.apply(this,arguments)}};return a}function R(){for(var a={},b,e=0,f=arguments.length;e<f;e++){b=arguments[e];a[b]=D(b)}return a}
function N(a){return function(b){return 1-a(1-b)}}function O(a){return function(b){return 0.5*(b<0.5?a(2*b):2-a(2-2*b))}}function S(a){return a}function G(a){return function(b){return Math.pow(b,a)}}function T(a){return 1-Math.cos(a*Math.PI/2)}function U(a){return a?Math.pow(2,10*(a-1))-0.0010:0}function V(a){return 1-Math.sqrt(1-a*a)}function W(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 X(a){return{nodeKey:function(b){return b.getAttribute(a)},
dataKey:function(b){return b[a]}}}function H(a){var b,e,f,c,d;if(c=/([a-z]+)\((.*)\)/i.exec(a)){d=c[2].split(",");switch(c[1]){case "hsl":return P(parseFloat(d[0]),parseFloat(d[1])/100,parseFloat(d[2])/100);case "rgb":return{r:I(d[0]),g:I(d[1]),b:I(d[2])}}}if(c=B[a])return c;if(a==null)return B.black;if(a.charAt(0)=="#"){if(a.length==4){b=a.charAt(1);b+=b;e=a.charAt(2);e+=e;f=a.charAt(3);f+=f}else if(a.length==7){b=a.substring(1,3);e=a.substring(3,5);f=a.substring(5,7)}b=parseInt(b,16);e=parseInt(e,
16);f=parseInt(f,16)}return{r:b,g:e,b:f}}function P(a,b,e){function f(h){if(h>360)h-=360;else if(h<0)h+=360;if(h<60)return c+(d-c)*h/60;if(h<180)return d;if(h<240)return c+(d-c)*(240-h)/60;return c}var c,d;a%=360;if(a<0)a+=360;b=b<0?0:b>1?1:b;e=e<0?0:e>1?1:e;d=e<=0.5?e*(1+b):e+b-e*b;c=2*e-d;return{r:Math.round(f(a+120)*255),g:Math.round(f(a)*255),b:Math.round(f(a-120)*255)}}function I(a){var b=parseFloat(a);return a.charAt(a.length-1)=="%"?Math.round(b*2.55):b}function A(a){function b(c){for(var d=
[],h,i,g,m,o=0,r=a.length;o<r;o++){g=a[o];d.push(h=[]);h.parentNode=g.parentNode;h.parentData=g.parentData;for(var p=0,t=g.length;p<t;p++)if(m=g[p]){h.push(i=c(m));if(i)i.__data__=m.__data__}else h.push(null)}return A(d)}function e(c){for(var d=[],h,i,g,m=0,o=a.length;m<o;m++){i=a[m];for(var r=0,p=i.length;r<p;r++)if(g=i[r]){d.push(h=c(g));h.parentNode=g;h.parentData=g.__data__}}return A(d)}function f(c){for(var d=0,h=a.length;d<h;d++)for(var i=a[d],g=0,m=i.length;g<m;g++){var o=i[g];if(o)return c.call(o,
o.__data__,g)}return null}a.select=function(c){return b(function(d){return d.querySelector(c)})};a.selectAll=function(c){return e(function(d){d=d.querySelectorAll(c);return Array.prototype.slice.call(d)})};a.data=function(c,d){function h(t,k){function n(Y){return t.parentNode.appendChild(Y)}var j=0,q=t.length,x=k.length,u=Math.min(q,x),w=Math.max(q,x),y=[],v=[],s=[],z,C;if(d){u={};w=[];var E;for(j=0;j<q;j++){u[E=d.nodeKey(z=t[j])]=z;w.push(E)}for(j=0;j<x;j++){if(z=u[E=d.dataKey(C=k[j])]){z.__data__=
C;y[j]=z;v[j]=s[j]=null}else{v[j]={appendChild:n,__data__:C};y[j]=s[j]=null}delete u[E]}for(j=0;j<q;j++)if(w[j]in u)s[j]=t[j]}else{for(;j<u;j++){z=t[j];C=k[j];if(z){z.__data__=C;y[j]=z;v[j]=s[j]=null}else{v[j]={appendChild:n,__data__:C};y[j]=s[j]=null}}for(;j<x;j++){v[j]={appendChild:n,__data__:k[j]};y[j]=s[j]=null}for(;j<w;j++){s[j]=t[j];v[j]=y[j]=null}}o.push(v);r.push(y);p.push(s)}var i=-1,g=a.length,m,o=[],r=[],p=[];if(typeof d=="string")d=X(d);if(typeof c=="function")for(;++i<g;)h(m=a[i],c.call(m,
m.parentData,i));else for(;++i<g;)h(m=a[i],c);i=A(r);i.enter=function(t){return A(o).append(t)};i.exit=function(){return A(p)};return i};a.each=function(c){for(var d=0,h=a.length;d<h;d++)for(var i=a[d],g=0,m=i.length;g<m;g++){var o=i[g];o&&c.call(o,o.__data__,g)}return a};a.attr=function(c,d){function h(){this.removeAttribute(c)}function i(){this.removeAttributeNS(c.space,c.local)}function g(){this.setAttribute(c,d)}function m(){this.setAttributeNS(c.space,c.local,d)}function o(){var p=d.apply(this,
arguments);p==null?this.removeAttribute(c):this.setAttribute(c,p)}function r(){var p=d.apply(this,arguments);p==null?this.removeAttributeNS(c.space,c.local):this.setAttributeNS(c.space,c.local,p)}c=l.ns.qualify(c);if(arguments.length<2)return f(c.local?function(){return this.getAttributeNS(c.space,c.local)}:function(){return this.getAttribute(c)});return a.each(d==null?c.local?i:h:typeof d=="function"?c.local?r:o:c.local?m:g)};a.style=function(c,d,h){function i(){this.style.removeProperty(c)}function g(){this.style.setProperty(c,
d,h)}function m(){var o=d.apply(this,arguments);o==null?this.style.removeProperty(c):this.style.setProperty(c,o,h)}if(arguments.length<3)h=null;if(arguments.length<2)return f(function(){return window.getComputedStyle(this,null).getPropertyValue(c)});return a.each(d==null?i:typeof d=="function"?m:g)};a.text=function(c){function d(){this.appendChild(document.createTextNode(c))}function h(){var i=c.apply(this,arguments);i!=null&&this.appendChild(document.createTextNode(i))}if(arguments.length<1)return f(function(){return this.textContent});
a.each(function(){for(;this.lastChild;)this.removeChild(this.lastChild)});return c==null?a:a.each(typeof c=="function"?h:d)};a.html=function(c){function d(){this.innerHTML=c}function h(){this.innerHTML=c.apply(this,arguments)}if(arguments.length<1)return f(function(){return this.innerHTML});return a.each(typeof c=="function"?h:d)};a.append=function(c){function d(i){return i.appendChild(document.createElement(c))}function h(i){return i.appendChild(document.createElementNS(c.space,c.local))}c=l.ns.qualify(c);
return b(c.local?h:d)};a.remove=function(){return b(function(c){var d=c.parentNode;d.removeChild(c);return d})};a.on=function(c,d){c="on"+c;return a.each(function(h,i){this[c]=function(g){l.event=g;try{d.call(this,h,i)}finally{l.event=null}}})};a.transition=function(){return J(a)};return a}function J(a){function b(){h=setInterval(e,24)}function e(){var k=Date.now()-i,n=true,j=-1;a.each(function(){if(m[++j]!=2){var q=(k-o[j])/r[j];if(q>=1)q=1;else{n=false;if(q<0)return;if(!m[j]){m[j]=1;g.start.dispatch.apply(this,
arguments)}}var x=t(q),u;for(u in c)c[u].call(this,x,j);if(q==1){m[j]=2;g.end.dispatch.apply(this,arguments)}}});n&&clearInterval(h)}var f={},c={},d=setTimeout(b,1),h,i=Date.now(),g=R("start","end"),m=[],o=[],r=[],p,t=l.ease("cubic-in-out");f.delay=function(k){var n=Infinity,j=-1;if(typeof k=="function")a.each(function(){var q=o[++j]=+k.apply(this,arguments);if(q<n)n=q});else{n=+k;a.each(function(){o[++j]=n})}clearTimeout(d);d=setTimeout(b,n);return f};f.duration=function(k){var n=-1;if(typeof k==
"function"){p=0;a.each(function(){var j=r[++n]=+k.apply(this,arguments);if(j>p)p=j})}else{p=+k;a.each(function(){r[++n]=p})}return f};f.ease=function(k){t=l.ease(k);return f};f.attrTween=function(k,n){function j(v,s){w[++y]=n.call(this,v,s,this.getAttribute(k))}function q(v,s){w[++y]=n.call(this,v,s,this.getAttributeNS(k.space,k.local))}function x(v,s){this.setAttribute(k,w[s](v))}function u(v,s){this.setAttributeNS(k.space,k.local,w[s](v))}var w=[],y=-1;k=l.ns.qualify(k);a.each(k.local?q:j);c["attr."+
k]=k.local?u:x;return f};f.attr=function(k,n){return f.attrTween(k,Q(n))};f.styleTween=function(k,n,j){var q=[],x=-1;a.each(function(u,w){q[++x]=n.call(this,u,w,window.getComputedStyle(this,null).getPropertyValue(k))});c["style."+k]=function(u,w){this.style.setProperty(k,q[w](u),j)};return f};f.style=function(k,n,j){return f.styleTween(k,Q(n),j)};f.select=function(k){var n;k=J(a.select(k)).ease(t);n=-1;k.delay(function(){return o[++n]});n=-1;k.duration(function(){return r[++n]});return k};f.selectAll=
function(k){var n;k=J(a.selectAll(k)).ease(t);n=-1;k.delay(function(j,q){return o[q?n:++n]});n=-1;k.duration(function(j,q){return r[q?n:++n]});return k};f.each=function(k,n){g[k].add(n);return f};return f.delay(0).duration(250)}function Q(a){return typeof a=="function"?function(b,e,f){return l.interpolate(f,a.call(this,b,e))}:function(b,e,f){return l.interpolate(f,a)}}var l=F.d3={};l.version="0.1.0";l.range=function(a,b,e){if(arguments.length==1){b=a;a=0}if(e==null)e=1;if((b-a)/e==Infinity)throw Error("infinite range");
var f=[],c=-1,d;if(e<0)for(;(d=a+e*++c)>b;)f.push(d);else for(;(d=a+e*++c)<b;)f.push(d);return f};l.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:l.ns.prefix[a.substring(0,b)],local:a.substring(b+1)}}};var Z=G(2),$=G(3),aa={linear:function(){return S},poly:G,quad:function(){return Z},
cubic:function(){return $},sin:function(){return T},exp:function(){return U},circle:function(){return V},elastic:function(a,b){var e;if(arguments.length<2)b=0.45;if(arguments.length<1){a=1;e=b/4}else e=b/(2*Math.PI)*Math.asin(1/a);return function(f){return 1+a*Math.pow(2,10*-f)*Math.sin(-(f+e)*2*Math.PI/b)}},back:function(a){a||(a=1.70158);return function(b){return b*b*((a+1)*b-a)}},bounce:function(){return W}},ba={"in":function(a){return a},out:N,"in-out":O,"out-int":function(a){return O(N(a))}};
l.ease=function(a){var b=a.indexOf("-"),e=b>=0?a.substring(0,b):a;b=b>=0?a.substring(b+1):"in";return ba[b](aa[e].apply(null,Array.prototype.slice.call(arguments,1)))};l.event=null;l.interpolate=function(a,b){if(typeof b=="number")return l.interpolateNumber(+a,b);if(typeof b=="string")return b in B||/^(#|rgb\(|hsl\()/.test(b)?l.interpolateRgb(String(a),b):l.interpolateString(String(a),b);if(b instanceof Array)return l.interpolateArray(a,b);return l.interpolateObject(a,b)};l.interpolateNumber=function(a,
b){b-=a;return function(e){return a+b*e}};l.interpolateString=function(a,b){var e,f,c=0,d=[],h=[],i,g;for(f=0;e=K.exec(b);++f){e.index&&d.push(b.substring(c,e.index));h.push({i:d.length,x:e[0]});d.push(null);c=K.lastIndex}c<b.length&&d.push(b.substring(c));f=0;for(i=h.length;(e=K.exec(a))&&f<i;++f){g=h[f];if(g.x==e[0]){if(g.i)if(d[g.i+1]==null){d[g.i-1]+=g.x;d.splice(g.i,1);for(e=f+1;e<i;++e)h[e].i--}else{d[g.i-1]+=g.x+d[g.i+1];d.splice(g.i,2);for(e=f+1;e<i;++e)h[e].i-=2}else if(d[g.i+1]==null)d[g.i]=
g.x;else{d[g.i]=g.x+d[g.i+1];d.splice(g.i+1,1);for(e=f+1;e<i;++e)h[e].i--}h.splice(f,1);i--;f--}else g.x=l.interpolateNumber(parseFloat(e[0]),parseFloat(g.x))}for(;f<i;){g=h.pop();if(d[g.i+1]==null)d[g.i]=g.x;else{d[g.i]=g.x+d[g.i+1];d.splice(g.i+1,1)}i--}if(d.length==1)return d[0]==null?h[0].x:function(){return b};return function(m){for(f=0;f<i;++f)d[(g=h[f]).i]=g.x(m);return d.join("")}};l.interpolateRgb=function(a,b){a=H(a);b=H(b);var e=a.r,f=a.g,c=a.b,d=b.r-e,h=b.g-f,i=b.b-c;return function(g){return"rgb("+
Math.round(e+d*g)+","+Math.round(f+h*g)+","+Math.round(c+i*g)+")"}};l.interpolateArray=function(a,b){var e=[],f=[],c=a.length,d=b.length,h=Math.min(a.length,b.length),i;for(i=0;i<h;++i)e.push(l.interpolate(a[i],b[i]));for(;i<c;++i)f[i]=a[i];for(;i<d;++i)f[i]=b[i];return function(g){for(i=0;i<h;++i)f[i]=e[i](g);return f}};l.interpolateObject=function(a,b){var e={},f={},c;for(c in a)if(c in b)e[c]=(c in ca||/\bcolor\b/.test(c)?l.interpolateRgb:l.interpolate)(a[c],b[c]);else f[c]=a[c];for(c in b)c in
a||(f[c]=b[c]);return function(d){for(c in e)f[c]=e[c](d);return f}};var K=/[-+]?(?:\d+\.\d+|\d+\.|\.\d+|\d+)(?:[eE][-]?\d+)?/g,ca={background:1,fill:1,stroke:1},B={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"},L;for(L in B)B[L]=H(B[L]);l.hsl=function(a,b,e){a=P(a,b,e);return"rgb("+a.r+","+a.g+","+a.b+")"};l.linear=function(){function a(g){return i((g-e)*h)}function b(g){var m=Math.min(e,f),o=Math.max(e,f),r=o-m,p=Math.pow(10,Math.floor(Math.log(r/g)/Math.LN10));g=g/(r/p);if(g<=0.15)p*=10;else if(g<=0.35)p*=5;else if(g<=0.75)p*=2;return{start:Math.ceil(m/p)*p,stop:Math.floor(o/p)*p+p*0.5,step:p}}var e=0,f=1,c=0,d=1,h=1/(f-e),i=l.interpolate(c,d);a.invert=function(g){return(g-
c)/h+e};a.domain=function(g){if(!arguments.length)return[e,f];e=g[0];f=g[1];h=1/(f-e);return a};a.range=function(g){if(!arguments.length)return[c,d];c=g[0];d=g[1];i=l.interpolate(c,d);return a};a.ticks=function(g){g=b(g);return l.range(g.start,g.stop,g.step)};a.tickFormat=function(g){var m=Math.max(0,-Math.floor(Math.log(b(g).step)/Math.LN10+0.01));return function(o){return o.toFixed(m)}};return a};l.log=function(){function a(e){return b(Math.log(e))}var b=l.linear();a.invert=function(e){return Math.exp(b.invert(e))};
a.domain=function(e){if(!arguments.length)return b.domain().map(Math.exp);b.domain(e.map(Math.log));return a};a.range=function(){var e=b.range.apply(b,arguments);return arguments.length?a:e};return a};l.pow=function(){function a(h){return Math.pow(h,c)}function b(h){return Math.pow(h,d)}function e(h){return f(a(h))}var f=l.linear(),c=1,d=1/c;e.invert=function(h){return b(f.invert(h))};e.domain=function(h){if(!arguments.length)return f.domain().map(b);f.domain(h.map(a));return e};e.range=function(){var h=
f.range.apply(f,arguments);return arguments.length?e:h};e.exponent=function(h){if(!arguments.length)return c;var i=e.domain();c=h;d=1/h;return e.domain(i)};return e};l.sqrt=function(){return l.pow().exponent(0.5)};l.ordinal=function(){function a(d){d=d in e?e[d]:e[d]=b.push(d)-1;return f[d%f.length]}var b=[],e={},f=[],c=0;a.domain=function(d){if(!arguments.length)return b;b=d;e={};for(var h=-1,i=-1,g=b.length;++h<g;){d=b[h];d in e||(e[d]=++i)}return a};a.range=function(d){if(!arguments.length)return f;
f=d;return a};a.rangePoints=function(d,h){if(arguments.length<2)h=0;var i=d[0],g=d[1],m=(g-i)/(b.length-1+h);f=b.length==1?[(i+g)/2]:l.range(i+m*h/2,g+m/2,m);c=0;return a};a.rangeBands=function(d,h){if(arguments.length<2)h=0;var i=d[0],g=d[1],m=(g-i)/(b.length+h);f=l.range(i+m*h,g,m);c=m*(1-h);return a};a.rangeBand=function(){return c};return a};var M=A([[document]]);l.select=function(a){return typeof a=="string"?M.select(a):A([[a]])};l.selectAll=function(a){return typeof a=="string"?M.selectAll(a):
A([Array.prototype.slice.call(a)])};l.transition=function(){return M.transition()}})(this);
(function(F){function D(){var a={},b=[];a.add=function(e){for(var f=0;f<b.length;f++)if(b[f].listener==e)return a;b.push({listener:e,on:true});return a};a.remove=function(e){for(var f=0;f<b.length;f++){var c=b[f];if(c.listener==e){c.on=false;b=b.slice(0,f).concat(b.slice(f+1));break}}return a};a.dispatch=function(){for(var e=b,f=0,c=e.length;f<c;f++){var d=e[f];d.on&&d.listener.apply(this,arguments)}};return a}function N(a){return function(b){return 1-a(1-b)}}function O(a){return function(b){return 0.5*
(b<0.5?a(2*b):2-a(2-2*b))}}function R(a){return a}function G(a){return function(b){return Math.pow(b,a)}}function S(a){return 1-Math.cos(a*Math.PI/2)}function T(a){return a?Math.pow(2,10*(a-1))-0.0010:0}function U(a){return 1-Math.sqrt(1-a*a)}function V(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 W(a){return{nodeKey:function(b){return b.getAttribute(a)},dataKey:function(b){return b[a]}}}function H(a){var b,
e,f,c,d;if(c=/([a-z]+)\((.*)\)/i.exec(a)){d=c[2].split(",");switch(c[1]){case "hsl":return P(parseFloat(d[0]),parseFloat(d[1])/100,parseFloat(d[2])/100);case "rgb":return{r:I(d[0]),g:I(d[1]),b:I(d[2])}}}if(c=B[a])return c;if(a==null)return B.black;if(a.charAt(0)=="#"){if(a.length==4){b=a.charAt(1);b+=b;e=a.charAt(2);e+=e;f=a.charAt(3);f+=f}else if(a.length==7){b=a.substring(1,3);e=a.substring(3,5);f=a.substring(5,7)}b=parseInt(b,16);e=parseInt(e,16);f=parseInt(f,16)}return{r:b,g:e,b:f}}function P(a,
b,e){function f(h){if(h>360)h-=360;else if(h<0)h+=360;if(h<60)return c+(d-c)*h/60;if(h<180)return d;if(h<240)return c+(d-c)*(240-h)/60;return c}var c,d;a%=360;if(a<0)a+=360;b=b<0?0:b>1?1:b;e=e<0?0:e>1?1:e;d=e<=0.5?e*(1+b):e+b-e*b;c=2*e-d;return{r:Math.round(f(a+120)*255),g:Math.round(f(a)*255),b:Math.round(f(a-120)*255)}}function I(a){var b=parseFloat(a);return a.charAt(a.length-1)=="%"?Math.round(b*2.55):b}function A(a){function b(c){for(var d=[],h,i,g,m,o=0,r=a.length;o<r;o++){g=a[o];d.push(h=[]);
h.parentNode=g.parentNode;h.parentData=g.parentData;for(var p=0,t=g.length;p<t;p++)if(m=g[p]){h.push(i=c(m));if(i)i.__data__=m.__data__}else h.push(null)}return A(d)}function e(c){for(var d=[],h,i,g,m=0,o=a.length;m<o;m++){i=a[m];for(var r=0,p=i.length;r<p;r++)if(g=i[r]){d.push(h=c(g));h.parentNode=g;h.parentData=g.__data__}}return A(d)}function f(c){for(var d=0,h=a.length;d<h;d++)for(var i=a[d],g=0,m=i.length;g<m;g++){var o=i[g];if(o)return c.call(o,o.__data__,g)}return null}a.select=function(c){return b(function(d){return d.querySelector(c)})};
a.selectAll=function(c){return e(function(d){d=d.querySelectorAll(c);return Array.prototype.slice.call(d)})};a.data=function(c,d){function h(t,k){function n(X){return t.parentNode.appendChild(X)}var j=0,q=t.length,x=k.length,u=Math.min(q,x),w=Math.max(q,x),y=[],v=[],s=[],z,C;if(d){u={};w=[];var E;for(j=0;j<q;j++){u[E=d.nodeKey(z=t[j])]=z;w.push(E)}for(j=0;j<x;j++){if(z=u[E=d.dataKey(C=k[j])]){z.__data__=C;y[j]=z;v[j]=s[j]=null}else{v[j]={appendChild:n,__data__:C};y[j]=s[j]=null}delete u[E]}for(j=
0;j<q;j++)if(w[j]in u)s[j]=t[j]}else{for(;j<u;j++){z=t[j];C=k[j];if(z){z.__data__=C;y[j]=z;v[j]=s[j]=null}else{v[j]={appendChild:n,__data__:C};y[j]=s[j]=null}}for(;j<x;j++){v[j]={appendChild:n,__data__:k[j]};y[j]=s[j]=null}for(;j<w;j++){s[j]=t[j];v[j]=y[j]=null}}o.push(v);r.push(y);p.push(s)}var i=-1,g=a.length,m,o=[],r=[],p=[];if(typeof d=="string")d=W(d);if(typeof c=="function")for(;++i<g;)h(m=a[i],c.call(m,m.parentData,i));else for(;++i<g;)h(m=a[i],c);i=A(r);i.enter=function(t){return A(o).append(t)};
i.exit=function(){return A(p)};return i};a.each=function(c){for(var d=0,h=a.length;d<h;d++)for(var i=a[d],g=0,m=i.length;g<m;g++){var o=i[g];o&&c.call(o,o.__data__,g)}return a};a.attr=function(c,d){function h(){this.removeAttribute(c)}function i(){this.removeAttributeNS(c.space,c.local)}function g(){this.setAttribute(c,d)}function m(){this.setAttributeNS(c.space,c.local,d)}function o(){var p=d.apply(this,arguments);p==null?this.removeAttribute(c):this.setAttribute(c,p)}function r(){var p=d.apply(this,
arguments);p==null?this.removeAttributeNS(c.space,c.local):this.setAttributeNS(c.space,c.local,p)}c=l.ns.qualify(c);if(arguments.length<2)return f(c.local?function(){return this.getAttributeNS(c.space,c.local)}:function(){return this.getAttribute(c)});return a.each(d==null?c.local?i:h:typeof d=="function"?c.local?r:o:c.local?m:g)};a.style=function(c,d,h){function i(){this.style.removeProperty(c)}function g(){this.style.setProperty(c,d,h)}function m(){var o=d.apply(this,arguments);o==null?this.style.removeProperty(c):
this.style.setProperty(c,o,h)}if(arguments.length<3)h=null;if(arguments.length<2)return f(function(){return window.getComputedStyle(this,null).getPropertyValue(c)});return a.each(d==null?i:typeof d=="function"?m:g)};a.text=function(c){function d(){this.appendChild(document.createTextNode(c))}function h(){var i=c.apply(this,arguments);i!=null&&this.appendChild(document.createTextNode(i))}if(arguments.length<1)return f(function(){return this.textContent});a.each(function(){for(;this.lastChild;)this.removeChild(this.lastChild)});
return c==null?a:a.each(typeof c=="function"?h:d)};a.html=function(c){function d(){this.innerHTML=c}function h(){this.innerHTML=c.apply(this,arguments)}if(arguments.length<1)return f(function(){return this.innerHTML});return a.each(typeof c=="function"?h:d)};a.append=function(c){function d(i){return i.appendChild(document.createElement(c))}function h(i){return i.appendChild(document.createElementNS(c.space,c.local))}c=l.ns.qualify(c);return b(c.local?h:d)};a.remove=function(){return b(function(c){var d=
c.parentNode;d.removeChild(c);return d})};a.on=function(c,d){c="on"+c;return a.each(function(h,i){this[c]=function(g){l.event=g;try{d.call(this,h,i)}finally{l.event=null}}})};a.transition=function(){return J(a)};return a}function J(a){function b(){h=setInterval(e,24)}function e(){var k=Date.now()-i,n=true,j=-1;a.each(function(){if(m[++j]!=2){var q=(k-o[j])/r[j];if(q>=1)q=1;else{n=false;if(q<0)return;if(!m[j]){m[j]=1;g.start.dispatch.apply(this,arguments)}}var x=t(q),u;for(u in c)c[u].call(this,x,
j);if(q==1){m[j]=2;g.end.dispatch.apply(this,arguments)}}});n&&clearInterval(h)}var f={},c={},d=setTimeout(b,1),h,i=Date.now(),g=l.dispatch("start","end"),m=[],o=[],r=[],p,t=l.ease("cubic-in-out");f.delay=function(k){var n=Infinity,j=-1;if(typeof k=="function")a.each(function(){var q=o[++j]=+k.apply(this,arguments);if(q<n)n=q});else{n=+k;a.each(function(){o[++j]=n})}clearTimeout(d);d=setTimeout(b,n);return f};f.duration=function(k){var n=-1;if(typeof k=="function"){p=0;a.each(function(){var j=r[++n]=
+k.apply(this,arguments);if(j>p)p=j})}else{p=+k;a.each(function(){r[++n]=p})}return f};f.ease=function(k){t=typeof k=="string"?l.ease(k):k;return f};f.attrTween=function(k,n){function j(v,s){w[++y]=n.call(this,v,s,this.getAttribute(k))}function q(v,s){w[++y]=n.call(this,v,s,this.getAttributeNS(k.space,k.local))}function x(v,s){this.setAttribute(k,w[s](v))}function u(v,s){this.setAttributeNS(k.space,k.local,w[s](v))}var w=[],y=-1;k=l.ns.qualify(k);a.each(k.local?q:j);c["attr."+k]=k.local?u:x;return f};
f.attr=function(k,n){return f.attrTween(k,Q(n))};f.styleTween=function(k,n,j){var q=[],x=-1;a.each(function(u,w){q[++x]=n.call(this,u,w,window.getComputedStyle(this,null).getPropertyValue(k))});c["style."+k]=function(u,w){this.style.setProperty(k,q[w](u),j)};return f};f.style=function(k,n,j){return f.styleTween(k,Q(n),j)};f.select=function(k){var n;k=J(a.select(k)).ease(t);n=-1;k.delay(function(){return o[++n]});n=-1;k.duration(function(){return r[++n]});return k};f.selectAll=function(k){var n;k=
J(a.selectAll(k)).ease(t);n=-1;k.delay(function(j,q){return o[q?n:++n]});n=-1;k.duration(function(j,q){return r[q?n:++n]});return k};f.each=function(k,n){g[k].add(n);return f};return f.delay(0).duration(250)}function Q(a){return typeof a=="function"?function(b,e,f){return l.interpolate(f,a.call(this,b,e))}:function(b,e,f){return l.interpolate(f,a)}}var l=F.d3={};l.version="0.1.0";l.range=function(a,b,e){if(arguments.length==1){b=a;a=0}if(e==null)e=1;if((b-a)/e==Infinity)throw Error("infinite range");
var f=[],c=-1,d;if(e<0)for(;(d=a+e*++c)>b;)f.push(d);else for(;(d=a+e*++c)<b;)f.push(d);return f};l.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:l.ns.prefix[a.substring(0,b)],local:a.substring(b+1)}}};l.dispatch=function(){for(var a={},b,e=0,f=arguments.length;e<f;e++){b=arguments[e];
a[b]=D(b)}return a};var Y=G(2),Z=G(3),$={linear:function(){return R},poly:G,quad:function(){return Y},cubic:function(){return Z},sin:function(){return S},exp:function(){return T},circle:function(){return U},elastic:function(a,b){var e;if(arguments.length<2)b=0.45;if(arguments.length<1){a=1;e=b/4}else e=b/(2*Math.PI)*Math.asin(1/a);return function(f){return 1+a*Math.pow(2,10*-f)*Math.sin(-(f+e)*2*Math.PI/b)}},back:function(a){a||(a=1.70158);return function(b){return b*b*((a+1)*b-a)}},bounce:function(){return V}},
aa={"in":function(a){return a},out:N,"in-out":O,"out-int":function(a){return O(N(a))}};l.ease=function(a){var b=a.indexOf("-"),e=b>=0?a.substring(0,b):a;b=b>=0?a.substring(b+1):"in";return aa[b]($[e].apply(null,Array.prototype.slice.call(arguments,1)))};l.event=null;l.interpolate=function(a,b){if(typeof b=="number")return l.interpolateNumber(+a,b);if(typeof b=="string")return b in B||/^(#|rgb\(|hsl\()/.test(b)?l.interpolateRgb(String(a),b):l.interpolateString(String(a),b);if(b instanceof Array)return l.interpolateArray(a,
b);return l.interpolateObject(a,b)};l.interpolateNumber=function(a,b){b-=a;return function(e){return a+b*e}};l.interpolateString=function(a,b){var e,f,c=0,d=[],h=[],i,g;for(f=0;e=K.exec(b);++f){e.index&&d.push(b.substring(c,e.index));h.push({i:d.length,x:e[0]});d.push(null);c=K.lastIndex}c<b.length&&d.push(b.substring(c));f=0;for(i=h.length;(e=K.exec(a))&&f<i;++f){g=h[f];if(g.x==e[0]){if(g.i)if(d[g.i+1]==null){d[g.i-1]+=g.x;d.splice(g.i,1);for(e=f+1;e<i;++e)h[e].i--}else{d[g.i-1]+=g.x+d[g.i+1];d.splice(g.i,
2);for(e=f+1;e<i;++e)h[e].i-=2}else if(d[g.i+1]==null)d[g.i]=g.x;else{d[g.i]=g.x+d[g.i+1];d.splice(g.i+1,1);for(e=f+1;e<i;++e)h[e].i--}h.splice(f,1);i--;f--}else g.x=l.interpolateNumber(parseFloat(e[0]),parseFloat(g.x))}for(;f<i;){g=h.pop();if(d[g.i+1]==null)d[g.i]=g.x;else{d[g.i]=g.x+d[g.i+1];d.splice(g.i+1,1)}i--}if(d.length==1)return d[0]==null?h[0].x:function(){return b};return function(m){for(f=0;f<i;++f)d[(g=h[f]).i]=g.x(m);return d.join("")}};l.interpolateRgb=function(a,b){a=H(a);b=H(b);var e=
a.r,f=a.g,c=a.b,d=b.r-e,h=b.g-f,i=b.b-c;return function(g){return"rgb("+Math.round(e+d*g)+","+Math.round(f+h*g)+","+Math.round(c+i*g)+")"}};l.interpolateArray=function(a,b){var e=[],f=[],c=a.length,d=b.length,h=Math.min(a.length,b.length),i;for(i=0;i<h;++i)e.push(l.interpolate(a[i],b[i]));for(;i<c;++i)f[i]=a[i];for(;i<d;++i)f[i]=b[i];return function(g){for(i=0;i<h;++i)f[i]=e[i](g);return f}};l.interpolateObject=function(a,b){var e={},f={},c;for(c in a)if(c in b)e[c]=(c in ba||/\bcolor\b/.test(c)?
l.interpolateRgb:l.interpolate)(a[c],b[c]);else f[c]=a[c];for(c in b)c in a||(f[c]=b[c]);return function(d){for(c in e)f[c]=e[c](d);return f}};var K=/[-+]?(?:\d+\.\d+|\d+\.|\.\d+|\d+)(?:[eE][-]?\d+)?/g,ba={background:1,fill:1,stroke:1},B={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"},L;for(L in B)B[L]=H(B[L]);l.hsl=function(a,b,e){a=P(a,b,e);return"rgb("+a.r+","+a.g+","+a.b+")"};l.linear=function(){function a(g){return i((g-e)*h)}function b(g){var m=Math.min(e,f),o=Math.max(e,f),r=o-m,p=Math.pow(10,Math.floor(Math.log(r/g)/Math.LN10));g=g/(r/p);if(g<=0.15)p*=10;else if(g<=0.35)p*=5;else if(g<=0.75)p*=2;return{start:Math.ceil(m/p)*p,stop:Math.floor(o/p)*p+p*0.5,step:p}}var e=0,f=1,c=0,d=1,h=1/(f-e),i=
l.interpolate(c,d);a.invert=function(g){return(g-c)/h+e};a.domain=function(g){if(!arguments.length)return[e,f];e=g[0];f=g[1];h=1/(f-e);return a};a.range=function(g){if(!arguments.length)return[c,d];c=g[0];d=g[1];i=l.interpolate(c,d);return a};a.ticks=function(g){g=b(g);return l.range(g.start,g.stop,g.step)};a.tickFormat=function(g){var m=Math.max(0,-Math.floor(Math.log(b(g).step)/Math.LN10+0.01));return function(o){return o.toFixed(m)}};return a};l.log=function(){function a(e){return b(Math.log(e))}
var b=l.linear();a.invert=function(e){return Math.exp(b.invert(e))};a.domain=function(e){if(!arguments.length)return b.domain().map(Math.exp);b.domain(e.map(Math.log));return a};a.range=function(){var e=b.range.apply(b,arguments);return arguments.length?a:e};return a};l.pow=function(){function a(h){return Math.pow(h,c)}function b(h){return Math.pow(h,d)}function e(h){return f(a(h))}var f=l.linear(),c=1,d=1/c;e.invert=function(h){return b(f.invert(h))};e.domain=function(h){if(!arguments.length)return f.domain().map(b);
f.domain(h.map(a));return e};e.range=function(){var h=f.range.apply(f,arguments);return arguments.length?e:h};e.exponent=function(h){if(!arguments.length)return c;var i=e.domain();c=h;d=1/h;return e.domain(i)};return e};l.sqrt=function(){return l.pow().exponent(0.5)};l.ordinal=function(){function a(d){d=d in e?e[d]:e[d]=b.push(d)-1;return f[d%f.length]}var b=[],e={},f=[],c=0;a.domain=function(d){if(!arguments.length)return b;b=d;e={};for(var h=-1,i=-1,g=b.length;++h<g;){d=b[h];d in e||(e[d]=++i)}return a};
a.range=function(d){if(!arguments.length)return f;f=d;return a};a.rangePoints=function(d,h){if(arguments.length<2)h=0;var i=d[0],g=d[1],m=(g-i)/(b.length-1+h);f=b.length==1?[(i+g)/2]:l.range(i+m*h/2,g+m/2,m);c=0;return a};a.rangeBands=function(d,h){if(arguments.length<2)h=0;var i=d[0],g=d[1],m=(g-i)/(b.length+h);f=l.range(i+m*h,g,m);c=m*(1-h);return a};a.rangeBand=function(){return c};return a};var M=A([[document]]);l.select=function(a){return typeof a=="string"?M.select(a):A([[a]])};l.selectAll=
function(a){return typeof a=="string"?M.selectAll(a):A([Array.prototype.slice.call(a)])};l.transition=function(){return M.transition()}})(this);

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

@ -1,5 +1,6 @@
function layout_force() {
var force = d3.dispatch({}),
var force = {},
event = d3.dispatch("tick"),
size = {x: 1, y: 1},
alpha = .1,
nodeDistance = 60,
@ -61,9 +62,14 @@ function layout_force() {
t.y -= y;
}
force.dispatch({type: "tick"});
event.tick.dispatch({type: "tick"});
}
force.on = function(type, listener) {
event[type].add(listener);
return force;
};
force.nodes = function(x) {
if (!arguments.length) return nodes;
nodes = x;

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

@ -1,5 +0,0 @@
function range(n) {
var array = [];
for (var i = 0; i < n; i++) array.push(i);
return array;
}

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

@ -3,7 +3,6 @@
<head>
<title>Stacked Bar Chart</title>
<script type="text/javascript" src="../../d3.js"></script>
<script type="text/javascript" src="range.js"></script>
<script type="text/javascript" src="max.js"></script>
<script type="text/javascript" src="stream.js"></script>
<script type="text/javascript" src="stack.js"></script>
@ -59,10 +58,10 @@ button:hover {
</style>
</head>
<body>
<button id="group" class="first" onclick="group.apply()">
<button id="group" class="first" onclick="transitionGroup()">
Group
</button
><button id="stack" class="active last" onclick="stack.apply()">
><button id="stack" class="active last" onclick="transitionStack()">
Stack
</button><br>
<script type="text/javascript">
@ -90,14 +89,14 @@ var vis = d3.select("body")
var layers = vis.selectAll("g.layer")
.data(data)
.enter.append("svg:g")
.attr("fill", function(d) { return color(this.index / (n - 1)); })
.enter("svg:g")
.attr("fill", function(d, i) { return color(i / (n - 1)); })
.attr("class", "layer")
.attr("transform", "translate(0,0)"); // for animation
var bars = layers.selectAll("g.bar")
.data(function(d) { return d; })
.enter.append("svg:g")
.enter("svg:g")
.attr("class", "bar")
.attr("transform", function(d) { return "translate(" + x(d) + ",0)"; });
@ -106,20 +105,20 @@ bars.append("svg:rect")
.attr("y", h)
.attr("height", 0)
.transition()
.delay(function() { return this.index * 10; })
.attr("y", d3.tween(y1))
.attr("height", d3.tween(function(d) { return y0(d) - y1(d); }));
.delay(function(d, i) { return i * 10; })
.attr("y", y1)
.attr("height", function(d) { return y0(d) - y1(d); });
var labels = vis.selectAll("text.label")
.data(data[0])
.enter.append("svg:text")
.enter("svg:text")
.attr("class", "label")
.attr("x", x)
.attr("y", h + 6)
.attr("dx", x({x: .45}))
.attr("dy", ".71em")
.attr("text-anchor", "middle")
.text(function() { return this.index; });
.text(function(d, i) { return i; });
vis.append("svg:line")
.attr("x1", 0)
@ -127,51 +126,53 @@ vis.append("svg:line")
.attr("y1", h)
.attr("y2", h);
vis.apply();
function transitionGroup() {
var group = d3.selectAll("body");
var group = d3.selectAll("body");
group.select("#group")
.attr("class", "first active");
group.select("#group")
.attr("class", "first active");
group.select("#stack")
.attr("class", "last");
group.select("#stack")
.attr("class", "last");
group.selectAll("g.layer")
.transition()
.duration(500)
.attr("transform", function(d, i) { return "translate(" + x({x: .9 * i / n}) + ",0)"; })
.selectAll("rect")
.attr("width", x({x: .9 / n}));
group.selectAll("g.layer")
.data(data)
.transition()
.duration(500)
.attr("transform", d3.tween(function(d) { return "translate(" + x({x: .9 * this.index / n}) + ",0)"; }))
.selectAll("rect")
.attr("width", d3.tween(x({x: .9 / n})))
.pop.end.selectAll("rect")
.data(function(d) { return d; })
.transition()
.duration(500)
.attr("y", d3.tween(function(d) { return h - y2(d); }))
.attr("height", d3.tween(y2));
group.selectAll("g.layer rect")
.transition()
.delay(500)
.duration(500)
.attr("y", function(d) { return h - y2(d); })
.attr("height", y2);
}
var stack = d3.select("body");
function transitionStack() {
var stack = d3.select("body");
stack.select("#group")
.attr("class", "first");
stack.select("#group")
.attr("class", "first");
stack.select("#stack")
.attr("class", "last active");
stack.select("#stack")
.attr("class", "last active");
stack.selectAll("g.layer")
.data(data)
.transition()
.duration(500)
.selectAll("rect")
.data(function(d) { return d; })
.attr("y", d3.tween(y1))
.attr("height", d3.tween(function(d) { return y0(d) - y1(d); }))
.pop.pop.end.transition()
.duration(500)
.attr("transform", d3.tween("translate(0,0)"))
.selectAll("rect")
.attr("width", d3.tween(x({x: .9})));
stack.selectAll("g.layer rect")
.transition()
.duration(500)
.attr("y", y1)
.attr("height", function(d) { return y0(d) - y1(d); });
stack.selectAll("g.layer")
.transition()
.delay(500)
.duration(500)
.attr("transform", "translate(0,0)")
.selectAll("rect")
.attr("width", x({x: .9}));
}
</script>
</body>

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

@ -10,8 +10,8 @@ function stack(data, order, offset) { // two-dimensional array of x,y; we popula
var index;
switch (order) {
case "inside-out": index = stack_inside_out(data); break;
case "reverse": index = range(n).reverse(); break;
default: index = range(n); break;
case "reverse": index = d3.range(n).reverse(); break;
default: index = d3.range(n); break;
}
/* offset */
@ -37,7 +37,7 @@ function stack_inside_out(data) {
j,
max = data.map(stack_max_index),
sums = data.map(function(d) { return d.reduce(stack_sum, 0); }),
index = range(n).sort(function(a, b) { max[a] - max[b]; }),
index = d3.range(n).sort(function(a, b) { max[a] - max[b]; }),
top = 0,
bottom = 0,
tops = [],

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

@ -3,7 +3,6 @@
<head>
<title>Streamgraph</title>
<script type="text/javascript" src="../../d3.min.js"></script>
<script type="text/javascript" src="range.js"></script>
<script type="text/javascript" src="max.js"></script>
<script type="text/javascript" src="stream.js"></script>
<script type="text/javascript" src="stack.js"></script>
@ -39,23 +38,24 @@ var vis = d3.select("body")
vis.selectAll("path.area")
.data(data0)
.enter.append("svg:path")
.enter("svg:path")
.attr("class", "area")
.attr("fill", function() { return color(Math.random()); })
.attr("d", area);
vis.apply();
window.addEventListener("keypress", transition, false);
window.addEventListener("keypress", d3.selectAll("path.area")
.data(function() {
var d = data1;
data1 = data0;
return data0 = d;
})
.transition()
.duration(2500)
.attr("d", d3.tween(area))
.apply, false);
function transition() {
d3.selectAll("path.area")
.data(function() {
var d = data1;
data1 = data0;
return data0 = d;
})
.transition()
.duration(2500)
.attr("d", area);
}
function area(layer) {
var p = [],

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

@ -10,7 +10,7 @@ function stream_layers(n, m, o) {
a[i] += x * Math.exp(-w * w);
}
}
return range(n).map(function() {
return d3.range(n).map(function() {
var a = [], i;
for (i = 0; i < m; i++) a[i] = o + o * Math.random();
for (i = 0; i < 5; i++) bump(a);
@ -20,8 +20,8 @@ function stream_layers(n, m, o) {
/* Another layer generator using gamma distributions. */
function stream_waves(n, m) {
return range(n).map(function(i) {
return range(m).map(function(j) {
return d3.range(n).map(function(i) {
return d3.range(m).map(function(j) {
var x = 20 * j / m - i / 3;
return 2 * x * Math.exp(-.5 * x);
}).map(stream_index);

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

@ -1,16 +1,27 @@
function d3_dispatcher(type) {
var dispatcher = {},
/** @param {...string} types */
d3.dispatch = function(types) {
var dispatch = {},
type;
for (var i = 0, n = arguments.length; i < n; i++) {
type = arguments[i];
dispatch[type] = d3_dispatch(type);
}
return dispatch;
};
function d3_dispatch(type) {
var dispatch = {},
listeners = [];
dispatcher.add = function(listener) {
dispatch.add = function(listener) {
for (var i = 0; i < listeners.length; i++) {
if (listeners[i].listener == listener) return dispatcher; // already registered
if (listeners[i].listener == listener) return dispatch; // already registered
}
listeners.push({listener: listener, on: true});
return dispatcher;
return dispatch;
};
dispatcher.remove = function(listener) {
dispatch.remove = function(listener) {
for (var i = 0; i < listeners.length; i++) {
var l = listeners[i];
if (l.listener == listener) {
@ -19,10 +30,10 @@ function d3_dispatcher(type) {
break;
}
}
return dispatcher;
return dispatch;
};
dispatcher.dispatch = function() {
dispatch.dispatch = function() {
var ls = listeners; // defensive reference
for (var i = 0, n = ls.length; i < n; i++) {
var l = ls[i];
@ -30,5 +41,5 @@ function d3_dispatcher(type) {
}
};
return dispatcher;
return dispatch;
};

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

@ -1,10 +0,0 @@
/** @param {...string} types */
function d3_dispatchers(types) {
var dispatchers = {},
type;
for (var i = 0, n = arguments.length; i < n; i++) {
type = arguments[i];
dispatchers[type] = d3_dispatcher(type);
}
return dispatchers;
}

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

@ -10,7 +10,7 @@ function d3_transition(groups) {
timeout = setTimeout(start, 1),
interval,
then = Date.now(),
event = d3_dispatchers("start", "end"),
event = d3.dispatch("start", "end"),
stage = [],
delay = [],
duration = [],
@ -84,9 +84,8 @@ function d3_transition(groups) {
return transition;
};
// TODO register custom easing functions?
transition.ease = function(value) {
ease = d3.ease(value);
ease = typeof value == "string" ? d3.ease(value) : value;
return transition;
};