diff --git a/src/transition/index.js b/src/transition/index.js index 355be71..81e7747 100644 --- a/src/transition/index.js +++ b/src/transition/index.js @@ -43,6 +43,8 @@ Transition.prototype = transition.prototype = { constructor: Transition, select: transition_select, selectAll: transition_selectAll, + selectChild: selection_prototype.selectChild, + selectChildren: selection_prototype.selectChildren, filter: transition_filter, merge: transition_merge, selection: transition_selection, diff --git a/test/transition/selectChild-test.js b/test/transition/selectChild-test.js new file mode 100644 index 0000000..ed197b6 --- /dev/null +++ b/test/transition/selectChild-test.js @@ -0,0 +1,20 @@ +import assert from "assert"; +import {selectAll} from "d3-selection"; +import {transition} from "../../src/index.js"; +import it from "../jsdom.js"; + +it("transition.selectChild(selector) selects the child matching the specified selector, then derives a transition", "

", () => { + const one = document.querySelector("#one"); + const two = document.querySelector("#two"); + const t1 = selectAll([one, two]).data([1, 2]).transition().delay(function(d) { return d * 10; }); + const t2 = t1.selectChild("child"); + assert.strictEqual(t2 instanceof transition, true); + assert.deepStrictEqual(t2._groups, [[one.firstChild, two.firstChild]]); + assert.strictEqual(t2._parents, t1._parents); + assert.strictEqual(t2._name, t1._name); + assert.strictEqual(t2._id, t1._id); + assert.strictEqual(one.firstChild.__data__, 1); + assert.strictEqual(two.firstChild.__data__, 2); + assert.strictEqual(one.firstChild.__transition[t1._id].delay, 10); + assert.strictEqual(two.firstChild.__transition[t1._id].delay, 20); +}); diff --git a/test/transition/selectChildren-test.js b/test/transition/selectChildren-test.js new file mode 100644 index 0000000..4ade610 --- /dev/null +++ b/test/transition/selectChildren-test.js @@ -0,0 +1,20 @@ +import assert from "assert"; +import {selectAll} from "d3-selection"; +import {transition} from "../../src/index.js"; +import it from "../jsdom.js"; + +it("transition.selectChildren(selector) selects the children matching the specified selector, then derives a transition", "

", () => { + const one = document.querySelector("#one"); + const two = document.querySelector("#two"); + const t1 = selectAll([one, two]).data([1, 2]).transition().delay(function(d) { return d * 10; }); + const t2 = t1.selectChildren("child"); + assert.strictEqual(t2 instanceof transition, true); + assert.deepStrictEqual(t2._groups.map(group => Array.from(group)), [[one.firstChild], [two.firstChild]]); + assert.deepStrictEqual(t2._parents, [one, two]); + assert.strictEqual(t2._name, t1._name); + assert.strictEqual(t2._id, t1._id); + assert.strictEqual("__data__" in one.firstChild, false); + assert.strictEqual("__data__" in two.firstChild, false); + assert.strictEqual(one.firstChild.__transition[t1._id].delay, 10); + assert.strictEqual(two.firstChild.__transition[t1._id].delay, 20); +});