d3_rails 3.3.5 → 3.3.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a2855fed3335cbb9bf814f9b572bd04c308fece3
4
- data.tar.gz: dacb769cca53e5158b07d1a25b68e93cb4017c05
3
+ metadata.gz: d851210f27195c9192e8147501de00b77ca2fc90
4
+ data.tar.gz: 8528938c03dc9abe60b92e30b69f4c561bf83933
5
5
  SHA512:
6
- metadata.gz: 58370eb76e1afc6102a55710dd7198121fc9689b341e799ce5a07e62f2e3b4e673fac56bad0c0ea605282c3b2dbc462c24a982b1c7873e74ceed103bc502ecfa
7
- data.tar.gz: d62648d638d798553b7cf8ef7fe0a4786a28821fafb941eccae4f874c8c3cad508a07d49eefe38551e0b527aaf32402ef15ab5f5798369b89c475949fb6bf308
6
+ metadata.gz: 42523af22a5742d9d8156b9e5907ca1cd9c10b6dc03fe6dbaa8084032ad5f99231b7b047aa60bd0a0e0434594f3e0bf1a210f9298534f15e4197b898e90d4954
7
+ data.tar.gz: d573ac7935c62da553c45e17bd5c5e77ee3537e751f2c6bc8489146868b337b58741e1e716294cbd6aa32005cc7b17a39f12117893625488e82fb145d614f916
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # D3_Rails
2
- ## Version 3.3.4 (of d3 in most current gem)
2
+ ## Version 3.3.5 (of d3 in most current gem)
3
3
 
4
4
  **D3_Rails** is a small, lightweight gem which allows you to include any
5
5
  and all of D3 Javascripts into your 3.1 Rails application, merely by
@@ -1,6 +1,6 @@
1
1
  d3 = function() {
2
2
  var d3 = {
3
- version: "3.3.5"
3
+ version: "3.3.6"
4
4
  };
5
5
  if (!Date.now) Date.now = function() {
6
6
  return +new Date();
@@ -273,7 +273,7 @@ d3 = function() {
273
273
  }
274
274
  }
275
275
  });
