d3_rails 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -14,7 +14,23 @@ or you can use it to build dynamic pages (like jQuery).
14
14
 
15
15
  # D3 Version
16
16
 
17
- The current release of this gem is using **D3 v=2.5.1**
17
+ The current release of this gem is using **D3 v=2.6.0**
18
+ **Last Updated 11-23-2011**
19
+
20
+ # Included Javascripts
21
+ **minified js files are not included, since the rails asset pipeline sorta necessitates the compiling (and likely minifying) your js files for production**
22
+
23
+ colorbrewer.js
24
+ d3_csv.js
25
+ d3.js
26
+ d3.chart.js
27
+ d3.geo.js
28
+ d3.geom.js
29
+ d3.layout.js
30
+ d3.time.js
31
+ science.js
32
+ science.lin.js
33
+ science.stats.js
18
34
 
19
35
  ### Installation
20
36
 
@@ -1,3 +1,3 @@
1
1
  module D3Rails
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -10,7 +10,7 @@ try {
10
10
  d3_style_setProperty.call(this, name, value + "", priority);
11
11
  };
12
12
  }
13
- d3 = {version: "2.5.1"}; // semver
13
+ d3 = {version: "2.6.0"}; // semver
14
14
  var d3_array = d3_arraySlice; // conversion for NodeLists
15
15
 
16
16
  function d3_arrayCopy(pseudoarray) {
@@ -46,13 +46,22 @@ function d3_this() {
46
46
  d3.functor = function(v) {
47
47
  return typeof v === "function" ? v : function() { return v; };
48
48
  };
49
- // A getter-setter method that preserves the appropriate `this` context.
50
- d3.rebind = function(object, method) {
49
+ // Copies a variable number of methods from source to target.
50
+ d3.rebind = function(target, source) {
51
+ var i = 1, n = arguments.length, method;
52
+ while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]);
53
+ return target;
54
+ };
55
+
56
+ // Method is assumed to be a standard D3 getter-setter:
57
+ // If passed with no arguments, gets the value.
58
+ // If passed with arguments, sets the value and returns the target.
59
+ function d3_rebind(target, source, method) {
51
60
  return function() {
52
- var x = method.apply(object, arguments);
53
- return arguments.length ? object : x;
61
+ var value = method.apply(source, arguments);
62
+ return arguments.length ? target : value;
54
63
  };
55
- };
64
+ }
56
65
  d3.ascending = function(a, b) {
57
66
  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
58
67
  };
@@ -166,6 +175,9 @@ d3.quantile = function(values, p) {
166
175
  e = H - h;
167
176
  return e ? v + e * (values[h] - v) : v;
168
177
  };
178
+ d3.transpose = function(matrix) {
179
+ return d3.zip.apply(d3, matrix);
180
+ };
169
181
  d3.zip = function() {
170
182
  if (!(n = arguments.length)) return [];
171
183
  for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m;) {
@@ -455,24 +467,22 @@ d3.xml = function(url, mime, callback) {
455
467
  }
456
468
  d3.xhr(url, mime, ready);
457
469
  };
458
- d3.ns = {
459
-
460
- prefix: {
461
- svg: "http://www.w3.org/2000/svg",
462
- xhtml: "http://www.w3.org/1999/xhtml",
463
- xlink: "http://www.w3.org/1999/xlink",
464
- xml: "http://www.w3.org/XML/1998/namespace",
465
- xmlns: "http://www.w3.org/2000/xmlns/"
466
- },
470
+ var d3_nsPrefix = {
471
+ svg: "http://www.w3.org/2000/svg",
472
+ xhtml: "http://www.w3.org/1999/xhtml",
473
+ xlink: "http://www.w3.org/1999/xlink",
474
+ xml: "http://www.w3.org/XML/1998/namespace",
475
+ xmlns: "http://www.w3.org/2000/xmlns/"
476
+ };
467
477
 
478
+ d3.ns = {
479
+ prefix: d3_nsPrefix,
468
480
  qualify: function(name) {
469
481
  var i = name.indexOf(":");
470
- return i < 0 ? name : {
471
- space: d3.ns.prefix[name.substring(0, i)],
472
- local: name.substring(i + 1)
473
- };
482
+ return i < 0 ? (name in d3_nsPrefix
483
+ ? {space: d3_nsPrefix[name], local: name} : name)
484
+ : {space: d3_nsPrefix[name.substring(0, i)], local: name.substring(i + 1)};
474
485
  }
475
-
476
486
  };
477
487
  d3.dispatch = function() {
478
488
  var dispatch = new d3_dispatch(),
@@ -494,7 +504,9 @@ d3_dispatch.prototype.on = function(type, listener) {
494
504
  type = type.substring(0, i);
495
505
  }
496
506
 
497
- this[type].on(name, listener);
507
+ return arguments.length < 2
508
+ ? this[type].on(name)
509
+ : (this[type].on(name, listener), this);
498
510
  };
499
511
 
500
512
  function d3_dispatch_event() {
@@ -506,24 +518,25 @@ function d3_dispatch_event() {
506
518
  i = -1,
507
519
  n = z.length,
508
520
  l;
509
- while (++i < n) if ((l = z[i])._on) l.apply(this, arguments);
521
+ while (++i < n) if (l = z[i].on) l.apply(this, arguments);
510
522
  }
511
523
 
512
524
  dispatch.on = function(name, listener) {
513
525
  var l, i;
514
526
 
515
- // remove the old listener, if any
527
+ // return the current listener, if any
528
+ if (arguments.length < 2) return (l = listenerByName[name]) && l.on;
529
+
530
+ // remove the old listener, if any (with copy-on-write)
516
531
  if (l = listenerByName[name]) {
517
- l._on = false;
532
+ l.on = null;
518
533
  listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1));
519
534
  delete listenerByName[name];
520
535
  }
521
536
 
522
537
  // add the new listener, if any
523
538
  if (listener) {
524
- listener._on = true;
525
- listeners.push(listener);
526
- listenerByName[name] = listener;
539
+ listeners.push(listenerByName[name] = {on: listener});
527
540
  }
528
541
 
529
542
  return dispatch;
@@ -1574,7 +1587,7 @@ d3_selectionPrototype.append = function(name) {
1574
1587
  name = d3.ns.qualify(name);
1575
1588
 
1576
1589
  function append() {
1577
- return this.appendChild(document.createElement(name));
1590
+ return this.appendChild(document.createElementNS(this.namespaceURI, name));
1578
1591
  }
1579
1592
 
1580
1593
  function appendNS() {
@@ -1591,7 +1604,7 @@ d3_selectionPrototype.insert = function(name, before) {
1591
1604
 
1592
1605
  function insert() {
1593
1606
  return this.insertBefore(
1594
- document.createElement(name),
1607
+ document.createElementNS(this.namespaceURI, name),
1595
1608
  d3_select(before, this));
1596
1609
  }
1597
1610
 
@@ -2313,6 +2326,10 @@ function d3_scaleExtent(domain) {
2313
2326
  var start = domain[0], stop = domain[domain.length - 1];
2314
2327
  return start < stop ? [start, stop] : [stop, start];
2315
2328
  }
2329
+
2330
+ function d3_scaleRange(scale) {
2331
+ return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range());
2332
+ }
2316
2333
  function d3_scale_nice(domain, nice) {
2317
2334
  var i0 = 0,
2318
2335
  i1 = domain.length - 1,
@@ -2411,11 +2428,7 @@ function d3_scale_linear(domain, range, interpolate, clamp) {
2411
2428
  };
2412
2429
 
2413
2430
  function d3_scale_linearRebind(scale, linear) {
2414
- scale.range = d3.rebind(scale, linear.range);
2415
- scale.rangeRound = d3.rebind(scale, linear.rangeRound);
2416
- scale.interpolate = d3.rebind(scale, linear.interpolate);
2417
- scale.clamp = d3.rebind(scale, linear.clamp);
2418
- return scale;
2431
+ return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp");
2419
2432
  }
2420
2433
 
2421
2434
  function d3_scale_linearNice(dx) {
@@ -2688,6 +2701,10 @@ function d3_scale_ordinal(domain, ranger) {
2688
2701
  return rangeBand;
2689
2702
  };
2690
2703
 
2704
+ scale.rangeExtent = function() {
2705
+ return ranger.x;
2706
+ };
2707
+
2691
2708
  scale.copy = function() {
2692
2709
  return d3_scale_ordinal(domain, ranger);
2693
2710
  };
@@ -3783,9 +3800,9 @@ d3.svg.axis = function() {
3783
3800
  }
3784
3801
  } : Object;
3785
3802
 
3786
- // Ticks.
3787
- var ticks = scale.ticks.apply(scale, tickArguments_),
3788
- tickFormat = tickFormat_ == null ? scale.tickFormat.apply(scale, tickArguments_) : tickFormat_;
3803
+ // Ticks, or domain values for ordinal scales.
3804
+ var ticks = scale.ticks ? scale.ticks.apply(scale, tickArguments_) : scale.domain(),
3805
+ tickFormat = tickFormat_ == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments_) : String) : tickFormat_;
3789
3806
 
3790
3807
  // Minor ticks.
3791
3808
  var subticks = d3_svg_axisSubdivide(scale, ticks, tickSubdivide),
@@ -3802,14 +3819,15 @@ d3.svg.axis = function() {
3802
3819
  tickTransform;
3803
3820
 
3804
3821
  // Domain.
3805
- var range = d3_scaleExtent(scale.range()),
3822
+ var range = d3_scaleRange(scale),
3806
3823
  path = g.selectAll(".domain").data([0]),
3807
3824
  pathEnter = path.enter().append("svg:path").attr("class", "domain"),
3808
3825
  pathUpdate = transition(path);
3809
3826
 
3810
- // Stash the new scale and grab the old scale.
3811
- var scale0 = this.__chart__ || scale;
3812
- this.__chart__ = scale.copy();
3827
+ // Stash a snapshot of the new scale, and retrieve the old snapshot.
3828
+ var scale1 = scale.copy(),
3829
+ scale0 = this.__chart__ || scale1;
3830
+ this.__chart__ = scale1;
3813
3831
 
3814
3832
  tickEnter.append("svg:line").attr("class", "tick");
3815
3833
  tickEnter.append("svg:text");
@@ -3850,13 +3868,27 @@ d3.svg.axis = function() {
3850
3868
  }
3851
3869
  }
3852
3870
 
3853
- tickEnter.call(tickTransform, scale0);
3854
- tickUpdate.call(tickTransform, scale);
3855
- tickExit.call(tickTransform, scale);
3871
+ // For quantitative scales:
3872
+ // - enter new ticks from the old scale
3873
+ // - exit old ticks to the new scale
3874
+ if (scale.ticks) {
3875
+ tickEnter.call(tickTransform, scale0);
3876
+ tickUpdate.call(tickTransform, scale1);
3877
+ tickExit.call(tickTransform, scale1);
3878
+ subtickEnter.call(tickTransform, scale0);
3879
+ subtickUpdate.call(tickTransform, scale1);
3880
+ subtickExit.call(tickTransform, scale1);
3881
+ }
3856
3882
 
3857
- subtickEnter.call(tickTransform, scale0);
3858
- subtickUpdate.call(tickTransform, scale);
3859
- subtickExit.call(tickTransform, scale);
3883
+ // For ordinal scales:
3884
+ // - any entering ticks are undefined in the old scale
3885
+ // - any exiting ticks are undefined in the new scale
3886
+ // Therefore, we only need to transition updating ticks.
3887
+ else {
3888
+ var dx = scale1.rangeBand() / 2, x = function(d) { return scale1(d) + dx; };
3889
+ tickEnter.call(tickTransform, x);
3890
+ tickUpdate.call(tickTransform, x);
3891
+ }
3860
3892
  });
3861
3893
  }
3862
3894
 
