d3-rails 3.4.13 → 3.5.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +1 -1
- data/app/assets/javascripts/d3.js +416 -161
- data/app/assets/javascripts/d3.min.js +5 -5
- data/app/assets/javascripts/d3.v3.js +416 -161
- data/app/assets/javascripts/d3.v3.min.js +5 -5
- data/d3-rails.gemspec +1 -0
- data/lib/d3/rails/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 232c84ecce17e1d7f13f4548d41ea61e6d36512e
|
4
|
+
data.tar.gz: 5927be0430202eb134dd659e9db92b79a6a2f7c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 966fcb2b9551092b9b0e22d680633afdfb4d69f55c5372f5a8095b9c33bd0dcd5fa87db02c16ba030604d883fe40a0718a24ba26d1cdb2419cd6bb732f498343
|
7
|
+
data.tar.gz: d0befe60f2ebbe200107c4ff48ee56b7d2675cbd85ece0f4af394b6e3cc018d58dfa51ca8e4593ea8c2ae8ffc627385ce4cff6666365bd76fcd115632e288d10
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
!function() {
|
2
2
|
var d3 = {
|
3
|
-
version: "3.
|
3
|
+
version: "3.5.2"
|
4
4
|
};
|
5
5
|
if (!Date.now) Date.now = function() {
|
6
6
|
return +new Date();
|
@@ -42,10 +42,16 @@
|
|
42
42
|
d3.min = function(array, f) {
|
43
43
|
var i = -1, n = array.length, a, b;
|
44
44
|
if (arguments.length === 1) {
|
45
|
-
while (++i < n
|
45
|
+
while (++i < n) if ((b = array[i]) != null && b >= b) {
|
46
|
+
a = b;
|
47
|
+
break;
|
48
|
+
}
|
46
49
|
while (++i < n) if ((b = array[i]) != null && a > b) a = b;
|
47
50
|
} else {
|
48
|
-
while (++i < n
|
51
|
+
while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {
|
52
|
+
a = b;
|
53
|
+
break;
|
54
|
+
}
|
49
55
|
while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;
|
50
56
|
}
|
51
57
|
return a;
|
@@ -53,10 +59,16 @@
|
|
53
59
|
d3.max = function(array, f) {
|
54
60
|
var i = -1, n = array.length, a, b;
|
55
61
|
if (arguments.length === 1) {
|
56
|
-
while (++i < n
|
62
|
+
while (++i < n) if ((b = array[i]) != null && b >= b) {
|
63
|
+
a = b;
|
64
|
+
break;
|
65
|
+
}
|
57
66
|
while (++i < n) if ((b = array[i]) != null && b > a) a = b;
|
58
67
|
} else {
|
59
|
-
while (++i < n
|
68
|
+
while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {
|
69
|
+
a = b;
|
70
|
+
break;
|
71
|
+
}
|
60
72
|
while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;
|
61
73
|
}
|
62
74
|
return a;
|
@@ -64,13 +76,19 @@
|
|
64
76
|
d3.extent = function(array, f) {
|
65
77
|
var i = -1, n = array.length, a, b, c;
|
66
78
|
if (arguments.length === 1) {
|
67
|
-
while (++i < n
|
79
|
+
while (++i < n) if ((b = array[i]) != null && b >= b) {
|
80
|
+
a = c = b;
|
81
|
+
break;
|
82
|
+
}
|
68
83
|
while (++i < n) if ((b = array[i]) != null) {
|
69
84
|
if (a > b) a = b;
|
70
85
|
if (c < b) c = b;
|
71
86
|
}
|
72
87
|
} else {
|
73
|
-
while (++i < n
|
88
|
+
while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {
|
89
|
+
a = c = b;
|
90
|
+
break;
|
91
|
+
}
|
74
92
|
while (++i < n) if ((b = f.call(array, array[i], i)) != null) {
|
75
93
|
if (a > b) a = b;
|
76
94
|
if (c < b) c = b;
|
@@ -100,7 +118,7 @@
|
|
100
118
|
} else {
|
101
119
|
while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) s += a; else --j;
|
102
120
|
}
|
103
|
-
|
121
|
+
if (j) return s / j;
|
104
122
|
};
|
105
123
|
d3.quantile = function(values, p) {
|
106
124
|
var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h;
|
@@ -113,7 +131,32 @@
|
|
113
131
|
} else {
|
114
132
|
while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) numbers.push(a);
|
115
133
|
}
|
116
|
-
|
134
|
+
if (numbers.length) return d3.quantile(numbers.sort(d3_ascending), .5);
|
135
|
+
};
|
136
|
+
d3.variance = function(array, f) {
|
137
|
+
var n = array.length, m = 0, a, d, s = 0, i = -1, j = 0;
|
138
|
+
if (arguments.length === 1) {
|
139
|
+
while (++i < n) {
|
140
|
+
if (d3_numeric(a = d3_number(array[i]))) {
|
141
|
+
d = a - m;
|
142
|
+
m += d / ++j;
|
143
|
+
s += d * (a - m);
|
144
|
+
}
|
145
|
+
}
|
146
|
+
} else {
|
147
|
+
while (++i < n) {
|
148
|
+
if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) {
|
149
|
+
d = a - m;
|
150
|
+
m += d / ++j;
|
151
|
+
s += d * (a - m);
|
152
|
+
}
|
153
|
+
}
|
154
|
+
}
|
155
|
+
if (j > 1) return s / (j - 1);
|
156
|
+
};
|
157
|
+
d3.deviation = function() {
|
158
|
+
var v = d3.variance.apply(this, arguments);
|
159
|
+
return v ? Math.sqrt(v) : v;
|
117
160
|
};
|
118
161
|
function d3_bisector(compare) {
|
119
162
|
return {
|
@@ -145,11 +188,15 @@
|
|
145
188
|
return d3_ascending(f(d), x);
|
146
189
|
} : f);
|
147
190
|
};
|
148
|
-
d3.shuffle = function(array) {
|
149
|
-
|
191
|
+
d3.shuffle = function(array, i0, i1) {
|
192
|
+
if ((m = arguments.length) < 3) {
|
193
|
+
i1 = array.length;
|
194
|
+
if (m < 2) i0 = 0;
|
195
|
+
}
|
196
|
+
var m = i1 - i0, t, i;
|
150
197
|
while (m) {
|
151
198
|
i = Math.random() * m-- | 0;
|
152
|
-
t = array[m], array[m] = array[i], array[i] = t;
|
199
|
+
t = array[m + i0], array[m + i0] = array[i + i0], array[i + i0] = t;
|
153
200
|
}
|
154
201
|
return array;
|
155
202
|
};
|
@@ -237,11 +284,18 @@
|
|
237
284
|
});
|
238
285
|
}
|
239
286
|
}
|
240
|
-
d3.map = function(object) {
|
287
|
+
d3.map = function(object, f) {
|
241
288
|
var map = new d3_Map();
|
242
|
-
if (object instanceof d3_Map)
|
243
|
-
|
244
|
-
|
289
|
+
if (object instanceof d3_Map) {
|
290
|
+
object.forEach(function(key, value) {
|
291
|
+
map.set(key, value);
|
292
|
+
});
|
293
|
+
} else if (Array.isArray(object)) {
|
294
|
+
var i = -1, n = object.length, o;
|
295
|
+
if (arguments.length === 1) while (++i < n) map.set(i, object[i]); else while (++i < n) map.set(f.call(object, o = object[i], i), o);
|
296
|
+
} else {
|
297
|
+
for (var key in object) map.set(key, object[key]);
|
298
|
+
}
|
245
299
|
return map;
|
246
300
|
};
|
247
301
|
function d3_Map() {
|
@@ -746,11 +800,12 @@
|
|
746
800
|
});
|
747
801
|
};
|
748
802
|
d3_selectionPrototype.remove = function() {
|
749
|
-
return this.each(
|
750
|
-
var parent = this.parentNode;
|
751
|
-
if (parent) parent.removeChild(this);
|
752
|
-
});
|
803
|
+
return this.each(d3_selectionRemove);
|
753
804
|
};
|
805
|
+
function d3_selectionRemove() {
|
806
|
+
var parent = this.parentNode;
|
807
|
+
if (parent) parent.removeChild(this);
|
808
|
+
}
|
754
809
|
d3_selectionPrototype.data = function(value, key) {
|
755
810
|
var i = -1, n = this.length, group, node;
|
756
811
|
if (!arguments.length) {
|
@@ -959,29 +1014,6 @@
|
|
959
1014
|
return node;
|
960
1015
|
};
|
961
1016
|
}
|
962
|
-
d3_selectionPrototype.transition = function() {
|
963
|
-
var id = d3_transitionInheritId || ++d3_transitionId, subgroups = [], subgroup, node, transition = d3_transitionInherit || {
|
964
|
-
time: Date.now(),
|
965
|
-
ease: d3_ease_cubicInOut,
|
966
|
-
delay: 0,
|
967
|
-
duration: 250
|
968
|
-
};
|
969
|
-
for (var j = -1, m = this.length; ++j < m; ) {
|
970
|
-
subgroups.push(subgroup = []);
|
971
|
-
for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
|
972
|
-
if (node = group[i]) d3_transitionNode(node, i, id, transition);
|
973
|
-
subgroup.push(node);
|
974
|
-
}
|
975
|
-
}
|
976
|
-
return d3_transition(subgroups, id);
|
977
|
-
};
|
978
|
-
d3_selectionPrototype.interrupt = function() {
|
979
|
-
return this.each(d3_selection_interrupt);
|
980
|
-
};
|
981
|
-
function d3_selection_interrupt() {
|
982
|
-
var lock = this.__transition__;
|
983
|
-
if (lock) ++lock.active;
|
984
|
-
}
|
985
1017
|
d3.select = function(node) {
|
986
1018
|
var group = [ typeof node === "string" ? d3_select(node, d3_document) : node ];
|
987
1019
|
group.parentNode = d3_documentElement;
|
@@ -1075,9 +1107,9 @@
|
|
1075
1107
|
w.on(name, null);
|
1076
1108
|
if (d3_event_dragSelect) style[d3_event_dragSelect] = select;
|
1077
1109
|
if (suppressClick) {
|
1078
|
-
|
1110
|
+
var off = function() {
|
1079
1111
|
w.on(click, null);
|
1080
|
-
}
|
1112
|
+
};
|
1081
1113
|
w.on(click, function() {
|
1082
1114
|
d3_eventPreventDefault();
|
1083
1115
|
off();
|
@@ -1190,7 +1222,7 @@
|
|
1190
1222
|
return point;
|
1191
1223
|
}) : [];
|
1192
1224
|
};
|
1193
|
-
var π = Math.PI, τ = 2 * π, halfπ = π / 2,
|
1225
|
+
var ε = 1e-6, ε2 = ε * ε, π = Math.PI, τ = 2 * π, τε = τ - ε, halfπ = π / 2, d3_radians = π / 180, d3_degrees = 180 / π;
|
1194
1226
|
function d3_sgn(x) {
|
1195
1227
|
return x > 0 ? 1 : x < 0 ? -1 : 0;
|
1196
1228
|
}
|
@@ -1235,7 +1267,7 @@
|
|
1235
1267
|
x: 0,
|
1236
1268
|
y: 0,
|
1237
1269
|
k: 1
|
1238
|
-
}, translate0, center0, center, size = [ 960, 500 ], scaleExtent = d3_behavior_zoomInfinity, mousedown = "mousedown.zoom", mousemove = "mousemove.zoom", mouseup = "mouseup.zoom", mousewheelTimer, touchstart = "touchstart.zoom", touchtime, event = d3_eventDispatch(zoom, "zoomstart", "zoom", "zoomend"), x0, x1, y0, y1;
|
1270
|
+
}, translate0, center0, center, size = [ 960, 500 ], scaleExtent = d3_behavior_zoomInfinity, duration = 250, zooming = 0, mousedown = "mousedown.zoom", mousemove = "mousemove.zoom", mouseup = "mouseup.zoom", mousewheelTimer, touchstart = "touchstart.zoom", touchtime, event = d3_eventDispatch(zoom, "zoomstart", "zoom", "zoomend"), x0, x1, y0, y1;
|
1239
1271
|
function zoom(g) {
|
1240
1272
|
g.on(mousedown, mousedowned).on(d3_behavior_zoomWheel + ".zoom", mousewheeled).on("dblclick.zoom", dblclicked).on(touchstart, touchstarted);
|
1241
1273
|
}
|
@@ -1251,7 +1283,7 @@
|
|
1251
1283
|
};
|
1252
1284
|
zoomstarted(dispatch);
|
1253
1285
|
}).tween("zoom:zoom", function() {
|
1254
|
-
var dx = size[0], dy = size[1], cx = dx / 2, cy = dy / 2, i = d3.interpolateZoom([ (cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k ], [ (cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k ]);
|
1286
|
+
var dx = size[0], dy = size[1], cx = center0 ? center0[0] : dx / 2, cy = center0 ? center0[1] : dy / 2, i = d3.interpolateZoom([ (cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k ], [ (cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k ]);
|
1255
1287
|
return function(t) {
|
1256
1288
|
var l = i(t), k = dx / l[2];
|
1257
1289
|
this.__chart__ = view = {
|
@@ -1261,6 +1293,8 @@
|
|
1261
1293
|
};
|
1262
1294
|
zoomed(dispatch);
|
1263
1295
|
};
|
1296
|
+
}).each("interrupt.zoom", function() {
|
1297
|
+
zoomended(dispatch);
|
1264
1298
|
}).each("end.zoom", function() {
|
1265
1299
|
zoomended(dispatch);
|
1266
1300
|
});
|
@@ -1307,6 +1341,11 @@
|
|
1307
1341
|
size = _ && [ +_[0], +_[1] ];
|
1308
1342
|
return zoom;
|
1309
1343
|
};
|
1344
|
+
zoom.duration = function(_) {
|
1345
|
+
if (!arguments.length) return duration;
|
1346
|
+
duration = +_;
|
1347
|
+
return zoom;
|
1348
|
+
};
|
1310
1349
|
zoom.x = function(z) {
|
1311
1350
|
if (!arguments.length) return x1;
|
1312
1351
|
x1 = z;
|
@@ -1343,6 +1382,18 @@
|
|
1343
1382
|
view.x += p[0] - l[0];
|
1344
1383
|
view.y += p[1] - l[1];
|
1345
1384
|
}
|
1385
|
+
function zoomTo(that, p, l, k) {
|
1386
|
+
that.__chart__ = {
|
1387
|
+
x: view.x,
|
1388
|
+
y: view.y,
|
1389
|
+
k: view.k
|
1390
|
+
};
|
1391
|
+
scaleTo(Math.pow(2, k));
|
1392
|
+
translateTo(center0 = p, l);
|
1393
|
+
that = d3.select(that);
|
1394
|
+
if (duration > 0) that = that.transition().duration(duration);
|
1395
|
+
that.call(zoom.event);
|
1396
|
+
}
|
1346
1397
|
function rescale() {
|
1347
1398
|
if (x1) x1.domain(x0.range().map(function(x) {
|
1348
1399
|
return (x - view.x) / view.k;
|
@@ -1352,7 +1403,7 @@
|
|
1352
1403
|
}).map(y0.invert));
|
1353
1404
|
}
|
1354
1405
|
function zoomstarted(dispatch) {
|
1355
|
-
dispatch({
|
1406
|
+
if (!zooming++) dispatch({
|
1356
1407
|
type: "zoomstart"
|
1357
1408
|
});
|
1358
1409
|
}
|
@@ -1365,9 +1416,10 @@
|
|
1365
1416
|
});
|
1366
1417
|
}
|
1367
1418
|
function zoomended(dispatch) {
|
1368
|
-
dispatch({
|
1419
|
+
if (!--zooming) dispatch({
|
1369
1420
|
type: "zoomend"
|
1370
1421
|
});
|
1422
|
+
center0 = null;
|
1371
1423
|
}
|
1372
1424
|
function mousedowned() {
|
1373
1425
|
var that = this, target = d3.event.target, dispatch = event.of(that, arguments), dragged = 0, subject = d3.select(d3_window).on(mousemove, moved).on(mouseup, ended), location0 = location(d3.mouse(that)), dragRestore = d3_event_dragSuppress();
|
@@ -1386,7 +1438,6 @@
|
|
1386
1438
|
}
|
1387
1439
|
function touchstarted() {
|
1388
1440
|
var that = this, dispatch = event.of(that, arguments), locations0 = {}, distance0 = 0, scale0, zoomName = ".zoom-" + d3.event.changedTouches[0].identifier, touchmove = "touchmove" + zoomName, touchend = "touchend" + zoomName, targets = [], subject = d3.select(that), dragRestore = d3_event_dragSuppress();
|
1389
|
-
d3_selection_interrupt.call(that);
|
1390
1441
|
started();
|
1391
1442
|
zoomstarted(dispatch);
|
1392
1443
|
subject.on(mousedown, null).on(touchstart, started);
|
@@ -1409,11 +1460,9 @@
|
|
1409
1460
|
var touches = relocate(), now = Date.now();
|
1410
1461
|
if (touches.length === 1) {
|
1411
1462
|
if (now - touchtime < 500) {
|
1412
|
-
var p = touches[0]
|
1413
|
-
|
1414
|
-
translateTo(p, l);
|
1463
|
+
var p = touches[0];
|
1464
|
+
zoomTo(that, p, locations0[p.identifier], Math.floor(Math.log(view.k) / Math.LN2) + 1);
|
1415
1465
|
d3_eventPreventDefault();
|
1416
|
-
zoomed(dispatch);
|
1417
1466
|
}
|
1418
1467
|
touchtime = now;
|
1419
1468
|
} else if (touches.length > 1) {
|
@@ -1423,6 +1472,7 @@
|
|
1423
1472
|
}
|
1424
1473
|
function moved() {
|
1425
1474
|
var touches = d3.touches(that), p0, l0, p1, l1;
|
1475
|
+
d3_selection_interrupt.call(that);
|
1426
1476
|
for (var i = 0, n = touches.length; i < n; ++i, l1 = null) {
|
1427
1477
|
p1 = touches[i];
|
1428
1478
|
if (l1 = locations0[p1.identifier]) {
|
@@ -1470,12 +1520,8 @@
|
|
1470
1520
|
zoomed(dispatch);
|
1471
1521
|
}
|
1472
1522
|
function dblclicked() {
|
1473
|
-
var
|
1474
|
-
|
1475
|
-
scaleTo(Math.pow(2, d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1));
|
1476
|
-
translateTo(p, l);
|
1477
|
-
zoomed(dispatch);
|
1478
|
-
zoomended(dispatch);
|
1523
|
+
var p = d3.mouse(this), k = Math.log(view.k) / Math.LN2;
|
1524
|
+
zoomTo(this, p, location(p), d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1);
|
1479
1525
|
}
|
1480
1526
|
return d3.rebind(zoom, event, "on");
|
1481
1527
|
};
|
@@ -3131,6 +3177,15 @@
|
|
3131
3177
|
d3_geo_centroidPointXYZ(x0, y0, z0);
|
3132
3178
|
}
|
3133
3179
|
}
|
3180
|
+
function d3_geo_compose(a, b) {
|
3181
|
+
function compose(x, y) {
|
3182
|
+
return x = a(x, y), b(x[0], x[1]);
|
3183
|
+
}
|
3184
|
+
if (a.invert && b.invert) compose.invert = function(x, y) {
|
3185
|
+
return x = b.invert(x, y), x && a.invert(x[0], x[1]);
|
3186
|
+
};
|
3187
|
+
return compose;
|
3188
|
+
}
|
3134
3189
|
function d3_true() {
|
3135
3190
|
return true;
|
3136
3191
|
}
|
@@ -3729,15 +3784,6 @@
|
|
3729
3784
|
return ca !== cb ? ca - cb : ca === 0 ? b[1] - a[1] : ca === 1 ? a[0] - b[0] : ca === 2 ? a[1] - b[1] : b[0] - a[0];
|
3730
3785
|
}
|
3731
3786
|
}
|
3732
|
-
function d3_geo_compose(a, b) {
|
3733
|
-
function compose(x, y) {
|
3734
|
-
return x = a(x, y), b(x[0], x[1]);
|
3735
|
-
}
|
3736
|
-
if (a.invert && b.invert) compose.invert = function(x, y) {
|
3737
|
-
return x = b.invert(x, y), x && a.invert(x[0], x[1]);
|
3738
|
-
};
|
3739
|
-
return compose;
|
3740
|
-
}
|
3741
3787
|
function d3_geo_conic(projectAt) {
|
3742
3788
|
var φ0 = 0, φ1 = π / 3, m = d3_geo_projectionMutator(projectAt), p = m(φ0, φ1);
|
3743
3789
|
p.parallels = function(_) {
|
@@ -4009,7 +4055,7 @@
|
|
4009
4055
|
result: d3_noop
|
4010
4056
|
};
|
4011
4057
|
function point(x, y) {
|
4012
|
-
context.moveTo(x, y);
|
4058
|
+
context.moveTo(x + pointRadius, y);
|
4013
4059
|
context.arc(x, y, pointRadius, 0, τ);
|
4014
4060
|
}
|
4015
4061
|
function pointLineStart(x, y) {
|
@@ -5517,11 +5563,11 @@
|
|
5517
5563
|
}
|
5518
5564
|
}
|
5519
5565
|
function insertChild(n, d, x, y, x1, y1, x2, y2) {
|
5520
|
-
var
|
5566
|
+
var xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym, i = below << 1 | right;
|
5521
5567
|
n.leaf = false;
|
5522
5568
|
n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode());
|
5523
|
-
if (right) x1 =
|
5524
|
-
if (
|
5569
|
+
if (right) x1 = xm; else x2 = xm;
|
5570
|
+
if (below) y1 = ym; else y2 = ym;
|
5525
5571
|
insert(n, d, x, y, x1, y1, x2, y2);
|
5526
5572
|
}
|
5527
5573
|
var root = d3_geom_quadtreeNode();
|
@@ -5531,6 +5577,9 @@
|
|
5531
5577
|
root.visit = function(f) {
|
5532
5578
|
d3_geom_quadtreeVisit(f, root, x1_, y1_, x2_, y2_);
|
5533
5579
|
};
|
5580
|
+
root.find = function(point) {
|
5581
|
+
return d3_geom_quadtreeFind(root, point[0], point[1], x1_, y1_, x2_, y2_);
|
5582
|
+
};
|
5534
5583
|
i = -1;
|
5535
5584
|
if (x1 == null) {
|
5536
5585
|
while (++i < n) {
|
@@ -5584,6 +5633,42 @@
|
|
5584
5633
|
if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2);
|
5585
5634
|
}
|
5586
5635
|
}
|
5636
|
+
function d3_geom_quadtreeFind(root, x, y, x0, y0, x3, y3) {
|
5637
|
+
var minDistance2 = Infinity, closestPoint;
|
5638
|
+
(function find(node, x1, y1, x2, y2) {
|
5639
|
+
if (x1 > x3 || y1 > y3 || x2 < x0 || y2 < y0) return;
|
5640
|
+
if (point = node.point) {
|
5641
|
+
var point, dx = x - point[0], dy = y - point[1], distance2 = dx * dx + dy * dy;
|
5642
|
+
if (distance2 < minDistance2) {
|
5643
|
+
var distance = Math.sqrt(minDistance2 = distance2);
|
5644
|
+
x0 = x - distance, y0 = y - distance;
|
5645
|
+
x3 = x + distance, y3 = y + distance;
|
5646
|
+
closestPoint = point;
|
5647
|
+
}
|
5648
|
+
}
|
5649
|
+
var children = node.nodes, xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym;
|
5650
|
+
for (var i = below << 1 | right, j = i + 4; i < j; ++i) {
|
5651
|
+
if (node = children[i & 3]) switch (i & 3) {
|
5652
|
+
case 0:
|
5653
|
+
find(node, x1, y1, xm, ym);
|
5654
|
+
break;
|
5655
|
+
|
5656
|
+
case 1:
|
5657
|
+
find(node, xm, y1, x2, ym);
|
5658
|
+
break;
|
5659
|
+
|
5660
|
+
case 2:
|
5661
|
+
find(node, x1, ym, xm, y2);
|
5662
|
+
break;
|
5663
|
+
|
5664
|
+
case 3:
|
5665
|
+
find(node, xm, ym, x2, y2);
|
5666
|
+
break;
|
5667
|
+
}
|
5668
|
+
}
|
5669
|
+
})(root, x0, y0, x3, y3);
|
5670
|
+
return closestPoint;
|
5671
|
+
}
|
5587
5672
|
d3.interpolateRgb = d3_interpolateRgb;
|
5588
5673
|
function d3_interpolateRgb(a, b) {
|
5589
5674
|
a = d3.rgb(a);
|
@@ -6475,49 +6560,50 @@
|
|
6475
6560
|
return d3_layout_hierarchyRebind(partition, hierarchy);
|
6476
6561
|
};
|
6477
6562
|
d3.layout.pie = function() {
|
6478
|
-
var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle =
|
6563
|
+
var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = τ, padAngle = 0;
|
6479
6564
|
function pie(data) {
|
6480
|
-
var values = data.map(function(d, i) {
|
6565
|
+
var n = data.length, values = data.map(function(d, i) {
|
6481
6566
|
return +value.call(pie, d, i);
|
6482
|
-
});
|
6483
|
-
var a = +(typeof startAngle === "function" ? startAngle.apply(this, arguments) : startAngle);
|
6484
|
-
var k = ((typeof endAngle === "function" ? endAngle.apply(this, arguments) : endAngle) - a) / d3.sum(values);
|
6485
|
-
var index = d3.range(data.length);
|
6567
|
+
}), a = +(typeof startAngle === "function" ? startAngle.apply(this, arguments) : startAngle), da = (typeof endAngle === "function" ? endAngle.apply(this, arguments) : endAngle) - a, p = Math.min(Math.abs(da) / n, +(typeof padAngle === "function" ? padAngle.apply(this, arguments) : padAngle)), pa = p * (da < 0 ? -1 : 1), k = (da - n * pa) / d3.sum(values), index = d3.range(n), arcs = [], v;
|
6486
6568
|
if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function(i, j) {
|
6487
6569
|
return values[j] - values[i];
|
6488
6570
|
} : function(i, j) {
|
6489
6571
|
return sort(data[i], data[j]);
|
6490
6572
|
});
|
6491
|
-
var arcs = [];
|
6492
6573
|
index.forEach(function(i) {
|
6493
|
-
var d;
|
6494
6574
|
arcs[i] = {
|
6495
6575
|
data: data[i],
|
6496
|
-
value:
|
6576
|
+
value: v = values[i],
|
6497
6577
|
startAngle: a,
|
6498
|
-
endAngle: a +=
|
6578
|
+
endAngle: a += v * k + pa,
|
6579
|
+
padAngle: p
|
6499
6580
|
};
|
6500
6581
|
});
|
6501
6582
|
return arcs;
|
6502
6583
|
}
|
6503
|
-
pie.value = function(
|
6584
|
+
pie.value = function(_) {
|
6504
6585
|
if (!arguments.length) return value;
|
6505
|
-
value =
|
6586
|
+
value = _;
|
6506
6587
|
return pie;
|
6507
6588
|
};
|
6508
|
-
pie.sort = function(
|
6589
|
+
pie.sort = function(_) {
|
6509
6590
|
if (!arguments.length) return sort;
|
6510
|
-
sort =
|
6591
|
+
sort = _;
|
6511
6592
|
return pie;
|
6512
6593
|
};
|
6513
|
-
pie.startAngle = function(
|
6594
|
+
pie.startAngle = function(_) {
|
6514
6595
|
if (!arguments.length) return startAngle;
|
6515
|
-
startAngle =
|
6596
|
+
startAngle = _;
|
6516
6597
|
return pie;
|
6517
6598
|
};
|
6518
|
-
pie.endAngle = function(
|
6599
|
+
pie.endAngle = function(_) {
|
6519
6600
|
if (!arguments.length) return endAngle;
|
6520
|
-
endAngle =
|
6601
|
+
endAngle = _;
|
6602
|
+
return pie;
|
6603
|
+
};
|
6604
|
+
pie.padAngle = function(_) {
|
6605
|
+
if (!arguments.length) return padAngle;
|
6606
|
+
padAngle = _;
|
6521
6607
|
return pie;
|
6522
6608
|
};
|
6523
6609
|
return pie;
|
@@ -7616,8 +7702,9 @@
|
|
7616
7702
|
};
|
7617
7703
|
scale.rangePoints = function(x, padding) {
|
7618
7704
|
if (arguments.length < 2) padding = 0;
|
7619
|
-
var start = x[0], stop = x[1], step =
|
7620
|
-
|
7705
|
+
var start = x[0], stop = x[1], step = domain.length < 2 ? (start = (start + stop) / 2,
|
7706
|
+
0) : (stop - start) / (domain.length - 1 + padding);
|
7707
|
+
range = steps(start + step * padding / 2, step);
|
7621
7708
|
rangeBand = 0;
|
7622
7709
|
ranger = {
|
7623
7710
|
t: "rangePoints",
|
@@ -7625,6 +7712,18 @@
|
|
7625
7712
|
};
|
7626
7713
|
return scale;
|
7627
7714
|
};
|
7715
|
+
scale.rangeRoundPoints = function(x, padding) {
|
7716
|
+
if (arguments.length < 2) padding = 0;
|
7717
|
+
var start = x[0], stop = x[1], step = domain.length < 2 ? (start = stop = Math.round((start + stop) / 2),
|
7718
|
+
0) : (stop - start) / (domain.length - 1 + padding) | 0;
|
7719
|
+
range = steps(start + Math.round(step * padding / 2 + (stop - start - (domain.length - 1 + padding) * step) / 2), step);
|
7720
|
+
rangeBand = 0;
|
7721
|
+
ranger = {
|
7722
|
+
t: "rangeRoundPoints",
|
7723
|
+
a: arguments
|
7724
|
+
};
|
7725
|
+
return scale;
|
7726
|
+
};
|
7628
7727
|
scale.rangeBands = function(x, padding, outerPadding) {
|
7629
7728
|
if (arguments.length < 2) padding = 0;
|
7630
7729
|
if (arguments.length < 3) outerPadding = padding;
|
@@ -7641,8 +7740,8 @@
|
|
7641
7740
|
scale.rangeRoundBands = function(x, padding, outerPadding) {
|
7642
7741
|
if (arguments.length < 2) padding = 0;
|
7643
7742
|
if (arguments.length < 3) outerPadding = padding;
|
7644
|
-
var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding))
|
7645
|
-
range = steps(start + Math.round(
|
7743
|
+
var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding));
|
7744
|
+
range = steps(start + Math.round((stop - start - (domain.length - padding) * step) / 2), step);
|
7646
7745
|
if (reverse) range.reverse();
|
7647
7746
|
rangeBand = Math.round(step * (1 - padding));
|
7648
7747
|
ranger = {
|
@@ -7799,12 +7898,86 @@
|
|
7799
7898
|
return identity;
|
7800
7899
|
}
|
7801
7900
|
d3.svg = {};
|
7901
|
+
function d3_zero() {
|
7902
|
+
return 0;
|
7903
|
+
}
|
7802
7904
|
d3.svg.arc = function() {
|
7803
|
-
var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle;
|
7905
|
+
var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, cornerRadius = d3_zero, padRadius = d3_svg_arcAuto, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle, padAngle = d3_svg_arcPadAngle;
|
7804
7906
|
function arc() {
|
7805
|
-
var r0 = innerRadius.apply(this, arguments), r1 = outerRadius.apply(this, arguments), a0 = startAngle.apply(this, arguments)
|
7806
|
-
|
7807
|
-
|
7907
|
+
var r0 = Math.max(0, +innerRadius.apply(this, arguments)), r1 = Math.max(0, +outerRadius.apply(this, arguments)), a0 = startAngle.apply(this, arguments) - halfπ, a1 = endAngle.apply(this, arguments) - halfπ, da = Math.abs(a1 - a0), cw = a0 > a1 ? 0 : 1;
|
7908
|
+
if (r1 < r0) rc = r1, r1 = r0, r0 = rc;
|
7909
|
+
if (da >= τε) return circleSegment(r1, cw) + (r0 ? circleSegment(r0, 1 - cw) : "") + "Z";
|
7910
|
+
var rc, cr, rp, ap, p0 = 0, p1 = 0, x0, y0, x1, y1, x2, y2, x3, y3, path = [];
|
7911
|
+
if (ap = (+padAngle.apply(this, arguments) || 0) / 2) {
|
7912
|
+
rp = padRadius === d3_svg_arcAuto ? Math.sqrt(r0 * r0 + r1 * r1) : +padRadius.apply(this, arguments);
|
7913
|
+
if (!cw) p1 *= -1;
|
7914
|
+
if (r1) p1 = d3_asin(rp / r1 * Math.sin(ap));
|
7915
|
+
if (r0) p0 = d3_asin(rp / r0 * Math.sin(ap));
|
7916
|
+
}
|
7917
|
+
if (r1) {
|
7918
|
+
x0 = r1 * Math.cos(a0 + p1);
|
7919
|
+
y0 = r1 * Math.sin(a0 + p1);
|
7920
|
+
x1 = r1 * Math.cos(a1 - p1);
|
7921
|
+
y1 = r1 * Math.sin(a1 - p1);
|
7922
|
+
var l1 = Math.abs(a1 - a0 - 2 * p1) <= π ? 0 : 1;
|
7923
|
+
if (p1 && d3_svg_arcSweep(x0, y0, x1, y1) === cw ^ l1) {
|
7924
|
+
var h1 = (a0 + a1) / 2;
|
7925
|
+
x0 = r1 * Math.cos(h1);
|
7926
|
+
y0 = r1 * Math.sin(h1);
|
7927
|
+
x1 = y1 = null;
|
7928
|
+
}
|
7929
|
+
} else {
|
7930
|
+
x0 = y0 = 0;
|
7931
|
+
}
|
7932
|
+
if (r0) {
|
7933
|
+
x2 = r0 * Math.cos(a1 - p0);
|
7934
|
+
y2 = r0 * Math.sin(a1 - p0);
|
7935
|
+
x3 = r0 * Math.cos(a0 + p0);
|
7936
|
+
y3 = r0 * Math.sin(a0 + p0);
|
7937
|
+
var l0 = Math.abs(a0 - a1 + 2 * p0) <= π ? 0 : 1;
|
7938
|
+
if (p0 && d3_svg_arcSweep(x2, y2, x3, y3) === 1 - cw ^ l0) {
|
7939
|
+
var h0 = (a0 + a1) / 2;
|
7940
|
+
x2 = r0 * Math.cos(h0);
|
7941
|
+
y2 = r0 * Math.sin(h0);
|
7942
|
+
x3 = y3 = null;
|
7943
|
+
}
|
7944
|
+
} else {
|
7945
|
+
x2 = y2 = 0;
|
7946
|
+
}
|
7947
|
+
if ((rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments))) > .001) {
|
7948
|
+
cr = r0 < r1 ^ cw ? 0 : 1;
|
7949
|
+
var oc = x3 == null ? [ x2, y2 ] : x1 == null ? [ x0, y0 ] : d3_geom_polygonIntersect([ x0, y0 ], [ x3, y3 ], [ x1, y1 ], [ x2, y2 ]), ax = x0 - oc[0], ay = y0 - oc[1], bx = x1 - oc[0], by = y1 - oc[1], kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2), lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]);
|
7950
|
+
if (x1 != null) {
|
7951
|
+
var rc1 = Math.min(rc, (r1 - lc) / (kc + 1)), t30 = d3_svg_arcCornerTangents(x3 == null ? [ x2, y2 ] : [ x3, y3 ], [ x0, y0 ], r1, rc1, cw), t12 = d3_svg_arcCornerTangents([ x1, y1 ], [ x2, y2 ], r1, rc1, cw);
|
7952
|
+
if (rc === rc1) {
|
7953
|
+
path.push("M", t30[0], "A", rc1, ",", rc1, " 0 0,", cr, " ", t30[1], "A", r1, ",", r1, " 0 ", 1 - cw ^ d3_svg_arcSweep(t30[1][0], t30[1][1], t12[1][0], t12[1][1]), ",", cw, " ", t12[1], "A", rc1, ",", rc1, " 0 0,", cr, " ", t12[0]);
|
7954
|
+
} else {
|
7955
|
+
path.push("M", t30[0], "A", rc1, ",", rc1, " 0 1,", cr, " ", t12[0]);
|
7956
|
+
}
|
7957
|
+
} else {
|
7958
|
+
path.push("M", x0, ",", y0);
|
7959
|
+
}
|
7960
|
+
if (x3 != null) {
|
7961
|
+
var rc0 = Math.min(rc, (r0 - lc) / (kc - 1)), t03 = d3_svg_arcCornerTangents([ x0, y0 ], [ x3, y3 ], r0, -rc0, cw), t21 = d3_svg_arcCornerTangents([ x2, y2 ], x1 == null ? [ x0, y0 ] : [ x1, y1 ], r0, -rc0, cw);
|
7962
|
+
if (rc === rc0) {
|
7963
|
+
path.push("L", t21[0], "A", rc0, ",", rc0, " 0 0,", cr, " ", t21[1], "A", r0, ",", r0, " 0 ", cw ^ d3_svg_arcSweep(t21[1][0], t21[1][1], t03[1][0], t03[1][1]), ",", 1 - cw, " ", t03[1], "A", rc0, ",", rc0, " 0 0,", cr, " ", t03[0]);
|
7964
|
+
} else {
|
7965
|
+
path.push("L", t21[0], "A", rc0, ",", rc0, " 0 0,", cr, " ", t03[0]);
|
7966
|
+
}
|
7967
|
+
} else {
|
7968
|
+
path.push("L", x2, ",", y2);
|
7969
|
+
}
|
7970
|
+
} else {
|
7971
|
+
path.push("M", x0, ",", y0);
|
7972
|
+
if (x1 != null) path.push("A", r1, ",", r1, " 0 ", l1, ",", cw, " ", x1, ",", y1);
|
7973
|
+
path.push("L", x2, ",", y2);
|
7974
|
+
if (x3 != null) path.push("A", r0, ",", r0, " 0 ", l0, ",", 1 - cw, " ", x3, ",", y3);
|
7975
|
+
}
|
7976
|
+
path.push("Z");
|
7977
|
+
return path.join("");
|
7978
|
+
}
|
7979
|
+
function circleSegment(r1, cw) {
|
7980
|
+
return "M0," + r1 + "A" + r1 + "," + r1 + " 0 1," + cw + " 0," + -r1 + "A" + r1 + "," + r1 + " 0 1," + cw + " 0," + r1;
|
7808
7981
|
}
|
7809
7982
|
arc.innerRadius = function(v) {
|
7810
7983
|
if (!arguments.length) return innerRadius;
|
@@ -7816,6 +7989,16 @@
|
|
7816
7989
|
outerRadius = d3_functor(v);
|
7817
7990
|
return arc;
|
7818
7991
|
};
|
7992
|
+
arc.cornerRadius = function(v) {
|
7993
|
+
if (!arguments.length) return cornerRadius;
|
7994
|
+
cornerRadius = d3_functor(v);
|
7995
|
+
return arc;
|
7996
|
+
};
|
7997
|
+
arc.padRadius = function(v) {
|
7998
|
+
if (!arguments.length) return padRadius;
|
7999
|
+
padRadius = v == d3_svg_arcAuto ? d3_svg_arcAuto : d3_functor(v);
|
8000
|
+
return arc;
|
8001
|
+
};
|
7819
8002
|
arc.startAngle = function(v) {
|
7820
8003
|
if (!arguments.length) return startAngle;
|
7821
8004
|
startAngle = d3_functor(v);
|
@@ -7826,13 +8009,18 @@
|
|
7826
8009
|
endAngle = d3_functor(v);
|
7827
8010
|
return arc;
|
7828
8011
|
};
|
8012
|
+
arc.padAngle = function(v) {
|
8013
|
+
if (!arguments.length) return padAngle;
|
8014
|
+
padAngle = d3_functor(v);
|
8015
|
+
return arc;
|
8016
|
+
};
|
7829
8017
|
arc.centroid = function() {
|
7830
|
-
var r = (innerRadius.apply(this, arguments) + outerRadius.apply(this, arguments)) / 2, a = (startAngle.apply(this, arguments) + endAngle.apply(this, arguments)) / 2
|
8018
|
+
var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - halfπ;
|
7831
8019
|
return [ Math.cos(a) * r, Math.sin(a) * r ];
|
7832
8020
|
};
|
7833
8021
|
return arc;
|
7834
8022
|
};
|
7835
|
-
var
|
8023
|
+
var d3_svg_arcAuto = "auto";
|
7836
8024
|
function d3_svg_arcInnerRadius(d) {
|
7837
8025
|
return d.innerRadius;
|
7838
8026
|
}
|
@@ -7845,6 +8033,17 @@
|
|
7845
8033
|
function d3_svg_arcEndAngle(d) {
|
7846
8034
|
return d.endAngle;
|
7847
8035
|
}
|
8036
|
+
function d3_svg_arcPadAngle(d) {
|
8037
|
+
return d && d.padAngle;
|
8038
|
+
}
|
8039
|
+
function d3_svg_arcSweep(x0, y0, x1, y1) {
|
8040
|
+
return (x0 - x1) * y0 - (y0 - y1) * x0 > 0 ? 0 : 1;
|
8041
|
+
}
|
8042
|
+
function d3_svg_arcCornerTangents(p0, p1, r1, rc, cw) {
|
8043
|
+
var x01 = p0[0] - p1[0], y01 = p0[1] - p1[1], lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01), ox = lo * y01, oy = -lo * x01, x1 = p0[0] + ox, y1 = p0[1] + oy, x2 = p1[0] + ox, y2 = p1[1] + oy, x3 = (x1 + x2) / 2, y3 = (y1 + y2) / 2, dx = x2 - x1, dy = y2 - y1, d2 = dx * dx + dy * dy, r = r1 - rc, D = x1 * y2 - x2 * y1, d = (dy < 0 ? -1 : 1) * Math.sqrt(r * r * d2 - D * D), cx0 = (D * dy - dx * d) / d2, cy0 = (-D * dx - dy * d) / d2, cx1 = (D * dy + dx * d) / d2, cy1 = (-D * dx + dy * d) / d2, dx0 = cx0 - x3, dy0 = cy0 - y3, dx1 = cx1 - x3, dy1 = cy1 - y3;
|
8044
|
+
if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;
|
8045
|
+
return [ [ cx0 - ox, cy0 - oy ], [ cx0 * r1 / r, cy0 * r1 / r ] ];
|
8046
|
+
}
|
7848
8047
|
function d3_svg_line(projection) {
|
7849
8048
|
var x = d3_geom_pointX, y = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7;
|
7850
8049
|
function line(data) {
|
@@ -7935,7 +8134,7 @@
|
|
7935
8134
|
return path.join("");
|
7936
8135
|
}
|
7937
8136
|
function d3_svg_lineCardinalOpen(points, tension) {
|
7938
|
-
return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1,
|
8137
|
+
return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, -1), d3_svg_lineCardinalTangents(points, tension));
|
7939
8138
|
}
|
7940
8139
|
function d3_svg_lineCardinalClosed(points, tension) {
|
7941
8140
|
return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite((points.push(points[0]),
|
@@ -8105,7 +8304,7 @@
|
|
8105
8304
|
while (++i < n) {
|
8106
8305
|
point = points[i];
|
8107
8306
|
r = point[0];
|
8108
|
-
a = point[1]
|
8307
|
+
a = point[1] - halfπ;
|
8109
8308
|
point[0] = r * Math.cos(a);
|
8110
8309
|
point[1] = r * Math.sin(a);
|
8111
8310
|
}
|
@@ -8206,7 +8405,7 @@
|
|
8206
8405
|
return "M" + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + "Z";
|
8207
8406
|
}
|
8208
8407
|
function subgroup(self, f, d, i) {
|
8209
|
-
var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i)
|
8408
|
+
var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) - halfπ, a1 = endAngle.call(self, subgroup, i) - halfπ;
|
8210
8409
|
return {
|
8211
8410
|
r: r,
|
8212
8411
|
a0: a0,
|
@@ -8296,7 +8495,7 @@
|
|
8296
8495
|
};
|
8297
8496
|
function d3_svg_diagonalRadialProjection(projection) {
|
8298
8497
|
return function() {
|
8299
|
-
var d = projection.apply(this, arguments), r = d[0], a = d[1]
|
8498
|
+
var d = projection.apply(this, arguments), r = d[0], a = d[1] - halfπ;
|
8300
8499
|
return [ r * Math.cos(a), r * Math.sin(a) ];
|
8301
8500
|
};
|
8302
8501
|
}
|
@@ -8352,8 +8551,43 @@
|
|
8352
8551
|
});
|
8353
8552
|
d3.svg.symbolTypes = d3_svg_symbols.keys();
|
8354
8553
|
var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * d3_radians);
|
8355
|
-
function
|
8554
|
+
d3_selectionPrototype.transition = function(name) {
|
8555
|
+
var id = d3_transitionInheritId || ++d3_transitionId, ns = d3_transitionNamespace(name), subgroups = [], subgroup, node, transition = d3_transitionInherit || {
|
8556
|
+
time: Date.now(),
|
8557
|
+
ease: d3_ease_cubicInOut,
|
8558
|
+
delay: 0,
|
8559
|
+
duration: 250
|
8560
|
+
};
|
8561
|
+
for (var j = -1, m = this.length; ++j < m; ) {
|
8562
|
+
subgroups.push(subgroup = []);
|
8563
|
+
for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
|
8564
|
+
if (node = group[i]) d3_transitionNode(node, i, ns, id, transition);
|
8565
|
+
subgroup.push(node);
|
8566
|
+
}
|
8567
|
+
}
|
8568
|
+
return d3_transition(subgroups, ns, id);
|
8569
|
+
};
|
8570
|
+
d3_selectionPrototype.interrupt = function(name) {
|
8571
|
+
return this.each(name == null ? d3_selection_interrupt : d3_selection_interruptNS(d3_transitionNamespace(name)));
|
8572
|
+
};
|
8573
|
+
var d3_selection_interrupt = d3_selection_interruptNS(d3_transitionNamespace());
|
8574
|
+
function d3_selection_interruptNS(ns) {
|
8575
|
+
return function() {
|
8576
|
+
var lock, active;
|
8577
|
+
if ((lock = this[ns]) && (active = lock[lock.active])) {
|
8578
|
+
if (--lock.count) {
|
8579
|
+
delete lock[lock.active];
|
8580
|
+
lock.active += .5;
|
8581
|
+
} else {
|
8582
|
+
delete this[ns];
|
8583
|
+
}
|
8584
|
+
active.event && active.event.interrupt.call(this, this.__data__, active.index);
|
8585
|
+
}
|
8586
|
+
};
|
8587
|
+
}
|
8588
|
+
function d3_transition(groups, ns, id) {
|
8356
8589
|
d3_subclass(groups, d3_transitionPrototype);
|
8590
|
+
groups.namespace = ns;
|
8357
8591
|
groups.id = id;
|
8358
8592
|
return groups;
|
8359
8593
|
}
|
@@ -8362,44 +8596,44 @@
|
|
8362
8596
|
d3_transitionPrototype.empty = d3_selectionPrototype.empty;
|
8363
8597
|
d3_transitionPrototype.node = d3_selectionPrototype.node;
|
8364
8598
|
d3_transitionPrototype.size = d3_selectionPrototype.size;
|
8365
|
-
d3.transition = function(selection) {
|
8366
|
-
return
|
8599
|
+
d3.transition = function(selection, name) {
|
8600
|
+
return selection && selection.transition ? d3_transitionInheritId ? selection.transition(name) : selection : d3_selectionRoot.transition(selection);
|
8367
8601
|
};
|
8368
8602
|
d3.transition.prototype = d3_transitionPrototype;
|
8369
8603
|
d3_transitionPrototype.select = function(selector) {
|
8370
|
-
var id = this.id, subgroups = [], subgroup, subnode, node;
|
8604
|
+
var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnode, node;
|
8371
8605
|
selector = d3_selection_selector(selector);
|
8372
8606
|
for (var j = -1, m = this.length; ++j < m; ) {
|
8373
8607
|
subgroups.push(subgroup = []);
|
8374
8608
|
for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
|
8375
8609
|
if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i, j))) {
|
8376
8610
|
if ("__data__" in node) subnode.__data__ = node.__data__;
|
8377
|
-
d3_transitionNode(subnode, i, id, node
|
8611
|
+
d3_transitionNode(subnode, i, ns, id, node[ns][id]);
|
8378
8612
|
subgroup.push(subnode);
|
8379
8613
|
} else {
|
8380
8614
|
subgroup.push(null);
|
8381
8615
|
}
|
8382
8616
|
}
|
8383
8617
|
}
|
8384
|
-
return d3_transition(subgroups, id);
|
8618
|
+
return d3_transition(subgroups, ns, id);
|
8385
8619
|
};
|
8386
8620
|
d3_transitionPrototype.selectAll = function(selector) {
|
8387
|
-
var id = this.id, subgroups = [], subgroup, subnodes, node, subnode, transition;
|
8621
|
+
var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnodes, node, subnode, transition;
|
8388
8622
|
selector = d3_selection_selectorAll(selector);
|
8389
8623
|
for (var j = -1, m = this.length; ++j < m; ) {
|
8390
8624
|
for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
|
8391
8625
|
if (node = group[i]) {
|
8392
|
-
transition = node
|
8626
|
+
transition = node[ns][id];
|
8393
8627
|
subnodes = selector.call(node, node.__data__, i, j);
|
8394
8628
|
subgroups.push(subgroup = []);
|
8395
8629
|
for (var k = -1, o = subnodes.length; ++k < o; ) {
|
8396
|
-
if (subnode = subnodes[k]) d3_transitionNode(subnode, k, id, transition);
|
8630
|
+
if (subnode = subnodes[k]) d3_transitionNode(subnode, k, ns, id, transition);
|
8397
8631
|
subgroup.push(subnode);
|
8398
8632
|
}
|
8399
8633
|
}
|
8400
8634
|
}
|
8401
8635
|
}
|
8402
|
-
return d3_transition(subgroups, id);
|
8636
|
+
return d3_transition(subgroups, ns, id);
|
8403
8637
|
};
|
8404
8638
|
d3_transitionPrototype.filter = function(filter) {
|
8405
8639
|
var subgroups = [], subgroup, group, node;
|
@@ -8412,23 +8646,23 @@
|
|
8412
8646
|
}
|
8413
8647
|
}
|
8414
8648
|
}
|
8415
|
-
return d3_transition(subgroups, this.id);
|
8649
|
+
return d3_transition(subgroups, this.namespace, this.id);
|
8416
8650
|
};
|
8417
8651
|
d3_transitionPrototype.tween = function(name, tween) {
|
8418
|
-
var id = this.id;
|
8419
|
-
if (arguments.length < 2) return this.node()
|
8652
|
+
var id = this.id, ns = this.namespace;
|
8653
|
+
if (arguments.length < 2) return this.node()[ns][id].tween.get(name);
|
8420
8654
|
return d3_selection_each(this, tween == null ? function(node) {
|
8421
|
-
node
|
8655
|
+
node[ns][id].tween.remove(name);
|
8422
8656
|
} : function(node) {
|
8423
|
-
node
|
8657
|
+
node[ns][id].tween.set(name, tween);
|
8424
8658
|
});
|
8425
8659
|
};
|
8426
8660
|
function d3_transition_tween(groups, name, value, tween) {
|
8427
|
-
var id = groups.id;
|
8661
|
+
var id = groups.id, ns = groups.namespace;
|
8428
8662
|
return d3_selection_each(groups, typeof value === "function" ? function(node, i, j) {
|
8429
|
-
node
|
8663
|
+
node[ns][id].tween.set(name, tween(value.call(node, node.__data__, i, j)));
|
8430
8664
|
} : (value = tween(value), function(node) {
|
8431
|
-
node
|
8665
|
+
node[ns][id].tween.set(name, value);
|
8432
8666
|
}));
|
8433
8667
|
}
|
8434
8668
|
d3_transitionPrototype.attr = function(nameNS, value) {
|
@@ -8520,73 +8754,84 @@
|
|
8520
8754
|
};
|
8521
8755
|
}
|
8522
8756
|
d3_transitionPrototype.remove = function() {
|
8757
|
+
var ns = this.namespace;
|
8523
8758
|
return this.each("end.transition", function() {
|
8524
8759
|
var p;
|
8525
|
-
if (this.
|
8760
|
+
if (this[ns].count < 2 && (p = this.parentNode)) p.removeChild(this);
|
8526
8761
|
});
|
8527
8762
|
};
|
8528
8763
|
d3_transitionPrototype.ease = function(value) {
|
8529
|
-
var id = this.id;
|
8530
|
-
if (arguments.length < 1) return this.node()
|
8764
|
+
var id = this.id, ns = this.namespace;
|
8765
|
+
if (arguments.length < 1) return this.node()[ns][id].ease;
|
8531
8766
|
if (typeof value !== "function") value = d3.ease.apply(d3, arguments);
|
8532
8767
|
return d3_selection_each(this, function(node) {
|
8533
|
-
node
|
8768
|
+
node[ns][id].ease = value;
|
8534
8769
|
});
|
8535
8770
|
};
|
8536
8771
|
d3_transitionPrototype.delay = function(value) {
|
8537
|
-
var id = this.id;
|
8538
|
-
if (arguments.length < 1) return this.node()
|
8772
|
+
var id = this.id, ns = this.namespace;
|
8773
|
+
if (arguments.length < 1) return this.node()[ns][id].delay;
|
8539
8774
|
return d3_selection_each(this, typeof value === "function" ? function(node, i, j) {
|
8540
|
-
node
|
8775
|
+
node[ns][id].delay = +value.call(node, node.__data__, i, j);
|
8541
8776
|
} : (value = +value, function(node) {
|
8542
|
-
node
|
8777
|
+
node[ns][id].delay = value;
|
8543
8778
|
}));
|
8544
8779
|
};
|
8545
8780
|
d3_transitionPrototype.duration = function(value) {
|
8546
|
-
var id = this.id;
|
8547
|
-
if (arguments.length < 1) return this.node()
|
8781
|
+
var id = this.id, ns = this.namespace;
|
8782
|
+
if (arguments.length < 1) return this.node()[ns][id].duration;
|
8548
8783
|
return d3_selection_each(this, typeof value === "function" ? function(node, i, j) {
|
8549
|
-
node
|
8784
|
+
node[ns][id].duration = Math.max(1, value.call(node, node.__data__, i, j));
|
8550
8785
|
} : (value = Math.max(1, value), function(node) {
|
8551
|
-
node
|
8786
|
+
node[ns][id].duration = value;
|
8552
8787
|
}));
|
8553
8788
|
};
|
8554
8789
|
d3_transitionPrototype.each = function(type, listener) {
|
8555
|
-
var id = this.id;
|
8790
|
+
var id = this.id, ns = this.namespace;
|
8556
8791
|
if (arguments.length < 2) {
|
8557
8792
|
var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId;
|
8558
|
-
|
8559
|
-
|
8560
|
-
|
8561
|
-
|
8562
|
-
|
8563
|
-
|
8564
|
-
|
8793
|
+
try {
|
8794
|
+
d3_transitionInheritId = id;
|
8795
|
+
d3_selection_each(this, function(node, i, j) {
|
8796
|
+
d3_transitionInherit = node[ns][id];
|
8797
|
+
type.call(node, node.__data__, i, j);
|
8798
|
+
});
|
8799
|
+
} finally {
|
8800
|
+
d3_transitionInherit = inherit;
|
8801
|
+
d3_transitionInheritId = inheritId;
|
8802
|
+
}
|
8565
8803
|
} else {
|
8566
8804
|
d3_selection_each(this, function(node) {
|
8567
|
-
var transition = node
|
8568
|
-
(transition.event || (transition.event = d3.dispatch("start", "end"))).on(type, listener);
|
8805
|
+
var transition = node[ns][id];
|
8806
|
+
(transition.event || (transition.event = d3.dispatch("start", "end", "interrupt"))).on(type, listener);
|
8569
8807
|
});
|
8570
8808
|
}
|
8571
8809
|
return this;
|
8572
8810
|
};
|
8573
8811
|
d3_transitionPrototype.transition = function() {
|
8574
|
-
var id0 = this.id, id1 = ++d3_transitionId, subgroups = [], subgroup, group, node, transition;
|
8812
|
+
var id0 = this.id, id1 = ++d3_transitionId, ns = this.namespace, subgroups = [], subgroup, group, node, transition;
|
8575
8813
|
for (var j = 0, m = this.length; j < m; j++) {
|
8576
8814
|
subgroups.push(subgroup = []);
|
8577
8815
|
for (var group = this[j], i = 0, n = group.length; i < n; i++) {
|
8578
8816
|
if (node = group[i]) {
|
8579
|
-
transition =
|
8580
|
-
|
8581
|
-
|
8817
|
+
transition = node[ns][id0];
|
8818
|
+
d3_transitionNode(node, i, ns, id1, {
|
8819
|
+
time: transition.time,
|
8820
|
+
ease: transition.ease,
|
8821
|
+
delay: transition.delay + transition.duration,
|
8822
|
+
duration: transition.duration
|
8823
|
+
});
|
8582
8824
|
}
|
8583
8825
|
subgroup.push(node);
|
8584
8826
|
}
|
8585
8827
|
}
|
8586
|
-
return d3_transition(subgroups, id1);
|
8828
|
+
return d3_transition(subgroups, ns, id1);
|
8587
8829
|
};
|
8588
|
-
function
|
8589
|
-
|
8830
|
+
function d3_transitionNamespace(name) {
|
8831
|
+
return name == null ? "__transition__" : "__transition_" + name + "__";
|
8832
|
+
}
|
8833
|
+
function d3_transitionNode(node, i, ns, id, inherit) {
|
8834
|
+
var lock = node[ns] || (node[ns] = {
|
8590
8835
|
active: 0,
|
8591
8836
|
count: 0
|
8592
8837
|
}), transition = lock[id];
|
@@ -8595,43 +8840,53 @@
|
|
8595
8840
|
transition = lock[id] = {
|
8596
8841
|
tween: new d3_Map(),
|
8597
8842
|
time: time,
|
8598
|
-
ease: inherit.ease,
|
8599
8843
|
delay: inherit.delay,
|
8600
|
-
duration: inherit.duration
|
8844
|
+
duration: inherit.duration,
|
8845
|
+
ease: inherit.ease,
|
8846
|
+
index: i
|
8601
8847
|
};
|
8848
|
+
inherit = null;
|
8602
8849
|
++lock.count;
|
8603
8850
|
d3.timer(function(elapsed) {
|
8604
|
-
var
|
8851
|
+
var delay = transition.delay, duration, ease, timer = d3_timer_active, tweened = [];
|
8605
8852
|
timer.t = delay + time;
|
8606
8853
|
if (delay <= elapsed) return start(elapsed - delay);
|
8607
8854
|
timer.c = start;
|
8608
8855
|
function start(elapsed) {
|
8609
8856
|
if (lock.active > id) return stop();
|
8857
|
+
var active = lock[lock.active];
|
8858
|
+
if (active) {
|
8859
|
+
--lock.count;
|
8860
|
+
delete lock[lock.active];
|
8861
|
+
active.event && active.event.interrupt.call(node, node.__data__, active.index);
|
8862
|
+
}
|
8610
8863
|
lock.active = id;
|
8611
|
-
transition.event && transition.event.start.call(node,
|
8864
|
+
transition.event && transition.event.start.call(node, node.__data__, i);
|
8612
8865
|
transition.tween.forEach(function(key, value) {
|
8613
|
-
if (value = value.call(node,
|
8866
|
+
if (value = value.call(node, node.__data__, i)) {
|
8614
8867
|
tweened.push(value);
|
8615
8868
|
}
|
8616
8869
|
});
|
8870
|
+
ease = transition.ease;
|
8871
|
+
duration = transition.duration;
|
8617
8872
|
d3.timer(function() {
|
8618
8873
|
timer.c = tick(elapsed || 1) ? d3_true : tick;
|
8619
8874
|
return 1;
|
8620
8875
|
}, 0, time);
|
8621
8876
|
}
|
8622
8877
|
function tick(elapsed) {
|
8623
|
-
if (lock.active !== id) return
|
8878
|
+
if (lock.active !== id) return 1;
|
8624
8879
|
var t = elapsed / duration, e = ease(t), n = tweened.length;
|
8625
8880
|
while (n > 0) {
|
8626
8881
|
tweened[--n].call(node, e);
|
8627
8882
|
}
|
8628
8883
|
if (t >= 1) {
|
8629
|
-
transition.event && transition.event.end.call(node,
|
8884
|
+
transition.event && transition.event.end.call(node, node.__data__, i);
|
8630
8885
|
return stop();
|
8631
8886
|
}
|
8632
8887
|
}
|
8633
8888
|
function stop() {
|
8634
|
-
if (--lock.count) delete lock[id]; else delete node
|
8889
|
+
if (--lock.count) delete lock[id]; else delete node[ns];
|
8635
8890
|
return 1;
|
8636
8891
|
}
|
8637
8892
|
}, 0, time);
|