276
- var d3_map_prefix = "\0", d3_map_prefixCode = d3_map_prefix.charCodeAt(0);
276
+ var d3_map_prefix = "\x00", d3_map_prefixCode = d3_map_prefix.charCodeAt(0);
277
277
  d3.nest = function() {
278
278
  var nest = {}, keys = [], sortKeys = [], sortValues, rollup;
279
279
  function map(mapType, array, depth) {
@@ -1158,7 +1158,7 @@ d3 = function() {
1158
1158
  };
1159
1159
  return d3.rebind(drag, event, "on");
1160
1160
  };
1161
- var π = Math.PI, ε = 1e-6, ε2 = ε * ε, d3_radians = π / 180, d3_degrees = 180 / π;
1161
+ var π = Math.PI, τ = 2 * π, halfπ = π / 2, ε = 1e-6, ε2 = ε * ε, d3_radians = π / 180, d3_degrees = 180 / π;
1162
1162
  function d3_sgn(x) {
1163
1163
  return x > 0 ? 1 : x < 0 ? -1 : 0;
1164
1164
  }
@@ -1166,16 +1166,16 @@ d3 = function() {
1166
1166
  return x > 1 ? 0 : x < -1 ? π : Math.acos(x);
1167
1167
  }
1168
1168
  function d3_asin(x) {
1169
- return x > 1 ? π / 2 : x < -1 ? / 2 : Math.asin(x);
1169
+ return x > 1 ? halfπ : x < -1 ? -halfπ : Math.asin(x);
1170
1170
  }
1171
1171
  function d3_sinh(x) {
1172
- return (Math.exp(x) - Math.exp(-x)) / 2;
1172
+ return ((x = Math.exp(x)) - 1 / x) / 2;
1173
1173
  }
1174
1174
  function d3_cosh(x) {
1175
- return (Math.exp(x) + Math.exp(-x)) / 2;
1175
+ return ((x = Math.exp(x)) + 1 / x) / 2;
1176
1176
  }
1177
1177
  function d3_tanh(x) {
1178
- return d3_sinh(x) / d3_cosh(x);
1178
+ return ((x = Math.exp(2 * x)) - 1) / (x + 1);
1179
1179
  }
1180
1180
  function d3_haversin(x) {
1181
1181
  return (x = Math.sin(x / 2)) * x;
@@ -2611,7 +2611,7 @@ d3 = function() {
2611
2611
  function d3_true() {
2612
2612
  return true;
2613
2613
  }
2614
- function d3_geo_clipPolygon(segments, compare, inside, interpolate, listener) {
2614
+ function d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener) {
2615
2615
  var subject = [], clip = [];
2616
2616
  segments.forEach(function(segment) {
2617
2617
  if ((n = segment.length - 1) <= 0) return;
@@ -2664,8 +2664,8 @@ d3 = function() {
2664
2664
  d3_geo_clipPolygonLinkCircular(subject);
2665
2665
  d3_geo_clipPolygonLinkCircular(clip);
2666
2666
  if (!subject.length) return;
2667
- if (inside) for (var i = 1, e = !inside(clip[0].point), n = clip.length; i < n; ++i) {
2668
- clip[i].entry = e = !e;
2667
+ for (var i = 0, entry = clipStartInside, n = clip.length; i < n; ++i) {
2668
+ clip[i].entry = entry = !entry;
2669
2669
  }
2670
2670
  var start = subject[0], current, points, point;
2671
2671
  while (1) {
@@ -2708,9 +2708,9 @@ d3 = function() {
2708
2708
  a.next = b = array[0];
2709
2709
  b.prev = a;
2710
2710
  }
2711
- function d3_geo_clip(pointVisible, clipLine, interpolate, polygonContains) {
2712
- return function(listener) {
2713
- var line = clipLine(listener);
2711
+ function d3_geo_clip(pointVisible, clipLine, interpolate, clipStart) {
2712
+ return function(rotate, listener) {
2713
+ var line = clipLine(listener), rotatedClipStart = rotate.invert(clipStart[0], clipStart[1]);
2714
2714
  var clip = {
2715
2715
  point: point,
2716
2716
  lineStart: lineStart,
@@ -2728,9 +2728,10 @@ d3 = function() {
2728
2728
  clip.lineStart = lineStart;
2729
2729
  clip.lineEnd = lineEnd;
2730
2730
  segments = d3.merge(segments);
2731
+ var clipStartInside = d3_geo_pointInPolygon(rotatedClipStart, polygon);
2731
2732
  if (segments.length) {
2732
- d3_geo_clipPolygon(segments, d3_geo_clipSort, null, interpolate, listener);
2733
- } else if (polygonContains(polygon)) {
2733
+ d3_geo_clipPolygon(segments, d3_geo_clipSort, clipStartInside, interpolate, listener);
2734
+ } else if (clipStartInside) {
2734
2735
  listener.lineStart();
2735
2736
  interpolate(null, null, 1, listener);
2736
2737
  listener.lineEnd();
@@ -2747,10 +2748,12 @@ d3 = function() {
2747
2748
  }
2748
2749
  };
2749
2750
  function point(λ, φ) {
2750
- if (pointVisible(λ, φ)) listener.point(λ, φ);
2751
+ var point = rotate(λ, φ);
2752
+ if (pointVisible(λ = point[0], φ = point[1])) listener.point(λ, φ);
2751
2753
  }
2752
2754
  function pointLine(λ, φ) {
2753
- line.point(λ, φ);
2755
+ var point = rotate(λ, φ);
2756
+ line.point(point[0], point[1]);
2754
2757
  }
2755
2758
  function lineStart() {
2756
2759
  clip.point = pointLine;
@@ -2763,8 +2766,9 @@ d3 = function() {
2763
2766
  var segments;
2764
2767
  var buffer = d3_geo_clipBufferListener(), ringListener = clipLine(buffer), polygon, ring;
2765
2768
  function pointRing(λ, φ) {
2766
- ringListener.point(λ, φ);
2767
2769
  ring.push([ λ, φ ]);
2770
+ var point = rotate(λ, φ);
2771
+ ringListener.point(point[0], point[1]);
2768
2772
  }
2769
2773
  function ringStart() {
2770
2774
  ringListener.lineStart();
@@ -2817,7 +2821,7 @@ d3 = function() {
2817
2821
  };
2818
2822
  }
2819
2823
  function d3_geo_clipSort(a, b) {
2820
- return ((a = a.point)[0] < 0 ? a[1] - π / 2 - ε : π / 2 - a[1]) - ((b = b.point)[0] < 0 ? b[1] - π / 2 - ε : π / 2 - b[1]);
2824
+ return ((a = a.point)[0] < 0 ? a[1] - halfπ - ε : halfπ - a[1]) - ((b = b.point)[0] < 0 ? b[1] - halfπ - ε : halfπ - b[1]);
2821
2825
  }
2822
2826
  function d3_geo_pointInPolygon(point, polygon) {
2823
2827
  var meridian = point[0], parallel = point[1], meridianNormal = [ Math.sin(meridian), -Math.cos(meridian), 0 ], polarAngle = 0, winding = 0;
@@ -2838,7 +2842,7 @@ d3 = function() {
2838
2842
  var intersection = d3_geo_cartesianCross(meridianNormal, arc);
2839
2843
  d3_geo_cartesianNormalize(intersection);
2840
2844
  var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]);
2841
- if (parallel > φarc) {
2845
+ if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) {
2842
2846
  winding += antimeridian ^ dλ >= 0 ? 1 : -1;
2843
2847
  }
2844
2848
  }
@@ -2848,7 +2852,7 @@ d3 = function() {
2848
2852
  }
2849
2853
  return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < 0) ^ winding & 1;
2850
2854
  }
2851
- var d3_geo_clipAntimeridian = d3_geo_clip(d3_true, d3_geo_clipAntimeridianLine, d3_geo_clipAntimeridianInterpolate, d3_geo_clipAntimeridianPolygonContains);
2855
+ var d3_geo_clipAntimeridian = d3_geo_clip(d3_true, d3_geo_clipAntimeridianLine, d3_geo_clipAntimeridianInterpolate, [ -π, -π / 2 ]);
2852
2856
  function d3_geo_clipAntimeridianLine(listener) {
2853
2857
  var λ0 = NaN, φ0 = NaN, sλ0 = NaN, clean;
2854
2858
  return {
@@ -2859,7 +2863,7 @@ d3 = function() {
2859
2863
  point: function(λ1, φ1) {
2860
2864
  var sλ1 = λ1 > 0 ? π : -π, dλ = Math.abs(λ1 - λ0);
2861
2865
  if (Math.abs(dλ - π) < ε) {
2862
- listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? π / 2 : -π / 2);
2866
+ listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? halfπ : -halfπ);
2863
2867
  listener.point(sλ0, φ0);
2864
2868
  listener.lineEnd();
2865
2869
  listener.lineStart();
@@ -2895,7 +2899,7 @@ d3 = function() {
2895
2899
  function d3_geo_clipAntimeridianInterpolate(from, to, direction, listener) {
2896
2900
  var φ;
2897
2901
  if (from == null) {
2898
- φ = direction * π / 2;
2902
+ φ = direction * halfπ;
2899
2903
  listener.point(-π, φ);
2900
2904
  listener.point(0, φ);
2901
2905
  listener.point(π, φ);
@@ -2915,13 +2919,9 @@ d3 = function() {
2915
2919
  listener.point(to[0], to[1]);
2916
2920
  }
2917
2921
  }
2918
- var d3_geo_clipAntimeridianPoint = [ -π, 0 ];
2919
- function d3_geo_clipAntimeridianPolygonContains(polygon) {
2920
- return d3_geo_pointInPolygon(d3_geo_clipAntimeridianPoint, polygon);
2921
- }
2922
2922
  function d3_geo_clipCircle(radius) {
2923
- var cr = Math.cos(radius), smallRadius = cr > 0, point = [ radius, 0 ], notHemisphere = Math.abs(cr) > ε, interpolate = d3_geo_circleInterpolate(radius, 6 * d3_radians);
2924
- return d3_geo_clip(visible, clipLine, interpolate, polygonContains);
2923
+ var cr = Math.cos(radius), smallRadius = cr > 0, notHemisphere = Math.abs(cr) > ε, interpolate = d3_geo_circleInterpolate(radius, 6 * d3_radians);
2924
+ return d3_geo_clip(visible, clipLine, interpolate, smallRadius ? [ 0, -radius ] : [ -π, radius - π ]);
2925
2925
  function visible(λ, φ) {
2926
2926
  return Math.cos(λ) * Math.cos(φ) > cr;
2927
2927
  }
@@ -3014,9 +3014,6 @@ d3 = function() {
3014
3014
  if (φ < -r) code |= 4; else if (φ > r) code |= 8;
3015
3015
  return code;
3016
3016
  }
3017
- function polygonContains(polygon) {
3018
- return d3_geo_pointInPolygon(point, polygon);
3019
- }
3020
3017
  }
3021
3018
  var d3_geo_clipExtentMAX = 1e9;
3022
3019
  d3.geo.clipExtent = function() {
@@ -3047,25 +3044,27 @@ d3 = function() {
3047
3044
  listener = bufferListener;
3048
3045
  segments = [];
3049
3046
  polygon = [];
3047
+ clean = true;
3050
3048
  },
3051
3049
  polygonEnd: function() {
3052
3050
  listener = listener_;
3053
- if ((segments = d3.merge(segments)).length) {
3051
+ segments = d3.merge(segments);
3052
+ var clipStartInside = insidePolygon([ x0, y1 ]), inside = clean && clipStartInside, visible = segments.length;
3053
+ if (inside || visible) {
3054
3054
  listener.polygonStart();
3055
- d3_geo_clipPolygon(segments, compare, inside, interpolate, listener);
3055
+ if (inside) {
3056
+ listener.lineStart();
3057
+ interpolate(null, null, 1, listener);
3058
+ listener.lineEnd();
3059
+ }
3060
+ if (visible) {
3061
+ d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener);
3062
+ }
3056
3063
  listener.polygonEnd();
3057
- } else if (insidePolygon([ x0, y0 ])) {
3058
- listener.polygonStart(), listener.lineStart();
3059
- interpolate(null, null, 1, listener);
3060
- listener.lineEnd(), listener.polygonEnd();
3061
3064
  }
3062
3065
  segments = polygon = ring = null;
3063
3066
  }
3064
3067
  };
3065
- function inside(point) {
3066
- var a = corner(point, -1), i = insidePolygon([ a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0 ]);
3067
- return i;
3068
- }
3069
3068
  function insidePolygon(p) {
3070
3069
  var wn = 0, n = polygon.length, y = p[1];
3071
3070
  for (var i = 0; i < n; ++i) {
@@ -3094,13 +3093,13 @@ d3 = function() {
3094
3093
  listener.point(to[0], to[1]);
3095
3094
  }
3096
3095
  }
3097
- function visible(x, y) {
3096
+ function pointVisible(x, y) {
3098
3097
  return x0 <= x && x <= x1 && y0 <= y && y <= y1;
3099
3098
  }
3100
3099
  function point(x, y) {
3101
- if (visible(x, y)) listener.point(x, y);
3100
+ if (pointVisible(x, y)) listener.point(x, y);
3102
3101
  }
3103
- var x__, y__, v__, x_, y_, v_, first;
3102
+ var x__, y__, v__, x_, y_, v_, first, clean;
3104
3103
  function lineStart() {
3105
3104
  clip.point = linePoint;
3106
3105
  if (polygon) polygon.push(ring = []);
@@ -3120,7 +3119,7 @@ d3 = function() {
3120
3119
  function linePoint(x, y) {
3121
3120
  x = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, x));
3122
3121
  y = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, y));
3123
- var v = visible(x, y);
3122
+ var v = pointVisible(x, y);
3124
3123
  if (polygon) ring.push([ x, y ]);
3125
3124
  if (first) {
3126
3125
  x__ = x, y__ = y, v__ = v;
@@ -3139,9 +3138,11 @@ d3 = function() {
3139
3138
  }
3140
3139
  listener.point(b[0], b[1]);
3141
3140
  if (!v) listener.lineEnd();
3141
+ clean = false;
3142
3142
  } else if (v) {
3143
3143
  listener.lineStart();
3144
3144
  listener.point(x, y);
3145
+ clean = false;
3145
3146
  }
3146
3147
  }
3147
3148
  }
@@ -3469,7 +3470,7 @@ d3 = function() {
3469
3470
  };
3470
3471
  function point(x, y) {
3471
3472
  context.moveTo(x, y);
3472
- context.arc(x, y, pointRadius, 0, 2 * π);
3473
+ context.arc(x, y, pointRadius, 0, τ);
3473
3474
  }
3474
3475
  function pointLineStart(x, y) {
3475
3476
  context.moveTo(x, y);
@@ -3668,7 +3669,7 @@ d3 = function() {
3668
3669
  }
3669
3670
  projection.stream = function(output) {
3670
3671
  if (stream) stream.valid = false;
3671
- stream = d3_geo_projectionRadiansRotate(rotate, preclip(projectResample(postclip(output))));
3672
+ stream = d3_geo_projectionRadians(preclip(rotate, projectResample(postclip(output))));
3672
3673
  stream.valid = true;
3673
3674
  return stream;
3674
3675
  };
@@ -3725,11 +3726,10 @@ d3 = function() {
3725
3726
  return reset();
3726
3727
  };
3727
3728
  }
3728
- function d3_geo_projectionRadiansRotate(rotate, stream) {
3729
+ function d3_geo_projectionRadians(stream) {
3729
3730
  var transform = new d3_geo_transform(stream);
3730
- transform.point = function(x, y) {
3731
- y = rotate(x * d3_radians, y * d3_radians), x = y[0];
3732
- stream.point(x > π ? x - 2 * π : x < -π ? x + 2 * π : x, y[1]);
3731
+ transform.point = function(λ, φ) {
3732
+ stream.point(λ * d3_radians, φ * d3_radians);
3733
3733
  };
3734
3734
  return transform;
3735
3735
  }
@@ -3751,12 +3751,16 @@ d3 = function() {
3751
3751
  };
3752
3752
  return forward;
3753
3753
  };
3754
+ function d3_geo_identityRotation(λ, φ) {
3755
+ return [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ];
3756
+ }
3757
+ d3_geo_identityRotation.invert = d3_geo_equirectangular;
3754
3758
  function d3_geo_rotation(δλ, δφ, δγ) {
3755
- return δλ ? δφ || δγ ? d3_geo_compose(d3_geo_rotationλ(δλ), d3_geo_rotationφγ(δφ, δγ)) : d3_geo_rotationλ(δλ) : δφ || δγ ? d3_geo_rotationφγ(δφ, δγ) : d3_geo_equirectangular;
3759
+ return δλ ? δφ || δγ ? d3_geo_compose(d3_geo_rotationλ(δλ), d3_geo_rotationφγ(δφ, δγ)) : d3_geo_rotationλ(δλ) : δφ || δγ ? d3_geo_rotationφγ(δφ, δγ) : d3_geo_identityRotation;
3756
3760
  }
3757
3761
  function d3_geo_forwardRotationλ(δλ) {
3758
3762
  return function(λ, φ) {
3759
- return λ += δλ, [ λ > π ? λ - 2 * π : λ < -π ? λ + 2 * π : λ, φ ];
3763
+ return λ += δλ, [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ];
3760
3764
  };
3761
3765
  }
3762
3766
  function d3_geo_rotationλ(δλ) {
@@ -3815,9 +3819,9 @@ d3 = function() {
3815
3819
  if (from != null) {
3816
3820
  from = d3_geo_circleAngle(cr, from);
3817
3821
  to = d3_geo_circleAngle(cr, to);
3818
- if (direction > 0 ? from < to : from > to) from += direction * 2 * π;
3822
+ if (direction > 0 ? from < to : from > to) from += direction * τ;
3819
3823
  } else {
3820
- from = radius + direction * 2 * π;
3824
+ from = radius + direction * τ;
3821
3825
  to = radius - .5 * step;
3822
3826
  }
3823
3827
  for (var point, t = from; direction > 0 ? t > to : t < to; t -= step) {
@@ -4033,12 +4037,12 @@ d3 = function() {
4033
4037
  }, n = φ0 === φ1 ? Math.sin(φ0) : Math.log(cosφ0 / Math.cos(φ1)) / Math.log(t(φ1) / t(φ0)), F = cosφ0 * Math.pow(t(φ0), n) / n;
4034
4038
  if (!n) return d3_geo_mercator;
4035
4039
  function forward(λ, φ) {
4036
- var ρ = Math.abs(Math.abs(φ) - π / 2) < ε ? 0 : F / Math.pow(t(φ), n);
4040
+ var ρ = Math.abs(Math.abs(φ) - halfπ) < ε ? 0 : F / Math.pow(t(φ), n);
4037
4041
  return [ ρ * Math.sin(n * λ), F - ρ * Math.cos(n * λ) ];
4038
4042
  }
4039
4043
  forward.invert = function(x, y) {
4040
4044
  var ρ0_y = F - y, ρ = d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y);
4041
- return [ Math.atan2(x, ρ0_y) / n, 2 * Math.atan(Math.pow(F / ρ, 1 / n)) - π / 2 ];
4045
+ return [ Math.atan2(x, ρ0_y) / n, 2 * Math.atan(Math.pow(F / ρ, 1 / n)) - halfπ ];
4042
4046
  };
4043
4047
  return forward;
4044
4048
  }
@@ -4071,7 +4075,7 @@ d3 = function() {
4071
4075
  return [ λ, Math.log(Math.tan(π / 4 + φ / 2)) ];
4072
4076
  }
4073
4077
  d3_geo_mercator.invert = function(x, y) {
4074
- return [ x, 2 * Math.atan(Math.exp(y)) - π / 2 ];
4078
+ return [ x, 2 * Math.atan(Math.exp(y)) - halfπ ];
4075
4079
  };
4076
4080
  function d3_geo_mercatorProjection(project) {
4077
4081
  var m = d3_geo_projection(project), scale = m.scale, translate = m.translate, clipExtent = m.clipExtent, clipAuto;
@@ -4358,7 +4362,7 @@ d3 = function() {
4358
4362
  var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1;
4359
4363
  while (++i < j) {
4360
4364
  d = d3_svg_lineSlope(points[i], points[i + 1]);
4361
- if (Math.abs(d) < 1e-6) {
4365
+ if (Math.abs(d) < ε) {
4362
4366
  m[i] = m[i + 1] = 0;
4363
4367
  } else {
4364
4368
  a = m[i] / d;
@@ -5273,7 +5277,7 @@ d3 = function() {
5273
5277
  };
5274
5278
  }
5275
5279
  function d3_ease_sin(t) {
5276
- return 1 - Math.cos(t * π / 2);
5280
+ return 1 - Math.cos(t * halfπ);
5277
5281
  }
5278
5282
  function d3_ease_exp(t) {
5279
5283
  return Math.pow(2, 10 * (t - 1));
@@ -5284,9 +5288,9 @@ d3 = function() {
5284
5288
  function d3_ease_elastic(a, p) {
5285
5289
  var s;
5286
5290
  if (arguments.length < 2) p = .45;
5287
- if (arguments.length) s = p / (2 * π) * Math.asin(1 / a); else a = 1, s = p / 4;
5291
+ if (arguments.length) s = p / τ * Math.asin(1 / a); else a = 1, s = p / 4;
5288
5292
  return function(t) {
5289
- return 1 + a * Math.pow(2, 10 * -t) * Math.sin((t - s) * 2 * π / p);
5293
+ return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * τ / p);
5290
5294
  };
5291
5295
  }
5292
5296
  function d3_ease_back(s) {
@@ -5520,7 +5524,7 @@ d3 = function() {
5520
5524
  });
5521
5525
  });
5522
5526
  }
5523
- k = (2 * π - padding * n) / k;
5527
+ k = (τ - padding * n) / k;
5524
5528
  x = 0, i = -1;
5525
5529
  while (++i < n) {
5526
5530
  x0 = x, j = -1;
@@ -5972,7 +5976,7 @@ d3 = function() {
5972
5976
  return d3_layout_hierarchyRebind(partition, hierarchy);
5973
5977
  };
5974
5978
  d3.layout.pie = function() {
5975
- var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = 2 * π;
5979
+ var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = τ;
5976
5980
  function pie(data) {
5977
5981
  var values = data.map(function(d, i) {
5978
5982
  return +value.call(pie, d, i);
@@ -7326,7 +7330,7 @@ d3 = function() {
7326
7330
  };
7327
7331
  return arc;
7328
7332
  };
7329
- var d3_svg_arcOffset = / 2, d3_svg_arcMax = 2 * π - 1e-6;
7333
+ var d3_svg_arcOffset = -halfπ, d3_svg_arcMax = τ - ε;
7330
7334
  function d3_svg_arcInnerRadius(d) {
7331
7335
  return d.innerRadius;
7332
7336
  }
@@ -7845,7 +7849,7 @@ d3 = function() {
7845
7849
  ++lock.count;
7846
7850
  d3.timer(function(elapsed) {
7847
7851
  var d = node.__data__, ease = transition.ease, delay = transition.delay, duration = transition.duration, tweened = [];
7848
- if (delay <= elapsed) return start(elapsed);
7852
+ if (delay <= elapsed) return start(elapsed - delay);
7849
7853
  d3_timer_replace(start, delay, time);
7850
7854
  function start(elapsed) {
7851
7855
  if (lock.active > id) return stop();
@@ -7856,12 +7860,12 @@ d3 = function() {
7856
7860
  tweened.push(value);
7857
7861
  }
7858
7862
  });
7859
- if (tick(elapsed)) return 1;
7860
- d3_timer_replace(tick, 0, time);
7863
+ if (tick(elapsed || 1)) return 1;
7864
+ d3_timer_replace(tick, delay, time);
7861
7865
  }
7862
7866
  function tick(elapsed) {
7863
7867
  if (lock.active !== id) return stop();
7864
- var t = (elapsed - delay) / duration, e = ease(t), n = tweened.length;
7868
+ var t = elapsed / duration, e = ease(t), n = tweened.length;
7865
7869
  while (n > 0) {
7866
7870
  tweened[--n].call(node, e);
7867
7871
  }
@@ -7882,11 +7886,10 @@ d3 = function() {
7882
7886
  function axis(g) {
7883
7887
  g.each(function() {
7884
7888
  var g = d3.select(this);
7885
- var ticks = tickValues == null ? scale.ticks ? scale.ticks.apply(scale, tickArguments_) : scale.domain() : tickValues, tickFormat = tickFormat_ == null ? scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(".tick").data(ticks, scale), tickEnter = tick.enter().insert("g", ".domain").attr("class", "tick").style("opacity", 1e-6), tickExit = d3.transition(tick.exit()).style("opacity", 1e-6).remove(), tickUpdate = d3.transition(tick).style("opacity", 1), tickTransform;
7886
- var range = d3_scaleRange(scale), path = g.selectAll(".domain").data([ 0 ]), pathUpdate = (path.enter().append("path").attr("class", "domain"),
7889
+ var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = scale.copy();
7890
+ var ticks = tickValues == null ? scale1.ticks ? scale1.ticks.apply(scale1, tickArguments_) : scale1.domain() : tickValues, tickFormat = tickFormat_ == null ? scale1.tickFormat ? scale1.tickFormat.apply(scale1, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(".tick").data(ticks, scale1), tickEnter = tick.enter().insert("g", ".domain").attr("class", "tick").style("opacity", ε), tickExit = d3.transition(tick.exit()).style("opacity", ε).remove(), tickUpdate = d3.transition(tick).style("opacity", 1), tickTransform;
7891
+ var range = d3_scaleRange(scale1), path = g.selectAll(".domain").data([ 0 ]), pathUpdate = (path.enter().append("path").attr("class", "domain"),
7887
7892
  d3.transition(path));
7888
- var scale1 = scale.copy(), scale0 = this.__chart__ || scale1;
7889
- this.__chart__ = scale1;
7890
7893
  tickEnter.append("line");
7891
7894
  tickEnter.append("text");
7892
7895
  var lineEnter = tickEnter.select("line"), lineUpdate = tickUpdate.select("line"), text = tick.select("text").text(tickFormat), textEnter = tickEnter.select("text"), textUpdate = tickUpdate.select("text");
@@ -7939,7 +7942,7 @@ d3 = function() {
7939
7942
  break;
7940
7943
  }
7941
7944
  }
7942
- if (scale.rangeBand) {
7945
+ if (scale1.rangeBand) {
7943
7946
  var dx = scale1.rangeBand() / 2, x = function(d) {
7944
7947
  return scale1(d) + dx;
7945
7948
  };