From e5e24305e2a6d4d95841c7d93b01e91ef5424085 Mon Sep 17 00:00:00 2001 From: Mike Bostock Date: Wed, 22 Feb 2012 17:22:00 -0800 Subject: [PATCH] Add sourceEvent to custom events. The drag behavior, zoom behavior and brush component now set a "sourceEvent" property on their events, defined as the triggering mouse or touch event. The d3.mouse and d3.touches helpers likewise use the source event, letting you query the mouse or touch location when handling a custom event. --- d3.v2.js | 156 +++++++++++++++++++++++-------------------- d3.v2.min.js | 8 +-- src/behavior/drag.js | 56 ++++++---------- src/behavior/zoom.js | 23 +++---- src/core/dispatch.js | 2 +- src/core/event.js | 43 ++++++++++++ src/core/mouse.js | 2 +- src/core/touches.js | 3 +- src/layout/force.js | 1 - src/svg/brush.js | 26 ++------ 10 files changed, 170 insertions(+), 150 deletions(-) diff --git a/d3.v2.js b/d3.v2.js index b2cb44a6..349ec4bb 100644 --- a/d3.v2.js +++ b/d3.v2.js @@ -546,7 +546,7 @@ d3.ns = { } }; d3.dispatch = function() { - var dispatch = new d3_dispatch(), + var dispatch = new d3_dispatch, i = -1, n = arguments.length; while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch); @@ -862,6 +862,49 @@ function d3_eventCancel() { d3.event.stopPropagation(); d3.event.preventDefault(); } + +function d3_eventSource() { + var e = d3.event, s; + while (s = e.sourceEvent) e = s; + return e; +} + +// Like d3.dispatch, but for custom events abstracting native UI events. These +// events have a target component (such as a brush), a target element (such as +// the svg:g element containing the brush) and the standard arguments `d` (the +// target element's data) and `i` (the selection index of the target element). +function d3_eventDispatch(target) { + var dispatch = new d3_dispatch, + i = 0, + n = arguments.length; + + while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch); + + // Creates a dispatch context for the specified `thiz` (typically, the target + // DOM element that received the source event) and `argumentz` (typically, the + // data `d` and index `i` of the target element). The returned function can be + // used to dispatch an event to any registered listeners; the function takes a + // single argument as input, being the event to dispatch. The event must have + // a "type" attribute which corresponds to a type registered in the + // constructor. This context will automatically populate the "sourceEvent" and + // "target" attributes of the event, as well as setting the `d3.event` global + // for the duration of the notification. + dispatch.of = function(thiz, argumentz) { + return function(e1) { + try { + var e0 = + e1.sourceEvent = d3.event; + e1.target = target; + d3.event = e1; + dispatch[e1.type].apply(thiz, argumentz); + } finally { + d3.event = e0; + } + }; + }; + + return dispatch; +} d3.interpolate = function(a, b) { var i = d3.interpolators.length, f; while (--i >= 0 && !(f = d3.interpolators[i](a, b))); @@ -2461,7 +2504,7 @@ function d3_transformCombine(a, b, k) { var d3_transformDegrees = 180 / Math.PI; d3.mouse = function(container) { - return d3_mousePoint(container, d3.event); + return d3_mousePoint(container, d3_eventSource()); }; // https://bugs.webkit.org/show_bug.cgi?id=44083 @@ -2495,8 +2538,7 @@ function d3_mousePoint(container, e) { return [e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop]; }; d3.touches = function(container, touches) { - if (arguments.length < 2) touches = d3.event.touches; - + if (arguments.length < 2) touches = d3_eventSource().touches; return touches ? d3_array(touches).map(function(touch) { var point = d3_mousePoint(container, touch); point.identifier = touch.identifier; @@ -4185,7 +4227,7 @@ function d3_svg_axisSubdivide(scale, ticks, m) { return subticks; } d3.svg.brush = function() { - var event = d3.dispatch("brushstart", "brush", "brushend"), + var event = d3_eventDispatch(brush, "brushstart", "brush", "brushend"), x, // x-scale, optional y, // y-scale, optional extent = [[0, 0], [0, 0]]; // [x0, y0], [x1, y1] @@ -4293,24 +4335,12 @@ d3.svg.brush = function() { d3_svg_brushY = !/^(e|w)$/.test(resize) && y; // Notify listeners. - d3_svg_brushDispatch = dispatcher(this, arguments); - d3_svg_brushDispatch("brushstart"); + d3_svg_brushEvent = event.of(this, arguments); + d3_svg_brushEvent({type: "brushstart"}); d3_svg_brushMove(); d3_eventCancel(); } - function dispatcher(that, argumentz) { - return function(type) { - var e = d3.event; - try { - d3.event = {type: type, target: brush}; - event[type].apply(that, argumentz); - } finally { - d3.event = e; - } - }; - } - brush.x = function(z) { if (!arguments.length) return x; x = z; @@ -4385,7 +4415,7 @@ d3.svg.brush = function() { }; var d3_svg_brush, - d3_svg_brushDispatch, + d3_svg_brushEvent, d3_svg_brushTarget, d3_svg_brushX, d3_svg_brushY, @@ -4484,7 +4514,7 @@ function d3_svg_brushMove() { // Final redraw and notify listeners. if (moved) { d3_svg_brushRedraw(g, d3_svg_brushExtent); - d3_svg_brushDispatch("brush"); + d3_svg_brushEvent({type: "brush"}); } } } @@ -4537,9 +4567,9 @@ function d3_svg_brushUp() { d3_svg_brushMove(); d3.select(d3_svg_brushTarget).style("pointer-events", "all").selectAll(".resize").style("display", d3_svg_brush.empty() ? "none" : null); d3.select("body").style("cursor", null); - d3_svg_brushDispatch("brushend"); + d3_svg_brushEvent({type: "brushend"}); d3_svg_brush = - d3_svg_brushDispatch = + d3_svg_brushEvent = d3_svg_brushTarget = d3_svg_brushX = d3_svg_brushY = @@ -4566,7 +4596,7 @@ d3.behavior = {}; // TODO Track touch points by identifier. d3.behavior.drag = function() { - var event = d3.dispatch("drag", "dragstart", "dragend"), + var event = d3_eventDispatch(drag, "drag", "dragstart", "dragend"), origin = null; function drag() { @@ -4584,13 +4614,11 @@ d3.behavior.drag = function() { // snapshot the local context for subsequent dispatch function start() { - d3_behavior_dragEvent = event; d3_behavior_dragEventTarget = d3.event.target; - d3_behavior_dragTarget = this; - d3_behavior_dragArguments = arguments; + d3_behavior_dragEvent = event.of(d3_behavior_dragTarget = this, arguments); d3_behavior_dragOrigin = d3_behavior_dragPoint(); if (origin) { - d3_behavior_dragOffset = origin.apply(d3_behavior_dragTarget, d3_behavior_dragArguments); + d3_behavior_dragOffset = origin.apply(d3_behavior_dragTarget, arguments); d3_behavior_dragOffset = [d3_behavior_dragOffset.x - d3_behavior_dragOrigin[0], d3_behavior_dragOffset.y - d3_behavior_dragOrigin[1]]; } else { d3_behavior_dragOffset = [0, 0]; @@ -4600,7 +4628,7 @@ d3.behavior.drag = function() { function mousedown() { start.apply(this, arguments); - d3_behavior_dragDispatch("dragstart"); + d3_behavior_dragEvent({type: "dragstart"}); } drag.origin = function(x) { @@ -4615,40 +4643,14 @@ d3.behavior.drag = function() { var d3_behavior_dragEvent, d3_behavior_dragEventTarget, d3_behavior_dragTarget, - d3_behavior_dragArguments, d3_behavior_dragOffset, d3_behavior_dragOrigin, d3_behavior_dragMoved; -function d3_behavior_dragDispatch(type) { - var p = d3_behavior_dragPoint(), - o = d3.event, - e = d3.event = {type: type}; - - if (p) { - e.x = p[0] + d3_behavior_dragOffset[0]; - e.y = p[1] + d3_behavior_dragOffset[1]; - e.dx = p[0] - d3_behavior_dragOrigin[0]; - e.dy = p[1] - d3_behavior_dragOrigin[1]; - d3_behavior_dragMoved |= e.dx | e.dy; - d3_behavior_dragOrigin = p; - } - - try { - d3_behavior_dragEvent[type].apply(d3_behavior_dragTarget, d3_behavior_dragArguments); - } finally { - d3.event = o; - } - - o.stopPropagation(); -} - function d3_behavior_dragPoint() { var p = d3_behavior_dragTarget.parentNode, t = d3.event.changedTouches; - return p && (t - ? d3.touches(p, t)[0] - : d3.mouse(p)); + return t ? d3.touches(p, t)[0] : d3.mouse(p); } function d3_behavior_dragMove() { @@ -4658,13 +4660,26 @@ function d3_behavior_dragMove() { // O NOES! The drag element was removed from the DOM. if (!parent) return d3_behavior_dragUp(); - d3_behavior_dragDispatch("drag"); + var p = d3_behavior_dragPoint(), + dx = p[0] - d3_behavior_dragOrigin[0], + dy = p[1] - d3_behavior_dragOrigin[1]; + + d3_behavior_dragMoved |= dx | dy; + d3_behavior_dragOrigin = p; d3_eventCancel(); + + d3_behavior_dragEvent({ + type: "drag", + x: p[0] + d3_behavior_dragOffset[0], + y: p[1] + d3_behavior_dragOffset[1], + dx: dx, + dy: dy + }); } function d3_behavior_dragUp() { if (!d3_behavior_dragTarget) return; - d3_behavior_dragDispatch("dragend"); + d3_behavior_dragEvent({type: "dragend"}); // If the node was moved, prevent the mouseup from propagating. // Also prevent the subsequent click from propagating (e.g., for anchors). @@ -4676,7 +4691,6 @@ function d3_behavior_dragUp() { d3_behavior_dragEvent = d3_behavior_dragEventTarget = d3_behavior_dragTarget = - d3_behavior_dragArguments = d3_behavior_dragOffset = d3_behavior_dragOrigin = null; } @@ -4693,7 +4707,7 @@ d3.behavior.zoom = function() { scale = 1, scale0, // scale when we started touching scaleExtent = d3_behavior_zoomInfinity, - event = d3.dispatch("zoom"), + event = d3_eventDispatch(zoom, "zoom"), x0, x1, y0, @@ -4762,20 +4776,17 @@ d3.behavior.zoom = function() { translate[1] += p[1] - l[1]; } - function dispatch(argumentz) { - var o = d3.event; // events can by reentrant (e.g., focus); - d3.event = {scale: scale, translate: translate, target: zoom}; + function dispatch(event) { if (x1) x1.domain(x0.range().map(function(x) { return (x - translate[0]) / scale; }).map(x0.invert)); if (y1) y1.domain(y0.range().map(function(y) { return (y - translate[1]) / scale; }).map(y0.invert)); - try { event.zoom.apply(zoom, argumentz); } - finally { d3.event = o; } - o.preventDefault(); + d3.event.preventDefault(); + event({type: "zoom", scale: scale, translate: translate}); } function mousedown() { var moved = 0, that = this, - argumentz = arguments, + event_ = event.of(that, arguments), target = d3.event.target, w = d3.select(window).on("mousemove.zoom", mousemove).on("mouseup.zoom", mouseup), l = location(d3.mouse(that)); @@ -4786,7 +4797,7 @@ d3.behavior.zoom = function() { function mousemove() { moved = 1; translateTo(d3.mouse(that), l); - dispatch(argumentz); + dispatch(event_); } function mouseup() { @@ -4804,7 +4815,7 @@ d3.behavior.zoom = function() { if (!translate0) translate0 = location(d3.mouse(this)); scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * scale); translateTo(d3.mouse(this), translate0); - dispatch(arguments); + dispatch(event.of(this, arguments)); } function mousemove() { @@ -4815,7 +4826,7 @@ d3.behavior.zoom = function() { var p = d3.mouse(this), l = location(p); scaleTo(d3.event.shiftKey ? scale / 2 : scale * 2); translateTo(p, l); - dispatch(arguments); + dispatch(event.of(this, arguments)); } function touchstart() { @@ -4831,7 +4842,7 @@ d3.behavior.zoom = function() { var p = touches[0], l = location(touches[0]); scaleTo(scale * 2); translateTo(p, l); - dispatch(arguments); + dispatch(event.of(this, arguments)); } touchtime = now; } @@ -4847,7 +4858,7 @@ d3.behavior.zoom = function() { scaleTo(d3.event.scale * scale0); } translateTo(p0, l0); - dispatch(arguments); + dispatch(event.of(this, arguments)); } return d3.rebind(zoom, event, "on"); @@ -5386,7 +5397,6 @@ function d3_layout_forceDragOut(d) { } function d3_layout_forceDragEnd() { - d3_layout_forceDrag(); d3_layout_forceDragNode.fixed &= 1; d3_layout_forceDragForce = d3_layout_forceDragNode = null; } diff --git a/d3.v2.min.js b/d3.v2.min.js index 527b6d48..38b9a11f 100644 --- a/d3.v2.min.js +++ b/d3.v2.min.js @@ -1,4 +1,4 @@ -(function(){function e(a,b){try{for(var c in b)Object.defineProperty(a.prototype,c,{value:b[c],enumerable:!1})}catch(d){a.prototype=b}}function g(a){var b=-1,c=a.length,d=[];while(++b=0?a.substring(b):(b=a.length,""),d=[];while(b>0)d.push(a.substring(b-=3,b+3));return d.reverse().join(",")+c}function F(a,b){return{scale:Math.pow(10,(8-b)*3),symbol:a}}function L(a){return function(b){return b<=0?0:b>=1?1:a(b)}}function M(a){return function(b){return 1-a(1-b)}}function N(a){return function(b){return.5*(b<.5?a(2*b):2-a(2-2*b))}}function O(a){return a}function P(a){return function(b){return Math.pow(b,a)}}function Q(a){return 1-Math.cos(a*Math.PI/2)}function R(a){return Math.pow(2,10*(a-1))}function S(a){return 1-Math.sqrt(1-a*a)}function T(a,b){var c;return arguments.length<2&&(b=.45),arguments.length<1?(a=1,c=b/4):c=b/(2*Math.PI)*Math.asin(1/a),function(d){return 1+a*Math.pow(2,10*-d)*Math.sin((d-c)*2*Math.PI/b)}}function U(a){return a||(a=1.70158),function(b){return b*b*((a+1)*b-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+.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375}function W(){d3.event.stopPropagation(),d3.event.preventDefault()}function Y(a){return a=="transform"?d3.interpolateTransform:d3.interpolate}function Z(a,b){return b=b-(a=+a)?1/(b-a):0,function(c){return(c-a)*b}}function $(a,b){return b=b-(a=+a)?1/(b-a):0,function(c){return Math.max(0,Math.min(1,(c-a)*b))}}function _(a,b,c){return new ba(a,b,c)}function ba(a,b,c){this.r=a,this.g=b,this.b=c}function bb(a){return a<16?"0"+Math.max(0,a).toString(16):Math.min(255,a).toString(16)}function bc(a,b,c){var d=0,e=0,f=0,g,h,i;g=/([a-z]+)\((.*)\)/i.exec(a);if(g){h=g[2].split(",");switch(g[1]){case"hsl":return c(parseFloat(h[0]),parseFloat(h[1])/100,parseFloat(h[2])/100);case"rgb":return b(be(h[0]),be(h[1]),be(h[2]))}}return(i=bf.get(a))?b(i.r,i.g,i.b):(a!=null&&a.charAt(0)==="#"&&(a.length===4?(d=a.charAt(1),d+=d,e=a.charAt(2),e+=e,f=a.charAt(3),f+=f):a.length===7&&(d=a.substring(1,3),e=a.substring(3,5),f=a.substring(5,7)),d=parseInt(d,16),e=parseInt(e,16),f=parseInt(f,16)),b(d,e,f))}function bd(a,b,c){var d=Math.min(a/=255,b/=255,c/=255),e=Math.max(a,b,c),f=e-d,g,h,i=(e+d)/2;return f?(h=i<.5?f/(e+d):f/(2-e-d),a==e?g=(b-c)/f+(b360?a-=360:a<0&&(a+=360),a<60?d+(e-d)*a/60:a<180?e:a<240?d+(e-d)*(240-a)/60:d}function g(a){return Math.round(f(a)*255)}var d,e;return a%=360,a<0&&(a+=360),b=b<0?0:b>1?1:b,c=c<0?0:c>1?1:c,e=c<=.5?c*(1+b):c+b-c*b,d=2*c-e,_(g(a+120),g(a),g(a-120))}function bj(a){return j(a,bp),a}function bq(a){return function(){return bk(a,this)}}function br(a){return function(){return bl(a,this)}}function bt(a,b){function f(){if(b=this.classList)return b.add(a);var b=this.className,d=b.baseVal!=null,e=d?b.baseVal:b;c.lastIndex=0,c.test(e)||(e=t(e+" "+a),d?b.baseVal=e:this.className=e)}function g(){if(b=this.classList)return b.remove(a);var b=this.className,d=b.baseVal!=null,e=d?b.baseVal:b;e=t(e.replace(c," ")),d?b.baseVal=e:this.className=e}function h(){(b.apply(this,arguments)?f:g).call(this)}var c=new RegExp("(^|\\s+)"+d3.requote(a)+"(\\s+|$)","g");if(arguments.length<2){var d=this.node();if(e=d.classList)return e.contains(a);var e=d.className;return c.lastIndex=0,c.test(e.baseVal!=null?e.baseVal:e)}return this.each(typeof b=="function"?h:b?f:g)}function bu(a){return{__data__:a}}function bv(a){return function(){return bo(this,a)}}function bw(a){return arguments.length||(a=d3.ascending),function(b,c){return a(b&&b.__data__,c&&c.__data__)}}function by(a){return j(a,bz),a}function bA(a,b,c){j(a,bE);var d=new k,e=d3.dispatch("start","end"),f=bH;return a.id=b,a.time=c,a.tween=function(b,c){return arguments.length<2?d.get(b):(c==null?d.remove(b):d.set(b,c),a)},a.ease=function(b){return arguments.length?(f=typeof b=="function"?b:d3.ease.apply(d3,arguments),a):f},a.each=function(b,c){return arguments.length<2?bI.call(a,b):(e.on(b,c),a)},d3.timer(function(g){return a.each(function(h,i,j){function p(a){return o.active>b?r():(o.active=b,d.forEach(function(a,b){(tween=b.call(l,h,i))&&k.push(tween)}),e.start.call(l,h,i),q(a)||d3.timer(q,0,c),1)}function q(a){if(o.active!==b)return r();var c=(a-m)/n,d=f(c),g=k.length;while(g>0)k[--g].call(l,d);if(c>=1)return r(),bG=b,e.end.call(l,h,i),bG=0,1}function r(){return--o.count||delete l.__transition__,1}var k=[],l=this,m=a[j][i].delay,n=a[j][i].duration,o=l.__transition__||(l.__transition__={active:0,count:0});++o.count,m<=g?p(g):d3.timer(p,m,c)}),1},0,c),a}function bC(a,b,c){return c!=""&&bB}function bD(a,b){function d(a,d,e){var f=b.call(this,a,d);return f==null?e!=""&&bB:e!=f&&c(e,f)}function e(a,d,e){return e!=b&&c(e,b)}var c=Y(a);return typeof b=="function"?d:b==null?bC:(b+="",e)}function bI(a){for(var b=0,c=this.length;b=c.delay&&(c.flush=c.callback(a)),c=c.next;var d=bN()-b;d>24?(isFinite(d)&&(clearTimeout(bL),bL=setTimeout(bM,d)),bK=0):(bK=1,bO(bM))}function bN(){var a=null,b=bJ,c=Infinity;while(b)b.flush?b=a?a.next=b.next:bJ=b.next:(c=Math.min(c,b.then+b.delay),b=(a=b).next);return c}function bP(a){var b=[a.a,a.b],c=[a.c,a.d],d=bR(b),e=bQ(b,c),f=bR(bS(c,b,-e))||0;b[0]*c[1]2?cg:cf,i=d?$:Z;return e=g(a,b,i,c),f=g(b,a,i,d3.interpolate),h}function h(a){return e(a)}var e,f;return h.invert=function(a){return f(a)},h.domain=function(b){return arguments.length?(a=b.map(Number),g()):a},h.range=function(a){return arguments.length?(b=a,g()):b},h.rangeRound=function(a){return h.range(a).interpolate(d3.interpolateRound)},h.clamp=function(a){return arguments.length?(d=a,g()):d},h.interpolate=function(a){return arguments.length?(c=a,g()):c},h.ticks=function(b){return cd(a,b)},h.tickFormat=function(b){return ce(a,b)},h.nice=function(){return bZ(a,cb),g()},h.copy=function(){return b_(a,b,c,d)},g()}function ca(a,b){return d3.rebind(a,b,"range","rangeRound","interpolate","clamp")}function cb(a){return a=Math.pow(10,Math.round(Math.log(a)/Math.LN10)-1),{floor:function(b){return Math.floor(b/a)*a},ceil:function(b){return Math.ceil(b/a)*a}}}function cc(a,b){var c=bX(a),d=c[1]-c[0],e=Math.pow(10,Math.floor(Math.log(d/b)/Math.LN10)),f=b/d*e;return f<=.15?e*=10:f<=.35?e*=5:f<=.75&&(e*=2),c[0]=Math.ceil(c[0]/e)*e,c[1]=Math.floor(c[1]/e)*e+e*.5,c[2]=e,c}function cd(a,b){return d3.range.apply(d3,cc(a,b))}function ce(a,b){return d3.format(",."+Math.max(0,-Math.floor(Math.log(cc(a,b)[2])/Math.LN10+.01))+"f")}function cf(a,b,c,d){var e=c(a[0],a[1]),f=d(b[0],b[1]);return function(a){return f(e(a))}}function cg(a,b,c,d){var e=[],f=[],g=0,h=Math.min(a.length,b.length)-1;a[h]0;j--)e.push(c(f)*j)}else{for(;fi;g--);e=e.slice(f,g)}return e},d.tickFormat=function(a,e){arguments.length<2&&(e=ci);if(arguments.length<1)return e;var f=a/d.ticks().length,g=b===ck?(h=-1e-12,Math.floor):(h=1e-12,Math.ceil),h;return function(a){return a/c(g(b(a)+h))0?0:-a)/Math.LN10}function cl(a,b){function e(b){return a(c(b))}var c=cm(b),d=cm(1/b);return e.invert=function(b){return d(a.invert(b))},e.domain=function(b){return arguments.length?(a.domain(b.map(c)),e):a.domain().map(d)},e.ticks=function(a){return cd(e.domain(),a)},e.tickFormat=function(a){return ce(e.domain(),a)},e.nice=function(){return e.domain(bZ(e.domain(),cb))},e.exponent=function(a){if(!arguments.length)return b;var f=e.domain();return c=cm(b=a),d=cm(1/b),e.domain(f)},e.copy=function(){return cl(a.copy(),b)},ca(e,a)}function cm(a){return function(b){return b<0?-Math.pow(-b,a):Math.pow(b,a)}}function cn(a,b){function f(b){return d[((c.get(b)||c.set(b,a.push(b)))-1)%d.length]}function g(b,c){return d3.range(a.length).map(function(a){return b+c*a})}var c,d,e;return f.domain=function(d){if(!arguments.length)return a;a=[],c=new k;var e=-1,g=d.length,h;while(++e1){h=b[1],f=a[i],i++,d+="C"+(e[0]+g[0])+","+(e[1]+g[1])+","+(f[0]-h[0])+","+(f[1]-h[1])+","+f[0]+","+f[1];for(var j=2;j9&&(f=c*3/Math.sqrt(f),g[h]=f*d,g[h+1]=f*e));h=-1;while(++h<=i)f=(a[Math.min(i,h+1)][0]-a[Math.max(0,h-1)][0])/(6*(1+g[h]*g[h])),b.push([f||0,g[h]*f||0]);return b}function c_(a){return a.length<3?cH(a):a[0]+cN(a,c$(a))}function da(a){var b,c=-1,d=a.length,e,f;while(++c1){var d=bX(a.domain()),e,f=-1,g=b.length,h=(b[1]-b[0])/++c,i,j;while(++f0;)(j=+b[f]-i*h)>=d[0]&&e.push(j);for(--f,i=0;++irect,.s>rect").attr("width",b[1][0]-b[0][0])}function dI(a,b){a.select(".extent").attr("y",b[0][1]),a.selectAll(".extent,.e>rect,.w>rect").attr("height",b[1][1]-b[0][1])}function dJ(){d3.event.keyCode==32&&dx&&(dB||(dC=null,dD[0]-=dA[1][0],dD[1]-=dA[1][1],dB=2),W())}function dK(){d3.event.keyCode==32&&dB==2&&(dD[0]+=dA[1][0],dD[1]+=dA[1][1],dB=0,W())}function dL(){if(dD){var a=dF(),b=d3.select(dx),c=!1;dE&&(a[0]+=dE[0],a[1]+=dE[1]),dB||(d3.event.altKey?(dC||(dC=[(dA[0][0]+dA[1][0])/2,(dA[0][1]+dA[1][1])/2]),dD[0]=dA[+(a[0]d&&(c=b,d=e);return c}function ex(a){return a.reduce(ey,0)}function ey(a,b){return a+b[1]}function ez(a,b){return eA(a,Math.ceil(Math.log(b.length)/Math.LN2+1))}function eA(a,b){var c=-1,d=+a[0],e=(a[1]-d)/b,f=[];while(++c<=b)f[c]=e*c+d;return f}function eB(a){return[d3.min(a),d3.max(a)]}function eC(a,b){return d3.rebind(a,b,"sort","children","value"),a.links=eG,a.nodes=function(b){return eH=!0,(a.nodes=a)(b)},a}function eD(a){return a.children}function eE(a){return a.value}function eF(a,b){return b.value-a.value}function eG(a){return d3.merge(a.map(function(a){return(a.children||[]).map(function(b){return{source:a,target:b}})}))}function eI(a,b){return a.value-b.value}function eJ(a,b){var c=a._pack_next;a._pack_next=b,b._pack_prev=a,b._pack_next=c,c._pack_prev=b}function eK(a,b){a._pack_next=b,b._pack_prev=a}function eL(a,b){var c=b.x-a.x,d=b.y-a.y,e=a.r+b.r;return e*e-c*c-d*d>.001}function eM(a){function l(a){b=Math.min(a.x-a.r,b),c=Math.max(a.x+a.r,c),d=Math.min(a.y-a.r,d),e=Math.max(a.y+a.r,e)}var b=Infinity,c=-Infinity,d=Infinity,e=-Infinity,f=a.length,g,h,i,j,k;a.forEach(eN),g=a[0],g.x=-g.r,g.y=0,l(g);if(f>1){h=a[1],h.x=h.r,h.y=0,l(h);if(f>2){i=a[2],eR(g,h,i),l(i),eJ(g,i),g._pack_prev=i,eJ(i,h),h=g._pack_next;for(var m=3;m0&&(a=d)}return a}function e$(a,b){return a.x-b.x}function e_(a,b){return b.x-a.x}function fa(a,b){return a.depth-b.depth}function fb(a,b){function c(a,d){var e=a.children;if(e&&(i=e.length)){var f,g=null,h=-1,i;while(++h=0)f=d[e]._tree,f.prelim+=b,f.mod+=b,b+=f.shift+(c+=f.change)}function fd(a,b,c){a=a._tree,b=b._tree;var d=c/(b.number-a.number);a.change+=d,b.change-=d,b.shift+=c,b.prelim+=c,b.mod+=c}function fe(a,b,c){return a._tree.ancestor.parent==b.parent?a._tree.ancestor:c}function ff(a){return{x:a.x,y:a.y,dx:a.dx,dy:a.dy}}function fg(a,b){var c=a.x+b[3],d=a.y+b[0],e=a.dx-b[1]-b[3],f=a.dy-b[0]-b[2];return e<0&&(c+=e/2,e=0),f<0&&(d+=f/2,f=0),{x:c,y:d,dx:e,dy:f}}function fh(a){return a.map(fi).join(",")}function fi(a){return/[",\n]/.test(a)?'"'+a.replace(/\"/g,'""')+'"':a}function fk(a,b){return function(c){return c&&a.hasOwnProperty(c.type)?a[c.type](c):b}}function fl(a){return"m0,"+a+"a"+a+","+a+" 0 1,1 0,"+ -2*a+"a"+a+","+a+" 0 1,1 0,"+2*a+"z"}function fm(a,b){fn.hasOwnProperty(a.type)&&fn[a.type](a,b)}function fo(a,b){fm(a.geometry,b)}function fp(a,b){for(var c=a.features,d=0,e=c.length;d0}function fD(a,b,c){return(c[0]-b[0])*(a[1]-b[1])<(c[1]-b[1])*(a[0]-b[0])}function fE(a,b,c,d){var e=a[0],f=b[0],g=c[0],h=d[0],i=a[1],j=b[1],k=c[1],l=d[1],m=e-g,n=f-e,o=h-g,p=i-k,q=j-i,r=l-k,s=(o*p-r*m)/(r*n-o*q);return[e+s*n,i+s*q]}function fG(a,b){var c={list:a.map(function(a,b){return{index:b,x:a[0],y:a[1]}}).sort(function(a,b){return a.yb.y?1:a.xb.x?1:0}),bottomSite:null},d={list:[],leftEnd:null,rightEnd:null,init:function(){d.leftEnd=d.createHalfEdge(null,"l"),d.rightEnd=d.createHalfEdge(null,"l"),d.leftEnd.r=d.rightEnd,d.rightEnd.l=d.leftEnd,d.list.unshift(d.leftEnd,d.rightEnd)},createHalfEdge:function(a,b){return{edge:a,side:b,vertex:null,l:null,r:null}},insert:function(a,b){b.l=a,b.r=a.r,a.r.l=b,a.r=b},leftBound:function(a){var b=d.leftEnd;do b=b.r;while(b!=d.rightEnd&&e.rightOf(b,a));return b=b.l,b},del:function(a){a.l.r=a.r,a.r.l=a.l,a.edge=null},right:function(a){return a.r},left:function(a){return a.l},leftRegion:function(a){return a.edge==null?c.bottomSite:a.edge.region[a.side]},rightRegion:function(a){return a.edge==null?c.bottomSite:a.edge.region[fF[a.side]]}},e={bisect:function(a,b){var c={region:{l:a,r:b},ep:{l:null,r:null}},d=b.x-a.x,e=b.y-a.y,f=d>0?d:-d,g=e>0?e:-e;return c.c=a.x*d+a.y*e+(d*d+e*e)*.5,f>g?(c.a=1,c.b=e/d,c.c/=d):(c.b=1,c.a=d/e,c.c/=e),c},intersect:function(a,b){var c=a.edge,d=b.edge;if(!c||!d||c.region.r==d.region.r)return null;var e=c.a*d.b-c.b*d.a;if(Math.abs(e)<1e-10)return null;var f=(c.c*d.b-d.c*c.b)/e,g=(d.c*c.a-c.c*d.a)/e,h=c.region.r,i=d.region.r,j,k;h.y=k.region.r.x;return l&&j.side==="l"||!l&&j.side==="r"?null:{x:f,y:g}},rightOf:function(a,b){var c=a.edge,d=c.region.r,e=b.x>d.x;if(e&&a.side==="l")return 1;if(!e&&a.side==="r")return 0;if(c.a===1){var f=b.y-d.y,g=b.x-d.x,h=0,i=0;!e&&c.b<0||e&&c.b>=0?i=h=f>=c.b*g:(i=b.x+b.y*c.b>c.c,c.b<0&&(i=!i),i||(h=1));if(!h){var j=d.x-c.region.l.x;i=c.b*(g*g-f*f)m*m+n*n}return a.side==="l"?i:!i},endPoint:function(a,c,d){a.ep[c]=d;if(!a.ep[fF[c]])return;b(a)},distance:function(a,b){var c=a.x-b.x,d=a.y-b.y;return Math.sqrt(c*c+d*d)}},f={list:[],insert:function(a,b,c){a.vertex=b,a.ystar=b.y+c;for(var d=0,e=f.list,g=e.length;dh.ystar||a.ystar==h.ystar&&b.x>h.vertex.x)continue;break}e.splice(d,0,a)},del:function(a){for(var b=0,c=f.list,d=c.length;bo.y&&(p=n,n=o,o=p,t="r"),s=e.bisect(n,o),m=d.createHalfEdge(s,t),d.insert(k,m),e.endPoint(s,fF[t],r),q=e.intersect(k,m),q&&(f.del(k),f.insert(k,q,e.distance(q,n))),q=e.intersect(m,l),q&&f.insert(m,q,e.distance(q,n));else break}for(i=d.right(d.leftEnd);i!=d.rightEnd;i=d.right(i))b(i.edge)}function fH(){return{leaf:!0,nodes:[],point:null}}function fI(a,b,c,d,e,f){if(!a(b,c,d,e,f)){var g=(c+e)*.5,h=(d+f)*.5,i=b.nodes;i[0]&&fI(a,i[0],c,d,g,h),i[1]&&fI(a,i[1],g,d,e,h),i[2]&&fI(a,i[2],c,h,g,f),i[3]&&fI(a,i[3],g,h,e,f)}}function fJ(a){return{x:a[0],y:a[1]}}function fL(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function fM(a,b,c,d){var e,f,g=0,h=b.length,i=c.length;while(g=i)return-1;e=b.charCodeAt(g++);if(e==37){f=fS[b.charAt(g++)];if(!f||(d=f(a,c,d))<0)return-1}else if(e!=c.charCodeAt(d++))return-1}return d}function fT(a,b,c){return fV.test(b.substring(c,c+=3))?c:-1}function fU(a,b,c){fW.lastIndex=0;var d=fW.exec(b.substring(c,c+10));return d?c+=d[0].length:-1}function fX(a,b,c){var d=fY.get(b.substring(c,c+=3).toLowerCase());return d==null?-1:(a.setMonth(d),c)}function fZ(a,b,c){f$.lastIndex=0;var d=f$.exec(b.substring(c,c+12));return d?(a.setMonth(f_.get(d[0].toLowerCase())),c+=d[0].length):-1}function gb(a,b,c){return fM(a,fR.c.toString(),b,c)}function gc(a,b,c){return fM(a,fR.x.toString(),b,c)}function gd(a,b,c){return fM(a,fR.X.toString(),b,c)}function ge(a,b,c){go.lastIndex=0;var d=go.exec(b.substring(c,c+4));return d?(a.setFullYear(d[0]),c+=d[0].length):-1}function gf(a,b,c){go.lastIndex=0;var d=go.exec(b.substring(c,c+2));return d?(a.setFullYear(gg()+ +d[0]),c+=d[0].length):-1}function gg(){return~~((new Date).getFullYear()/1e3)*1e3}function gh(a,b,c){go.lastIndex=0;var d=go.exec(b.substring(c,c+2));return d?(a.setMonth(d[0]-1),c+=d[0].length):-1}function gi(a,b,c){go.lastIndex=0;var d=go.exec(b.substring(c,c+2));return d?(a.setDate(+d[0]),c+=d[0].length -):-1}function gj(a,b,c){go.lastIndex=0;var d=go.exec(b.substring(c,c+2));return d?(a.setHours(+d[0]),c+=d[0].length):-1}function gk(a,b,c){return a.hour12=!0,gj(a,b,c)}function gl(a,b,c){go.lastIndex=0;var d=go.exec(b.substring(c,c+2));return d?(a.setMinutes(+d[0]),c+=d[0].length):-1}function gm(a,b,c){go.lastIndex=0;var d=go.exec(b.substring(c,c+2));return d?(a.setSeconds(+d[0]),c+=d[0].length):-1}function gn(a,b,c){go.lastIndex=0;var d=go.exec(b.substring(c,c+3));return d?(a.setMilliseconds(+d[0]),c+=d[0].length):-1}function gp(a,b,c){var d=gq.get(b.substring(c,c+=2).toLowerCase());return d==null?-1:(a.hour12pm=d,c)}function gr(a){var b=a.getTimezoneOffset(),c=b>0?"-":"+",d=~~(Math.abs(b)/60),e=Math.abs(b)%60;return c+fN(d)+fN(e)}function gt(a){return a.toISOString()}function gu(a,b,c){function d(b){var c=a(b),d=f(c,1);return b-c1)while(gb?1:a>=b?0:NaN},d3.descending=function(a,b){return ba?1:b>=a?0:NaN},d3.mean=function(a,b){var c=a.length,d,e=0,f=-1,g=0;if(arguments.length===1)while(++f1&&(a=a.map(b)),a=a.filter(p),a.length?d3.quantile(a.sort(d3.ascending),.5):undefined},d3.min=function(a,b){var c=-1,d=a.length,e,f;if(arguments.length===1){while(++cf&&(e=f)}else{while(++cf&&(e=f)}return e},d3.max=function(a,b){var c=-1,d=a.length,e,f;if(arguments.length===1){while(++ce&&(e=f)}else{while(++ce&&(e=f)}return e},d3.extent=function(a,b){var c=-1,d=a.length,e,f,g;if(arguments.length===1){while(++cf&&(e=f),gf&&(e=f),g1);return a+b*c*Math.sqrt(-2*Math.log(e)/e)}}},d3.sum=function(a,b){var c=0,d=a.length,e,f=-1;if(arguments.length===1)while(++f>1;a.call(b,b[f],f)>1;c0&&(e=f);return e},d3.last=function(a,b){var c=0,d=a.length,e=a[0],f;arguments.length===1&&(b=d3.ascending);while(++c=b.length)return e?e.call(a,c):d?c.sort(d):c;var h=-1,i=c.length,j=b[g++],l,m,n=new k,o,p={};while(++h=b.length)return a;var e=[],f=c[d++],h;for(h in a)e.push({key:h,values:g(a[h],d)});return f&&e.sort(function(a,b){return f(a.key,b.key)}),e}var a={},b=[],c=[],d,e;return a.map=function(a){return f(a,0)},a.entries=function(a){return g(f(a,0),0)},a.key=function(c){return b.push(c),a},a.sortKeys=function(d){return c[b.length-1]=d,a},a.sortValues=function(b){return d=b,a},a.rollup=function(b){return e=b,a},a},d3.keys=function(a){var b=[];for(var c in a)b.push(c);return b},d3.values=function(a){var b=[];for(var c in a)b.push(a[c]);return b},d3.entries=function(a){var b=[];for(var c in a)b.push({key:c,value:a[c]});return b},d3.permute=function(a,b){var c=[],d=-1,e=b.length;while(++db)d.push(g/e);else while((g=a+c*++f)=0&&(c=a.substring(0,b),a=a.substring(b+1)),w.hasOwnProperty(c)?{space:w[c],local:a}:a}},d3.dispatch=function(){var a=new x,b=-1,c=arguments.length;while(++b0&&(d=a.substring(c+1),a=a.substring(0,c)),arguments.length<2?this[a].on(d):this[a].on(d,b)},d3.format=function(a){var b=z.exec(a),c=b[1]||" ",d=b[3]||"",e=b[5],f=+b[6],g=b[7],h=b[8],i=b[9],j=1,k="",l=!1;h&&(h=+h.substring(1)),e&&(c="0",g&&(f-=Math.floor((f-1)/4)));switch(i){case"n":g=!0,i="g";break;case"%":j=100,k="%",i="f";break;case"p":j=100,k="%",i="r";break;case"d":l=!0,h=0;break;case"s":j=-1,i="r"}return i=="r"&&!h&&(i="g"),i=A.get(i)||C,function(a){if(l&&a%1)return"";var b=a<0&&(a=-a)?"−":d;if(j<0){var m=d3.formatPrefix(a,h);a*=m.scale,k=m.symbol}else a*=j;a=i(a,h);if(e){var n=a.length+b.length;n=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/,A=d3.map({g:function(a,b){return a.toPrecision(b)},e:function(a,b){return a.toExponential(b)},f:function(a,b){return a.toFixed(b)},r:function(a,b){return d3.round(a,b=B(a,b)).toFixed(Math.max(0,Math.min(20,b)))}}),E=["y","z","a","f","p","n","μ","m","","k","M","G","T","P","E","Z","Y"].map(F);d3.formatPrefix=function(a,b){var c=0;return a&&(a<0&&(a*=-1),b&&(a=d3.round(a,B(a,b))),c=1+Math.floor(1e-12+Math.log(a)/Math.LN10),c=Math.max(-24,Math.min(24,Math.floor((c<=0?c+1:c-1)/3)*3))),E[8+c/3]};var G=P(2),H=P(3),I=function(){return O},J=d3.map({linear:I,poly:P,quad:function(){return G},cubic:function(){return H},sin:function(){return Q},exp:function(){return R},circle:function(){return S},elastic:T,back:U,bounce:function(){return V}}),K=d3.map({"in":O,out:M,"in-out":N,"out-in":function(a){return N(M(a))}});d3.ease=function(a){var b=a.indexOf("-"),c=b>=0?a.substring(0,b):a,d=b>=0?a.substring(b+1):"in";return c=J.get(c)||I,d=K.get(d)||O,L(d(c.apply(null,Array.prototype.slice.call(arguments,1))))},d3.event=null,d3.interpolate=function(a,b){var c=d3.interpolators.length,d;while(--c>=0&&!(d=d3.interpolators[c](a,b)));return d},d3.interpolateNumber=function(a,b){return b-=a,function(c){return a+b*c}},d3.interpolateRound=function(a,b){return b-=a,function(c){return Math.round(a+b*c)}},d3.interpolateString=function(a,b){var c,d,e,f=0,g=0,h=[],i=[],j,k;X.lastIndex=0;for(d=0;c=X.exec(b);++d)c.index&&h.push(b.substring(f,g=c.index)),i.push({i:h.length,x:c[0]}),h.push(null),f=X.lastIndex;f1){while(++e=0;)if(f=c[d])e&&e!==f.nextSibling&&e.parentNode.insertBefore(f,e),e=f;return this},bp.sort=function(a){a=bw.apply(this,arguments);for(var b=-1,c=this.length;++b0&&(a=a.substring(0,e)),arguments.length<2?(e=this.node()[d])&&e._:this.each(function(e,f){function h(a){var c=d3.event;d3.event=a;try{b.call(g,g.__data__,f)}finally{d3.event=c}}var g=this;g[d]&&g.removeEventListener(a,g[d],c),b&&g.addEventListener(a,g[d]=h,c),h._=b})},bp.each=function(a){for(var b=-1,c=this.length;++b=cw?e?"M0,"+f+"A"+f+","+f+" 0 1,1 0,"+ -f+"A"+f+","+f+" 0 1,1 0,"+f+"M0,"+e+"A"+e+","+e+" 0 1,0 0,"+ -e+"A"+e+","+e+" 0 1,0 0,"+e+"Z":"M0,"+f+"A"+f+","+f+" 0 1,1 0,"+ -f+"A"+f+","+f+" 0 1,1 0,"+f+"Z":e?"M"+f*k+","+f*l+"A"+f+","+f+" 0 "+j+",1 "+f*m+","+f*n+"L"+e*m+","+e*n+"A"+e+","+e+" 0 "+j+",0 "+e*k+","+e*l+"Z":"M"+f*k+","+f*l+"A"+f+","+f+" 0 "+j+",1 "+f*m+","+f*n+"L0,0"+"Z"}var a=cx,b=cy,c=cz,d=cA;return e.innerRadius=function(b){return arguments.length?(a=d3.functor(b),e):a},e.outerRadius=function(a){return arguments.length?(b=d3.functor(a),e):b},e.startAngle=function(a){return arguments.length?(c=d3.functor(a),e):c},e.endAngle=function(a){return arguments.length?(d=d3.functor(a),e):d},e.centroid=function(){var e=(a.apply(this,arguments)+b.apply(this,arguments))/2,f=(c.apply(this,arguments)+d.apply(this,arguments))/2+cv;return[Math.cos(f)*e,Math.sin(f)*e]},e};var cv=-Math.PI/2,cw=2*Math.PI-1e-6;d3.svg.line=function(){return cB(Object)};var cF="linear",cG=d3.map({linear:cH,"step-before":cI,"step-after":cJ,basis:cP,"basis-open":cQ,"basis-closed":cR,bundle:cS,cardinal:cM,"cardinal-open":cK,"cardinal-closed":cL,monotone:c_}),cU=[0,2/3,1/3,0],cV=[0,1/3,2/3,0],cW=[0,1/6,2/3,1/6];d3.svg.line.radial=function(){var a=cB(da);return a.radius=a.x,delete a.x,a.angle=a.y,delete a.y,a},cI.reverse=cJ,cJ.reverse=cI,d3.svg.area=function(){return db(Object)},d3.svg.area.radial=function(){var a=db(da);return a.radius=a.x,delete a.x,a.innerRadius=a.x0,delete a.x0,a.outerRadius=a.x1,delete a.x1,a.angle=a.y,delete a.y,a.startAngle=a.y0,delete a.y0,a.endAngle=a.y1,delete a.y1,a},d3.svg.chord=function(){function f(c,d){var e=g(this,a,c,d),f=g(this,b,c,d);return"M"+e.p0+i(e.r,e.p1,e.a1-e.a0)+(h(e,f)?j(e.r,e.p1,e.r,e.p0):j(e.r,e.p1,f.r,f.p0)+i(f.r,f.p1,f. -a1-f.a0)+j(f.r,f.p1,e.r,e.p0))+"Z"}function g(a,b,f,g){var h=b.call(a,f,g),i=c.call(a,h,g),j=d.call(a,h,g)+cv,k=e.call(a,h,g)+cv;return{r:i,a0:j,a1:k,p0:[i*Math.cos(j),i*Math.sin(j)],p1:[i*Math.cos(k),i*Math.sin(k)]}}function h(a,b){return a.a0==b.a0&&a.a1==b.a1}function i(a,b,c){return"A"+a+","+a+" 0 "+ +(c>Math.PI)+",1 "+b}function j(a,b,c,d){return"Q 0,0 "+d}var a=de,b=df,c=dg,d=cz,e=cA;return f.radius=function(a){return arguments.length?(c=d3.functor(a),f):c},f.source=function(b){return arguments.length?(a=d3.functor(b),f):a},f.target=function(a){return arguments.length?(b=d3.functor(a),f):b},f.startAngle=function(a){return arguments.length?(d=d3.functor(a),f):d},f.endAngle=function(a){return arguments.length?(e=d3.functor(a),f):e},f},d3.svg.diagonal=function(){function d(d,e){var f=a.call(this,d,e),g=b.call(this,d,e),h=(f.y+g.y)/2,i=[f,{x:f.x,y:h},{x:g.x,y:h},g];return i=i.map(c),"M"+i[0]+"C"+i[1]+" "+i[2]+" "+i[3]}var a=de,b=df,c=dj;return d.source=function(b){return arguments.length?(a=d3.functor(b),d):a},d.target=function(a){return arguments.length?(b=d3.functor(a),d):b},d.projection=function(a){return arguments.length?(c=a,d):c},d},d3.svg.diagonal.radial=function(){var a=d3.svg.diagonal(),b=dj,c=a.projection;return a.projection=function(a){return arguments.length?c(dk(b=a)):b},a},d3.svg.mouse=d3.mouse,d3.svg.touches=d3.touches,d3.svg.symbol=function(){function c(c,d){return(dp.get(a.call(this,c,d))||dn)(b.call(this,c,d))}var a=dm,b=dl;return c.type=function(b){return arguments.length?(a=d3.functor(b),c):a},c.size=function(a){return arguments.length?(b=d3.functor(a),c):b},c};var dp=d3.map({circle:dn,cross:function(a){var b=Math.sqrt(a/5)/2;return"M"+ -3*b+","+ -b+"H"+ -b+"V"+ -3*b+"H"+b+"V"+ -b+"H"+3*b+"V"+b+"H"+b+"V"+3*b+"H"+ -b+"V"+b+"H"+ -3*b+"Z"},diamond:function(a){var b=Math.sqrt(a/(2*dr)),c=b*dr;return"M0,"+ -b+"L"+c+",0"+" 0,"+b+" "+ -c+",0"+"Z"},square:function(a){var b=Math.sqrt(a)/2;return"M"+ -b+","+ -b+"L"+b+","+ -b+" "+b+","+b+" "+ -b+","+b+"Z"},"triangle-down":function(a){var b=Math.sqrt(a/dq),c=b*dq/2;return"M0,"+c+"L"+b+","+ -c+" "+ -b+","+ -c+"Z"},"triangle-up":function(a){var b=Math.sqrt(a/dq),c=b*dq/2;return"M0,"+ -c+"L"+b+","+c+" "+ -b+","+c+"Z"}});d3.svg.symbolTypes=dp.keys();var dq=Math.sqrt(3),dr=Math.tan(30*Math.PI/180);d3.svg.axis=function(){function k(k){k.each(function(l,m,n){var o=d3.select(this),p=k.delay?function(a){var b=bG;try{return bG=k.id,a.transition().delay(k[n][m].delay).duration(k[n][m].duration).ease(k.ease())}finally{bG=b}}:Object,q=h==null?a.ticks?a.ticks.apply(a,g):a.domain():h,r=i==null?a.tickFormat?a.tickFormat.apply(a,g):String:i,s=du(a,q,j),t=o.selectAll(".minor").data(s,String),u=t.enter().insert("line","g").attr("class","tick minor").style("opacity",1e-6),v=p(t.exit()).style("opacity",1e-6).remove(),w=p(t).style("opacity",1),x=o.selectAll("g").data(q,String),y=x.enter().insert("g","path").style("opacity",1e-6),z=p(x.exit()).style("opacity",1e-6).remove(),A=p(x).style("opacity",1),B,C=bY(a),D=o.selectAll(".domain").data([0]),E=D.enter().append("path").attr("class","domain"),F=p(D),G=a.copy(),H=this.__chart__||G;this.__chart__=G,y.append("line").attr("class","tick"),y.append("text"),A.select("text").text(r);switch(b){case"bottom":B=ds,u.attr("y2",d),w.attr("x2",0).attr("y2",d),y.select("line").attr("y2",c),y.select("text").attr("y",Math.max(c,0)+f),A.select("line").attr("x2",0).attr("y2",c),A.select("text").attr("x",0).attr("y",Math.max(c,0)+f).attr("dy",".71em").attr("text-anchor","middle"),F.attr("d","M"+C[0]+","+e+"V0H"+C[1]+"V"+e);break;case"top":B=ds,u.attr("y2",-d),w.attr("x2",0).attr("y2",-d),y.select("line").attr("y2",-c),y.select("text").attr("y",-(Math.max(c,0)+f)),A.select("line").attr("x2",0).attr("y2",-c),A.select("text").attr("x",0).attr("y",-(Math.max(c,0)+f)).attr("dy","0em").attr("text-anchor","middle"),F.attr("d","M"+C[0]+","+ -e+"V0H"+C[1]+"V"+ -e);break;case"left":B=dt,u.attr("x2",-d),w.attr("x2",-d).attr("y2",0),y.select("line").attr("x2",-c),y.select("text").attr("x",-(Math.max(c,0)+f)),A.select("line").attr("x2",-c).attr("y2",0),A.select("text").attr("x",-(Math.max(c,0)+f)).attr("y",0).attr("dy",".32em").attr("text-anchor","end"),F.attr("d","M"+ -e+","+C[0]+"H0V"+C[1]+"H"+ -e);break;case"right":B=dt,u.attr("x2",d),w.attr("x2",d).attr("y2",0),y.select("line").attr("x2",c),y.select("text").attr("x",Math.max(c,0)+f),A.select("line").attr("x2",c).attr("y2",0),A.select("text").attr("x",Math.max(c,0)+f).attr("y",0).attr("dy",".32em").attr("text-anchor","start"),F.attr("d","M"+e+","+C[0]+"H0V"+C[1]+"H"+e)}if(a.ticks)y.call(B,H),A.call(B,G),z.call(B,G),u.call(B,H),w.call(B,G),v.call(B,G);else{var I=G.rangeBand()/2,J=function(a){return G(a)+I};y.call(B,J),A.call(B,J)}})}var a=d3.scale.linear(),b="bottom",c=6,d=6,e=6,f=3,g=[10],h=null,i,j=0;return k.scale=function(b){return arguments.length?(a=b,k):a},k.orient=function(a){return arguments.length?(b=a,k):b},k.ticks=function(){return arguments.length?(g=arguments,k):g},k.tickValues=function(a){return arguments.length?(h=a,k):h},k.tickFormat=function(a){return arguments.length?(i=a,k):i},k.tickSize=function(a,b,f){if(!arguments.length)return c;var g=arguments.length-1;return c=+a,d=g>1?+b:c,e=g>0?+arguments[g]:c,k},k.tickPadding=function(a){return arguments.length?(f=+a,k):f},k.tickSubdivide=function(a){return arguments.length?(j=+a,k):j},k},d3.svg.brush=function(){function e(a){var g=b&&c?["n","e","s","w","nw","ne","se","sw"]:b?["e","w"]:c?["n","s"]:[];a.each(function(){var a=d3.select(this),h=a.selectAll(".background").data([0]),i=a.selectAll(".extent").data([0]),j=a.selectAll(".resize").data(g,String),k;a.style("pointer-events","all").on("mousedown.brush",f).on("touchstart.brush",f),h.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),i.enter().append("rect").attr("class","extent").style("cursor","move"),j.enter().append("g").attr("class",function(a){return"resize "+a}).style("cursor",function(a){return dO[a]}).append("rect").attr("x",function(a){return/[ew]$/.test(a)?-3:null}).attr("y",function(a){return/^[ns]/.test(a)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),j.style("display",e.empty()?"none":null),j.exit().remove(),b&&(k=bY(b),h.attr("x",k[0]).attr("width",k[1]-k[0]),dH(a,d)),c&&(k=bY(c),h.attr("y",k[0]).attr("height",k[1]-k[0]),dI(a,d)),dG(a,d)})}function f(){var a=d3.select(d3.event.target),f;dv=e,dx=this,dA=d,dD=dF();if(dB=a.classed("extent"))dD[0]=d[0][0]-dD[0],dD[1]=d[0][1]-dD[1];else if(f=a[0][0].__data__){var h=+/w$/.test(f),i=+/^n/.test(f);dE=[d[1-h][0]-dD[0],d[1-i][1]-dD[1]],dD[0]=d[h][0],dD[1]=d[i][1]}else d3.event.altKey&&(dC=dD.slice());d3.select(this).style("pointer-events","none").selectAll(".resize").style("display",null),d3.select("body").style("cursor",a.style("cursor")),dy=!/^(n|s)$/.test(f)&&b,dz=!/^(e|w)$/.test(f)&&c,dw=g(this,arguments),dw("brushstart"),dL(),W()}function g(b,c){return function(d){var f=d3.event;try{d3.event={type:d,target:e},a[d].apply(b,c)}finally{d3.event=f}}}var a=d3.dispatch("brushstart","brush","brushend"),b,c,d=[[0,0],[0,0]];return e.x=function(a){return arguments.length?(b=a,e):b},e.y=function(a){return arguments.length?(c=a,e):c},e.extent=function(a){var f,g,h,i,j;return arguments.length?(b&&(f=a[0],g=a[1],c&&(f=f[0],g=g[0]),b.invert&&(f=b(f),g=b(g)),ge&&(e=h),d.push(h)}for(g=0;g=i[0]&&o<=i[1]&&(k=g[d3.bisect(j,o,1,m)-1],k.y+=n,k.push(e[f]));return g}var a=!0,b=Number,c=eB,d=ez;return e.value=function(a){return arguments.length?(b=a,e):b},e.range=function(a){return arguments.length?(c=d3.functor(a),e):c},e.bins=function(a){return arguments.length?(d=typeof a=="number"?function(b){return eA(b,a)}:d3.functor(a),e):d},e.frequency=function(b){return arguments.length?(a=!!b,e):a},e},d3.layout.hierarchy=function(){function e(f,h,i){var j=b.call(g,f,h),k=eH?f:{data:f};k.depth=h,i.push(k);if(j&&(m=j.length)){var l=-1,m,n=k.children=[],o=0,p=h+1;while(++l0&&(fd(fe(g,a,d),a,m),i+=m,j+=m),k+=g._tree.mod,i+=e._tree.mod,l+=h._tree.mod,j+=f._tree.mod;g&&!eY(f)&&(f._tree.thread=g,f._tree.mod+=k-j),e&&!eX(h)&&(h._tree.thread=e,h._tree.mod+=i-l,d=a)}return d}var f=a.call(this,d,e),g=f[0];fb(g,function(a,b){a._tree={ancestor:a,prelim:0,mod:0,change:0,shift:0,number:b?b._tree.number+1:0}}),h(g),i(g,-g._tree.prelim);var k=eZ(g,e_),l=eZ(g,e$),m=eZ(g,fa),n=k.x-b(k,l)/2,o=l.x+b(l,k)/2,p=m.depth||1;return fb(g,function(a){a.x=(a.x-n)/(o-n)*c[0],a.y=a.depth/p*c[1],delete a._tree}),f}var a=d3.layout.hierarchy().sort(null).value(null),b=eW,c=[1,1];return d.separation=function(a){return arguments.length?(b=a,d):b},d.size=function(a){return arguments.length?(c=a,d):c},eC(d,a)},d3.layout.treemap=function(){function i(a,b){var c=-1,d=a.length,e,f;while(++c0)d.push(g=f[o-1]),d.area+=g.area,(k=l(d,n))<=h?(f.pop(),h=k):(d.area-=d.pop().area,m(d,n,c,!1),n=Math.min(c.dx,c.dy),d.length=d.area=0,h=Infinity);d.length&&(m(d,n,c,!0),d.length=d.area=0),b.forEach(j)}}function k(a){var b=a.children;if(b&&b.length){var c=e(a),d=b.slice(),f,g=[];i(d,c.dx*c.dy/a.value),g.area=0;while(f=d.pop())g.push(f),g.area+=f.area,f.z!=null&&(m(g,f.z?c.dx:c.dy,c,!d.length),g.length=g.area=0);b.forEach(k)}}function l(a,b){var c=a.area,d,e=0,f=Infinity,g=-1,i=a.length;while(++ge&&(e=d)}return c*=c,b*=b,c?Math.max(b*e*h/c,c/(b*f*h)):Infinity}function m(a,c,d,e){var f=-1,g=a.length,h=d.x,i=d.y,j=c?b(a.area/c):0,k;if(c==d.dx){if(e||j>d.dy)j=d.dy;while(++fd.dx)j=d.dx;while(++f=a.length)return d;if(i)return i=!1,c;var b=f.lastIndex;if(a.charCodeAt(b)===34){var e=b;while(e++50?b:f<-140?c:g<21?d:a)(e)}var a=d3.geo.albers(),b=d3.geo.albers().origin([-160,60]).parallels([55,65]),c=d3.geo.albers().origin([-160,20]).parallels([8,18]),d=d3.geo.albers().origin([-60,10]).parallels([8,18]);return e.scale=function(f){return arguments.length?(a.scale(f),b.scale(f*.6),c.scale(f),d.scale(f*1.5),e.translate(a.translate())):a.scale()},e.translate=function(f){if(!arguments.length)return a.translate();var g=a.scale()/1e3,h=f[0],i=f[1];return a.translate(f),b.translate([h-400*g,i+170*g]),c.translate([h-190*g,i+200*g]),d.translate([h+580*g,i+430*g]),e},e.scale(a.scale())},d3.geo.bonne=function(){function g(g){var h=g[0]*fj-c,i=g[1]*fj-d;if(e){var j=f+e-i,k=h*Math.cos(i)/j;h=j*Math.sin(k),i=j*Math.cos(k)-f}else h*=Math.cos(i),i*=-1;return[a*h+b[0],a*i+b[1]]}var a=200,b=[480,250],c,d,e,f;return g.invert=function(d){var g=(d[0]-b[0])/a,h=(d[1]-b[1])/a;if(e){var i=f+h,j=Math.sqrt(g*g+i*i);h=f+e-j,g=c+j*Math.atan2(g,i)/Math.cos(h)}else h*=-1,g/=Math.cos(h);return[g/fj,h/fj]},g.parallel=function(a){return arguments.length?(f=1/Math.tan(e=a*fj),g):e/fj},g.origin=function(a){return arguments.length?(c=a[0]*fj,d=a[1]*fj,g):[c/fj,d/fj]},g.scale=function(b){return arguments.length?(a=+b,g):a},g.translate=function(a){return arguments.length?(b=[+a[0],+a[1]],g):b},g.origin([0,0]).parallel(45)},d3.geo.equirectangular=function(){function c(c){var d=c[0]/360,e=-c[1]/360;return[a*d+b[0],a*e+b[1]]}var a=500,b=[480,250];return c.invert=function(c){var d=(c[0]-b[0])/a,e=(c[1]-b[1])/a;return[360*d,-360*e]},c.scale=function(b){return arguments.length?(a=+b,c):a},c.translate=function(a){return arguments.length?(b=[+a[0],+a[1]],c):b},c},d3.geo.mercator=function(){function c(c){var d=c[0]/360,e=-(Math.log(Math.tan(Math.PI/4+c[1]*fj/2))/fj)/360;return[a*d+b[0],a*Math.max(-0.5,Math.min(.5,e))+b[1]]}var a=500,b=[480,250];return c.invert=function(c){var d=(c[0]-b[0])/a,e=(c[1]-b[1])/a;return[360*d,2*Math.atan(Math.exp(-360*e*fj))/fj-90]},c.scale=function(b){return arguments.length?(a=+b,c):a},c.translate=function(a){return arguments.length?(b=[+a[0],+a[1]],c):b},c},d3.geo.path=function(){function d(c,d){return typeof a=="function"&&(b=fl(a.apply(this,arguments))),f(c)||null}function e(a){return c(a).join(",")}function h(a){var b=k(a[0]),c=0,d=a.length;while(++c0){b.push("M");while(++h0){b.push("M");while(++kd&&(d=a),fe&&(e=f)}),[[b,c],[d,e]]};var fn={Feature:fo,FeatureCollection:fp,GeometryCollection:fq,LineString:fr,MultiLineString:fs,MultiPoint:fr,MultiPolygon:ft,Point:fu,Polygon:fv};d3.geo.circle=function(){function e(){}function f(a){return d.distance(a)=k*k+l*l?d[f].index=-1:(d[m].index=-1,o=d[f].angle,m=f,n=g)):(o=d[f].angle,m=f,n=g);e.push(h);for(f=0,g=0;f<2;++g)d[g].index!==-1&&(e.push(d[g].index),f++);p=e.length;for(;g=0?(c=a.ep.r,d=a.ep.l):(c=a.ep.l,d=a.ep.r),a.a===1?(g=c?c.y:-1e6,e=a.c-a.b*g,h=d?d.y:1e6,f=a.c-a.b*h):(e=c?c.x:-1e6,g=a.c-a.a*e,f=d?d.x:1e6,h=a.c-a.a*f);var i=[e,g],j=[f,h];b[a.region.l.index].push(i,j),b[a.region.r.index].push(i,j)}),b.map(function(b,c){var d=a[c][0],e=a[c][1];return b.forEach(function(a){a.angle=Math.atan2(a[0]-d,a[1]-e)}),b.sort(function(a,b){return a.angle-b.angle}).filter(function(a,c){return!c||a.angle-b[c-1].angle>1e-10})})};var fF={l:"r",r:"l"};d3.geom.delaunay=function(a){var b=a.map(function(){return[]}),c=[];return fG(a,function(c){b[c.region.l.index].push(a[c.region.r.index])}),b.forEach(function(b,d){var e=a[d],f=e[0],g=e[1];b.forEach(function(a){a.angle=Math.atan2(a[0]-f,a[1]-g)}),b.sort(function(a,b){return a.angle-b.angle});for(var h=0,i=b.length-1;h=g,j=b.y>=h,l=(j<<1)+i;a.leaf=!1,a=a.nodes[l]||(a.nodes[l]=fH()),i?c=g:e=g,j?d=h:f=h,k(a,b,c,d,e,f)}var f,g=-1,h=a.length;h&&isNaN(a[0].x)&&(a=a.map(fJ));if(arguments.length<5)if(arguments.length===3)e=d=c,c=b;else{b=c=Infinity,d=e=-Infinity;while(++gd&&(d=f.x),f.y>e&&(e=f.y);var i=d-b,j=e-c;i>j?e=c+i:d=b+j}var m=fH();return m.add=function(a){k(m,a,b,c,d,e)},m.visit=function(a){fI(a,m,b,c,d,e)},a.forEach(m.add),m},d3.time={};var fK=Date;fL.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(a){this._.setUTCDate(a)},setDay:function(a){this._.setUTCDay(a)},setFullYear:function(a){this._.setUTCFullYear(a)},setHours:function(a){this._.setUTCHours(a)},setMilliseconds:function(a){this._.setUTCMilliseconds(a)},setMinutes:function(a){this._.setUTCMinutes(a)},setMonth:function(a){this._.setUTCMonth(a)},setSeconds:function(a){this._.setUTCSeconds(a)},setTime:function(a){this._.setTime(a)}},d3.time.format=function(a){function c(c){var d=[],e=-1,f=0,g,h;while(++e=12?"PM":"AM"},S:function(a){return fN(a.getSeconds())},U:function(a){return fN(d3.time.sundayOfYear(a))},w:function(a){return a.getDay()},W:function(a){return fN(d3.time.mondayOfYear(a))},x:d3.time.format("%m/%d/%y"),X:d3.time.format("%H:%M:%S"),y:function(a){return fN(a.getFullYear()%100)},Y:function(a){return fP(a.getFullYear()%1e4)},Z:gr,"%":function(a){return"%"}},fS={a:fT,A:fU,b:fX,B:fZ,c:gb,d:gi,e:gi,H:gj,I:gk,L:gn,m:gh,M:gl,p:gp,S:gm,x:gc,X:gd,y:gf,Y:ge},fV=/^(?:sun|mon|tue|wed|thu|fri|sat)/i,fW=/^(?:Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)/i;d3_time_weekdays=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var fY=d3.map({jan:0,feb:1,mar:2,apr:3,may:4,jun:5,jul:6,aug:7,sep:8,oct:9,nov:10,dec:11}),f$=/^(?:January|February|March|April|May|June|July|August|September|October|November|December)/ig,f_=d3.map({january:0,february:1,march:2,april:3,may:4,june:5,july:6,august:7,september:8,october:9,november:10,december:11}),ga=["January","February","March","April","May","June","July","August","September","October","November","December"],go=/\s*\d+/,gq=d3.map({am:0,pm:1});d3.time.format.utc=function(a){function c(a){try{fK=fL;var c=new fK;return c._=a,b(c)}finally{fK=Date}}var b=d3.time.format(a);return c.parse=function(a){try{fK=fL;var c=b.parse(a);return c&&c._}finally{fK=Date}},c.toString=b.toString,c};var gs=d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%LZ");d3.time.format.iso=Date.prototype.toISOString?gt:gs,gt.parse=function(a){return new Date(a)},gt.toString=gs.toString,d3.time.second=gu(function(a){return new fK(Math.floor(a/1e3)*1e3)},function(a,b){a.setTime(a.getTime()+Math.floor(b)*1e3)},function(a){return a.getSeconds()}),d3.time.seconds=d3.time.second.range,d3.time.seconds.utc=d3.time.second.utc.range,d3.time.minute=gu(function(a){return new fK(Math.floor(a/6e4)*6e4)},function(a,b){a.setTime(a.getTime()+Math.floor(b)*6e4)},function(a){return a.getMinutes()}),d3.time.minutes=d3.time.minute.range,d3.time.minutes.utc=d3.time.minute.utc.range,d3.time.hour=gu(function(a){var b=a.getTimezoneOffset()/60;return new fK((Math.floor(a/36e5-b)+b)*36e5)},function(a,b){a.setTime(a.getTime()+Math.floor(b)*36e5)},function(a){return a.getHours()}),d3.time.hours=d3.time.hour.range,d3.time.hours.utc=d3.time.hour.utc.range,d3.time.day=gu(function(a){return new fK(a.getFullYear(),a.getMonth(),a.getDate())},function(a,b){a.setDate(a.getDate()+b)},function(a){return a.getDate()-1}),d3.time.days=d3.time.day.range,d3.time.days.utc=d3.time.day.utc.range,d3.time.dayOfYear=function(a){var b=d3.time.year(a);return Math.floor((a-b)/864e5-(a.getTimezoneOffset()-b.getTimezoneOffset())/1440)},d3_time_weekdays.forEach(function(a,b){a=a.toLowerCase(),b=7-b;var c=d3.time[a]=gu(function(a){return(a=d3.time.day(a)).setDate(a.getDate()-(a.getDay()+b)%7),a},function(a,b){a.setDate(a.getDate()+Math.floor(b)*7)},function(a){var c=d3.time.year(a).getDay();return Math.floor((d3.time.dayOfYear(a)+(c+b)%7)/7)-(c!==b)});d3.time[a+"s"]=c.range,d3.time[a+"s"].utc=c.utc.range,d3.time[a+"OfYear"]=function(a){var c=d3.time.year(a).getDay();return Math.floor((d3.time.dayOfYear(a)+(c+b)%7)/7)}}),d3.time.week=d3.time.sunday,d3.time.weeks=d3.time.sunday.range,d3.time.weeks.utc=d3.time.sunday.utc.range,d3.time.weekOfYear=d3.time.sundayOfYear,d3.time.month=gu(function(a){return new fK(a.getFullYear(),a.getMonth(),1)},function(a,b){a.setMonth(a.getMonth()+b)},function(a){return a.getMonth()}),d3.time.months=d3.time.month.range,d3.time.months.utc=d3.time.month.utc.range,d3.time.year=gu(function(a){return new fK(a.getFullYear(),0,1)},function(a,b){a.setFullYear(a.getFullYear()+b)},function(a){return a.getFullYear()}),d3.time.years=d3.time.year.range,d3.time.years.utc=d3.time.year.utc.range;var gC=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],gD=[[d3.time.second,1],[d3.time.second,5],[d3.time.second,15],[d3.time.second,30],[d3.time.minute,1],[d3.time.minute,5],[d3.time.minute,15],[d3.time.minute,30],[d3.time.hour,1],[d3.time.hour,3],[d3.time.hour,6],[d3.time.hour,12],[d3.time.day,1],[d3.time.day,2],[d3.time.week,1],[d3.time.month,1],[d3.time.month,3],[d3.time.year,1]],gE=[[d3.time.format("%Y"),function(a){return!0}],[d3.time.format("%B"),function(a){return a.getMonth()}],[d3.time.format("%b %d"),function(a){return a.getDate()!=1}],[d3.time.format("%a %d"),function(a){return a.getDay()&&a.getDate()!=1}],[d3.time.format("%I %p"),function(a){return a.getHours()}],[d3.time.format("%I:%M"),function(a){return a.getMinutes()}],[d3.time.format(":%S"),function(a){return a.getSeconds()}],[d3.time.format(".%L"),function(a){return a.getMilliseconds()}]],gF=d3.scale.linear(),gG=gz(gE);gD.year=function(a,b){return gF.domain(a.map(gB)).ticks(b).map(gA)},d3.time.scale=function(){return gw(d3.scale.linear(),gD,gG)};var gH=gD.map(function(a){return[a[0].utc,a[1]]}),gI=[[d3.time.format.utc("%Y"),function(a){return!0}],[d3.time.format.utc("%B"),function(a){return a.getUTCMonth()}],[d3.time.format.utc("%b %d"),function(a){return a.getUTCDate()!=1}],[d3.time.format.utc("%a %d"),function(a){return a.getUTCDay()&&a.getUTCDate()!=1}],[d3.time.format.utc("%I %p"),function(a){return a.getUTCHours()}],[d3.time.format.utc("%I:%M"),function(a){return a.getUTCMinutes()}],[d3.time.format.utc(":%S"),function(a){return a.getUTCSeconds()}],[d3.time.format.utc(".%L"),function(a){return a.getUTCMilliseconds()}]],gJ=gz(gI);gH.year=function(a,b){return gF.domain(a.map(gL)).ticks(b).map(gK)},d3.time.scale.utc=function(){return gw(d3.scale.linear(),gH,gJ)}})(); \ No newline at end of file +(function(){function e(a,b){try{for(var c in b)Object.defineProperty(a.prototype,c,{value:b[c],enumerable:!1})}catch(d){a.prototype=b}}function g(a){var b=-1,c=a.length,d=[];while(++b=0?a.substring(b):(b=a.length,""),d=[];while(b>0)d.push(a.substring(b-=3,b+3));return d.reverse().join(",")+c}function F(a,b){return{scale:Math.pow(10,(8-b)*3),symbol:a}}function L(a){return function(b){return b<=0?0:b>=1?1:a(b)}}function M(a){return function(b){return 1-a(1-b)}}function N(a){return function(b){return.5*(b<.5?a(2*b):2-a(2-2*b))}}function O(a){return a}function P(a){return function(b){return Math.pow(b,a)}}function Q(a){return 1-Math.cos(a*Math.PI/2)}function R(a){return Math.pow(2,10*(a-1))}function S(a){return 1-Math.sqrt(1-a*a)}function T(a,b){var c;return arguments.length<2&&(b=.45),arguments.length<1?(a=1,c=b/4):c=b/(2*Math.PI)*Math.asin(1/a),function(d){return 1+a*Math.pow(2,10*-d)*Math.sin((d-c)*2*Math.PI/b)}}function U(a){return a||(a=1.70158),function(b){return b*b*((a+1)*b-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+.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375}function W(){d3.event.stopPropagation(),d3.event.preventDefault()}function X(){var a=d3.event,b;while(b=a.sourceEvent)a=b;return a}function Y(a){var b=new x,c=0,d=arguments.length;while(++c360?a-=360:a<0&&(a+=360),a<60?d+(e-d)*a/60:a<180?e:a<240?d+(e-d)*(240-a)/60:d}function g(a){return Math.round(f(a)*255)}var d,e;return a%=360,a<0&&(a+=360),b=b<0?0:b>1?1:b,c=c<0?0:c>1?1:c,e=c<=.5?c*(1+b):c+b-c*b,d=2*c-e,bb(g(a+120),g(a),g(a-120))}function bl(a){return j(a,br),a}function bs(a){return function(){return bm(a,this)}}function bt(a){return function(){return bn(a,this)}}function bv(a,b){function f(){if(b=this.classList)return b.add(a);var b=this.className,d=b.baseVal!=null,e=d?b.baseVal:b;c.lastIndex=0,c.test(e)||(e=t(e+" "+a),d?b.baseVal=e:this.className=e)}function g(){if(b=this.classList)return b.remove(a);var b=this.className,d=b.baseVal!=null,e=d?b.baseVal:b;e=t(e.replace(c," ")),d?b.baseVal=e:this.className=e}function h(){(b.apply(this,arguments)?f:g).call(this)}var c=new RegExp("(^|\\s+)"+d3.requote(a)+"(\\s+|$)","g");if(arguments.length<2){var d=this.node();if(e=d.classList)return e.contains(a);var e=d.className;return c.lastIndex=0,c.test(e.baseVal!=null?e.baseVal:e)}return this.each(typeof b=="function"?h:b?f:g)}function bw(a){return{__data__:a}}function bx(a){return function(){return bq(this,a)}}function by(a){return arguments.length||(a=d3.ascending),function(b,c){return a(b&&b.__data__,c&&c.__data__)}}function bA(a){return j(a,bB),a}function bC(a,b,c){j(a,bG);var d=new k,e=d3.dispatch("start","end"),f=bJ;return a.id=b,a.time=c,a.tween=function(b,c){return arguments.length<2?d.get(b):(c==null?d.remove(b):d.set(b,c),a)},a.ease=function(b){return arguments.length?(f=typeof b=="function"?b:d3.ease.apply(d3,arguments),a):f},a.each=function(b,c){return arguments.length<2?bK.call(a,b):(e.on(b,c),a)},d3.timer(function(g){return a.each(function(h,i,j){function p(a){return o.active>b?r():(o.active=b,d.forEach(function(a,b){(tween=b.call(l,h,i))&&k.push(tween)}),e.start.call(l,h,i),q(a)||d3.timer(q,0,c),1)}function q(a){if(o.active!==b)return r();var c=(a-m)/n,d=f(c),g=k.length;while(g>0)k[--g].call(l,d);if(c>=1)return r(),bI=b,e.end.call(l,h,i),bI=0,1}function r(){return--o.count||delete l.__transition__,1}var k=[],l=this,m=a[j][i].delay,n=a[j][i].duration,o=l.__transition__||(l.__transition__={active:0,count:0});++o.count,m<=g?p(g):d3.timer(p,m,c)}),1},0,c),a}function bE(a,b,c){return c!=""&&bD}function bF(a,b){function d(a,d,e){var f=b.call(this,a,d);return f==null?e!=""&&bD:e!=f&&c(e,f)}function e(a,d,e){return e!=b&&c(e,b)}var c=$(a);return typeof b=="function"?d:b==null?bE:(b+="",e)}function bK(a){for(var b=0,c=this.length;b=c.delay&&(c.flush=c.callback(a)),c=c.next;var d=bP()-b;d>24?(isFinite(d)&&(clearTimeout(bN),bN=setTimeout(bO,d)),bM=0):(bM=1,bQ(bO))}function bP(){var a=null,b=bL,c=Infinity;while(b)b.flush?b=a?a.next=b.next:bL=b.next:(c=Math.min(c,b.then+b.delay),b=(a=b).next);return c}function bR(a){var b=[a.a,a.b],c=[a.c,a.d],d=bT(b),e=bS(b,c),f=bT(bU(c,b,-e))||0;b[0]*c[1]2?ci:ch,i=d?ba:_;return e=g(a,b,i,c),f=g(b,a,i,d3.interpolate),h}function h(a){return e(a)}var e,f;return h.invert=function(a){return f(a)},h.domain=function(b){return arguments.length?(a=b.map(Number),g()):a},h.range=function(a){return arguments.length?(b=a,g()):b},h.rangeRound=function(a){return h.range(a).interpolate(d3.interpolateRound)},h.clamp=function(a){return arguments.length?(d=a,g()):d},h.interpolate=function(a){return arguments.length?(c=a,g()):c},h.ticks=function(b){return cf(a,b)},h.tickFormat=function(b){return cg(a,b)},h.nice=function(){return b_(a,cd),g()},h.copy=function(){return cb(a,b,c,d)},g()}function cc(a,b){return d3.rebind(a,b,"range","rangeRound","interpolate","clamp")}function cd(a){return a=Math.pow(10,Math.round(Math.log(a)/Math.LN10)-1),{floor:function(b){return Math.floor(b/a)*a},ceil:function(b){return Math.ceil(b/a)*a}}}function ce(a,b){var c=bZ(a),d=c[1]-c[0],e=Math.pow(10,Math.floor(Math.log(d/b)/Math.LN10)),f=b/d*e;return f<=.15?e*=10:f<=.35?e*=5:f<=.75&&(e*=2),c[0]=Math.ceil(c[0]/e)*e,c[1]=Math.floor(c[1]/e)*e+e*.5,c[2]=e,c}function cf(a,b){return d3.range.apply(d3,ce(a,b))}function cg(a,b){return d3.format(",."+Math.max(0,-Math.floor(Math.log(ce(a,b)[2])/Math.LN10+.01))+"f")}function ch(a,b,c,d){var e=c(a[0],a[1]),f=d(b[0],b[1]);return function(a){return f(e(a))}}function ci(a,b,c,d){var e=[],f=[],g=0,h=Math.min(a.length,b.length)-1;a[h]0;j--)e.push(c(f)*j)}else{for(;fi;g--);e=e.slice(f,g)}return e},d.tickFormat=function(a,e){arguments.length<2&&(e=ck);if(arguments.length<1)return e;var f=a/d.ticks().length,g=b===cm?(h=-1e-12,Math.floor):(h=1e-12,Math.ceil),h;return function(a){return a/c(g(b(a)+h))0?0:-a)/Math.LN10}function cn(a,b){function e(b){return a(c(b))}var c=co(b),d=co(1/b);return e.invert=function(b){return d(a.invert(b))},e.domain=function(b){return arguments.length?(a.domain(b.map(c)),e):a.domain().map(d)},e.ticks=function(a){return cf(e.domain(),a)},e.tickFormat=function(a){return cg(e.domain(),a)},e.nice=function(){return e.domain(b_(e.domain(),cd))},e.exponent=function(a){if(!arguments.length)return b;var f=e.domain();return c=co(b=a),d=co(1/b),e.domain(f)},e.copy=function(){return cn(a.copy(),b)},cc(e,a)}function co(a){return function(b){return b<0?-Math.pow(-b,a):Math.pow(b,a)}}function cp(a,b){function f(b){return d[((c.get(b)||c.set(b,a.push(b)))-1)%d.length]}function g(b,c){return d3.range(a.length).map(function(a){return b+c*a})}var c,d,e;return f.domain=function(d){if(!arguments.length)return a;a=[],c=new k;var e=-1,g=d.length,h;while(++e1){h=b[1],f=a[i],i++,d+="C"+(e[0]+g[0])+","+(e[1]+g[1])+","+(f[0]-h[0])+","+(f[1]-h[1])+","+f[0]+","+f[1];for(var j=2;j9&&(f=c*3/Math.sqrt(f),g[h]=f*d,g[h+1]=f*e));h=-1;while(++h<=i)f=(a[Math.min(i,h+1)][0]-a[Math.max(0,h-1)][0])/(6*(1+g[h]*g[h])),b.push([f||0,g[h]*f||0]);return b}function db(a){return a.length<3?cJ(a):a[0]+cP(a,da(a))}function dc(a){var b,c=-1,d=a.length,e,f;while(++c1){var d=bZ(a.domain()),e,f=-1,g=b.length,h=(b[1]-b[0])/++c,i,j;while(++f0;)(j=+b[f]-i*h)>=d[0]&&e.push(j);for(--f,i=0;++irect,.s>rect").attr("width",b[1][0]-b[0][0])}function dK(a,b){a.select(".extent").attr("y",b[0][1]),a.selectAll(".extent,.e>rect,.w>rect").attr("height",b[1][1]-b[0][1])}function dL(){d3.event.keyCode==32&&dz&&(dD||(dE=null,dF[0]-=dC[1][0],dF[1]-=dC[1][1],dD=2),W())}function dM(){d3.event.keyCode==32&&dD==2&&(dF[0]+=dC[1][0],dF[1]+=dC[1][1],dD=0,W())}function dN(){if(dF){var a=dH(),b=d3.select(dz),c=!1;dG&&(a[0]+=dG[0],a[1]+=dG[1]),dD||(d3.event.altKey?(dE||(dE=[(dC[0][0]+dC[1][0])/2,(dC[0][1]+dC[1][1])/2]),dF[0]=dC[+(a[0]d&&(c=b,d=e);return c}function ex(a){return a.reduce(ey,0)}function ey(a,b){return a+b[1]}function ez(a,b){return eA(a,Math.ceil(Math.log(b.length)/Math.LN2+1))}function eA(a,b){var c=-1,d=+a[0],e=(a[1]-d)/b,f=[];while(++c<=b)f[c]=e*c+d;return f}function eB(a){return[d3.min(a),d3.max(a)]}function eC(a,b){return d3.rebind(a,b,"sort","children","value"),a.links=eG,a.nodes=function(b){return eH=!0,(a.nodes=a)(b)},a}function eD(a){return a.children}function eE(a){return a.value}function eF(a,b){return b.value-a.value}function eG(a){return d3.merge(a.map(function(a){return(a.children||[]).map(function(b){return{source:a,target:b}})}))}function eI(a,b){return a.value-b.value}function eJ(a,b){var c=a._pack_next;a._pack_next=b,b._pack_prev=a,b._pack_next=c,c._pack_prev=b}function eK(a,b){a._pack_next=b,b._pack_prev=a}function eL(a,b){var c=b.x-a.x,d=b.y-a.y,e=a.r+b.r;return e*e-c*c-d*d>.001}function eM(a){function l(a){b=Math.min(a.x-a.r,b),c=Math.max(a.x+a.r,c),d=Math.min(a.y-a.r,d),e=Math.max(a.y+a.r,e)}var b=Infinity,c=-Infinity,d=Infinity,e=-Infinity,f=a.length,g,h,i,j,k;a.forEach(eN),g=a[0],g.x=-g.r,g.y=0,l(g);if(f>1){h=a[1],h.x=h.r,h.y=0,l(h);if(f>2){i=a[2],eR(g,h,i),l(i),eJ(g,i),g._pack_prev=i,eJ(i,h),h=g._pack_next;for(var m=3;m0&&(a=d)}return a}function e$(a,b){return a.x-b.x}function e_(a,b){return b.x-a.x}function fa(a,b){return a.depth-b.depth}function fb(a,b){function c(a,d){var e=a.children;if(e&&(i=e.length)){var f,g=null,h=-1,i;while(++h=0)f=d[e]._tree,f.prelim+=b,f.mod+=b,b+=f.shift+(c+=f.change)}function fd(a,b,c){a=a._tree,b=b._tree;var d=c/(b.number-a.number);a.change+=d,b.change-=d,b.shift+=c,b.prelim+=c,b.mod+=c}function fe(a,b,c){return a._tree.ancestor.parent==b.parent?a._tree.ancestor:c}function ff(a){return{x:a.x,y:a.y,dx:a.dx,dy:a.dy}}function fg(a,b){var c=a.x+b[3],d=a.y+b[0],e=a.dx-b[1]-b[3],f=a.dy-b[0]-b[2];return e<0&&(c+=e/2,e=0),f<0&&(d+=f/2,f=0),{x:c,y:d,dx:e,dy:f}}function fh(a){return a.map(fi).join(",")}function fi(a){return/[",\n]/.test(a)?'"'+a.replace(/\"/g,'""')+'"':a}function fk(a,b){return function(c){return c&&a.hasOwnProperty(c.type)?a[c.type](c):b}}function fl(a){return"m0,"+a+"a"+a+","+a+" 0 1,1 0,"+ -2*a+"a"+a+","+a+" 0 1,1 0,"+2*a+"z"}function fm(a,b){fn.hasOwnProperty(a.type)&&fn[a.type](a,b)}function fo(a,b){fm(a.geometry,b)}function fp(a,b){for(var c=a.features,d=0,e=c.length;d0}function fD(a,b,c){return(c[0]-b[0])*(a[1]-b[1])<(c[1]-b[1])*(a[0]-b[0])}function fE(a,b,c,d){var e=a[0],f=b[0],g=c[0],h=d[0],i=a[1],j=b[1],k=c[1],l=d[1],m=e-g,n=f-e,o=h-g,p=i-k,q=j-i,r=l-k,s=(o*p-r*m)/(r*n-o*q);return[e+s*n,i+s*q]}function fG(a,b){var c={list:a.map(function(a,b){return{index:b,x:a[0],y:a[1]}}).sort(function(a,b){return a.yb.y?1:a.xb.x?1:0}),bottomSite:null},d={list:[],leftEnd:null,rightEnd:null,init:function(){d.leftEnd=d.createHalfEdge(null,"l"),d.rightEnd=d.createHalfEdge(null,"l"),d.leftEnd.r=d.rightEnd,d.rightEnd.l=d.leftEnd,d.list.unshift(d.leftEnd,d.rightEnd)},createHalfEdge:function(a,b){return{edge:a,side:b,vertex:null,l:null,r:null}},insert:function(a,b){b.l=a,b.r=a.r,a.r.l=b,a.r=b},leftBound:function(a){var b=d.leftEnd;do b=b.r;while(b!=d.rightEnd&&e.rightOf(b,a));return b=b.l,b},del:function(a){a.l.r=a.r,a.r.l=a.l,a.edge=null},right:function(a){return a.r},left:function(a){return a.l},leftRegion:function(a){return a.edge==null?c.bottomSite:a.edge.region[a.side]},rightRegion:function(a){return a.edge==null?c.bottomSite:a.edge.region[fF[a.side]]}},e={bisect:function(a,b){var c={region:{l:a,r:b},ep:{l:null,r:null}},d=b.x-a.x,e=b.y-a.y,f=d>0?d:-d,g=e>0?e:-e;return c.c=a.x*d+a.y*e+(d*d+e*e)*.5,f>g?(c.a=1,c.b=e/d,c.c/=d):(c.b=1,c.a=d/e,c.c/=e),c},intersect:function(a,b){var c=a.edge,d=b.edge;if(!c||!d||c.region.r==d.region.r)return null;var e=c.a*d.b-c.b*d.a;if(Math.abs(e)<1e-10)return null;var f=(c.c*d.b-d.c*c.b)/e,g=(d.c*c.a-c.c*d.a)/e,h=c.region.r,i=d.region.r,j,k;h.y=k.region.r.x;return l&&j.side==="l"||!l&&j.side==="r"?null:{x:f,y:g}},rightOf:function(a,b){var c=a.edge,d=c.region.r,e=b.x>d.x;if(e&&a.side==="l")return 1;if(!e&&a.side==="r")return 0;if(c.a===1){var f=b.y-d.y,g=b.x-d.x,h=0,i=0;!e&&c.b<0||e&&c.b>=0?i=h=f>=c.b*g:(i=b.x+b.y*c.b>c.c,c.b<0&&(i=!i),i||(h=1));if(!h){var j=d.x-c.region.l.x;i=c.b*(g*g-f*f)m*m+n*n}return a.side==="l"?i:!i},endPoint:function(a,c,d){a.ep[c]=d;if(!a.ep[fF[c]])return;b(a)},distance:function(a,b){var c=a.x-b.x,d=a.y-b.y;return Math.sqrt(c*c+d*d)}},f={list:[],insert:function(a,b,c){a.vertex=b,a.ystar=b.y+c;for(var d=0,e=f.list,g=e.length;dh.ystar||a.ystar==h.ystar&&b.x>h.vertex.x)continue;break}e.splice(d,0,a)},del:function(a){for(var b=0,c=f.list,d=c.length;bo.y&&(p=n,n=o,o=p,t="r"),s=e.bisect(n,o),m=d.createHalfEdge(s,t),d.insert(k,m),e.endPoint(s,fF[t],r),q=e.intersect(k,m),q&&(f.del(k),f.insert(k,q,e.distance(q,n))),q=e.intersect(m,l),q&&f.insert(m,q,e.distance(q,n));else break}for(i=d.right(d.leftEnd);i!=d.rightEnd;i=d.right(i))b(i.edge)}function fH(){return{leaf:!0,nodes:[],point:null}}function fI(a,b,c,d,e,f){if(!a(b,c,d,e,f)){var g=(c+e)*.5,h=(d+f)*.5,i=b.nodes;i[0]&&fI(a,i[0],c,d,g,h),i[1]&&fI(a,i[1],g,d,e,h),i[2]&&fI(a,i[2],c,h,g,f),i[3]&&fI(a,i[3],g,h,e,f)}}function fJ(a){return{x:a[0],y:a[1]}}function fL(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function fM(a,b,c,d){var e,f,g=0,h=b.length,i=c.length;while(g=i)return-1;e=b.charCodeAt(g++);if(e==37){f=fS[b.charAt(g++)];if(!f||(d=f(a,c,d))<0)return-1}else if(e!=c.charCodeAt(d++))return-1}return d}function fT(a,b,c){return fV.test(b.substring(c,c+=3))?c:-1}function fU(a,b,c){fW.lastIndex=0;var d=fW.exec(b.substring(c,c+10));return d?c+=d[0].length:-1}function fX(a,b,c){var d=fY.get(b.substring(c,c+=3).toLowerCase());return d==null?-1:(a.setMonth(d),c)}function fZ(a,b,c){f$.lastIndex=0;var d=f$.exec(b.substring(c,c+12));return d?(a.setMonth(f_.get(d[0].toLowerCase())),c+=d[0].length):-1}function gb(a,b,c){return fM(a,fR.c.toString(),b,c)}function gc(a,b,c){return fM(a,fR.x.toString(),b,c)}function gd(a,b,c){return fM(a,fR.X.toString(),b,c)}function ge(a,b,c){go.lastIndex=0;var d=go.exec(b.substring(c,c+4));return d?(a.setFullYear(d[0]),c+=d[0].length):-1}function gf(a,b,c){go.lastIndex=0;var d=go.exec(b.substring(c,c+2));return d?(a.setFullYear(gg()+ +d[0]),c+=d[0].length):-1}function gg(){return~~((new Date).getFullYear()/1e3)*1e3}function gh(a,b,c){go.lastIndex=0 +;var d=go.exec(b.substring(c,c+2));return d?(a.setMonth(d[0]-1),c+=d[0].length):-1}function gi(a,b,c){go.lastIndex=0;var d=go.exec(b.substring(c,c+2));return d?(a.setDate(+d[0]),c+=d[0].length):-1}function gj(a,b,c){go.lastIndex=0;var d=go.exec(b.substring(c,c+2));return d?(a.setHours(+d[0]),c+=d[0].length):-1}function gk(a,b,c){return a.hour12=!0,gj(a,b,c)}function gl(a,b,c){go.lastIndex=0;var d=go.exec(b.substring(c,c+2));return d?(a.setMinutes(+d[0]),c+=d[0].length):-1}function gm(a,b,c){go.lastIndex=0;var d=go.exec(b.substring(c,c+2));return d?(a.setSeconds(+d[0]),c+=d[0].length):-1}function gn(a,b,c){go.lastIndex=0;var d=go.exec(b.substring(c,c+3));return d?(a.setMilliseconds(+d[0]),c+=d[0].length):-1}function gp(a,b,c){var d=gq.get(b.substring(c,c+=2).toLowerCase());return d==null?-1:(a.hour12pm=d,c)}function gr(a){var b=a.getTimezoneOffset(),c=b>0?"-":"+",d=~~(Math.abs(b)/60),e=Math.abs(b)%60;return c+fN(d)+fN(e)}function gt(a){return a.toISOString()}function gu(a,b,c){function d(b){var c=a(b),d=f(c,1);return b-c1)while(gb?1:a>=b?0:NaN},d3.descending=function(a,b){return ba?1:b>=a?0:NaN},d3.mean=function(a,b){var c=a.length,d,e=0,f=-1,g=0;if(arguments.length===1)while(++f1&&(a=a.map(b)),a=a.filter(p),a.length?d3.quantile(a.sort(d3.ascending),.5):undefined},d3.min=function(a,b){var c=-1,d=a.length,e,f;if(arguments.length===1){while(++cf&&(e=f)}else{while(++cf&&(e=f)}return e},d3.max=function(a,b){var c=-1,d=a.length,e,f;if(arguments.length===1){while(++ce&&(e=f)}else{while(++ce&&(e=f)}return e},d3.extent=function(a,b){var c=-1,d=a.length,e,f,g;if(arguments.length===1){while(++cf&&(e=f),gf&&(e=f),g1);return a+b*c*Math.sqrt(-2*Math.log(e)/e)}}},d3.sum=function(a,b){var c=0,d=a.length,e,f=-1;if(arguments.length===1)while(++f>1;a.call(b,b[f],f)>1;c0&&(e=f);return e},d3.last=function(a,b){var c=0,d=a.length,e=a[0],f;arguments.length===1&&(b=d3.ascending);while(++c=b.length)return e?e.call(a,c):d?c.sort(d):c;var h=-1,i=c.length,j=b[g++],l,m,n=new k,o,p={};while(++h=b.length)return a;var e=[],f=c[d++],h;for(h in a)e.push({key:h,values:g(a[h],d)});return f&&e.sort(function(a,b){return f(a.key,b.key)}),e}var a={},b=[],c=[],d,e;return a.map=function(a){return f(a,0)},a.entries=function(a){return g(f(a,0),0)},a.key=function(c){return b.push(c),a},a.sortKeys=function(d){return c[b.length-1]=d,a},a.sortValues=function(b){return d=b,a},a.rollup=function(b){return e=b,a},a},d3.keys=function(a){var b=[];for(var c in a)b.push(c);return b},d3.values=function(a){var b=[];for(var c in a)b.push(a[c]);return b},d3.entries=function(a){var b=[];for(var c in a)b.push({key:c,value:a[c]});return b},d3.permute=function(a,b){var c=[],d=-1,e=b.length;while(++db)d.push(g/e);else while((g=a+c*++f)=0&&(c=a.substring(0,b),a=a.substring(b+1)),w.hasOwnProperty(c)?{space:w[c],local:a}:a}},d3.dispatch=function(){var a=new x,b=-1,c=arguments.length;while(++b0&&(d=a.substring(c+1),a=a.substring(0,c)),arguments.length<2?this[a].on(d):this[a].on(d,b)},d3.format=function(a){var b=z.exec(a),c=b[1]||" ",d=b[3]||"",e=b[5],f=+b[6],g=b[7],h=b[8],i=b[9],j=1,k="",l=!1;h&&(h=+h.substring(1)),e&&(c="0",g&&(f-=Math.floor((f-1)/4)));switch(i){case"n":g=!0,i="g";break;case"%":j=100,k="%",i="f";break;case"p":j=100,k="%",i="r";break;case"d":l=!0,h=0;break;case"s":j=-1,i="r"}return i=="r"&&!h&&(i="g"),i=A.get(i)||C,function(a){if(l&&a%1)return"";var b=a<0&&(a=-a)?"−":d;if(j<0){var m=d3.formatPrefix(a,h);a*=m.scale,k=m.symbol}else a*=j;a=i(a,h);if(e){var n=a.length+b.length;n=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/,A=d3.map({g:function(a,b){return a.toPrecision(b)},e:function(a,b){return a.toExponential(b)},f:function(a,b){return a.toFixed(b)},r:function(a,b){return d3.round(a,b=B(a,b)).toFixed(Math.max(0,Math.min(20,b)))}}),E=["y","z","a","f","p","n","μ","m","","k","M","G","T","P","E","Z","Y"].map(F);d3.formatPrefix=function(a,b){var c=0;return a&&(a<0&&(a*=-1),b&&(a=d3.round(a,B(a,b))),c=1+Math.floor(1e-12+Math.log(a)/Math.LN10),c=Math.max(-24,Math.min(24,Math.floor((c<=0?c+1:c-1)/3)*3))),E[8+c/3]};var G=P(2),H=P(3),I=function(){return O},J=d3.map({linear:I,poly:P,quad:function(){return G},cubic:function(){return H},sin:function(){return Q},exp:function(){return R},circle:function(){return S},elastic:T,back:U,bounce:function(){return V}}),K=d3.map({"in":O,out:M,"in-out":N,"out-in":function(a){return N(M(a))}});d3.ease=function(a){var b=a.indexOf("-"),c=b>=0?a.substring(0,b):a,d=b>=0?a.substring(b+1):"in";return c=J.get(c)||I,d=K.get(d)||O,L(d(c.apply(null,Array.prototype.slice.call(arguments,1))))},d3.event=null,d3.interpolate=function(a,b){var c=d3.interpolators.length,d;while(--c>=0&&!(d=d3.interpolators[c](a,b)));return d},d3.interpolateNumber=function(a,b){return b-=a,function(c){return a+b*c}},d3.interpolateRound=function(a,b){return b-=a,function(c){return Math.round(a+b*c)}},d3.interpolateString=function(a,b){var c,d,e,f=0,g=0,h=[],i=[],j,k;Z.lastIndex=0;for(d=0;c=Z.exec(b);++d)c.index&&h.push(b.substring(f,g=c.index)),i.push({i:h.length,x:c[0]}),h.push(null),f=Z.lastIndex;f1){while(++e=0;)if(f=c[d])e&&e!==f.nextSibling&&e.parentNode.insertBefore(f,e),e=f;return this},br.sort=function(a){a=by.apply(this,arguments);for(var b=-1,c=this.length;++b0&&(a=a.substring(0,e)),arguments.length<2?(e=this.node()[d])&&e._:this.each(function(e,f){function h(a){var c=d3.event;d3.event=a;try{b.call(g,g.__data__,f)}finally{d3.event=c}}var g=this;g[d]&&g.removeEventListener(a,g[d],c),b&&g.addEventListener(a,g[d]=h,c),h._=b})},br.each=function(a){for(var b=-1,c=this.length;++b=cy?e?"M0,"+f+"A"+f+","+f+" 0 1,1 0,"+ -f+"A"+f+","+f+" 0 1,1 0,"+f+"M0,"+e+"A"+e+","+e+" 0 1,0 0,"+ -e+"A"+e+","+e+" 0 1,0 0,"+e+"Z":"M0,"+f+"A"+f+","+f+" 0 1,1 0,"+ -f+"A"+f+","+f+" 0 1,1 0,"+f+"Z":e?"M"+f*k+","+f*l+"A"+f+","+f+" 0 "+j+",1 "+f*m+","+f*n+"L"+e*m+","+e*n+"A"+e+","+e+" 0 "+j+",0 "+e*k+","+e*l+"Z":"M"+f*k+","+f*l+"A"+f+","+f+" 0 "+j+",1 "+f*m+","+f*n+"L0,0"+"Z"}var a=cz,b=cA,c=cB,d=cC;return e.innerRadius=function(b){return arguments.length?(a=d3.functor(b),e):a},e.outerRadius=function(a){return arguments.length?(b=d3.functor(a),e):b},e.startAngle=function(a){return arguments.length?(c=d3.functor(a),e):c},e.endAngle=function(a){return arguments.length?(d=d3.functor(a),e):d},e.centroid=function(){var e=(a.apply(this,arguments)+b.apply(this,arguments))/2,f=(c.apply(this,arguments)+d.apply(this,arguments))/2+cx;return[Math.cos(f)*e,Math.sin(f)*e]},e};var cx=-Math.PI/2,cy=2*Math.PI-1e-6;d3.svg.line=function(){return cD(Object)};var cH="linear",cI=d3.map({linear:cJ,"step-before":cK,"step-after":cL,basis:cR,"basis-open":cS,"basis-closed":cT,bundle:cU,cardinal:cO,"cardinal-open":cM,"cardinal-closed":cN,monotone:db}),cW=[0,2/3,1/3,0],cX=[0,1/3,2/3,0],cY=[0,1/6,2/3,1/6];d3.svg.line.radial=function(){var a=cD(dc);return a.radius=a.x,delete a.x,a.angle=a.y,delete a.y,a},cK.reverse=cL,cL.reverse=cK,d3.svg.area=function(){return dd(Object)},d3.svg.area.radial=function(){var a=dd(dc);return a.radius=a.x,delete a.x,a.innerRadius=a.x0,delete a.x0,a.outerRadius=a.x1,delete a.x1,a.angle=a.y,delete a.y,a.startAngle=a.y0,delete a.y0,a.endAngle=a.y1,delete +a.y1,a},d3.svg.chord=function(){function f(c,d){var e=g(this,a,c,d),f=g(this,b,c,d);return"M"+e.p0+i(e.r,e.p1,e.a1-e.a0)+(h(e,f)?j(e.r,e.p1,e.r,e.p0):j(e.r,e.p1,f.r,f.p0)+i(f.r,f.p1,f.a1-f.a0)+j(f.r,f.p1,e.r,e.p0))+"Z"}function g(a,b,f,g){var h=b.call(a,f,g),i=c.call(a,h,g),j=d.call(a,h,g)+cx,k=e.call(a,h,g)+cx;return{r:i,a0:j,a1:k,p0:[i*Math.cos(j),i*Math.sin(j)],p1:[i*Math.cos(k),i*Math.sin(k)]}}function h(a,b){return a.a0==b.a0&&a.a1==b.a1}function i(a,b,c){return"A"+a+","+a+" 0 "+ +(c>Math.PI)+",1 "+b}function j(a,b,c,d){return"Q 0,0 "+d}var a=dg,b=dh,c=di,d=cB,e=cC;return f.radius=function(a){return arguments.length?(c=d3.functor(a),f):c},f.source=function(b){return arguments.length?(a=d3.functor(b),f):a},f.target=function(a){return arguments.length?(b=d3.functor(a),f):b},f.startAngle=function(a){return arguments.length?(d=d3.functor(a),f):d},f.endAngle=function(a){return arguments.length?(e=d3.functor(a),f):e},f},d3.svg.diagonal=function(){function d(d,e){var f=a.call(this,d,e),g=b.call(this,d,e),h=(f.y+g.y)/2,i=[f,{x:f.x,y:h},{x:g.x,y:h},g];return i=i.map(c),"M"+i[0]+"C"+i[1]+" "+i[2]+" "+i[3]}var a=dg,b=dh,c=dl;return d.source=function(b){return arguments.length?(a=d3.functor(b),d):a},d.target=function(a){return arguments.length?(b=d3.functor(a),d):b},d.projection=function(a){return arguments.length?(c=a,d):c},d},d3.svg.diagonal.radial=function(){var a=d3.svg.diagonal(),b=dl,c=a.projection;return a.projection=function(a){return arguments.length?c(dm(b=a)):b},a},d3.svg.mouse=d3.mouse,d3.svg.touches=d3.touches,d3.svg.symbol=function(){function c(c,d){return(dr.get(a.call(this,c,d))||dq)(b.call(this,c,d))}var a=dp,b=dn;return c.type=function(b){return arguments.length?(a=d3.functor(b),c):a},c.size=function(a){return arguments.length?(b=d3.functor(a),c):b},c};var dr=d3.map({circle:dq,cross:function(a){var b=Math.sqrt(a/5)/2;return"M"+ -3*b+","+ -b+"H"+ -b+"V"+ -3*b+"H"+b+"V"+ -b+"H"+3*b+"V"+b+"H"+b+"V"+3*b+"H"+ -b+"V"+b+"H"+ -3*b+"Z"},diamond:function(a){var b=Math.sqrt(a/(2*dt)),c=b*dt;return"M0,"+ -b+"L"+c+",0"+" 0,"+b+" "+ -c+",0"+"Z"},square:function(a){var b=Math.sqrt(a)/2;return"M"+ -b+","+ -b+"L"+b+","+ -b+" "+b+","+b+" "+ -b+","+b+"Z"},"triangle-down":function(a){var b=Math.sqrt(a/ds),c=b*ds/2;return"M0,"+c+"L"+b+","+ -c+" "+ -b+","+ -c+"Z"},"triangle-up":function(a){var b=Math.sqrt(a/ds),c=b*ds/2;return"M0,"+ -c+"L"+b+","+c+" "+ -b+","+c+"Z"}});d3.svg.symbolTypes=dr.keys();var ds=Math.sqrt(3),dt=Math.tan(30*Math.PI/180);d3.svg.axis=function(){function k(k){k.each(function(l,m,n){var o=d3.select(this),p=k.delay?function(a){var b=bI;try{return bI=k.id,a.transition().delay(k[n][m].delay).duration(k[n][m].duration).ease(k.ease())}finally{bI=b}}:Object,q=h==null?a.ticks?a.ticks.apply(a,g):a.domain():h,r=i==null?a.tickFormat?a.tickFormat.apply(a,g):String:i,s=dw(a,q,j),t=o.selectAll(".minor").data(s,String),u=t.enter().insert("line","g").attr("class","tick minor").style("opacity",1e-6),v=p(t.exit()).style("opacity",1e-6).remove(),w=p(t).style("opacity",1),x=o.selectAll("g").data(q,String),y=x.enter().insert("g","path").style("opacity",1e-6),z=p(x.exit()).style("opacity",1e-6).remove(),A=p(x).style("opacity",1),B,C=b$(a),D=o.selectAll(".domain").data([0]),E=D.enter().append("path").attr("class","domain"),F=p(D),G=a.copy(),H=this.__chart__||G;this.__chart__=G,y.append("line").attr("class","tick"),y.append("text"),A.select("text").text(r);switch(b){case"bottom":B=du,u.attr("y2",d),w.attr("x2",0).attr("y2",d),y.select("line").attr("y2",c),y.select("text").attr("y",Math.max(c,0)+f),A.select("line").attr("x2",0).attr("y2",c),A.select("text").attr("x",0).attr("y",Math.max(c,0)+f).attr("dy",".71em").attr("text-anchor","middle"),F.attr("d","M"+C[0]+","+e+"V0H"+C[1]+"V"+e);break;case"top":B=du,u.attr("y2",-d),w.attr("x2",0).attr("y2",-d),y.select("line").attr("y2",-c),y.select("text").attr("y",-(Math.max(c,0)+f)),A.select("line").attr("x2",0).attr("y2",-c),A.select("text").attr("x",0).attr("y",-(Math.max(c,0)+f)).attr("dy","0em").attr("text-anchor","middle"),F.attr("d","M"+C[0]+","+ -e+"V0H"+C[1]+"V"+ -e);break;case"left":B=dv,u.attr("x2",-d),w.attr("x2",-d).attr("y2",0),y.select("line").attr("x2",-c),y.select("text").attr("x",-(Math.max(c,0)+f)),A.select("line").attr("x2",-c).attr("y2",0),A.select("text").attr("x",-(Math.max(c,0)+f)).attr("y",0).attr("dy",".32em").attr("text-anchor","end"),F.attr("d","M"+ -e+","+C[0]+"H0V"+C[1]+"H"+ -e);break;case"right":B=dv,u.attr("x2",d),w.attr("x2",d).attr("y2",0),y.select("line").attr("x2",c),y.select("text").attr("x",Math.max(c,0)+f),A.select("line").attr("x2",c).attr("y2",0),A.select("text").attr("x",Math.max(c,0)+f).attr("y",0).attr("dy",".32em").attr("text-anchor","start"),F.attr("d","M"+e+","+C[0]+"H0V"+C[1]+"H"+e)}if(a.ticks)y.call(B,H),A.call(B,G),z.call(B,G),u.call(B,H),w.call(B,G),v.call(B,G);else{var I=G.rangeBand()/2,J=function(a){return G(a)+I};y.call(B,J),A.call(B,J)}})}var a=d3.scale.linear(),b="bottom",c=6,d=6,e=6,f=3,g=[10],h=null,i,j=0;return k.scale=function(b){return arguments.length?(a=b,k):a},k.orient=function(a){return arguments.length?(b=a,k):b},k.ticks=function(){return arguments.length?(g=arguments,k):g},k.tickValues=function(a){return arguments.length?(h=a,k):h},k.tickFormat=function(a){return arguments.length?(i=a,k):i},k.tickSize=function(a,b,f){if(!arguments.length)return c;var g=arguments.length-1;return c=+a,d=g>1?+b:c,e=g>0?+arguments[g]:c,k},k.tickPadding=function(a){return arguments.length?(f=+a,k):f},k.tickSubdivide=function(a){return arguments.length?(j=+a,k):j},k},d3.svg.brush=function(){function e(a){var g=b&&c?["n","e","s","w","nw","ne","se","sw"]:b?["e","w"]:c?["n","s"]:[];a.each(function(){var a=d3.select(this),h=a.selectAll(".background").data([0]),i=a.selectAll(".extent").data([0]),j=a.selectAll(".resize").data(g,String),k;a.style("pointer-events","all").on("mousedown.brush",f).on("touchstart.brush",f),h.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),i.enter().append("rect").attr("class","extent").style("cursor","move"),j.enter().append("g").attr("class",function(a){return"resize "+a}).style("cursor",function(a){return dQ[a]}).append("rect").attr("x",function(a){return/[ew]$/.test(a)?-3:null}).attr("y",function(a){return/^[ns]/.test(a)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),j.style("display",e.empty()?"none":null),j.exit().remove(),b&&(k=b$(b),h.attr("x",k[0]).attr("width",k[1]-k[0]),dJ(a,d)),c&&(k=b$(c),h.attr("y",k[0]).attr("height",k[1]-k[0]),dK(a,d)),dI(a,d)})}function f(){var f=d3.select(d3.event.target),g;dx=e,dz=this,dC=d,dF=dH();if(dD=f.classed("extent"))dF[0]=d[0][0]-dF[0],dF[1]=d[0][1]-dF[1];else if(g=f[0][0].__data__){var h=+/w$/.test(g),i=+/^n/.test(g);dG=[d[1-h][0]-dF[0],d[1-i][1]-dF[1]],dF[0]=d[h][0],dF[1]=d[i][1]}else d3.event.altKey&&(dE=dF.slice());d3.select(this).style("pointer-events","none").selectAll(".resize").style("display",null),d3.select("body").style("cursor",f.style("cursor")),dA=!/^(n|s)$/.test(g)&&b,dB=!/^(e|w)$/.test(g)&&c,dy=a.of(this,arguments),dy({type:"brushstart"}),dN(),W()}var a=Y(e,"brushstart","brush","brushend"),b,c,d=[[0,0],[0,0]];return e.x=function(a){return arguments.length?(b=a,e):b},e.y=function(a){return arguments.length?(c=a,e):c},e.extent=function(a){var f,g,h,i,j;return arguments.length?(b&&(f=a[0],g=a[1],c&&(f=f[0],g=g[0]),b.invert&&(f=b(f),g=b(g)),ge&&(e=h),d.push(h)}for(g=0;g=i[0]&&o<=i[1]&&(k=g[d3.bisect(j,o,1,m)-1],k.y+=n,k.push(e[f]));return g}var a=!0,b=Number,c=eB,d=ez;return e.value=function(a){return arguments.length?(b=a,e):b},e.range=function(a){return arguments.length?(c=d3.functor(a),e):c},e.bins=function(a){return arguments.length?(d=typeof a=="number"?function(b){return eA(b,a)}:d3.functor(a),e):d},e.frequency=function(b){return arguments.length?(a=!!b,e):a},e},d3.layout.hierarchy=function(){function e(f,h,i){var j=b.call(g,f,h),k=eH?f:{data:f};k.depth=h,i.push(k);if(j&&(m=j.length)){var l=-1,m,n=k.children=[],o=0,p=h+1;while(++l0&&(fd(fe(g,a,d),a,m),i+=m,j+=m),k+=g._tree.mod,i+=e._tree.mod,l+=h._tree.mod,j+=f._tree.mod;g&&!eY(f)&&(f._tree.thread=g,f._tree.mod+=k-j),e&&!eX(h)&&(h._tree.thread=e,h._tree.mod+=i-l,d=a)}return d}var f=a.call(this,d,e),g=f[0];fb(g,function(a,b){a._tree={ancestor:a,prelim:0,mod:0,change:0,shift:0,number:b?b._tree.number+1:0}}),h(g),i(g,-g._tree.prelim);var k=eZ(g,e_),l=eZ(g,e$),m=eZ(g,fa),n=k.x-b(k,l)/2,o=l.x+b(l,k)/2,p=m.depth||1;return fb(g,function(a){a.x=(a.x-n)/(o-n)*c[0],a.y=a.depth/p*c[1],delete a._tree}),f}var a=d3.layout.hierarchy().sort(null).value(null),b=eW,c=[1,1];return d.separation=function(a){return arguments.length?(b=a,d):b},d.size=function(a){return arguments.length?(c=a,d):c},eC(d,a)},d3.layout.treemap=function(){function i(a,b){var c=-1,d=a.length,e,f;while(++c0)d.push(g=f[o-1]),d.area+=g.area,(k=l(d,n))<=h?(f.pop(),h=k):(d.area-=d.pop().area,m(d,n,c,!1),n=Math.min(c.dx,c.dy),d.length=d.area=0,h=Infinity);d.length&&(m(d,n,c,!0),d.length=d.area=0),b.forEach(j)}}function k(a){var b=a.children;if(b&&b.length){var c=e(a),d=b.slice(),f,g=[];i(d,c.dx*c.dy/a.value),g.area=0;while(f=d.pop())g.push(f),g.area+=f.area,f.z!=null&&(m(g,f.z?c.dx:c.dy,c,!d.length),g.length=g.area=0);b.forEach(k)}}function l(a,b){var c=a.area,d,e=0,f=Infinity,g=-1,i=a.length;while(++ge&&(e=d)}return c*=c,b*=b,c?Math.max(b*e*h/c,c/(b*f*h)):Infinity}function m(a,c,d,e){var f=-1,g=a.length,h=d.x,i=d.y,j=c?b(a.area/c):0,k;if(c==d.dx){if(e||j>d.dy)j=d.dy;while(++fd.dx)j=d.dx;while(++f=a.length)return d;if(i)return i=!1,c;var b=f.lastIndex;if(a.charCodeAt(b)===34){var e=b;while(e++50?b:f<-140?c:g<21?d:a)(e)}var a=d3.geo.albers(),b=d3.geo.albers().origin([-160,60]).parallels([55,65]),c=d3.geo.albers().origin([-160,20]).parallels([8,18]),d=d3.geo.albers().origin([-60,10]).parallels([8,18]);return e.scale=function(f){return arguments.length?(a.scale(f),b.scale(f*.6),c.scale(f),d.scale(f*1.5),e.translate(a.translate())):a.scale()},e.translate=function(f){if(!arguments.length)return a.translate();var g=a.scale()/1e3,h=f[0],i=f[1];return a.translate(f),b.translate([h-400*g,i+170*g]),c.translate([h-190*g,i+200*g]),d.translate([h+580*g,i+430*g]),e},e.scale(a.scale())},d3.geo.bonne=function(){function g(g){var h=g[0]*fj-c,i=g[1]*fj-d;if(e){var j=f+e-i,k=h*Math.cos(i)/j;h=j*Math.sin(k),i=j*Math.cos(k)-f}else h*=Math.cos(i),i*=-1;return[a*h+b[0],a*i+b[1]]}var a=200,b=[480,250],c,d,e,f;return g.invert=function(d){var g=(d[0]-b[0])/a,h=(d[1]-b[1])/a;if(e){var i=f+h,j=Math.sqrt(g*g+i*i);h=f+e-j,g=c+j*Math.atan2(g,i)/Math.cos(h)}else h*=-1,g/=Math.cos(h);return[g/fj,h/fj]},g.parallel=function(a){return arguments.length?(f=1/Math.tan(e=a*fj),g):e/fj},g.origin=function(a){return arguments.length?(c=a[0]*fj,d=a[1]*fj,g):[c/fj,d/fj]},g.scale=function(b){return arguments.length?(a=+b,g):a},g.translate=function(a){return arguments.length?(b=[+a[0],+a[1]],g):b},g.origin([0,0]).parallel(45)},d3.geo.equirectangular=function(){function c(c){var d=c[0]/360,e=-c[1]/360;return[a*d+b[0],a*e+b[1]]}var a=500,b=[480,250];return c.invert=function(c){var d=(c[0]-b[0])/a,e=(c[1]-b[1])/a;return[360*d,-360*e]},c.scale=function(b){return arguments.length?(a=+b,c):a},c.translate=function(a){return arguments.length?(b=[+a[0],+a[1]],c):b},c},d3.geo.mercator=function(){function c(c){var d=c[0]/360,e=-(Math.log(Math.tan(Math.PI/4+c[1]*fj/2))/fj)/360;return[a*d+b[0],a*Math.max(-0.5,Math.min(.5,e))+b[1]]}var a=500,b=[480,250];return c.invert=function(c){var d=(c[0]-b[0])/a,e=(c[1]-b[1])/a;return[360*d,2*Math.atan(Math.exp(-360*e*fj))/fj-90]},c.scale=function(b){return arguments.length?(a=+b,c):a},c.translate=function(a){return arguments.length?(b=[+a[0],+a[1]],c):b},c},d3.geo.path=function(){function d(c,d){return typeof a=="function"&&(b=fl(a.apply(this,arguments))),f(c)||null}function e(a){return c(a).join(",")}function h(a){var b=k(a[0]),c=0,d=a.length;while(++c0){b.push("M");while(++h0){b.push("M");while(++kd&&(d=a),fe&&(e=f)}),[[b,c],[d,e]]};var fn={Feature:fo,FeatureCollection:fp,GeometryCollection:fq,LineString:fr,MultiLineString:fs,MultiPoint:fr,MultiPolygon:ft,Point:fu,Polygon:fv};d3.geo.circle=function(){function e(){}function f(a){return d.distance(a)=k*k+l*l?d[f].index=-1:(d[m].index=-1,o=d[f].angle,m=f,n=g)):(o=d[f].angle,m=f,n=g);e.push(h);for(f=0,g=0;f<2;++g)d[g].index!==-1&&(e.push(d[g].index),f++);p=e.length;for(;g=0?(c=a.ep.r,d=a.ep.l):(c=a.ep.l,d=a.ep.r),a.a===1?(g=c?c.y:-1e6,e=a.c-a.b*g,h=d?d.y:1e6,f=a.c-a.b*h):(e=c?c.x:-1e6,g=a.c-a.a*e,f=d?d.x:1e6,h=a.c-a.a*f);var i=[e,g],j=[f,h];b[a.region.l.index].push(i,j),b[a.region.r.index].push(i,j)}),b.map(function(b,c){var d=a[c][0],e=a[c][1];return b.forEach(function(a){a.angle=Math.atan2(a[0]-d,a[1]-e)}),b.sort(function(a,b){return a.angle-b.angle}).filter(function(a,c){return!c||a.angle-b[c-1].angle>1e-10})})};var fF={l:"r",r:"l"};d3.geom.delaunay=function(a){var b=a.map(function(){return[]}),c=[];return fG(a,function(c){b[c.region.l.index].push(a[c.region.r.index])}),b.forEach(function(b,d){var e=a[d],f=e[0],g=e[1];b.forEach(function(a){a.angle=Math.atan2(a[0]-f,a[1]-g)}),b.sort(function(a,b){return a.angle-b.angle});for(var h=0,i=b.length-1;h=g,j=b.y>=h,l=(j<<1)+i;a.leaf=!1,a=a.nodes[l]||(a.nodes[l]=fH()),i?c=g:e=g,j?d=h:f=h,k(a,b,c,d,e,f)}var f,g=-1,h=a.length;h&&isNaN(a[0].x)&&(a=a.map(fJ));if(arguments.length<5)if(arguments.length===3)e=d=c,c=b;else{b=c=Infinity,d=e=-Infinity;while(++gd&&(d=f.x),f.y>e&&(e=f.y);var i=d-b,j=e-c;i>j?e=c+i:d=b+j}var m=fH();return m.add=function(a){k(m,a,b,c,d,e)},m.visit=function(a){fI(a,m,b,c,d,e)},a.forEach(m.add),m},d3.time={};var fK=Date;fL.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(a){this._.setUTCDate(a)},setDay:function(a){this._.setUTCDay(a)},setFullYear:function(a){this._.setUTCFullYear(a)},setHours:function(a){this._.setUTCHours(a)},setMilliseconds:function(a){this._.setUTCMilliseconds(a)},setMinutes:function(a){this._.setUTCMinutes(a)},setMonth:function(a){this._.setUTCMonth(a)},setSeconds:function(a){this._.setUTCSeconds(a)},setTime:function(a){this._.setTime(a)}},d3.time.format=function(a){function c(c){var d=[],e=-1,f=0,g,h;while(++e=12?"PM":"AM"},S:function(a){return fN(a.getSeconds())},U:function(a){return fN(d3.time.sundayOfYear(a))},w:function(a){return a.getDay()},W:function(a){return fN(d3.time.mondayOfYear(a))},x:d3.time.format("%m/%d/%y"),X:d3.time.format("%H:%M:%S"),y:function(a){return fN(a.getFullYear()%100)},Y:function(a){return fP(a.getFullYear()%1e4)},Z:gr,"%":function(a){return"%"}},fS={a:fT,A:fU,b:fX,B:fZ,c:gb,d:gi,e:gi,H:gj,I:gk,L:gn,m:gh,M:gl,p:gp,S:gm,x:gc,X:gd,y:gf,Y:ge},fV=/^(?:sun|mon|tue|wed|thu|fri|sat)/i,fW=/^(?:Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)/i;d3_time_weekdays=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var fY=d3.map({jan:0,feb:1,mar:2,apr:3,may:4,jun:5,jul:6,aug:7,sep:8,oct:9,nov:10,dec:11}),f$=/^(?:January|February|March|April|May|June|July|August|September|October|November|December)/ig,f_=d3.map({january:0,february:1,march:2,april:3,may:4,june:5,july:6,august:7,september:8,october:9,november:10,december:11}),ga=["January","February","March","April","May","June","July","August","September","October","November","December"],go=/\s*\d+/,gq=d3.map({am:0,pm:1});d3.time.format.utc=function(a){function c(a){try{fK=fL;var c=new fK;return c._=a,b(c)}finally{fK=Date}}var b=d3.time.format(a);return c.parse=function(a){try{fK=fL;var c=b.parse(a);return c&&c._}finally{fK=Date}},c.toString=b.toString,c};var gs=d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%LZ");d3.time.format.iso=Date.prototype.toISOString?gt:gs,gt.parse=function(a){return new Date(a)},gt.toString=gs.toString,d3.time.second=gu(function(a){return new fK(Math.floor(a/1e3)*1e3)},function(a,b){a.setTime(a.getTime()+Math.floor(b)*1e3)},function(a){return a.getSeconds()}),d3.time.seconds=d3.time.second.range,d3.time.seconds.utc=d3.time.second.utc.range,d3.time.minute=gu(function(a){return new fK(Math.floor(a/6e4)*6e4)},function(a,b){a.setTime(a.getTime()+Math.floor(b)*6e4)},function(a){return a.getMinutes()}),d3.time.minutes=d3.time.minute.range,d3.time.minutes.utc=d3.time.minute.utc.range,d3.time.hour=gu(function(a){var b=a.getTimezoneOffset()/60;return new fK((Math.floor(a/36e5-b)+b)*36e5)},function(a,b){a.setTime(a.getTime()+Math.floor(b)*36e5)},function(a){return a.getHours()}),d3.time.hours=d3.time.hour.range,d3.time.hours.utc=d3.time.hour.utc.range,d3.time.day=gu(function(a){return new fK(a.getFullYear(),a.getMonth(),a.getDate())},function(a,b){a.setDate(a.getDate()+b)},function(a){return a.getDate()-1}),d3.time.days=d3.time.day.range,d3.time.days.utc=d3.time.day.utc.range,d3.time.dayOfYear=function(a){var b=d3.time.year(a);return Math.floor((a-b)/864e5-(a.getTimezoneOffset()-b.getTimezoneOffset())/1440)},d3_time_weekdays.forEach(function(a,b){a=a.toLowerCase(),b=7-b;var c=d3.time[a]=gu(function(a){return(a=d3.time.day(a)).setDate(a.getDate()-(a.getDay()+b)%7),a},function(a,b){a.setDate(a.getDate()+Math.floor(b)*7)},function(a){var c=d3.time.year(a).getDay();return Math.floor((d3.time.dayOfYear(a)+(c+b)%7)/7)-(c!==b)});d3.time[a+"s"]=c.range,d3.time[a+"s"].utc=c.utc.range,d3.time[a+"OfYear"]=function(a){var c=d3.time.year(a).getDay();return Math.floor((d3.time.dayOfYear(a)+(c+b)%7)/7)}}),d3.time.week=d3.time.sunday,d3.time.weeks=d3.time.sunday.range,d3.time.weeks.utc=d3.time.sunday.utc.range,d3.time.weekOfYear=d3.time.sundayOfYear,d3.time.month=gu(function(a){return new fK(a.getFullYear(),a.getMonth(),1)},function(a,b){a.setMonth(a.getMonth()+b)},function(a){return a.getMonth()}),d3.time.months=d3.time.month.range,d3.time.months.utc=d3.time.month.utc.range,d3.time.year=gu(function(a){return new fK(a.getFullYear(),0,1)},function(a,b){a.setFullYear(a.getFullYear()+b)},function(a){return a.getFullYear()}),d3.time.years=d3.time.year.range,d3.time.years.utc=d3.time.year.utc.range;var gC=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],gD=[[d3.time.second,1],[d3.time.second,5],[d3.time.second,15],[d3.time.second,30],[d3.time.minute,1],[d3.time.minute,5],[d3.time.minute,15],[d3.time.minute,30],[d3.time.hour,1],[d3.time.hour,3],[d3.time.hour,6],[d3.time.hour,12],[d3.time.day,1],[d3.time.day,2],[d3.time.week,1],[d3.time.month,1],[d3.time.month,3],[d3.time.year,1]],gE=[[d3.time.format("%Y"),function(a){return!0}],[d3.time.format("%B"),function(a){return a.getMonth()}],[d3.time.format("%b %d"),function(a){return a.getDate()!=1}],[d3.time.format("%a %d"),function(a){return a.getDay()&&a.getDate()!=1}],[d3.time.format("%I %p"),function(a){return a.getHours()}],[d3.time.format("%I:%M"),function(a){return a.getMinutes()}],[d3.time.format(":%S"),function(a){return a.getSeconds()}],[d3.time.format(".%L"),function(a){return a.getMilliseconds()}]],gF=d3.scale.linear(),gG=gz(gE);gD.year=function(a,b){return gF.domain(a.map(gB)).ticks(b).map(gA)},d3.time.scale=function(){return gw(d3.scale.linear(),gD,gG)};var gH=gD.map(function(a){return[a[0].utc,a[1]]}),gI=[[d3.time.format.utc("%Y"),function(a){return!0}],[d3.time.format.utc("%B"),function(a){return a.getUTCMonth()}],[d3.time.format.utc("%b %d"),function(a){return a.getUTCDate()!=1}],[d3.time.format.utc("%a %d"),function(a){return a.getUTCDay()&&a.getUTCDate()!=1}],[d3.time.format.utc("%I %p"),function(a){return a.getUTCHours()}],[d3.time.format.utc("%I:%M"),function(a){return a.getUTCMinutes()}],[d3.time.format.utc(":%S"),function(a){return a.getUTCSeconds()}],[d3.time.format.utc(".%L"),function(a){return a.getUTCMilliseconds()}]],gJ=gz(gI);gH.year=function(a,b){return gF.domain(a.map(gL)).ticks(b).map(gK)},d3.time.scale.utc=function(){return gw(d3.scale.linear(),gH,gJ)}})(); \ No newline at end of file diff --git a/src/behavior/drag.js b/src/behavior/drag.js index 91e74f8b..12dac173 100644 --- a/src/behavior/drag.js +++ b/src/behavior/drag.js @@ -1,7 +1,7 @@ // TODO Track touch points by identifier. d3.behavior.drag = function() { - var event = d3.dispatch("drag", "dragstart", "dragend"), + var event = d3_eventDispatch(drag, "drag", "dragstart", "dragend"), origin = null; function drag() { @@ -19,13 +19,11 @@ d3.behavior.drag = function() { // snapshot the local context for subsequent dispatch function start() { - d3_behavior_dragEvent = event; d3_behavior_dragEventTarget = d3.event.target; - d3_behavior_dragTarget = this; - d3_behavior_dragArguments = arguments; + d3_behavior_dragEvent = event.of(d3_behavior_dragTarget = this, arguments); d3_behavior_dragOrigin = d3_behavior_dragPoint(); if (origin) { - d3_behavior_dragOffset = origin.apply(d3_behavior_dragTarget, d3_behavior_dragArguments); + d3_behavior_dragOffset = origin.apply(d3_behavior_dragTarget, arguments); d3_behavior_dragOffset = [d3_behavior_dragOffset.x - d3_behavior_dragOrigin[0], d3_behavior_dragOffset.y - d3_behavior_dragOrigin[1]]; } else { d3_behavior_dragOffset = [0, 0]; @@ -35,7 +33,7 @@ d3.behavior.drag = function() { function mousedown() { start.apply(this, arguments); - d3_behavior_dragDispatch("dragstart"); + d3_behavior_dragEvent({type: "dragstart"}); } drag.origin = function(x) { @@ -50,40 +48,14 @@ d3.behavior.drag = function() { var d3_behavior_dragEvent, d3_behavior_dragEventTarget, d3_behavior_dragTarget, - d3_behavior_dragArguments, d3_behavior_dragOffset, d3_behavior_dragOrigin, d3_behavior_dragMoved; -function d3_behavior_dragDispatch(type) { - var p = d3_behavior_dragPoint(), - o = d3.event, - e = d3.event = {type: type}; - - if (p) { - e.x = p[0] + d3_behavior_dragOffset[0]; - e.y = p[1] + d3_behavior_dragOffset[1]; - e.dx = p[0] - d3_behavior_dragOrigin[0]; - e.dy = p[1] - d3_behavior_dragOrigin[1]; - d3_behavior_dragMoved |= e.dx | e.dy; - d3_behavior_dragOrigin = p; - } - - try { - d3_behavior_dragEvent[type].apply(d3_behavior_dragTarget, d3_behavior_dragArguments); - } finally { - d3.event = o; - } - - o.stopPropagation(); -} - function d3_behavior_dragPoint() { var p = d3_behavior_dragTarget.parentNode, t = d3.event.changedTouches; - return p && (t - ? d3.touches(p, t)[0] - : d3.mouse(p)); + return t ? d3.touches(p, t)[0] : d3.mouse(p); } function d3_behavior_dragMove() { @@ -93,13 +65,26 @@ function d3_behavior_dragMove() { // O NOES! The drag element was removed from the DOM. if (!parent) return d3_behavior_dragUp(); - d3_behavior_dragDispatch("drag"); + var p = d3_behavior_dragPoint(), + dx = p[0] - d3_behavior_dragOrigin[0], + dy = p[1] - d3_behavior_dragOrigin[1]; + + d3_behavior_dragMoved |= dx | dy; + d3_behavior_dragOrigin = p; d3_eventCancel(); + + d3_behavior_dragEvent({ + type: "drag", + x: p[0] + d3_behavior_dragOffset[0], + y: p[1] + d3_behavior_dragOffset[1], + dx: dx, + dy: dy + }); } function d3_behavior_dragUp() { if (!d3_behavior_dragTarget) return; - d3_behavior_dragDispatch("dragend"); + d3_behavior_dragEvent({type: "dragend"}); // If the node was moved, prevent the mouseup from propagating. // Also prevent the subsequent click from propagating (e.g., for anchors). @@ -111,7 +96,6 @@ function d3_behavior_dragUp() { d3_behavior_dragEvent = d3_behavior_dragEventTarget = d3_behavior_dragTarget = - d3_behavior_dragArguments = d3_behavior_dragOffset = d3_behavior_dragOrigin = null; } diff --git a/src/behavior/zoom.js b/src/behavior/zoom.js index 8e9efa0a..38c73202 100644 --- a/src/behavior/zoom.js +++ b/src/behavior/zoom.js @@ -4,7 +4,7 @@ d3.behavior.zoom = function() { scale = 1, scale0, // scale when we started touching scaleExtent = d3_behavior_zoomInfinity, - event = d3.dispatch("zoom"), + event = d3_eventDispatch(zoom, "zoom"), x0, x1, y0, @@ -73,20 +73,17 @@ d3.behavior.zoom = function() { translate[1] += p[1] - l[1]; } - function dispatch(argumentz) { - var o = d3.event; // events can by reentrant (e.g., focus); - d3.event = {scale: scale, translate: translate, target: zoom}; + function dispatch(event) { if (x1) x1.domain(x0.range().map(function(x) { return (x - translate[0]) / scale; }).map(x0.invert)); if (y1) y1.domain(y0.range().map(function(y) { return (y - translate[1]) / scale; }).map(y0.invert)); - try { event.zoom.apply(zoom, argumentz); } - finally { d3.event = o; } - o.preventDefault(); + d3.event.preventDefault(); + event({type: "zoom", scale: scale, translate: translate}); } function mousedown() { var moved = 0, that = this, - argumentz = arguments, + event_ = event.of(that, arguments), target = d3.event.target, w = d3.select(window).on("mousemove.zoom", mousemove).on("mouseup.zoom", mouseup), l = location(d3.mouse(that)); @@ -97,7 +94,7 @@ d3.behavior.zoom = function() { function mousemove() { moved = 1; translateTo(d3.mouse(that), l); - dispatch(argumentz); + dispatch(event_); } function mouseup() { @@ -115,7 +112,7 @@ d3.behavior.zoom = function() { if (!translate0) translate0 = location(d3.mouse(this)); scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * scale); translateTo(d3.mouse(this), translate0); - dispatch(arguments); + dispatch(event.of(this, arguments)); } function mousemove() { @@ -126,7 +123,7 @@ d3.behavior.zoom = function() { var p = d3.mouse(this), l = location(p); scaleTo(d3.event.shiftKey ? scale / 2 : scale * 2); translateTo(p, l); - dispatch(arguments); + dispatch(event.of(this, arguments)); } function touchstart() { @@ -142,7 +139,7 @@ d3.behavior.zoom = function() { var p = touches[0], l = location(touches[0]); scaleTo(scale * 2); translateTo(p, l); - dispatch(arguments); + dispatch(event.of(this, arguments)); } touchtime = now; } @@ -158,7 +155,7 @@ d3.behavior.zoom = function() { scaleTo(d3.event.scale * scale0); } translateTo(p0, l0); - dispatch(arguments); + dispatch(event.of(this, arguments)); } return d3.rebind(zoom, event, "on"); diff --git a/src/core/dispatch.js b/src/core/dispatch.js index c155ab9c..1bfe8577 100644 --- a/src/core/dispatch.js +++ b/src/core/dispatch.js @@ -1,5 +1,5 @@ d3.dispatch = function() { - var dispatch = new d3_dispatch(), + var dispatch = new d3_dispatch, i = -1, n = arguments.length; while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch); diff --git a/src/core/event.js b/src/core/event.js index 947cf631..f58c024f 100644 --- a/src/core/event.js +++ b/src/core/event.js @@ -4,3 +4,46 @@ function d3_eventCancel() { d3.event.stopPropagation(); d3.event.preventDefault(); } + +function d3_eventSource() { + var e = d3.event, s; + while (s = e.sourceEvent) e = s; + return e; +} + +// Like d3.dispatch, but for custom events abstracting native UI events. These +// events have a target component (such as a brush), a target element (such as +// the svg:g element containing the brush) and the standard arguments `d` (the +// target element's data) and `i` (the selection index of the target element). +function d3_eventDispatch(target) { + var dispatch = new d3_dispatch, + i = 0, + n = arguments.length; + + while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch); + + // Creates a dispatch context for the specified `thiz` (typically, the target + // DOM element that received the source event) and `argumentz` (typically, the + // data `d` and index `i` of the target element). The returned function can be + // used to dispatch an event to any registered listeners; the function takes a + // single argument as input, being the event to dispatch. The event must have + // a "type" attribute which corresponds to a type registered in the + // constructor. This context will automatically populate the "sourceEvent" and + // "target" attributes of the event, as well as setting the `d3.event` global + // for the duration of the notification. + dispatch.of = function(thiz, argumentz) { + return function(e1) { + try { + var e0 = + e1.sourceEvent = d3.event; + e1.target = target; + d3.event = e1; + dispatch[e1.type].apply(thiz, argumentz); + } finally { + d3.event = e0; + } + }; + }; + + return dispatch; +} diff --git a/src/core/mouse.js b/src/core/mouse.js index ab29bf86..52e1a86b 100644 --- a/src/core/mouse.js +++ b/src/core/mouse.js @@ -1,5 +1,5 @@ d3.mouse = function(container) { - return d3_mousePoint(container, d3.event); + return d3_mousePoint(container, d3_eventSource()); }; // https://bugs.webkit.org/show_bug.cgi?id=44083 diff --git a/src/core/touches.js b/src/core/touches.js index 7ac75232..23237542 100644 --- a/src/core/touches.js +++ b/src/core/touches.js @@ -1,6 +1,5 @@ d3.touches = function(container, touches) { - if (arguments.length < 2) touches = d3.event.touches; - + if (arguments.length < 2) touches = d3_eventSource().touches; return touches ? d3_array(touches).map(function(touch) { var point = d3_mousePoint(container, touch); point.identifier = touch.identifier; diff --git a/src/layout/force.js b/src/layout/force.js index 83f6b870..f34db3bd 100644 --- a/src/layout/force.js +++ b/src/layout/force.js @@ -289,7 +289,6 @@ function d3_layout_forceDragOut(d) { } function d3_layout_forceDragEnd() { - d3_layout_forceDrag(); d3_layout_forceDragNode.fixed &= 1; d3_layout_forceDragForce = d3_layout_forceDragNode = null; } diff --git a/src/svg/brush.js b/src/svg/brush.js index 2a42dd59..2594e41b 100644 --- a/src/svg/brush.js +++ b/src/svg/brush.js @@ -1,5 +1,5 @@ d3.svg.brush = function() { - var event = d3.dispatch("brushstart", "brush", "brushend"), + var event = d3_eventDispatch(brush, "brushstart", "brush", "brushend"), x, // x-scale, optional y, // y-scale, optional extent = [[0, 0], [0, 0]]; // [x0, y0], [x1, y1] @@ -107,24 +107,12 @@ d3.svg.brush = function() { d3_svg_brushY = !/^(e|w)$/.test(resize) && y; // Notify listeners. - d3_svg_brushDispatch = dispatcher(this, arguments); - d3_svg_brushDispatch("brushstart"); + d3_svg_brushEvent = event.of(this, arguments); + d3_svg_brushEvent({type: "brushstart"}); d3_svg_brushMove(); d3_eventCancel(); } - function dispatcher(that, argumentz) { - return function(type) { - var e = d3.event; - try { - d3.event = {type: type, target: brush}; - event[type].apply(that, argumentz); - } finally { - d3.event = e; - } - }; - } - brush.x = function(z) { if (!arguments.length) return x; x = z; @@ -199,7 +187,7 @@ d3.svg.brush = function() { }; var d3_svg_brush, - d3_svg_brushDispatch, + d3_svg_brushEvent, d3_svg_brushTarget, d3_svg_brushX, d3_svg_brushY, @@ -298,7 +286,7 @@ function d3_svg_brushMove() { // Final redraw and notify listeners. if (moved) { d3_svg_brushRedraw(g, d3_svg_brushExtent); - d3_svg_brushDispatch("brush"); + d3_svg_brushEvent({type: "brush"}); } } } @@ -351,9 +339,9 @@ function d3_svg_brushUp() { d3_svg_brushMove(); d3.select(d3_svg_brushTarget).style("pointer-events", "all").selectAll(".resize").style("display", d3_svg_brush.empty() ? "none" : null); d3.select("body").style("cursor", null); - d3_svg_brushDispatch("brushend"); + d3_svg_brushEvent({type: "brushend"}); d3_svg_brush = - d3_svg_brushDispatch = + d3_svg_brushEvent = d3_svg_brushTarget = d3_svg_brushX = d3_svg_brushY =