Skip to content

Commit 044f615

Browse files
committed
Merge branch 'transition-reselect' into 2.11
2 parents 019583e + 09297b0 commit 044f615

37 files changed

Lines changed: 388 additions & 318 deletions

Makefile

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@ JS_TESTER = $(NODE_PATH)/vows/bin/vows
77
LOCALE ?= en_US
88

99
all: \
10-
d3.v2.js \
11-
d3.v2.min.js \
10+
d3.v3.js \
11+
d3.v3.min.js \
1212
component.json \
1313
package.json
1414

1515
# Modify this rule to build your own custom release.
1616

17-
.INTERMEDIATE d3.v2.js: \
17+
.INTERMEDIATE d3.v3.js: \
1818
src/start.js \
1919
d3.core.js \
2020
d3.scale.js \
@@ -124,6 +124,7 @@ d3.core.js: \
124124
src/core/transition-duration.js \
125125
src/core/transition-each.js \
126126
src/core/transition-transition.js \
127+
src/core/transition-tween.js \
127128
src/core/tween.js \
128129
src/core/timer.js \
129130
src/core/mouse.js \

component.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
22
"name": "d3",
3-
"version": "2.10.2",
3+
"version": "3.0.0pre",
44
"main": "./d3.v2.js"
55
}

d3.v2.min.js

Lines changed: 0 additions & 4 deletions
This file was deleted.

d3.v2.js renamed to d3.v3.js