@@ -3985,12 +4017,12 @@ d3.svg.brush = function() {
3985
4017
  // Initialize the background to fill the defined range.
3986
4018
  // If the range isn't defined, you can post-process.
3987
4019
  if (x) {
3988
- e = d3_scaleExtent(x.range());
4020
+ e = d3_scaleRange(x);
3989
4021
  bg.attr("x", e[0]).attr("width", e[1] - e[0]);
3990
4022
  d3_svg_brushRedrawX(g, extent);
3991
4023
  }
3992
4024
  if (y) {
3993
- e = d3_scaleExtent(y.range());
4025
+ e = d3_scaleRange(y);
3994
4026
  bg.attr("y", e[0]).attr("height", e[1] - e[0]);
3995
4027
  d3_svg_brushRedrawY(g, extent);
3996
4028
  }
@@ -4067,11 +4099,13 @@ d3.svg.brush = function() {
4067
4099
  // Invert the pixel extent to data-space.
4068
4100
  if (!arguments.length) {
4069
4101
  if (x) {
4070
- x0 = x.invert(extent[0][0]), x1 = x.invert(extent[1][0]);
4102
+ x0 = extent[0][0], x1 = extent[1][0];
4103
+ if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1);
4071
4104
  if (x1 < x0) t = x0, x0 = x1, x1 = t;
4072
4105
  }
4073
4106
  if (y) {
4074
- y0 = y.invert(extent[0][1]), y1 = y.invert(extent[1][1]);
4107
+ y0 = extent[0][1], y1 = extent[1][1];
4108
+ if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1);
4075
4109
  if (y1 < y0) t = y0, y0 = y1, y1 = t;
4076
4110
  }
4077
4111
  return x && y ? [[x0, y0], [x1, y1]] : x ? [x0, x1] : y && [y0, y1];
@@ -4081,14 +4115,14 @@ d3.svg.brush = function() {
4081
4115
  if (x) {
4082
4116
  x0 = z[0], x1 = z[1];
4083
4117
  if (y) x0 = x0[0], x1 = x1[0];
4084
- x0 = x(x0), x1 = x(x1);
4118
+ if (x.invert) x0 = x(x0), x1 = x(x1);
4085
4119
  if (x1 < x0) t = x0, x0 = x1, x1 = t;
4086
4120
  extent[0][0] = x0, extent[1][0] = x1;
4087
4121
  }
4088
4122
  if (y) {
4089
4123
  y0 = z[0], y1 = z[1];
4090
4124
  if (x) y0 = y0[1], y1 = y1[1];
4091
- y0 = y(y0), y1 = y(y1);
4125
+ if (y.invert) y0 = y(y0), y1 = y(y1);
4092
4126
  if (y1 < y0) t = y0, y0 = y1, y1 = t;
4093
4127
  extent[0][1] = y0, extent[1][1] = y1;
4094
4128
  }
@@ -4109,18 +4143,13 @@ d3.svg.brush = function() {
4109
4143
  || (y && extent[0][1] === extent[1][1]);
4110
4144
  };
4111
4145
 
4112
- brush.on = function(type, listener) {
4113
- event.on(type, listener);
4114
- return brush;
4115
- };
4116
-
4117
4146
  d3.select(window)
4118
4147
  .on("mousemove.brush", d3_svg_brushMove)
4119
4148
  .on("mouseup.brush", d3_svg_brushUp)
4120
4149
  .on("keydown.brush", d3_svg_brushKeydown)
4121
4150
  .on("keyup.brush", d3_svg_brushKeyup);
4122
4151
 
4123
- return brush;
4152
+ return d3.rebind(brush, event, "on");
4124
4153
  };
4125
4154
 
4126
4155
  var d3_svg_brush,
@@ -4208,7 +4237,9 @@ function d3_svg_brushMove() {
4208
4237
  }
4209
4238
 
4210
4239
  function d3_svg_brushMove1(mouse, scale, i) {
4211
- var range = d3_scaleExtent(scale.range()),
4240
+ var range = d3_scaleRange(scale),
4241
+ r0 = range[0],
4242
+ r1 = range[1],
4212
4243
  offset = d3_svg_brushOffset[i],
4213
4244
  size = d3_svg_brushExtent[1][i] - d3_svg_brushExtent[0][i],
4214
4245
  min,
@@ -4216,12 +4247,12 @@ function d3_svg_brushMove1(mouse, scale, i) {
4216
4247
 
4217
4248
  // When dragging, reduce the range by the extent size and offset.
4218
4249
  if (d3_svg_brushDrag) {
4219
- range[0] -= offset;
4220
- range[1] -= size + offset;
4250
+ r0 -= offset;
4251
+ r1 -= size + offset;
4221
4252
  }
4222
4253
 
4223
4254
  // Clamp the mouse so that the extent fits within the range extent.
4224
- min = Math.max(range[0], Math.min(range[1], mouse[i]));
4255
+ min = Math.max(r0, Math.min(r1, mouse[i]));
4225
4256
 
4226
4257
  // Compute the new extent bounds.
4227
4258
  if (d3_svg_brushDrag) {
@@ -4229,7 +4260,7 @@ function d3_svg_brushMove1(mouse, scale, i) {
4229
4260
  } else {
4230
4261
 
4231
4262
  // If the ALT key is pressed, then preserve the center of the extent.
4232
- if (d3_svg_brushCenter) offset = Math.max(range[0], Math.min(range[1], 2 * d3_svg_brushCenter[i] - min));
4263
+ if (d3_svg_brushCenter) offset = Math.max(r0, Math.min(r1, 2 * d3_svg_brushCenter[i] - min));
4233
4264
 
4234
4265
  // Compute the min and max of the offset and mouse.
4235
4266
  if (offset < min) {
@@ -4275,8 +4306,11 @@ var d3_svg_brushCursor = {
4275
4306
  sw: "nesw-resize"
4276
4307
  };
4277
4308
  d3.behavior = {};
4309
+ // TODO Track touch points by identifier.
4310
+
4278
4311
  d3.behavior.drag = function() {
4279
- var event = d3.dispatch("drag", "dragstart", "dragend");
4312
+ var event = d3.dispatch("drag", "dragstart", "dragend"),
4313
+ origin = null;
4280
4314
 
4281
4315
  function drag() {
4282
4316
  this
@@ -4295,9 +4329,16 @@ d3.behavior.drag = function() {
4295
4329
  function start() {
4296
4330
  d3_behavior_dragEvent = event;
4297
4331
  d3_behavior_dragEventTarget = d3.event.target;
4298
- d3_behavior_dragOffset = d3_behavior_dragPoint((d3_behavior_dragTarget = this).parentNode);
4299
- d3_behavior_dragMoved = 0;
4332
+ d3_behavior_dragTarget = this;
4300
4333
  d3_behavior_dragArguments = arguments;
4334
+ d3_behavior_dragOrigin = d3_behavior_dragPoint();
4335
+ if (origin) {
4336
+ d3_behavior_dragOffset = origin.apply(d3_behavior_dragTarget, d3_behavior_dragArguments);
4337
+ d3_behavior_dragOffset = [d3_behavior_dragOffset.x - d3_behavior_dragOrigin[0], d3_behavior_dragOffset.y - d3_behavior_dragOrigin[1]];
4338
+ } else {
4339
+ d3_behavior_dragOffset = [0, 0];
4340
+ }
4341
+ d3_behavior_dragMoved = 0;
4301
4342
  }
4302
4343
 
4303
4344
  function mousedown() {
@@ -4305,12 +4346,13 @@ d3.behavior.drag = function() {
4305
4346
  d3_behavior_dragDispatch("dragstart");
4306
4347
  }
4307
4348
 
4308
- drag.on = function(type, listener) {
4309
- event.on(type, listener);
4349
+ drag.origin = function(x) {
4350
+ if (!arguments.length) return origin;
4351
+ origin = x;
4310
4352
  return drag;
4311
4353
  };
4312
4354
 
4313
- return drag;
4355
+ return d3.rebind(drag, event, "on");
4314
4356
  };
4315
4357
 
4316
4358
  var d3_behavior_dragEvent,
@@ -4318,34 +4360,39 @@ var d3_behavior_dragEvent,
4318
4360
  d3_behavior_dragTarget,
4319
4361
  d3_behavior_dragArguments,
4320
4362
  d3_behavior_dragOffset,
4321
- d3_behavior_dragMoved,
4322
- d3_behavior_dragStopClick;
4363
+ d3_behavior_dragOrigin,
4364
+ d3_behavior_dragMoved;
4323
4365
 
4324
4366
  function d3_behavior_dragDispatch(type) {
4325
- var o = d3.event, p = d3_behavior_dragTarget.parentNode, dx = 0, dy = 0;
4367
+ var p = d3_behavior_dragPoint(),
4368
+ o = d3.event,
4369
+ e = d3.event = {type: type};
4326
4370
 
4327
4371
  if (p) {
4328
- p = d3_behavior_dragPoint(p);
4329
- dx = p[0] - d3_behavior_dragOffset[0];
4330
- dy = p[1] - d3_behavior_dragOffset[1];
4331
- d3_behavior_dragOffset = p;
4332
- d3_behavior_dragMoved |= dx | dy;
4372
+ e.x = p[0] + d3_behavior_dragOffset[0];
4373
+ e.y = p[1] + d3_behavior_dragOffset[1];
4374
+ e.dx = p[0] - d3_behavior_dragOrigin[0];
4375
+ e.dy = p[1] - d3_behavior_dragOrigin[1];
4376
+ d3_behavior_dragMoved |= e.dx | e.dy;
4377
+ d3_behavior_dragOrigin = p;
4333
4378
  }
4334
4379
 
4335
4380
  try {
4336
- d3.event = {dx: dx, dy: dy};
4337
4381
  d3_behavior_dragEvent[type].apply(d3_behavior_dragTarget, d3_behavior_dragArguments);
4338
4382
  } finally {
4339
4383
  d3.event = o;
4340
4384
  }
4341
4385
 
4386
+ o.stopPropagation();
4342
4387
  o.preventDefault();
4343
4388
  }
4344
4389
 
4345
- function d3_behavior_dragPoint(container, type) {
4346
- // TODO Track touch points by identifier.
4347
- var t = d3.event.changedTouches;
4348
- return t ? d3.svg.touches(container, t)[0] : d3.svg.mouse(container);
4390
+ function d3_behavior_dragPoint() {
4391
+ var p = d3_behavior_dragTarget.parentNode,
4392
+ t = d3.event.changedTouches;
4393
+ return p && (t
4394
+ ? d3.svg.touches(p, t)[0]
4395
+ : d3.svg.mouse(p));
4349
4396
  }
4350
4397
 
4351
4398
  function d3_behavior_dragMove() {
@@ -4362,21 +4409,26 @@ function d3_behavior_dragMove() {
4362
4409
  function d3_behavior_dragUp() {
4363
4410
  if (!d3_behavior_dragTarget) return;
4364
4411
  d3_behavior_dragDispatch("dragend");
4365
- d3_behavior_dragTarget = null;
4366
4412
 
4367
4413
  // If the node was moved, prevent the mouseup from propagating.
4368
4414
  // Also prevent the subsequent click from propagating (e.g., for anchors).
4369
- if (d3_behavior_dragMoved && d3_behavior_dragEventTarget === d3.event.target) {
4370
- d3_behavior_dragStopClick = true;
4415
+ if (d3_behavior_dragMoved) {
4371
4416
  d3_eventCancel();
4417
+ d3_behavior_dragMoved = d3.event.target === d3_behavior_dragEventTarget;
4372
4418
  }
4419
+
4420
+ d3_behavior_dragEvent =
4421
+ d3_behavior_dragEventTarget =
4422
+ d3_behavior_dragTarget =
4423
+ d3_behavior_dragArguments =
4424
+ d3_behavior_dragOffset =
4425
+ d3_behavior_dragOrigin = null;
4373
4426
  }
4374
4427
 
4375
4428
  function d3_behavior_dragClick() {
4376
- if (d3_behavior_dragStopClick && d3_behavior_dragEventTarget === d3.event.target) {
4429
+ if (d3_behavior_dragMoved) {
4377
4430
  d3_eventCancel();
4378
- d3_behavior_dragStopClick = false;
4379
- d3_behavior_dragEventTarget = null;
4431
+ d3_behavior_dragMoved = 0;
4380
4432
  }
4381
4433
  }
4382
4434
  // TODO unbind zoom behavior?
@@ -4414,7 +4466,7 @@ d3.behavior.zoom = function() {
4414
4466
  function mousedown() {
4415
4467
  start.apply(this, arguments);
4416
4468
  d3_behavior_zoomPanning = d3_behavior_zoomLocation(d3.svg.mouse(d3_behavior_zoomTarget));
4417
- d3_behavior_zoomMoved = false;
4469
+ d3_behavior_zoomMoved = 0;
4418
4470
  d3.event.preventDefault();
4419
4471
  window.focus();
4420
4472
  }
@@ -4450,12 +4502,7 @@ d3.behavior.zoom = function() {
4450
4502
  return zoom;
4451
4503
  };
4452
4504
 
4453
- zoom.on = function(type, listener) {
4454
- event.on(type, listener);
4455
- return zoom;
4456
- };
4457
-
4458
- return zoom;
4505
+ return d3.rebind(zoom, event, "on");
4459
4506
  };
4460
4507
 
4461
4508
  var d3_behavior_zoomDiv,
@@ -4469,8 +4516,7 @@ var d3_behavior_zoomDiv,
4469
4516
  d3_behavior_zoomEventTarget,
4470
4517
  d3_behavior_zoomTarget,
4471
4518
  d3_behavior_zoomArguments,
4472
- d3_behavior_zoomMoved,
4473
- d3_behavior_zoomStopClick;
4519
+ d3_behavior_zoomMoved;
4474
4520
 
4475
4521
  function d3_behavior_zoomLocation(point) {
4476
4522
  return [
@@ -4550,27 +4596,32 @@ function d3_behavior_zoomTouchmove() {
4550
4596
  function d3_behavior_zoomMousemove() {
4551
4597
  d3_behavior_zoomZooming = null;
4552
4598
  if (d3_behavior_zoomPanning) {
4553
- d3_behavior_zoomMoved = true;
4599
+ d3_behavior_zoomMoved = 1;
4554
4600
  d3_behavior_zoomTo(d3_behavior_zoomXyz[2], d3.svg.mouse(d3_behavior_zoomTarget), d3_behavior_zoomPanning);
4555
4601
  }
4556
4602
  }
4557
4603
 
4558
4604
  function d3_behavior_zoomMouseup() {
4559
4605
  if (d3_behavior_zoomPanning) {
4560
- if (d3_behavior_zoomMoved && d3_behavior_zoomEventTarget === d3.event.target) {
4561
- d3_behavior_zoomStopClick = true;
4606
+ if (d3_behavior_zoomMoved) {
4607
+ d3_eventCancel();
4608
+ d3_behavior_zoomMoved = d3_behavior_zoomEventTarget === d3.event.target;
4562
4609
  }
4563
- d3_behavior_zoomMousemove();
4610
+
4611
+ d3_behavior_zoomXyz =
4612
+ d3_behavior_zoomExtent =
4613
+ d3_behavior_zoomDispatch =
4614
+ d3_behavior_zoomEventTarget =
4615
+ d3_behavior_zoomTarget =
4616
+ d3_behavior_zoomArguments =
4564
4617
  d3_behavior_zoomPanning = null;
4565
4618
  }
4566
4619
  }
4567
4620
 
4568
4621
  function d3_behavior_zoomClick() {
4569
- if (d3_behavior_zoomStopClick && d3_behavior_zoomEventTarget === d3.event.target) {
4570
- d3.event.stopPropagation();
4571
- d3.event.preventDefault();
4572
- d3_behavior_zoomStopClick = false;
4573
- d3_behavior_zoomEventTarget = null;
4622
+ if (d3_behavior_zoomMoved) {
4623
+ d3_eventCancel();
4624
+ d3_behavior_zoomMoved = 0;
4574
4625
  }
4575
4626
  }
4576
4627
 
@@ -324,11 +324,6 @@ d3.layout.force = function() {
324
324
  return (alpha *= .99) < .005;
325
325
  }
326
326
 
327
- force.on = function(type, listener) {
328
- event.on(type, listener);
329
- return force;
330
- };
331
-
332
327
  force.nodes = function(x) {
333
328
  if (!arguments.length) return nodes;
334
329
  nodes = x;
@@ -475,6 +470,7 @@ d3.layout.force = function() {
475
470
  // use `node.call(force.drag)` to make nodes draggable
476
471
  force.drag = function() {
477
472
  if (!drag) drag = d3.behavior.drag()
473
+ .origin(Object)
478
474
  .on("dragstart", dragstart)
479
475
  .on("drag", d3_layout_forceDrag)
480
476
  .on("dragend", d3_layout_forceDragEnd);
@@ -489,7 +485,7 @@ d3.layout.force = function() {
489
485
  d3_layout_forceDragForce = force;
490
486
  }
491
487
 
492
- return force;
488
+ return d3.rebind(force, event, "on");
493
489
  };
494
490
 
495
491
  var d3_layout_forceDragForce,
@@ -510,8 +506,8 @@ function d3_layout_forceDragEnd() {
510
506
  }
511
507
 
512
508
  function d3_layout_forceDrag() {
513
- d3_layout_forceDragNode.px += d3.event.dx;
514
- d3_layout_forceDragNode.py += d3.event.dy;
509
+ d3_layout_forceDragNode.px = d3.event.x;
510
+ d3_layout_forceDragNode.py = d3.event.y;
515
511
  d3_layout_forceDragForce.resume(); // restart annealing
516
512
  }
517
513
 
@@ -1120,10 +1116,10 @@ d3.layout.hierarchy = function() {
1120
1116
 
1121
1117
  // A method assignment helper for hierarchy subclasses.
1122
1118
  function d3_layout_hierarchyRebind(object, hierarchy) {
1123
- object.sort = d3.rebind(object, hierarchy.sort);
1124
- object.children = d3.rebind(object, hierarchy.children);
1119
+ d3.rebind(object, hierarchy, "sort", "children", "value");
1120
+
1121
+ // Add an alias for links, for convenience.
1125
1122
  object.links = d3_layout_hierarchyLinks;
1126
- object.value = d3.rebind(object, hierarchy.value);
1127
1123
 
1128
1124
  // If the new API is used, enabling inlining.
1129
1125
  object.nodes = function(d) {
@@ -570,12 +570,7 @@ function d3_time_scale(linear, methods, format) {
570
570
  };
571
571
 
572
572
  // TOOD expose d3_scale_linear_rebind?
573
- scale.range = d3.rebind(scale, linear.range);
574
- scale.rangeRound = d3.rebind(scale, linear.rangeRound);
575
- scale.interpolate = d3.rebind(scale, linear.interpolate);
576
- scale.clamp = d3.rebind(scale, linear.clamp);
577
-
578
- return scale;
573
+ return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp");
579
574
  }
580
575
 
581
576
  // TODO expose d3_scaleExtent?
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: d3_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-19 00:00:00.000000000Z
12
+ date: 2011-11-24 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: railties
16
- requirement: &70338721615740 !ruby/object:Gem::Requirement
16
+ requirement: &70330434135240 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 3.1.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70338721615740
24
+ version_requirements: *70330434135240
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bundler
27
- requirement: &70338721615200 !ruby/object:Gem::Requirement
27
+ requirement: &70330434134480 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.0.0
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70338721615200
35
+ version_requirements: *70330434134480
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rails
38
- requirement: &70338721614700 !ruby/object:Gem::Requirement
38
+ requirement: &70330434133920 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '3.1'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70338721614700
46
+ version_requirements: *70330434133920
47
47
  description: Gem installation of javascript framework for data visualization, D3
48
48
  email:
49
49
  - han@logicallsat.com
@@ -68,7 +68,6 @@ files:
68
68
  - vendor/assets/javascripts/d3.geom.js
69
69
  - vendor/assets/javascripts/d3.js
70
70
  - vendor/assets/javascripts/d3.layout.js
71
- - vendor/assets/javascripts/d3.min.js
72
71
  - vendor/assets/javascripts/d3.time.js
73
72
  - vendor/assets/javascripts/d3_csv.js
74
73
  - vendor/assets/javascripts/d3_rails.js
@@ -1,2 +0,0 @@
1
- (function(){function e(a){var b=-1,c=a.length,d=[];while(++b<c)d.push(a[b]);return d}function f(a){return Array.prototype.slice.call(a)}function i(){return this}function j(a){return a!=null&&!isNaN(a)}function k(a){return a.length}function l(a){return a==null}function m(a){return a.replace(/(^\s+)|(\s+$)/g,"").replace(/\s+/g," ")}function o(){}function p(){function c(){var b=a,c=-1,d=b.length,e;while(++c<d)(e=b[c])._on&&e.apply(this,arguments)}var a=[],b={};return c.on=function(d,e){var f,g;if(f=b[d])f._on=!1,a=a.slice(0,g=a.indexOf(f)).concat(a.slice(g+1)),delete b[d];return e&&(e._on=!0,a.push(e),b[d]=e),c},c}function s(a,b){return b-(a?1+Math.floor(Math.log(a+Math.pow(10,1+Math.floor(Math.log(a)/Math.LN10)-b))/Math.LN10):1)}function t(a){return a+""}function u(a){var b=a.lastIndexOf("."),c=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 w(a,b){return{scale:Math.pow(10,(8-b)*3),symbol:a}}function B(a){return function(b){return b<=0?0:b>=1?1:a(b)}}function C(a){return function(b){return 1-a(1-b)}}function D(a){return function(b){return.5*(b<.5?a(2*b):2-a(2-2*b))}}function E(a){return a}function F(a){return function(b){return Math.pow(b,a)}}function G(a){return 1-Math.cos(a*Math.PI/2)}function H(a){return Math.pow(2,10*(a-1))}function I(a){return 1-Math.sqrt(1-a*a)}function J(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 K(a){return a||(a=1.70158),function(b){return b*b*((a+1)*b-a)}}function L(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 M(){d3.event.stopPropagation(),d3.event.preventDefault()}function O(a){return a=="transform"?d3.interpolateTransform:d3.interpolate}function P(a,b){return b=b-(a=+a)?1/(b-a):0,function(c){return(c-a)*b}}function Q(a,b){return b=b-(a=+a)?1/(b-a):0,function(c){return Math.max(0,Math.min(1,(c-a)*b))}}function R(a,b,c){return new S(a,b,c)}function S(a,b,c){this.r=a,this.g=b,this.b=c}function T(a){return a<16?"0"+Math.max(0,a).toString(16):Math.min(255,a).toString(16)}function U(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(W(h[0]),W(h[1]),W(h[2]))}}return(i=X[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 V(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+(b<c?6:0):b==e?g=(c-a)/f+2:g=(a-b)/f+4,g*=60):h=g=0,Z(g,h,i)}function W(a){var b=parseFloat(a);return a.charAt(a.length-1)==="%"?Math.round(b*2.55):b}function Z(a,b,c){return new $(a,b,c)}function $(a,b,c){this.h=a,this.s=b,this.l=c}function _(a,b,c){function f(a){return a>360?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,R(g(a+120),g(a),g(a-120))}function ba(a){return h(a,bd),a}function be(a){return function(){return bb(a,this)}}function bf(a){return function(){return bc(a,this)}}function bh(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=m(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=m(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 bi(a){return{__data__:a}}function bj(a){return arguments.length||(a=d3.ascending),function(b,c){return a(b&&b.__data__,c&&c.__data__)}}function bl(a){return h(a,bm),a}function bn(a,b,c){h(a,br);var d={},e=d3.dispatch("start","end"),f=bu;return a.id=b,a.time=c,a.tween=function(b,c){return arguments.length<2?d[b]:(c==null?delete d[b]:d[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?bv.call(a,b):(e.on(b,c),a)},d3.timer(function(g){return a.each(function(h,i,j){function p(a){if(o.active>b)return r();o.active=b;for(var f in d)(f=d[f].call(l,h,i))&&k.push(f);return 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(),bt=b,e.end.call(l,h,i),bt=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 bp(a,b,c){return c!=""&&bo}function bq(a,b){function d(a,d,e){var f=b.call(this,a,d);return f==null?e!=""&&bo:e!=f&&c(e,f)}function e(a,d,e){return e!=b&&c(e,b)}var c=O(a);return typeof b=="function"?d:b==null?bp:(b+="",e)}function bv(a){for(var b=0,c=this.length;b<c;b++)for(var d=this[b],e=0,f=d.length;e<f;e++){var g=d[e];g&&a.call(g=g.node,g.__data__,e,b)}return this}function bz(){var a,b=Date.now(),c=bw;while(c)a=b-c.then,a>=c.delay&&(c.flush=c.callback(a)),c=c.next;var d=bA()-b;d>24?(isFinite(d)&&(clearTimeout(by),by=setTimeout(bz,d)),bx=0):(bx=1,bB(bz))}function bA(){var a=null,b=bw,c=Infinity;while(b)b.flush?b=a?a.next=b.next:bw=b.next:(c=Math.min(c,b.then+b.delay),b=(a=b).next);return c}function bC(a){var b=[a.a,a.b],c=[a.c,a.d],d=bE(b),e=bD(b,c),f=bE(bF(c,b,-e))||0;b[0]*c[1]<c[0]*b[1]&&(b[0]*=-1,b[1]*=-1,d*=-1,e*=-1),this.rotate=(d?Math.atan2(b[1],b[0]):Math.atan2(-c[0],c[1]))*bI,this.translate=[a.e,a.f],this.scale=[d,f],this.skew=f?Math.atan2(e,f)*bI:0}function bD(a,b){return a[0]*b[0]+a[1]*b[1]}function bE(a){var b=Math.sqrt(bD(a,a));return b&&(a[0]/=b,a[1]/=b),b}function bF(a,b,c){return a[0]+=c*b[0],a[1]+=c*b[1],a}function bJ(){}function bK(a){var b=a[0],c=a[a.length-1];return b<c?[b,c]:[c,b]}function bL(a,b){var c=0,d=a.length-1,e=a[c],f=a[d],g;f<e&&(g=c,c=d,d=g,g=e,e=f,f=g);if(g=f-e)b=b(g),a[c]=b.floor(e),a[d]=b.ceil(f);return a}function bM(){return Math}function bN(a,b,c,d){function g(){var g=a.length==2?bT:bU,i=d?Q:P;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 bR(a,b)},h.tickFormat=function(b){return bS(a,b)},h.nice=function(){return bL(a,bP),g()},h.copy=function(){return bN(a,b,c,d)},g()}function bO(a,b){return a.range=d3.rebind(a,b.range),a.rangeRound=d3.rebind(a,b.rangeRound),a.interpolate=d3.rebind(a,b.interpolate),a.clamp=d3.rebind(a,b.clamp),a}function bP(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 bQ(a,b){var c=bK(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 bR(a,b){return d3.range.apply(d3,bQ(a,b))}function bS(a,b){return d3.format(",."+Math.max(0,-Math.floor(Math.log(bQ(a,b)[2])/Math.LN10+.01))+"f")}function bT(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 bU(a,b,c,d){var e=[],f=[],g=0,h=a.length;while(++g<h)e.push(c(a[g-1],a[g])),f.push(d(b[g-1],b[g]));return function(b){var c=d3.bisect(a,b,1,a.length-1)-1;return f[c](e[c](b))}}function bV(a,b){function d(c){return a(b(c))}var c=b.pow;return d.invert=function(b){return c(a.invert(b))},d.domain=function(e){return arguments.length?(b=e[0]<0?bY:bX,c=b.pow,a.domain(e.map(b)),d):a.domain().map(c)},d.nice=function(){return a.domain(bL(a.domain(),bM)),d},d.ticks=function(){var d=bK(a.domain()),e=[];if(d.every(isFinite)){var f=Math.floor(d[0]),g=Math.ceil(d[1]),h=c(d[0]),i=c(d[1]);if(b===bY){e.push(c(f));for(;f++<g;)for(var j=9;j>0;j--)e.push(c(f)*j)}else{for(;f<g;f++)for(var j=1;j<10;j++)e.push(c(f)*j);e.push(c(f))}for(f=0;e[f]<h;f++);for(g=e.length;e[g-1]>i;g--);e=e.slice(f,g)}return e},d.tickFormat=function(a,e){arguments.length<2&&(e=bW);if(arguments.length<1)return e;var f=a/d.ticks().length,g=b===bY?(h=-1e-15,Math.floor):(h=1e-15,Math.ceil),h;return function(a){return a/c(g(b(a)+h))<f?e(a):""}},d.copy=function(){return bV(a.copy(),b)},bO(d,a)}function bX(a){return Math.log(a)/Math.LN10}function bY(a){return-Math.log(-a)/Math.LN10}function bZ(a,b){function e(b){return a(c(b))}var c=b$(b),d=b$(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 bR(e.domain(),a)},e.tickFormat=function(a){return bS(e.domain(),a)},e.nice=function(){return e.domain(bL(e.domain(),bP))},e.exponent=function(a){if(!arguments.length)return b;var f=e.domain();return c=b$(b=a),d=b$(1/b),e.domain(f)},e.copy=function(){return bZ(a.copy(),b)},bO(e,a)}function b$(a){return function(b){return b<0?-Math.pow(-b,a):Math.pow(b,a)}}function b_(a,b){function f(b){return d[((c[b]||(c[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={};var e=-1,g=d.length,h;while(++e<g)c[h=d[e]]||(c[h]=a.push(h));return f[b.t](b.x,b.p)},f.range=function(a){return arguments.length?(d=a,e=0,b={t:"range",x:a},f):d},f.rangePoints=function(c,h){arguments.length<2&&(h=0);var i=c[0],j=c[1],k=(j-i)/(a.length-1+h);return d=g(a.length<2?(i+j)/2:i+k*h/2,k),e=0,b={t:"rangePoints",x:c,p:h},f},f.rangeBands=function(c,h){arguments.length<2&&(h=0);var i=c[0],j=c[1],k=(j-i)/(a.length+h);return d=g(i+k*h,k),e=k*(1-h),b={t:"rangeBands",x:c,p:h},f},f.rangeRoundBands=function(c,h){arguments.length<2&&(h=0);var i=c[0],j=c[1],k=Math.floor((j-i)/(a.length+h));return d=g(i+Math.round((j-i-(a.length-h)*k)/2),k),e=Math.round(k*(1-h)),b={t:"rangeRoundBands",x:c,p:h},f},f.rangeBand=function(){return e},f.copy=function(){return b_(a,b)},f.domain(a)}function ce(a,b){function d(){var d=0,f=a.length,g=b.length;c=[];while(++d<g)c[d-1]=d3.quantile(a,d/g);return e}function e(a){return isNaN(a=+a)?NaN:b[d3.bisect(c,a)]}var c;return e.domain=function(b){return arguments.length?(a=b.filter(function(a){return!isNaN(a)}).sort(d3.ascending),d()):a},e.range=function(a){return arguments.length?(b=a,d()):b},e.quantiles=function(){return c},e.copy=function(){return ce(a,b)},d()}function cf(a,b,c){function f(b){return c[Math.max(0,Math.min(e,Math.floor(d*(b-a))))]}function g(){return d=c.length/(b-a),e=c.length-1,f}var d,e;return f.domain=function(c){return arguments.length?(a=+c[0],b=+c[c.length-1],g()):[a,b]},f.range=function(a){return arguments.length?(c=a,g()):c},f.copy=function(){return cf(a,b,c)},g()}function ci(a){return a.innerRadius}function cj(a){return a.outerRadius}function ck(a){return a.startAngle}function cl(a){return a.endAngle}function cm(a){function g(d){return d.length<1?null:"M"+e(a(cn(this,d,b,c)),f)}var b=co,c=cp,d="linear",e=cq[d],f=.7;return g.x=function(a){return arguments.length?(b=a,g):b},g.y=function(a){return arguments.length?(c=a,g):c},g.interpolate=function(a){return arguments.length?(e=cq[d=a],g):d},g.tension=function(a){return arguments.length?(f=a,g):f},g}function cn(a,b,c,d){var e=[],f=-1,g=b.length,h=typeof c=="function",i=typeof d=="function",j;if(h&&i)while(++f<g)e.push([c.call(a,j=b[f],f),d.call(a,j,f)]);else if(h)while(++f<g)e.push([c.call(a,b[f],f),d]);else if(i)while(++f<g)e.push([c,d.call(a,b[f],f)]);else while(++f<g)e.push([c,d]);return e}function co(a){return a[0]}function cp(a){return a[1]}function cr(a){var b=0,c=a.length,d=a[0],e=[d[0],",",d[1]];while(++b<c)e.push("L",(d=a[b])[0],",",d[1]);return e.join("")}function cs(a){var b=0,c=a.length,d=a[0],e=[d[0],",",d[1]];while(++b<c)e.push("V",(d=a[b])[1],"H",d[0]);return e.join("")}function ct(a){var b=0,c=a.length,d=a[0],e=[d[0],",",d[1]];while(++b<c)e.push("H",(d=a[b])[0],"V",d[1]);return e.join("")}function cu(a,b){return a.length<4?cr(a):a[1]+cx(a.slice(1,a.length-1),cy(a,b))}function cv(a,b){return a.length<3?cr(a):a[0]+cx((a.push(a[0]),a),cy([a[a.length-2]].concat(a,[a[1]]),b))}function cw(a,b,c){return a.length<3?cr(a):a[0]+cx(a,cy(a,b))}function cx(a,b){if(b.length<1||a.length!=b.length&&a.length!=b.length+2)return cr(a);var c=a.length!=b.length,d="",e=a[0],f=a[1],g=b[0],h=g,i=1;c&&(d+="Q"+(f[0]-g[0]*2/3)+","+(f[1]-g[1]*2/3)+","+f[0]+","+f[1],e=a[1],i=2);if(b.length>1){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;j<b.length;j++,i++)f=a[i],h=b[j],d+="S"+(f[0]-h[0])+","+(f[1]-h[1])+","+f[0]+","+f[1]}if(c){var k=a[i];d+="Q"+(f[0]+h[0]*2/3)+","+(f[1]+h[1]*2/3)+","+k[0]+","+k[1]}return d}function cy(a,b){var c=[],d=(1-b)/2,e,f=a[0],g=a[1],h=1,i=a.length;while(++h<i)e=f,f=g,g=a[h],c.push([d*(g[0]-e[0]),d*(g[1]-e[1])]);return c}function cz(a){if(a.length<3)return cr(a);var b=1,c=a.length,d=a[0],e=d[0],f=d[1],g=[e,e,e,(d=a[1])[0]],h=[f,f,f,d[1]],i=[e,",",f];cH(i,g,h);while(++b<c)d=a[b],g.shift(),g.push(d[0]),h.shift(),h.push(d[1]),cH(i,g,h);b=-1;while(++b<2)g.shift(),g.push(d[0]),h.shift(),h.push(d[1]),cH(i,g,h);return i.join("")}function cA(a){if(a.length<4)return cr(a);var b=[],c=-1,d=a.length,e,f=[0],g=[0];while(++c<3)e=a[c],f.push(e[0]),g.push(e[1]);b.push(cD(cG,f)+","+cD(cG,g)),--c;while(++c<d)e=a[c],f.shift(),f.push(e[0]),g.shift(),g.push(e[1]),cH(b,f,g);return b.join("")}function cB(a){var b,c=-1,d=a.length,e=d+4,f,g=[],h=[];while(++c<4)f=a[c%d],g.push(f[0]),h.push(f[1]);b=[cD(cG,g),",",cD(cG,h)],--c;while(++c<e)f=a[c%d],g.shift(),g.push(f[0]),h.shift(),h.push(f[1]),cH(b,g,h);return b.join("")}function cC(a,b){var c=a.length-1,d=a[0][0],e=a[0][1],f=a[c][0]-d,g=a[c][1]-e,h=-1,i,j;while(++h<=c)i=a[h],j=h/c,i[0]=b*i[0]+(1-b)*(d+j*f),i[1]=b*i[1]+(1-b)*(e+j*g);return cz(a)}function cD(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3]}function cH(a,b,c){a.push("C",cD(cE,b),",",cD(cE,c),",",cD(cF,b),",",cD(cF,c),",",cD(cG,b),",",cD(cG,c))}function cI(a,b){return(b[1]-a[1])/(b[0]-a[0])}function cJ(a){var b=0,c=a.length-1,d=[],e=a[0],f=a[1],g=d[0]=cI(e,f);while(++b<c)d[b]=g+(g=cI(e=f,f=a[b+1]));return d[b]=g,d}function cK(a){var b=[],c,d,e,f,g=cJ(a),h=-1,i=a.length-1;while(++h<i)c=cI(a[h],a[h+1]),Math.abs(c)<1e-6?g[h]=g[h+1]=0:(d=g[h]/c,e=g[h+1]/c,f=d*d+e*e,f>9&&(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 cL(a){return a.length<3?cr(a):a[0]+cx(a,cK(a))}function cM(a){var b,c=-1,d=a.length,e,f;while(++c<d)b=a[c],e=b[0],f=b[1]+cg,b[0]=e*Math.cos(f),b[1]=e*Math.sin(f);return a}function cN(a){function j(f){if(f.length<1)return null;var j=cn(this,f,b,d),k=cn(this,f,b===c?cO(j):c,d===e?cP(j):e);return"M"+g(a(k),i)+"L"+h(a(j.reverse()),i)+"Z"}var b=co,c=co,d=0,e=cp,f,g,h,i=.7;return j.x=function(a){return arguments.length?(b=c=a,j):c},j.x0=function(a){return arguments.length?(b=a,j):b},j.x1=function(a){return arguments.length?(c=a,j):c},j.y=function(a){return arguments.length?(d=e=a,j):e},j.y0=function(a){return arguments.length?(d=a,j):d},j.y1=function(a){return arguments.length?(e=a,j):e},j.interpolate=function(a){return arguments.length?(g=cq[f=a],h=g.reverse||g,j):f},j.tension=function(a){return arguments.length?(i=a,j):i},j.interpolate("linear")}function cO(a){return function(b,c){return a[c][0]}}function cP(a){return function(b,c){return a[c][1]}}function cQ(a){return a.source}function cR(a){return a.target}function cS(a){return a.radius}function cT(a){return a.startAngle}function cU(a){return a.endAngle}function cV(a){return[a.x,a.y]}function cW(a){return function(){var b=a.apply(this,arguments),c=b[0],d=b[1]+cg;return[c*Math.cos(d),c*Math.sin(d)]}}function cY(a,b){var c=(a.ownerSVGElement||a).createSVGPoint();if(cX<0&&(window.scrollX||window.scrollY)){var d=d3.select(document.body).append("svg:svg").style("position","absolute").style("top",0).style("left",0),e=d[0][0].getScreenCTM();cX=!e.f&&!e.e,d.remove()}return cX?(c.x=b.pageX,c.y=b.pageY):(c.x=b.clientX,c.y=b.clientY),c=c.matrixTransform(a.getScreenCTM().inverse()),[c.x,c.y]}function cZ(){return 64}function c$(){return"circle"}function dc(a,b){a.attr("transform",function(a){return"translate("+b(a)+",0)"})}function dd(a,b){a.attr("transform",function(a){return"translate(0,"+b(a)+")"})}function de(a,b,c){e=[];if(c&&b.length>1){var d=bK(a.domain()),e,f=-1,g=b.length,h=(b[1]-b[0])/++c,i,j;while(++f<g)for(i=c;--i>0;)(j=+b[f]-i*h)>=d[0]&&e.push(j);for(--f,i=0;++i<c&&(j=+b[f]+i*h)<d[1];)e.push(j)}return e}function dq(a,b){a.select(".extent").attr("x",b[0][0]),a.selectAll(".n,.s,.w,.nw,.sw").attr("x",b[0][0]-2),a.selectAll(".e,.ne,.se").attr("x",b[1][0]-3),a.selectAll(".extent,.n,.s").attr("width",b[1][0]-b[0][0])}function dr(a,b){a.select(".extent").attr("y",b[0][1]),a.selectAll(".n,.e,.w,.nw,.ne").attr("y",b[0][1]-3),a.selectAll(".s,.se,.sw").attr("y",b[1][1]-4),a.selectAll(".extent,.e,.w").attr("height",b[1][1]-b[0][1])}function ds(){d3.event.keyCode==32&&dh&&!dl&&(dn=null,dp[0]-=dk[1][0],dp[1]-=dk[1][1],dl=2,M())}function dt(){d3.event.keyCode==32&&dl==2&&(dp[0]+=dk[1][0],dp[1]+=dk[1][1],dl=0,M())}function du(){if(dp){var a=d3.svg.mouse(dh),b=d3.select(dh);dl||(d3.event.altKey?(dn||(dn=[(dk[0][0]+dk[1][0])/2,(dk[0][1]+dk[1][1])/2]),dp[0]=dk[+(a[0]<dn[0])][0],dp[1]=dk[+(a[1]<dn[1])][1]):dn=null),di&&(dv(a,di,0),dq(b,dk)),dj&&(dv(a,dj,1),dr(b,dk)),dg("brush")}}function dv(a,b,c){var d=bK(b.range()),e=dp[c],f=dk[1][c]-dk[0][c],g,h;dl&&(d[0]-=e,d[1]-=f+e),g=Math.max(d[0],Math.min(d[1],a[c])),dl?h=(g+=e)+f:(dn&&(e=Math.max(d[0],Math.min(d[1],2*dn[c]-g))),e<g?(h=g,g=e):h=e),dk[0][c]=g,dk[1][c]=h}function dw(){dp&&(du(),d3.select(dh).selectAll(".resize").style("pointer-events",df.empty()?"none":"all"),dg("brushend"),df=dg=dh=di=dj=dk=dl=dm=dn=dp=null,M())}function dF(a){var b=d3.event,c=dA.parentNode,d=0,e=0;c&&(c=dG(c),d=c[0]-dC[0],e=c[1]-dC[1],dC=c,dD|=d|e);try{d3.event={dx:d,dy:e},dy[a].apply(dA,dB)}finally{d3.event=b}b.preventDefault()}function dG(a,b){var c=d3.event.changedTouches;return c?d3.svg.touches(a,c)[0]:d3.svg.mouse(a)}function dH(){if(!dA)return;var a=dA.parentNode;if(!a)return dI();dF("drag"),M()}function dI(){if(!dA)return;dF("dragend"),dA=null,dD&&dz===d3.event.target&&(dE=!0,M())}function dJ(){dE&&dz===d3.event.target&&(M(),dE=!1,dz=null)}function dX(a){return[a[0]-dP[0],a[1]-dP[1],dP[2]]}function dY(){dK||(dK=d3.select("body").append("div").style("visibility","hidden").style("top",0).style("height",0).style("width",0).style("overflow-y","scroll").append("div").style("height","2000px").node().parentNode);var a=d3.event,b;try{dK.scrollTop=1e3,dK.dispatchEvent(a),b=1e3-dK.scrollTop}catch(c){b=a.wheelDelta||-a.detail*5}return b*.005}function dZ(){var a=d3.svg.touches(dT),b=-1,c=a.length,d;while(++b<c)dN[(d=a[b]).identifier]=dX(d);return a}function d$(){var a=d3.svg.touches(dT);switch(a.length){case 1:var b=a[0];ec(dP[2],b,dN[b.identifier]);break;case 2:var c=a[0],d=a[1],e=[(c[0]+d[0])/2,(c[1]+d[1])/2],f=dN[c.identifier],g=dN[d.identifier],h=[(f[0]+g[0])/2,(f[1]+g[1])/2,f[2]];ec(Math.log(d3.event.scale)/Math.LN2+f[2],e,h)}}function d_(){dM=null,dL&&(dV=!0,ec(dP[2],d3.svg.mouse(dT),dL))}function ea(){dL&&(dV&&dS===d3.event.target&&(dW=!0),d_(),dL=null)}function eb(){dW&&dS===d3.event.target&&(d3.event.stopPropagation(),d3.event.preventDefault(),dW=!1,dS=null)}function ec(a,b,c){function l(a,b,c){a.domain(a.range().map(function(f){return a.invert((f-c)*d/e+b)}))}a=ee(a,2);var d=Math.pow(2,dP[2]),e=Math.pow(2,a),f=Math.pow(2,(dP[2]=a)-c[2]),g=dP[0],h=dP[1],i=dP[0]=ee(b[0]-c[0]*f,0,e),j=dP[1]=ee(b[1]-c[1]*f,1,e),k=d3.event;d3.event={scale:e,translate:[i,j],transform:function(a,b){a&&l(a,g,i),b&&l(b,h,j)}};try{dR.apply(dT,dU)}finally{d3.event=k}k.preventDefault()}function ee(a,b,c){var d=dQ[b],e=d[0],f=d[1];return arguments.length===3?Math.max(f*(f===Infinity?-Infinity:1/c-1),Math.min(e===-Infinity?Infinity:e,a/c))*c:Math.max(e,Math.min(f,a))}Date.now||(Date.now=function(){return+(new Date)});try{document.createElement("div").style.setProperty("opacity",0,"")}catch(a){var b=CSSStyleDeclaration.prototype,c=b.setProperty;b.setProperty=function(a,b,d){c.call(this,a,b+"",d)}}d3={version:"2.5.1"};var d=f;try{d(document.documentElement.childNodes)[0].nodeType}catch(g){d=e}var h=[].__proto__?function(a,b){a.__proto__=b}:function(a,b){for(var c in b)a[c]=b[c]};d3.functor=function(a){return typeof a=="function"?a:function(){return a}},d3.rebind=function(a,b){return function(){var c=b.apply(a,arguments);return arguments.length?a:c}},d3.ascending=function(a,b){return a<b?-1:a>b?1:a>=b?0:NaN},d3.descending=function(a,b){return b<a?-1:b>a?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(++f<c)j(d=a[f])&&(e+=(d-e)/++g);else while(++f<c)j(d=b.call(a,a[f],f))&&(e+=(d-e)/++g);return g?e:undefined},d3.median=function(a,b){return arguments.length>1&&(a=a.map(b)),a=a.filter(j),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(++c<d&&((e=a[c])==null||e!=e))e=undefined;while(++c<d)(f=a[c])!=null&&e>f&&(e=f)}else{while(++c<d&&((e=b.call(a,a[c],c))==null||e!=e))e=undefined;while(++c<d)(f=b.call(a,a[c],c))!=null&&e>f&&(e=f)}return e},d3.max=function(a,b){var c=-1,d=a.length,e,f;if(arguments.length===1){while(++c<d&&((e=a[c])==null||e!=e))e=undefined;while(++c<d)(f=a[c])!=null&&f>e&&(e=f)}else{while(++c<d&&((e=b.call(a,a[c],c))==null||e!=e))e=undefined;while(++c<d)(f=b.call(a,a[c],c))!=null&&f>e&&(e=f)}return e},d3.extent=function(a,b){var c=-1,d=a.length,e,f,g;if(arguments.length===1){while(++c<d&&((e=g=a[c])==null||e!=e))e=g=undefined;while(++c<d)(f=a[c])!=null&&(e>f&&(e=f),g<f&&(g=f))}else{while(++c<d&&((e=g=b.call(a,a[c],c))==null||e!=e))e=undefined;while(++c<d)(f=b.call(a,a[c],c))!=null&&(e>f&&(e=f),g<f&&(g=f))}return[e,g]},d3.random={normal:function(a,b){return arguments.length<2&&(b=1),arguments.length<1&&(a=0),function(){var c,d,e;do c=Math.random()*2-1,d=Math.random()*2-1,e=c*c+d*d;while(!e||e>1);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<d)isNaN(e=+a[f])||(c+=e);else while(++f<d)isNaN(e=+b.call(a,a[f],f))||(c+=e);return c},d3.quantile=function(a,b){var c=(a.length-1)*b+1,d=Math.floor(c),e=a[d-1],f=c-d;return f?e+f*(a[d]-e):e},d3.zip=function(){if(!(e=arguments.length))return[];for(var a=-1,b=d3.min(arguments,k),c=new Array(b);++a<b;)for(var d=-1,e,f=c[a]=new Array(e);++d<e;)f[d]=arguments[d][a];return c},d3.bisectLeft=function(a,b,c,d){arguments.length<3&&(c=0),arguments.length<4&&(d=a.length);while(c<d){var e=c+d>>1;a[e]<b?c=e+1:d=e}return c},d3.bisect=d3.bisectRight=function(a,b,c,d){arguments.length<3&&(c=0),arguments.length<4&&(d=a.length);while(c<d){var e=c+d>>1;b<a[e]?d=e:c=e+1}return c},d3.first=function(a,b){var c=0,d=a.length,e=a[0],f;arguments.length===1&&(b=d3.ascending);while(++c<d)b.call(a,e,f=a[c])>0&&(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<d)b.call(a,e,f=a[c])<=0&&(e=f);return e},d3.nest=function(){function f(c,g){if(g>=b.length)return e?e.call(a,c):d?c.sort(d):c;var h=-1,i=c.length,j=b[g++],k,l,m={};while(++h<i)(k=j(l=c[h]))in m?m[k].push(l):m[k]=[l];for(k in m)m[k]=f(m[k],g);return m}function g(a,d){if(d>=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(++d<e)c[d]=a[b[d]];return c},d3.merge=function(a){return Array.prototype.concat.apply([],a)},d3.split=function(a,b){var c=[],d=[],e,f=-1,g=a.length;arguments.length<2&&(b=l);while(++f<g)b.call(d,e=a[f],f)?d=[]:(d.length||c.push(d),d.push(e));return c},d3.range=function(a,b,c){arguments.length<3&&(c=1,arguments.length<2&&(b=a,a=0));if((b-a)/c==Infinity)throw new Error("infinite range");var d=[],e=-1,f;if(c<0)while((f=a+c*++e)>b)d.push(f);else while((f=a+c*++e)<b)d.push(f);return d},d3.requote=function(a){return a.replace(n,"\\$&")};var n=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;d3.round=function(a,b){return b?Math.round(a*Math.pow(10,b))*Math.pow(10,-b):Math.round(a)},d3.xhr=function(a,b,c){var d=new XMLHttpRequest;arguments.length<3?c=b:b&&d.overrideMimeType&&d.overrideMimeType(b),d.open("GET",a,!0),d.onreadystatechange=function(){d.readyState===4&&c(d.status<300?d:null)},d.send(null)},d3.text=function(a,b,c){function d(a){c(a&&a.responseText)}arguments.length<3&&(c=b,b=null),d3.xhr(a,b,d)},d3.json=function(a,b){d3.text(a,"application/json",function(a){b(a?JSON.parse(a):null)})},d3.html=function(a,b){d3.text(a,"text/html",function(a){if(a!=null){var c=document.createRange();c.selectNode(document.body),a=c.createContextualFragment(a)}b(a)})},d3.xml=function(a,b,c){function d(a){c(a&&a.responseXML)}arguments.length<3&&(c=b,b=null),d3.xhr(a,b,d)},d3.ns={prefix:{svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},qualify:function(a){var b=a.indexOf(":");return b<0?a:{space:d3.ns.prefix[a.substring(0,b)],local:a.substring(b+1)}}},d3.dispatch=function(){var a=new o,b=-1,c=arguments.length;while(++b<c)a[arguments[b]]=p();return a},o.prototype.on=function(a,b){var c=a.indexOf("."),d="";c>0&&(d=a.substring(c+1),a=a.substring(0,c)),this[a].on(d,b)},d3.format=function(a){var b=q.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=r[i]||t,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<f&&(a=(new Array(f-n+1)).join(c)+a),g&&(a=u(a)),a=b+a}else{g&&(a=u(a)),a=b+a;var n=a.length;n<f&&(a=(new Array(f-n+1)).join(c)+a)}return a+k}};var q=/(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/,r={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=s(a,b)).toFixed(Math.max(0,Math.min(20,b)))}},v=["y","z","a","f","p","n","μ","m","","k","M","G","T","P","E","Z","Y"].map(w);d3.formatPrefix=function(a,b){var c=0;return a&&(a<0&&(a*=-1),b&&(a=d3.round(a,s(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))),v[8+c/3]};var x=F(2),y=F(3),z={linear:function(){return E},poly:F,quad:function(){return x},cubic:function(){return y},sin:function(){return G},exp:function(){return H},circle:function(){return I},elastic:J,back:K,bounce:function(){return L}},A={"in":function(a){return a},out:C,"in-out":D,"out-in":function(a){return D(C(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 B(A[d](z[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;N.lastIndex=0;for(d=0;c=N.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=N.lastIndex;f<b.length&&h.push(b.substring(f));for(d=0,j=i.length;(c=N.exec(a))&&d<j;++d){k=i[d];if(k.x==c[0]){if(k.i)if(h[k.i+1]==null){h[k.i-1]+=k.x,h.splice(k.i,1);for(e=d+1;e<j;++e)i[e].i--}else{h[k.i-1]+=k.x+h[k.i+1],h.splice(k.i,2);for(e=d+1;e<j;++e)i[e].i-=2}else if(h[k.i+1]==null)h[k.i]=k.x;else{h[k.i]=k.x+h[k.i+1],h.splice(k.i+1,1);for(e=d+1;e<j;++e)i[e].i--}i.splice(d,1),j--,d--}else k.x=d3.interpolateNumber(parseFloat(c[0]),parseFloat(k.x))}while(d<j)k=i.pop(),h[k.i+1]==null?h[k.i]=k.x:(h[k.i]=k.x+h[k.i+1],h.splice(k.i+1,1)),j--;return h.length===1?h[0]==null?i[0].x:function(){return b}:function(a){for(d=0;d<j;++d)h[(k=i[d]).i]=k.x(a);return h.join("")}},d3.interpolateTransform=function(a,b){return d3.interpolateString(d3.transform(a)+"",d3.transform(b)+"")},d3.interpolateRgb=function(a,b){a=d3.rgb(a),b=d3.rgb(b);var c=a.r,d=a.g,e=a.b,f=b.r-c,g=b.g-d,h=b.b-e;return function(a){return"#"+T(Math.round(c+f*a))+T(Math.round(d+g*a))+T(Math.round(e+h*a))}},d3.interpolateHsl=function(a,b){a=d3.hsl(a),b=d3.hsl(b);var c=a.h,d=a.s,e=a.l,f=b.h-c,g=b.s-d,h=b.l-e;return function(a){return _(c+f*a,d+g*a,e+h*a).toString()}},d3.interpolateArray=function(a,b){var c=[],d=[],e=a.length,f=b.length,g=Math.min(a.length,b.length),h;for(h=0;h<g;++h)c.push(d3.interpolate(a[h],b[h]));for(;h<e;++h)d[h]=a[h];for(;h<f;++h)d[h]=b[h];return function(a){for(h=0;h<g;++h)d[h]=c[h](a);return d}},d3.interpolateObject=function(a,b){var c={},d={},e;for(e in a)e in b?c[e]=O(e)(a[e],b[e]):d[e]=a[e];for(e in b)e in a||(d[e]=b[e]);return function(a){for(e in c)d[e]=c[e](a);return d}};var N=/[-+]?(?:\d*\.?\d+)(?:[eE][-+]?\d+)?/g;d3.interpolators=[d3.interpolateObject,function(a,b){return b instanceof Array&&d3.interpolateArray(a,b)},function(a,b){return typeof b=="string"&&d3.interpolateString(a+"",b)},function(a,b){return(typeof b=="string"?b in X||/^(#|rgb\(|hsl\()/.test(b):b instanceof S||b instanceof $)&&d3.interpolateRgb(a+"",b)},function(a,b){return typeof b=="number"&&d3.interpolateNumber(+a,b)}],d3.rgb=function(a,b,c){return arguments.length===1?a instanceof S?R(a.r,a.g,a.b):U(""+a,R,_):R(~~a,~~b,~~c)},S.prototype.brighter=function(a){a=Math.pow(.7,arguments.length?a:1);var b=this.r,c=this.g,d=this.b,e=30;return!b&&!c&&!d?R(e,e,e):(b&&b<e&&(b=e),c&&c<e&&(c=e),d&&d<e&&(d=e),R(Math.min(255,Math.floor(b/a)),Math.min(255,Math.floor(c/a)),Math.min(255,Math.floor(d/a))))},S.prototype.darker=function(a){return a=Math.pow(.7,arguments.length?a:1),R(Math.floor(a*this.r),Math.floor(a*this.g),Math.floor(a*this.b))},S.prototype.hsl=function(){return V(this.r,this.g,this.b)},S.prototype.toString=function(){return"#"+T(this.r)+T(this.g)+T(this.b)};var X={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc"
2
- ,ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};for(var Y in X)X[Y]=U(X[Y],R,_);d3.hsl=function(a,b,c){return arguments.length===1?a instanceof $?Z(a.h,a.s,a.l):U(""+a,V,Z):Z(+a,+b,+c)},$.prototype.brighter=function(a){return a=Math.pow(.7,arguments.length?a:1),Z(this.h,this.s,this.l/a)},$.prototype.darker=function(a){return a=Math.pow(.7,arguments.length?a:1),Z(this.h,this.s,a*this.l)},$.prototype.rgb=function(){return _(this.h,this.s,this.l)},$.prototype.toString=function(){return this.rgb().toString()};var bb=function(a,b){return b.querySelector(a)},bc=function(a,b){return b.querySelectorAll(a)};typeof Sizzle=="function"&&(bb=function(a,b){return Sizzle(a,b)[0]},bc=function(a,b){return Sizzle.uniqueSort(Sizzle(a,b))});var bd=[];d3.selection=function(){return bk},d3.selection.prototype=bd,bd.select=function(a){var b=[],c,d,e,f;typeof a!="function"&&(a=be(a));for(var g=-1,h=this.length;++g<h;){b.push(c=[]),c.parentNode=(e=this[g]).parentNode;for(var i=-1,j=e.length;++i<j;)(f=e[i])?(c.push(d=a.call(f,f.__data__,i)),d&&"__data__"in f&&(d.__data__=f.__data__)):c.push(null)}return ba(b)},bd.selectAll=function(a){var b=[],c,e;typeof a!="function"&&(a=bf(a));for(var f=-1,g=this.length;++f<g;)for(var h=this[f],i=-1,j=h.length;++i<j;)if(e=h[i])b.push(c=d(a.call(e,e.__data__,i))),c.parentNode=e;return ba(b)},bd.attr=function(a,b){function d(){this.removeAttribute(a)}function e(){this.removeAttributeNS(a.space,a.local)}function f(){this.setAttribute(a,b)}function g(){this.setAttributeNS(a.space,a.local,b)}function h(){var c=b.apply(this,arguments);c==null?this.removeAttribute(a):this.setAttribute(a,c)}function i(){var c=b.apply(this,arguments);c==null?this.removeAttributeNS(a.space,a.local):this.setAttributeNS(a.space,a.local,c)}a=d3.ns.qualify(a);if(arguments.length<2){var c=this.node();return a.local?c.getAttributeNS(a.space,a.local):c.getAttribute(a)}return this.each(b==null?a.local?e:d:typeof b=="function"?a.local?i:h:a.local?g:f)},bd.classed=function(a,b){var c=a.split(bg),d=c.length,e=-1;if(arguments.length>1){while(++e<d)bh.call(this,c[e],b);return this}while(++e<d)if(!bh.call(this,c[e]))return!1;return!0};var bg=/\s+/g;bd.style=function(a,b,c){function d(){this.style.removeProperty(a)}function e(){this.style.setProperty(a,b,c)}function f(){var d=b.apply(this,arguments);d==null?this.style.removeProperty(a):this.style.setProperty(a,d,c)}return arguments.length<3&&(c=""),arguments.length<2?window.getComputedStyle(this.node(),null).getPropertyValue(a):this.each(b==null?d:typeof b=="function"?f:e)},bd.property=function(a,b){function c(){delete this[a]}function d(){this[a]=b}function e(){var c=b.apply(this,arguments);c==null?delete this[a]:this[a]=c}return arguments.length<2?this.node()[a]:this.each(b==null?c:typeof b=="function"?e:d)},bd.text=function(a){return arguments.length<1?this.node().textContent:this.each(typeof a=="function"?function(){this.textContent=a.apply(this,arguments)}:function(){this.textContent=a})},bd.html=function(a){return arguments.length<1?this.node().innerHTML:this.each(typeof a=="function"?function(){this.innerHTML=a.apply(this,arguments)}:function(){this.innerHTML=a})},bd.append=function(a){function b(){return this.appendChild(document.createElement(a))}function c(){return this.appendChild(document.createElementNS(a.space,a.local))}return a=d3.ns.qualify(a),this.select(a.local?c:b)},bd.insert=function(a,b){function c(){return this.insertBefore(document.createElement(a),bb(b,this))}function d(){return this.insertBefore(document.createElementNS(a.space,a.local),bb(b,this))}return a=d3.ns.qualify(a),this.select(a.local?d:c)},bd.remove=function(){return this.each(function(){var a=this.parentNode;a&&a.removeChild(this)})},bd.data=function(a,b){function f(a,f){var g,h=a.length,i=f.length,j=Math.min(h,i),k=Math.max(h,i),l=[],m=[],n=[],o,p;if(b){var q={},r=[],s,t=f.length;for(g=-1;++g<h;)s=b.call(o=a[g],o.__data__,g),s in q?n[t++]=o:q[s]=o,r.push(s);for(g=-1;++g<i;)o=q[s=b.call(f,p=f[g],g)],o?(o.__data__=p,l[g]=o,m[g]=n[g]=null):(m[g]=bi(p),l[g]=n[g]=null),delete q[s];for(g=-1;++g<h;)r[g]in q&&(n[g]=a[g])}else{for(g=-1;++g<j;)o=a[g],p=f[g],o?(o.__data__=p,l[g]=o,m[g]=n[g]=null):(m[g]=bi(p),l[g]=n[g]=null);for(;g<i;++g)m[g]=bi(f[g]),l[g]=n[g]=null;for(;g<k;++g)n[g]=a[g],m[g]=l[g]=null}m.update=l,m.parentNode=l.parentNode=n.parentNode=a.parentNode,c.push(m),d.push(l),e.push(n)}var c=[],d=[],e=[],g=-1,h=this.length,i;if(typeof a=="function")while(++g<h)f(i=this[g],a.call(i,i.parentNode.__data__,g));else while(++g<h)f(i=this[g],a);var j=ba(d);return j.enter=function(){return bl(c)},j.exit=function(){return ba(e)},j},bd.filter=function(a){var b=[],c,d,e;for(var f=0,g=this.length;f<g;f++){b.push(c=[]),c.parentNode=(d=this[f]).parentNode;for(var h=0,i=d.length;h<i;h++)(e=d[h])&&a.call(e,e.__data__,h)&&c.push(e)}return ba(b)},bd.map=function(a){return this.each(function(){this.__data__=a.apply(this,arguments)})},bd.sort=function(a){a=bj.apply(this,arguments);for(var b=0,c=this.length;b<c;b++)for(var d=this[b].sort(a),e=1,f=d.length,g=d[0];e<f;e++){var h=d[e];h&&(g&&g.parentNode.insertBefore(h,g.nextSibling),g=h)}return this},bd.on=function(a,b,c){arguments.length<3&&(c=!1);var d="__on"+a,e=a.indexOf(".");return e>0&&(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})},bd.each=function(a){for(var b=-1,c=this.length;++b<c;)for(var d=this[b],e=-1,f=d.length;++e<f;){var g=d[e];g&&a.call(g,g.__data__,e,b)}return this},bd.call=function(a){return a.apply(this,(arguments[0]=this,arguments)),this},bd.empty=function(){return!this.node()},bd.node=function(a){for(var b=0,c=this.length;b<c;b++)for(var d=this[b],e=0,f=d.length;e<f;e++){var g=d[e];if(g)return g}return null},bd.transition=function(){var a=[],b,c;for(var d=-1,e=this.length;++d<e;){a.push(b=[]);for(var f=this[d],g=-1,h=f.length;++g<h;)b.push((c=f[g])?{node:c,delay:0,duration:250}:null)}return bn(a,bt||++bs,Date.now())};var bk=ba([[document]]);bk[0].parentNode=document.documentElement,d3.select=function(a){return typeof a=="string"?bk.select(a):ba([[a]])},d3.selectAll=function(a){return typeof a=="string"?bk.selectAll(a):ba([d(a)])};var bm=[];bm.append=bd.append,bm.insert=bd.insert,bm.empty=bd.empty,bm.node=bd.node,bm.select=function(a){var b=[],c,d,e,f,g;for(var h=-1,i=this.length;++h<i;){e=(f=this[h]).update,b.push(c=[]),c.parentNode=f.parentNode;for(var j=-1,k=f.length;++j<k;)(g=f[j])?(c.push(e[j]=d=a.call(f.parentNode,g.__data__,j)),d.__data__=g.__data__):c.push(null)}return ba(b)};var bo={},br=[],bs=0,bt=0,bu=d3.ease("cubic-in-out");br.call=bd.call,d3.transition=function(){return bk.transition()},d3.transition.prototype=br,br.select=function(a){var b=[],c,d,e;typeof a!="function"&&(a=be(a));for(var f=-1,g=this.length;++f<g;){b.push(c=[]);for(var h=this[f],i=-1,j=h.length;++i<j;)(e=h[i])&&(d=a.call(e.node,e.node.__data__,i))?("__data__"in e.node&&(d.__data__=e.node.__data__),c.push({node:d,delay:e.delay,duration:e.duration})):c.push(null)}return bn(b,this.id,this.time).ease(this.ease())},br.selectAll=function(a){var b=[],c,d,e;typeof a!="function"&&(a=bf(a));for(var f=-1,g=this.length;++f<g;)for(var h=this[f],i=-1,j=h.length;++i<j;)if(e=h[i]){d=a.call(e.node,e.node.__data__,i),b.push(c=[]);for(var k=-1,l=d.length;++k<l;)c.push({node:d[k],delay:e.delay,duration:e.duration})}return bn(b,this.id,this.time).ease(this.ease())},br.attr=function(a,b){return this.attrTween(a,bq(a,b))},br.attrTween=function(a,b){function d(a,d){var e=b.call(this,a,d,this.getAttribute(c));return e===bo?(this.removeAttribute(c),null):e&&function(a){this.setAttribute(c,e(a))}}function e(a,d){var e=b.call(this,a,d,this.getAttributeNS(c.space,c.local));return e===bo?(this.removeAttributeNS(c.space,c.local),null):e&&function(a){this.setAttributeNS(c.space,c.local,e(a))}}var c=d3.ns.qualify(a);return this.tween("attr."+a,c.local?e:d)},br.style=function(a,b,c){return arguments.length<3&&(c=""),this.styleTween(a,bq(a,b),c)},br.styleTween=function(a,b,c){return arguments.length<3&&(c=""),this.tween("style."+a,function(d,e){var f=b.call(this,d,e,window.getComputedStyle(this,null).getPropertyValue(a));return f===bo?(this.style.removeProperty(a),null):f&&function(b){this.style.setProperty(a,f(b),c)}})},br.text=function(a){return this.tween("text",function(b,c){this.textContent=typeof a=="function"?a.call(this,b,c):a})},br.remove=function(){return this.each("end",function(){var a;!this.__transition__&&(a=this.parentNode)&&a.removeChild(this)})},br.delay=function(a){var b=this;return b.each(typeof a=="function"?function(c,d,e){b[e][d].delay=+a.apply(this,arguments)}:(a=+a,function(c,d,e){b[e][d].delay=a}))},br.duration=function(a){var b=this;return b.each(typeof a=="function"?function(c,d,e){b[e][d].duration=+a.apply(this,arguments)}:(a=+a,function(c,d,e){b[e][d].duration=a}))},br.transition=function(){return this.select(i)};var bw=null,bx,by;d3.timer=function(a,b,c){var d=!1,e,f=bw;if(arguments.length<3){if(arguments.length<2)b=0;else if(!isFinite(b))return;c=Date.now()}while(f){if(f.callback===a){f.then=c,f.delay=b,d=!0;break}e=f,f=f.next}d||(bw={callback:a,then:c,delay:b,next:bw}),bx||(by=clearTimeout(by),bx=1,bB(bz))},d3.timer.flush=function(){var a,b=Date.now(),c=bw;while(c)a=b-c.then,c.delay||(c.flush=c.callback(a)),c=c.next;bA()};var bB=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){setTimeout(a,17)};d3.transform=function(a){bG.setAttribute("transform",a);var b=bG.transform.baseVal.consolidate();return new bC(b?b.matrix:bH)},bC.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var bG=document.createElementNS(d3.ns.prefix.svg,"g"),bH={a:1,b:0,c:0,d:1,e:0,f:0},bI=180/Math.PI;d3.scale={},d3.scale.linear=function(){return bN([0,1],[0,1],d3.interpolate,!1)},d3.scale.log=function(){return bV(d3.scale.linear(),bX)};var bW=d3.format(".0e");bX.pow=function(a){return Math.pow(10,a)},bY.pow=function(a){return-Math.pow(10,-a)},d3.scale.pow=function(){return bZ(d3.scale.linear(),1)},d3.scale.sqrt=function(){return d3.scale.pow().exponent(.5)},d3.scale.ordinal=function(){return b_([],{t:"range",x:[]})},d3.scale.category10=function(){return d3.scale.ordinal().range(ca)},d3.scale.category20=function(){return d3.scale.ordinal().range(cb)},d3.scale.category20b=function(){return d3.scale.ordinal().range(cc)},d3.scale.category20c=function(){return d3.scale.ordinal().range(cd)};var ca=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],cb=["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"],cc=["#393b79","#5254a3","#6b6ecf","#9c9ede","#637939","#8ca252","#b5cf6b","#cedb9c","#8c6d31","#bd9e39","#e7ba52","#e7cb94","#843c39","#ad494a","#d6616b","#e7969c","#7b4173","#a55194","#ce6dbd","#de9ed6"],cd=["#3182bd","#6baed6","#9ecae1","#c6dbef","#e6550d","#fd8d3c","#fdae6b","#fdd0a2","#31a354","#74c476","#a1d99b","#c7e9c0","#756bb1","#9e9ac8","#bcbddc","#dadaeb","#636363","#969696","#bdbdbd","#d9d9d9"];d3.scale.quantile=function(){return ce([],[])},d3.scale.quantize=function(){return cf(0,1,[0,1])},d3.svg={},d3.svg.arc=function(){function e(){var e=a.apply(this,arguments),f=b.apply(this,arguments),g=c.apply(this,arguments)+cg,h=d.apply(this,arguments)+cg,i=(h<g&&(i=g,g=h,h=i),h-g),j=i<Math.PI?"0":"1",k=Math.cos(g),l=Math.sin(g),m=Math.cos(h),n=Math.sin(h);return i>=ch?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=ci,b=cj,c=ck,d=cl;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+cg;return[Math.cos(f)*e,Math.sin(f)*e]},e};var cg=-Math.PI/2,ch=2*Math.PI-1e-6;d3.svg.line=function(){return cm(Object)};var cq={linear:cr,"step-before":cs,"step-after":ct,basis:cz,"basis-open":cA,"basis-closed":cB,bundle:cC,cardinal:cw,"cardinal-open":cu,"cardinal-closed":cv,monotone:cL},cE=[0,2/3,1/3,0],cF=[0,1/3,2/3,0],cG=[0,1/6,2/3,1/6];d3.svg.line.radial=function(){var a=cm(cM);return a.radius=a.x,delete a.x,a.angle=a.y,delete a.y,a},cs.reverse=ct,ct.reverse=cs,d3.svg.area=function(){return cN(Object)},d3.svg.area.radial=function(){var a=cN(cM);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)+(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)+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)+cg,k=e.call(a,h,g)+cg;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){return"A"+a+","+a+" 0 0,1 "+b}function j(a,b,c,d){return"Q 0,0 "+d}var a=cQ,b=cR,c=cS,d=ck,e=cl;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=cQ,b=cR,c=cV;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=cV,c=a.projection;return a.projection=function(a){return arguments.length?c(cW(b=a)):b},a},d3.svg.mouse=function(a){return cY(a,d3.event)};var cX=/WebKit/.test(navigator.userAgent)?-1:0;d3.svg.touches=function(a,b){return arguments.length<2&&(b=d3.event.touches),b?d(b).map(function(b){var c=cY(a,b);return c.identifier=b.identifier,c}):[]},d3.svg.symbol=function(){function c(c,d){return(c_[a.call(this,c,d)]||c_.circle)(b.call(this,c,d))}var a=c$,b=cZ;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 c_={circle:function(a){var b=Math.sqrt(a/Math.PI);return"M0,"+b+"A"+b+","+b+" 0 1,1 0,"+ -b+"A"+b+","+b+" 0 1,1 0,"+b+"Z"},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*db)),c=b*db;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/da),c=b*da/2;return"M0,"+c+"L"+b+","+ -c+" "+ -b+","+ -c+"Z"},"triangle-up":function(a){var b=Math.sqrt(a/da),c=b*da/2;return"M0,"+ -c+"L"+b+","+c+" "+ -b+","+c+"Z"}};d3.svg.symbolTypes=d3.keys(c_);var da=Math.sqrt(3),db=Math.tan(30*Math.PI/180);d3.svg.axis=function(){function j(j){j.each(function(k,l,m){var n=d3.select(this),o=j.delay?function(a){var b=bt;try{return bt=j.id,a.transition().delay(j[m][l].delay).duration(j[m][l].duration).ease(j.ease())}finally{bt=b}}:Object,p=a.ticks.apply(a,g),q=h==null?a.tickFormat.apply(a,g):h,r=de(a,p,i),s=n.selectAll(".minor").data(r,String),t=s.enter().insert("svg:line","g").attr("class","tick minor").style("opacity",1e-6),u=o(s.exit()).style("opacity",1e-6).remove(),v=o(s).style("opacity",1),w=n.selectAll("g").data(p,String),x=w.enter().insert("svg:g","path").style("opacity",1e-6),y=o(w.exit()).style("opacity",1e-6).remove(),z=o(w).style("opacity",1),A,B=bK(a.range()),C=n.selectAll(".domain").data([0]),D=C.enter().append("svg:path").attr("class","domain"),E=o(C),F=this.__chart__||a;this.__chart__=a.copy(),x.append("svg:line").attr("class","tick"),x.append("svg:text"),z.select("text").text(q);switch(b){case"bottom":A=dc,v.attr("x2",0).attr("y2",d),z.select("line").attr("x2",0).attr("y2",c),z.select("text").attr("x",0).attr("y",Math.max(c,0)+f).attr("dy",".71em").attr("text-anchor","middle"),E.attr("d","M"+B[0]+","+e+"V0H"+B[1]+"V"+e);break;case"top":A=dc,v.attr("x2",0).attr("y2",-d),z.select("line").attr("x2",0).attr("y2",-c),z.select("text").attr("x",0).attr("y",-(Math.max(c,0)+f)).attr("dy","0em").attr("text-anchor","middle"),E.attr("d","M"+B[0]+","+ -e+"V0H"+B[1]+"V"+ -e);break;case"left":A=dd,v.attr("x2",-d).attr("y2",0),z.select("line").attr("x2",-c).attr("y2",0),z.select("text").attr("x",-(Math.max(c,0)+f)).attr("y",0).attr("dy",".32em").attr("text-anchor","end"),E.attr("d","M"+ -e+","+B[0]+"H0V"+B[1]+"H"+ -e);break;case"right":A=dd,v.attr("x2",d).attr("y2",0),z.select("line").attr("x2",c).attr("y2",0),z.select("text").attr("x",Math.max(c,0)+f).attr("y",0).attr("dy",".32em").attr("text-anchor","start"),E.attr("d","M"+e+","+B[0]+"H0V"+B[1]+"H"+e)}x.call(A,F),z.call(A,a),y.call(A,a),t.call(A,F),v.call(A,a),u.call(A,a)})}var a=d3.scale.linear(),b="bottom",c=6,d=6,e=6,f=3,g=[10],h,i=0;return j.scale=function(b){return arguments.length?(a=b,j):a},j.orient=function(a){return arguments.length?(b=a,j):b},j.ticks=function(){return arguments.length?(g=arguments,j):g},j.tickFormat=function(a){return arguments.length?(h=a,j):h},j.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,j},j.tickPadding=function(a){return arguments.length?(f=+a,j):f},j.tickSubdivide=function(a){return arguments.length?(i=+a,j):i},j},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).on("mousedown.brush",f),h=a.selectAll(".background").data([,]),i=a.selectAll(".extent").data([,]),j=a.selectAll(".resize").data(g,String),k;h.enter().append("svg:rect").attr("class","background").style("visibility","hidden").style("pointer-events","all").style("cursor","crosshair"),i.enter().append("svg:rect").attr("class","extent").style("cursor","move"),j.enter().append("svg:rect").attr("class",function(a){return"resize "+a}).attr("width",6).attr("height",6).style("visibility","hidden").style("pointer-events",e.empty()?"none":"all").style("cursor",function(a){return dx[a]}),j.exit().remove(),b&&(k=bK(b.range()),h.attr("x",k[0]).attr("width",k[1]-k[0]),dq(a,d)),c&&(k=bK(c.range()),h.attr("y",k[0]).attr("height",k[1]-k[0]),dr(a,d))})}function f(){var a=d3.select(d3.event.target);df=e,dh=this,dk=d,dp=d3.svg.mouse(dh),(dl=a.classed("extent"))?(dp[0]=d[0][0]-dp[0],dp[1]=d[0][1]-dp[1]):a.classed("resize")?(dm=d3.event.target.__data__,dp[0]=d[+/w$/.test(dm)][0],dp[1]=d[+/^n/.test(dm)][1]):d3.event.altKey&&(dn=dp.slice()),di=!/^(n|s)$/.test(dm)&&b,dj=!/^(e|w)$/.test(dm)&&c,dg=g(this,arguments),dg("brushstart"),du(),M()}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]),f=b(f),g=b(g),g<f&&(j=f,f=g,g=j),d[0][0]=f,d[1][0]=g),c&&(h=a[0],i=a[1],b&&(h=h[1],i=i[1]),h=c(h),i=c(i),i<h&&(j=h,h=i,i=j),d[0][1]=h,d[1][1]=i),e):(b&&(f=b.invert(d[0][0]),g=b.invert(d[1][0]),g<f&&(j=f,f=g,g=j)),c&&(h=c.invert(d[0][1]),i=c.invert(d[1][1]),i<h&&(j=h,h=i,i=j)),b&&c?[[f,h],[g,i]]:b?[f,g]:c&&[h,i])},e.clear=function(){return d[0][0]=d[0][1]=d[1][0]=d[1][1]=0,e},e.empty=function(){return b&&d[0][0]===d[1][0]||c&&d[0][1]===d[1][1]},e.on=function(b,c){return a.on(b,c),e},d3.select(window).on("mousemove.brush",du).on("mouseup.brush",dw).on("keydown.brush",ds).on("keyup.brush",dt),e};var df,dg,dh,di,dj,dk,dl,dm,dn,dp,dx={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"};d3.behavior={},d3.behavior.drag=function(){function b(){this.on("mousedown.drag",d).on("touchstart.drag",d),d3.select(window).on("mousemove.drag",dH).on("touchmove.drag",dH).on("mouseup.drag",dI,!0).on("touchend.drag",dI,!0).on("click.drag",dJ,!0)}function c(){dy=a,dz=d3.event.target,dC=dG((dA=this).parentNode),dD=0,dB=arguments}function d(){c.apply(this,arguments),dF("dragstart")}var a=d3.dispatch("drag","dragstart","dragend");return b.on=function(c,d){return a.on(c,d),b},b};var dy,dz,dA,dB,dC,dD,dE;d3.behavior.zoom=function(){function d(){this.on("mousedown.zoom",f).on("mousewheel.zoom",g).on("DOMMouseScroll.zoom",g).on("dblclick.zoom",h).on("touchstart.zoom",i),d3.select(window).on("mousemove.zoom",d_).on("mouseup.zoom",ea).on("touchmove.zoom",d$).on("touchend.zoom",dZ).on("click.zoom",eb,!0)}function e(){dP=a,dQ=c,dR=b.zoom,dS=d3.event.target,dT=this,dU=arguments}function f(){e.apply(this,arguments),dL=dX(d3.svg.mouse(dT)),dV=!1,d3.event.preventDefault(),window.focus()}function g(){e.apply(this,arguments),dM||(dM=dX(d3.svg.mouse(dT))),ec(dY()+a[2],d3.svg.mouse(dT),dM)}function h(){e.apply(this,arguments);var b=d3.svg.mouse(dT);ec(d3.event.shiftKey?Math.ceil(a[2]-1):Math.floor(a[2]+1),b,dX(b))}function i(){e.apply(this,arguments);var b=dZ(),c,d=Date.now();b.length===1&&d-dO<300&&ec(1+Math.floor(a[2]),c=b[0],dN[c.identifier]),dO=d}var a=[0,0,0],b=d3.dispatch("zoom"),c=ed;return d.extent=function(a){return arguments.length?(c=a==null?ed:a,d):c},d.on=function(a,c){return b.on(a,c),d},d};var dK,dL,dM,dN={},dO=0,dP,dQ,dR,dS,dT,dU,dV,dW,ed=[[-Infinity,Infinity],[-Infinity,Infinity],[-Infinity,Infinity]]})();