From 4d6b5bc342da33bcca23b1cda529d6f6f8951d69 Mon Sep 17 00:00:00 2001 From: Jason Davies Date: Sat, 5 Nov 2011 01:53:22 +0000 Subject: [PATCH 1/2] Update JSDOM and Vows versions. This required changing assert.length to assert.lengthOf in tests, due to a Vows.js change to be compatible with Node.js v0.6.x. For further details: https://github.com/cloudhead/vows/pull/141 --- package.json | 4 ++-- src/package.js | 4 ++-- test/core/select-test.js | 4 ++-- test/core/selectAll-test.js | 4 ++-- test/scale/category-test.js | 6 +++--- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 1bcc8619..a2789633 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "main": "d3.js", "dependencies": { "uglify-js": "1.1.1", - "jsdom": "0.2.8", - "vows": "0.5.11" + "jsdom": "0.2.9", + "vows": "0.5.13" } } diff --git a/src/package.js b/src/package.js index 7eabd149..03828425 100644 --- a/src/package.js +++ b/src/package.js @@ -12,7 +12,7 @@ require("util").puts(JSON.stringify({ "main": "d3.js", "dependencies": { "uglify-js": "1.1.1", - "jsdom": "0.2.8", - "vows": "0.5.11" + "jsdom": "0.2.9", + "vows": "0.5.13" } }, null, 2)); diff --git a/test/core/select-test.js b/test/core/select-test.js index f27d3fce..4386af6d 100644 --- a/test/core/select-test.js +++ b/test/core/select-test.js @@ -33,8 +33,8 @@ suite.addBatch({ "selects by node": function() { var div = d3.select(document.body.lastChild); assert.isTrue(div[0][0] === document.body.lastChild); - assert.length(div, 1); - assert.length(div[0], 1); + assert.lengthOf(div, 1); + assert.lengthOf(div[0], 1); } } }); diff --git a/test/core/selectAll-test.js b/test/core/selectAll-test.js index 0dea3f2c..a88cbe0c 100644 --- a/test/core/selectAll-test.js +++ b/test/core/selectAll-test.js @@ -33,8 +33,8 @@ suite.addBatch({ "selects by array": function() { var div = d3.selectAll([document.body.lastChild]); assert.isTrue(div[0][0] === document.body.lastChild); - assert.length(div, 1); - assert.length(div[0], 1); + assert.lengthOf(div, 1); + assert.lengthOf(div[0], 1); }, "groups are not instances of NodeList": function() { var div = d3.select("body").selectAll(function() { return this.getElementsByClassName("div"); }); diff --git a/test/scale/category-test.js b/test/scale/category-test.js index d74de7ef..64c829ac 100644 --- a/test/scale/category-test.js +++ b/test/scale/category-test.js @@ -17,8 +17,8 @@ function category(category, n) { return { "is an ordinal scale": function() { var x = category(), colors = x.range(); - assert.length(x.domain(), 0); - assert.length(x.range(), n); + assert.lengthOf(x.domain(), 0); + assert.lengthOf(x.range(), n); assert.equal(x(1), colors[0]); assert.equal(x(2), colors[1]); assert.equal(x(1), colors[0]); @@ -39,7 +39,7 @@ function category(category, n) { }, "contains the expected number of values in the range": function() { var x = category(); - assert.length(x.range(), n); + assert.lengthOf(x.range(), n); }, "each range value is distinct": function() { var map = {}, count = 0, x = category(); From 98b6abd484e59c272faa9a7d78aad4a078ce4953 Mon Sep 17 00:00:00 2001 From: Mike Bostock Date: Sun, 13 Nov 2011 18:28:09 -0800 Subject: [PATCH 2/2] Improvements to collapsible force example. --- ...nteractive.html => force-collapsible.html} | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) rename examples/force/{force-interactive.html => force-collapsible.html} (83%) diff --git a/examples/force/force-interactive.html b/examples/force/force-collapsible.html similarity index 83% rename from examples/force/force-interactive.html rename to examples/force/force-collapsible.html index d917568e..f80d3891 100644 --- a/examples/force/force-interactive.html +++ b/examples/force/force-collapsible.html @@ -10,8 +10,8 @@ circle.node { cursor: pointer; - stroke: #3182bd; - stroke-width: 1.5px; + stroke: #000; + stroke-width: .5px; } line.link { @@ -34,6 +34,8 @@ var w = 960, var force = d3.layout.force() .on("tick", tick) + .charge(function(d) { return d._children ? -d.size / 100 : -30; }) + .linkDistance(function(d) { return d.target._children ? 80 : 30; }) .size([w, h]); var vis = d3.select("#chart").append("svg:svg") @@ -42,6 +44,9 @@ var vis = d3.select("#chart").append("svg:svg") d3.json("../data/flare.json", function(json) { root = json; + root.fixed = true; + root.x = w / 2; + root.y = h / 2; update(); }); @@ -75,12 +80,15 @@ function update() { .data(nodes, function(d) { return d.id; }) .style("fill", color); + node.transition() + .attr("r", function(d) { return d.children ? 4.5 : Math.sqrt(d.size) / 10; }); + // Enter any new nodes. node.enter().append("svg:circle") .attr("class", "node") .attr("cx", function(d) { return d.x; }) .attr("cy", function(d) { return d.y; }) - .attr("r", function(d) { return Math.sqrt(d.size) / 10 || 4.5; }) + .attr("r", function(d) { return d.children ? 4.5 : Math.sqrt(d.size) / 10; }) .style("fill", color) .on("click", click) .call(force.drag); @@ -121,12 +129,13 @@ function flatten(root) { var nodes = [], i = 0; function recurse(node) { - if (node.children) node.children.forEach(recurse); + if (node.children) node.size = node.children.reduce(function(p, v) { return p + recurse(v); }, 0); if (!node.id) node.id = ++i; nodes.push(node); + return node.size; } - recurse(root); + root.size = recurse(root); return nodes; }