Lines changed: 96 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,17 @@
136136
return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t));
137137
};
138138
}
139-
function d3_ease_identity(t) {
140-
return t;
139+
function d3_ease_quad(t) {
140+
return t * t;
141+
}
142+
function d3_ease_cubic(t) {
143+
return t * t * t;
144+
}
145+
function d3_ease_cubicInOut(t) {
146+
if (t <= 0) return 0;
147+
if (t >= 1) return 1;
148+
var t2 = t * t, t3 = t2 * t;
149+
return 4 * (t < .5 ? t3 : 3 * (t - t2) + t3 - .75);
141150
}
142151
function d3_ease_poly(e) {
143152
return function(t) {
@@ -537,14 +546,9 @@
537546
}
538547
function d3_transition(groups, id, time) {
539548
d3_arraySubclass(groups, d3_transitionPrototype);
540-
var tweens = new d3_Map, event = d3.dispatch("start", "end"), ease = d3_transitionEase;
549+
var event = d3.dispatch("start", "end"), ease = d3_transitionEase;
541550
groups.id = id;
542551
groups.time = time;
543-
groups.tween = function(name, tween) {
544-
if (arguments.length < 2) return tweens.get(name);
545-
if (tween == null) tweens.remove(name); else tweens.set(name, tween);
546-
return groups;
547-
};
548552
groups.ease = function(value) {
549553
if (!arguments.length) return ease;
550554
ease = typeof value === "function" ? value : d3.ease.apply(d3, arguments);
@@ -560,7 +564,7 @@
560564
function start(elapsed) {
561565
if (lock.active > id) return stop();
562566
lock.active = id;
563-
tweens.forEach(function(key, value) {
567+
transition.tween.forEach(function(key, value) {
564568
if (value = value.call(node, d, i)) {
565569
tweened.push(value);
566570
}
@@ -584,27 +588,36 @@
584588
}
585589
}
586590
function stop() {
587-
if (!--lock.count) delete node.__transition__;
591+
if (--lock.count) delete lock[id]; else delete node.__transition__;
588592
return 1;
589593
}
590-
var tweened = [], delay = node.delay, duration = node.duration, lock = (node = node.node).__transition__ || (node.__transition__ = {
591-
active: 0,
592-
count: 0
593-
}), d = node.__data__;
594-
++lock.count;
594+
var d = node.__data__, lock = node.__transition__, transition = lock[id], delay = transition.delay, duration = transition.duration, tweened = [];
595595
delay <= elapsed ? start(elapsed) : d3.timer(start, delay, time);
596596
});
597597
}, 0, time);
598598
return groups;
599599
}
600+
function d3_transitionNode(node, id, delay, duration) {
601+
var lock = node.__transition__ || (node.__transition__ = {
602+
active: 0,
603+
count: 0
604+
});
605+
lock[id] || (lock[id] = {
606+
delay: delay,
607+
duration: duration,
608+
tween: new d3_Map
609+
});
610+
++lock.count;
611+
}
600612
function d3_transition_each(callback) {
601613
var id = d3_transitionId, ease = d3_transitionEase, delay = d3_transitionDelay, duration = d3_transitionDuration;
602614
d3_transitionId = this.id;
603615
d3_transitionEase = this.ease();
604616
d3_selection_each(this, function(node, i, j) {
605-
d3_transitionDelay = node.delay;
606-
d3_transitionDuration = node.duration;
607-
callback.call(node = node.node, node.__data__, i, j);
617+
var transition = node.__transition__[d3_transitionId];
618+
d3_transitionDelay = transition.delay;
619+
d3_transitionDuration = transition.duration;
620+
callback.call(node, node.__data__, i, j);
608621
});
609622
d3_transitionId = id;
610623
d3_transitionEase = ease;
@@ -641,6 +654,7 @@
641654
var t0 = null, t1 = d3_timer_queue, then = Infinity;
642655
while (t1) {
643656
if (t1.flush) {
657+
delete d3_timer_byId[t1.callback.id];
644658
t1 = t0 ? t0.next = t1.next : d3_timer_queue = t1.next;
645659
} else {
646660
then = Math.min(then, t1.then + t1.delay);
@@ -2593,7 +2607,7 @@
25932607
};
25942608
}
25952609
d3 = {
2596-
version: "2.10.2"
2610+
version: "3.0.0pre"
25972611
};
25982612
var d3_array = d3_arraySlice;
25992613
try {
@@ -3128,8 +3142,8 @@
31283142
}
31293143
return d3_formatPrefixes[8 + i / 3];
31303144
};
3131-
var d3_ease_quad = d3_ease_poly(2), d3_ease_cubic = d3_ease_poly(3), d3_ease_default = function() {
3132-
return d3_ease_identity;
3145+
var d3_ease_default = function() {
3146+
return d3_identity;
31333147
};
31343148
var d3_ease = d3.map({
31353149
linear: d3_ease_default,
@@ -3156,7 +3170,7 @@
31563170
}
31573171
});
31583172
var d3_ease_mode = d3.map({
3159-
"in": d3_ease_identity,
3173+
"in": d3_identity,
31603174
out: d3_ease_reverse,
31613175
"in-out": d3_ease_reflect,
31623176
"out-in": function(f) {
@@ -3166,7 +3180,7 @@
31663180
d3.ease = function(name) {
31673181
var i = name.indexOf("-"), t = i >= 0 ? name.substring(0, i) : name, m = i >= 0 ? name.substring(i + 1) : "in";
31683182
t = d3_ease.get(t) || d3_ease_default;
3169-
m = d3_ease_mode.get(m) || d3_ease_identity;
3183+
m = d3_ease_mode.get(m) || d3_identity;
31703184
return d3_ease_clamp(m(t.apply(null, Array.prototype.slice.call(arguments, 1))));
31713185
};
31723186
d3.event = null;
@@ -3917,18 +3931,15 @@
39173931
return null;
39183932
};
39193933
d3_selectionPrototype.transition = function() {
3920-
var subgroups = [], subgroup, node;
3934+
var id = d3_transitionId || ++d3_transitionNextId, subgroups = [], subgroup, node, transition;
39213935
for (var j = -1, m = this.length; ++j < m; ) {
39223936
subgroups.push(subgroup = []);
39233937
for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
3924-
subgroup.push((node = group[i]) ? {
3925-
node: node,
3926-
delay: d3_transitionDelay,
3927-
duration: d3_transitionDuration
3928-
} : null);
3938+
if (node = group[i]) d3_transitionNode(node, id, d3_transitionDelay, d3_transitionDuration);
3939+
subgroup.push(node);
39293940
}
39303941
}
3931-
return d3_transition(subgroups, d3_transitionId || ++d3_transitionNextId, Date.now());
3942+
return d3_transition(subgroups, id, Date.now());
39323943
};
39333944
var d3_selectionRoot = d3_selection([ [ document ] ]);
39343945
d3_selectionRoot[0].parentNode = d3_selectRoot;
@@ -3962,59 +3973,57 @@
39623973
}
39633974
return d3_selection(subgroups);
39643975
};
3965-
var d3_transitionPrototype = [], d3_transitionNextId = 0, d3_transitionId = 0, d3_transitionDefaultDelay = 0, d3_transitionDefaultDuration = 250, d3_transitionDefaultEase = d3.ease("cubic-in-out"), d3_transitionDelay = d3_transitionDefaultDelay, d3_transitionDuration = d3_transitionDefaultDuration, d3_transitionEase = d3_transitionDefaultEase;
3976+
var d3_transitionPrototype = [], d3_transitionNextId = 0, d3_transitionId = 0, d3_transitionDefaultDelay = 0, d3_transitionDefaultDuration = 250, d3_transitionDelay = d3_transitionDefaultDelay, d3_transitionDuration = d3_transitionDefaultDuration, d3_transitionEase = d3_ease_cubicInOut;
39663977
d3_transitionPrototype.call = d3_selectionPrototype.call;
3978+
d3_transitionPrototype.empty = d3_selectionPrototype.empty;
3979+
d3_transitionPrototype.node = d3_selectionPrototype.node;
39673980
d3.transition = function(selection) {
39683981
return arguments.length ? d3_transitionId ? selection.transition() : selection : d3_selectionRoot.transition();
39693982
};
39703983
d3.transition.prototype = d3_transitionPrototype;
39713984
d3_transitionPrototype.select = function(selector) {
3972-
var subgroups = [], subgroup, subnode, node;
3985+
var id = this.id, subgroups = [], subgroup, subnode, node, transition;
39733986
if (typeof selector !== "function") selector = d3_selection_selector(selector);
39743987
for (var j = -1, m = this.length; ++j < m; ) {
39753988
subgroups.push(subgroup = []);
39763989
for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
3977-
if ((node = group[i]) && (subnode = selector.call(node.node, node.node.__data__, i))) {
3978-
if ("__data__" in node.node) subnode.__data__ = node.node.__data__;
3979-
subgroup.push({
3980-
node: subnode,
3981-
delay: node.delay,
3982-
duration: node.duration
3983-
});
3990+
if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i))) {
3991+
if ("__data__" in node) subnode.__data__ = node.__data__;
3992+
transition = node.__transition__[id];
3993+
d3_transitionNode(subnode, id, transition.delay, transition.duration);
3994+
subgroup.push(subnode);
39843995
} else {
39853996
subgroup.push(null);
39863997
}
39873998
}
39883999
}
3989-
return d3_transition(subgroups, this.id, this.time).ease(this.ease());
4000+
return d3_transition(subgroups, id, this.time).ease(this.ease());
39904001
};
39914002
d3_transitionPrototype.selectAll = function(selector) {
3992-
var subgroups = [], subgroup, subnodes, node;
4003+
var id = this.id, subgroups = [], subgroup, subnodes, node, subnode, transition;
39934004
if (typeof selector !== "function") selector = d3_selection_selectorAll(selector);
39944005
for (var j = -1, m = this.length; ++j < m; ) {
39954006
for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
39964007
if (node = group[i]) {
3997-
subnodes = selector.call(node.node, node.node.__data__, i);
4008+
transition = node.__transition__[id];
4009+
subnodes = selector.call(node, node.__data__, i);
39984010
subgroups.push(subgroup = []);
39994011
for (var k = -1, o = subnodes.length; ++k < o; ) {
4000-
subgroup.push({
4001-
node: subnodes[k],
4002-
delay: node.delay,
4003-
duration: node.duration
4004-
});
4012+
d3_transitionNode(subnode = subnodes[k], id, transition.delay, transition.duration);
4013+
subgroup.push(subnode);
40054014
}
40064015
}
40074016
}
40084017
}
4009-
return d3_transition(subgroups, this.id, this.time).ease(this.ease());
4018+
return d3_transition(subgroups, id, this.time).ease(this.ease());
40104019
};
40114020
d3_transitionPrototype.filter = function(filter) {
40124021
var subgroups = [], subgroup, group, node;
40134022
if (typeof filter !== "function") filter = d3_selection_filter(filter);
40144023
for (var j = 0, m = this.length; j < m; j++) {
40154024
subgroups.push(subgroup = []);
40164025
for (var group = this[j], i = 0, n = group.length; i < n; i++) {
4017-
if ((node = group[i]) && filter.call(node.node, node.node.__data__, i)) {
4026+
if ((node = group[i]) && filter.call(node, node.__data__, i)) {
40184027
subgroup.push(node);
40194028
}
40204029
}
@@ -4077,21 +4086,43 @@
40774086
});
40784087
};
40794088
d3_transitionPrototype.delay = function(value) {
4089+
var id = this.id;
40804090
return d3_selection_each(this, typeof value === "function" ? function(node, i, j) {
4081-
node.delay = value.call(node = node.node, node.__data__, i, j) | 0;
4082-
} : (value = value | 0, function(node) {
4083-
node.delay = value;
4091+
node.__transition__[id].delay = value.call(node, node.__data__, i, j) | 0;
4092+
} : (value |= 0, function(node) {
4093+
node.__transition__[id].delay = value;
40844094
}));
40854095
};
40864096
d3_transitionPrototype.duration = function(value) {
4097+
var id = this.id;
40874098
return d3_selection_each(this, typeof value === "function" ? function(node, i, j) {
4088-
node.duration = Math.max(1, value.call(node = node.node, node.__data__, i, j) | 0);
4099+
node.__transition__[id].duration = Math.max(1, value.call(node, node.__data__, i, j) | 0);
40894100
} : (value = Math.max(1, value | 0), function(node) {
4090-
node.duration = value;
4101+
node.__transition__[id].duration = value;
40914102
}));
40924103
};
40934104
d3_transitionPrototype.transition = function() {
4094-
return this.select(d3_this);
4105+
var id0 = this.id, id1 = ++d3_transitionNextId, subgroups = [], subgroup, group, node, transition;
4106+
for (var j = 0, m = this.length; j < m; j++) {
4107+
subgroups.push(subgroup = []);
4108+
for (var group = this[j], i = 0, n = group.length; i < n; i++) {
4109+
if (node = group[i]) {
4110+
transition = node.__transition__[id0];
4111+
d3_transitionNode(node, id1, transition.delay + transition.duration, transition.duration);
4112+
}
4113+
subgroup.push(node);
4114+
}
4115+
}
4116+
return d3_transition(subgroups, id1, this.time).ease(this.ease());
4117+
};
4118+
d3_transitionPrototype.tween = function(name, tween) {
4119+
var id = this.id;
4120+
if (arguments.length < 2) return this.node().__transition__[id].tween.get(name);
4121+
return d3_selection_each(this, tween == null ? function(node) {
4122+
node.__transition__[id].tween.remove(name);
4123+
} : function(node) {
4124+
node.__transition__[id].tween.set(name, tween);
4125+
});
40954126
};
40964127
d3.tween = function(b, interpolate) {
40974128
function tweenFunction(d, i, a) {
@@ -4104,24 +4135,17 @@
41044135
return typeof b === "function" ? tweenFunction : b == null ? d3_tweenNull : (b += "", tweenString);
41054136
};
41064137
var d3_tweenRemove = {};
4107-
var d3_timer_queue = null, d3_timer_interval, d3_timer_timeout;
4138+
var d3_timer_id = 0, d3_timer_byId = {}, d3_timer_queue = null, d3_timer_interval, d3_timer_timeout;
41084139
d3.timer = function(callback, delay, then) {
4109-
var found = false, t0, t1 = d3_timer_queue;
41104140
if (arguments.length < 3) {
41114141
if (arguments.length < 2) delay = 0; else if (!isFinite(delay)) return;
41124142
then = Date.now();
41134143
}
4114-
while (t1) {
4115-
if (t1.callback === callback) {
4116-
t1.then = then;
4117-
t1.delay = delay;
4118-
found = true;
4119-
break;
4120-
}
4121-
t0 = t1;
4122-
t1 = t1.next;
4123-
}
4124-
if (!found) d3_timer_queue = {
4144+
var timer = d3_timer_byId[callback.id];
4145+
if (timer && timer.callback === callback) {
4146+
timer.then = then;
4147+
timer.delay = delay;
4148+
} else d3_timer_byId[callback.id = ++d3_timer_id] = d3_timer_queue = {
41254149
callback: callback,
41264150
then: then,
41274151
delay: delay,
@@ -4444,7 +4468,7 @@
44444468
textEnter.attr("y", Math.max(tickMajorSize, 0) + tickPadding);
44454469
lineUpdate.attr("x2", 0).attr("y2", tickMajorSize);
44464470
textUpdate.attr("x", 0).attr("y", Math.max(tickMajorSize, 0) + tickPadding);
4447-
text.attr("dy", ".71em").attr("text-anchor", "middle");
4471+
text.attr("dy", ".71em").style("text-anchor", "middle");
44484472
pathUpdate.attr("d", "M" + range[0] + "," + tickEndSize + "V0H" + range[1] + "V" + tickEndSize);
44494473
break;
44504474
}
@@ -4457,7 +4481,7 @@
44574481
textEnter.attr("y", -(Math.max(tickMajorSize, 0) + tickPadding));
44584482
lineUpdate.attr("x2", 0).attr("y2", -tickMajorSize);
44594483
textUpdate.attr("x", 0).attr("y", -(Math.max(tickMajorSize, 0) + tickPadding));
4460-
text.attr("dy", "0em").attr("text-anchor", "middle");
4484+
text.attr("dy", "0em").style("text-anchor", "middle");
44614485
pathUpdate.attr("d", "M" + range[0] + "," + -tickEndSize + "V0H" + range[1] + "V" + -tickEndSize);
44624486
break;
44634487
}
@@ -4470,7 +4494,7 @@
44704494
textEnter.attr("x", -(Math.max(tickMajorSize, 0) + tickPadding));
44714495
lineUpdate.attr("x2", -tickMajorSize).attr("y2", 0);
44724496
textUpdate.attr("x", -(Math.max(tickMajorSize, 0) + tickPadding)).attr("y", 0);
4473-
text.attr("dy", ".32em").attr("text-anchor", "end");
4497+
text.attr("dy", ".32em").style("text-anchor", "end");
44744498
pathUpdate.attr("d", "M" + -tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + -tickEndSize);
44754499
break;
44764500
}
@@ -4483,7 +4507,7 @@
44834507
textEnter.attr("x", Math.max(tickMajorSize, 0) + tickPadding);
44844508
lineUpdate.attr("x2", tickMajorSize).attr("y2", 0);
44854509
textUpdate.attr("x", Math.max(tickMajorSize, 0) + tickPadding).attr("y", 0);
4486-
text.attr("dy", ".32em").attr("text-anchor", "start");
4510+
text.attr("dy", ".32em").style("text-anchor", "start");
44874511
pathUpdate.attr("d", "M" + tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + tickEndSize);
44884512
break;
44894513
}

d3.v3.min.js

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)