Skip to content

Commit

Permalink
Merge branch 'release'
Browse files Browse the repository at this point in the history
  • Loading branch information
mbostock committed Jan 17, 2012
2 parents 5bae5f4 + f21d6b8 commit fbcb028
Show file tree
Hide file tree
Showing 12 changed files with 86 additions and 42 deletions.
20 changes: 16 additions & 4 deletions d3.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ try {
d3_style_setProperty.call(this, name, value + "", priority);
};
}
d3 = {version: "2.7.1"}; // semver
d3 = {version: "2.7.2"}; // semver
var d3_array = d3_arraySlice; // conversion for NodeLists

function d3_arrayCopy(pseudoarray) {
Expand Down Expand Up @@ -1777,7 +1777,7 @@ d3_selectionPrototype.order = function() {
for (var j = -1, m = this.length; ++j < m;) {
for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0;) {
if (node = group[i]) {
if (next) next.parentNode.insertBefore(node, next);
if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);
next = node;
}
}
Expand Down Expand Up @@ -2578,11 +2578,11 @@ function d3_scale_log(linear, log) {
var d3_scale_logFormat = d3.format(".0e");

function d3_scale_logp(x) {
return Math.log(x) / Math.LN10;
return Math.log(x < 0 ? 0 : x) / Math.LN10;
}

function d3_scale_logn(x) {
return -Math.log(-x) / Math.LN10;
return -Math.log(x > 0 ? 0 : -x) / Math.LN10;
}

d3_scale_logp.pow = function(x) {
Expand Down Expand Up @@ -3855,31 +3855,43 @@ d3.svg.axis = function() {
switch (orient) {
case "bottom": {
tickTransform = d3_svg_axisX;
subtickEnter.attr("y2", tickMinorSize);
subtickUpdate.attr("x2", 0).attr("y2", tickMinorSize);
tickEnter.select("line").attr("y2", tickMajorSize);
tickEnter.select("text").attr("y", Math.max(tickMajorSize, 0) + tickPadding);
tickUpdate.select("line").attr("x2", 0).attr("y2", tickMajorSize);
tickUpdate.select("text").attr("x", 0).attr("y", Math.max(tickMajorSize, 0) + tickPadding).attr("dy", ".71em").attr("text-anchor", "middle");
pathUpdate.attr("d", "M" + range[0] + "," + tickEndSize + "V0H" + range[1] + "V" + tickEndSize);
break;
}
case "top": {
tickTransform = d3_svg_axisX;
subtickEnter.attr("y2", -tickMinorSize);
subtickUpdate.attr("x2", 0).attr("y2", -tickMinorSize);
tickEnter.select("line").attr("y2", -tickMajorSize);
tickEnter.select("text").attr("y", -(Math.max(tickMajorSize, 0) + tickPadding));
tickUpdate.select("line").attr("x2", 0).attr("y2", -tickMajorSize);
tickUpdate.select("text").attr("x", 0).attr("y", -(Math.max(tickMajorSize, 0) + tickPadding)).attr("dy", "0em").attr("text-anchor", "middle");
pathUpdate.attr("d", "M" + range[0] + "," + -tickEndSize + "V0H" + range[1] + "V" + -tickEndSize);
break;
}
case "left": {
tickTransform = d3_svg_axisY;
subtickEnter.attr("x2", -tickMinorSize);
subtickUpdate.attr("x2", -tickMinorSize).attr("y2", 0);
tickEnter.select("line").attr("x2", -tickMajorSize);
tickEnter.select("text").attr("x", -(Math.max(tickMajorSize, 0) + tickPadding));
tickUpdate.select("line").attr("x2", -tickMajorSize).attr("y2", 0);
tickUpdate.select("text").attr("x", -(Math.max(tickMajorSize, 0) + tickPadding)).attr("y", 0).attr("dy", ".32em").attr("text-anchor", "end");
pathUpdate.attr("d", "M" + -tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + -tickEndSize);
break;
}
case "right": {
tickTransform = d3_svg_axisY;
subtickEnter.attr("x2", tickMinorSize);
subtickUpdate.attr("x2", tickMinorSize).attr("y2", 0);
tickEnter.select("line").attr("x2", tickMajorSize);
tickEnter.select("text").attr("x", Math.max(tickMajorSize, 0) + tickPadding);
tickUpdate.select("line").attr("x2", tickMajorSize).attr("y2", 0);
tickUpdate.select("text").attr("x", Math.max(tickMajorSize, 0) + tickPadding).attr("y", 0).attr("dy", ".32em").attr("text-anchor", "start");
pathUpdate.attr("d", "M" + tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + tickEndSize);
Expand Down
20 changes: 6 additions & 14 deletions d3.layout.js
Original file line number Diff line number Diff line change
Expand Up @@ -1203,7 +1203,7 @@ function d3_layout_packIntersects(a, b) {
var dx = b.x - a.x,
dy = b.y - a.y,
dr = a.r + b.r;
return (dr * dr - dx * dx - dy * dy) > .001; // within epsilon
return dr * dr - dx * dx - dy * dy > .001; // within epsilon
}

function d3_layout_packCircle(nodes) {
Expand Down Expand Up @@ -1262,28 +1262,20 @@ function d3_layout_packCircle(nodes) {
if (isect == 1) {
for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {
if (d3_layout_packIntersects(k, c)) {
if (s2 < s1) {
isect = -1;
j = k;
}
break;
}
}
}

// Update node chain.
if (isect == 0) {
if (isect) {
if (s1 < s2 || (s1 == s2 && b.r < a.r)) d3_layout_packSplice(a, b = j);
else d3_layout_packSplice(a = k, b);
i--;
} else {
d3_layout_packInsert(a, c);
b = c;
bound(c);
} else if (isect > 0) {
d3_layout_packSplice(a, j);
b = j;
i--;
} else { // isect < 0
d3_layout_packSplice(j, b);
a = j;
i--;
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion d3.layout.min.js

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions d3.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "d3",
"version": "2.7.1",
"version": "2.7.2",
"description": "A small, free JavaScript library for manipulating documents based on data.",
"keywords": [
"dom",
Expand Down
2 changes: 1 addition & 1 deletion src/core/core.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
d3 = {version: "2.7.1"}; // semver
d3 = {version: "2.7.2"}; // semver
2 changes: 1 addition & 1 deletion src/core/selection-order.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ d3_selectionPrototype.order = function() {
for (var j = -1, m = this.length; ++j < m;) {
for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0;) {
if (node = group[i]) {
if (next) next.parentNode.insertBefore(node, next);
if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);
next = node;
}
}
Expand Down
20 changes: 6 additions & 14 deletions src/layout/pack.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ function d3_layout_packIntersects(a, b) {
var dx = b.x - a.x,
dy = b.y - a.y,
dr = a.r + b.r;
return (dr * dr - dx * dx - dy * dy) > .001; // within epsilon
return dr * dr - dx * dx - dy * dy > .001; // within epsilon
}

function d3_layout_packCircle(nodes) {
Expand Down Expand Up @@ -109,28 +109,20 @@ function d3_layout_packCircle(nodes) {
if (isect == 1) {
for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {
if (d3_layout_packIntersects(k, c)) {
if (s2 < s1) {
isect = -1;
j = k;
}
break;
}
}
}

// Update node chain.
if (isect == 0) {
if (isect) {
if (s1 < s2 || (s1 == s2 && b.r < a.r)) d3_layout_packSplice(a, b = j);
else d3_layout_packSplice(a = k, b);
i--;
} else {
d3_layout_packInsert(a, c);
b = c;
bound(c);
} else if (isect > 0) {
d3_layout_packSplice(a, j);
b = j;
i--;
} else { // isect < 0
d3_layout_packSplice(j, b);
a = j;
i--;
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/scale/log.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,11 +69,11 @@ function d3_scale_log(linear, log) {
var d3_scale_logFormat = d3.format(".0e");

function d3_scale_logp(x) {
return Math.log(x) / Math.LN10;
return Math.log(x < 0 ? 0 : x) / Math.LN10;
}

function d3_scale_logn(x) {
return -Math.log(-x) / Math.LN10;
return -Math.log(x > 0 ? 0 : -x) / Math.LN10;
}

d3_scale_logp.pow = function(x) {
Expand Down
12 changes: 12 additions & 0 deletions src/svg/axis.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,31 +63,43 @@ d3.svg.axis = function() {
switch (orient) {
case "bottom": {
tickTransform = d3_svg_axisX;
subtickEnter.attr("y2", tickMinorSize);
subtickUpdate.attr("x2", 0).attr("y2", tickMinorSize);
tickEnter.select("line").attr("y2", tickMajorSize);
tickEnter.select("text").attr("y", Math.max(tickMajorSize, 0) + tickPadding);
tickUpdate.select("line").attr("x2", 0).attr("y2", tickMajorSize);
tickUpdate.select("text").attr("x", 0).attr("y", Math.max(tickMajorSize, 0) + tickPadding).attr("dy", ".71em").attr("text-anchor", "middle");
pathUpdate.attr("d", "M" + range[0] + "," + tickEndSize + "V0H" + range[1] + "V" + tickEndSize);
break;
}
case "top": {
tickTransform = d3_svg_axisX;
subtickEnter.attr("y2", -tickMinorSize);
subtickUpdate.attr("x2", 0).attr("y2", -tickMinorSize);
tickEnter.select("line").attr("y2", -tickMajorSize);
tickEnter.select("text").attr("y", -(Math.max(tickMajorSize, 0) + tickPadding));
tickUpdate.select("line").attr("x2", 0).attr("y2", -tickMajorSize);
tickUpdate.select("text").attr("x", 0).attr("y", -(Math.max(tickMajorSize, 0) + tickPadding)).attr("dy", "0em").attr("text-anchor", "middle");
pathUpdate.attr("d", "M" + range[0] + "," + -tickEndSize + "V0H" + range[1] + "V" + -tickEndSize);
break;
}
case "left": {
tickTransform = d3_svg_axisY;
subtickEnter.attr("x2", -tickMinorSize);
subtickUpdate.attr("x2", -tickMinorSize).attr("y2", 0);
tickEnter.select("line").attr("x2", -tickMajorSize);
tickEnter.select("text").attr("x", -(Math.max(tickMajorSize, 0) + tickPadding));
tickUpdate.select("line").attr("x2", -tickMajorSize).attr("y2", 0);
tickUpdate.select("text").attr("x", -(Math.max(tickMajorSize, 0) + tickPadding)).attr("y", 0).attr("dy", ".32em").attr("text-anchor", "end");
pathUpdate.attr("d", "M" + -tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + -tickEndSize);
break;
}
case "right": {
tickTransform = d3_svg_axisY;
subtickEnter.attr("x2", tickMinorSize);
subtickUpdate.attr("x2", tickMinorSize).attr("y2", 0);
tickEnter.select("line").attr("x2", tickMajorSize);
tickEnter.select("text").attr("x", Math.max(tickMajorSize, 0) + tickPadding);
tickUpdate.select("line").attr("x2", tickMajorSize).attr("y2", 0);
tickUpdate.select("text").attr("x", Math.max(tickMajorSize, 0) + tickPadding).attr("y", 0).attr("dy", ".32em").attr("text-anchor", "start");
pathUpdate.attr("d", "M" + tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + tickEndSize);
Expand Down
26 changes: 26 additions & 0 deletions test/layout/pack-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,32 @@ suite.addBatch({
{value: 1, depth: 1, x: 0.5, y: 0.5, r: 0.5}
]);
},
"can handle small nodes": function() {
assert.deepEqual(d3.layout.pack().sort(null).nodes({children: [
{value: .01},
{value: 2},
{value: 2},
{value: 1}
]}).map(layout), [
{y: 0.5, x: 0.5, value: 5.01, r: 0.5, depth: 0},
{y: 0.5084543199854831, x: 0.4682608366855136, value: 0.01, r: 0.016411496513964046, depth: 1},
{y: 0.5084543199854831, x: 0.7167659426883449, value: 2, r: 0.23209360948886723, depth: 1},
{y: 0.34256315498862167, x: 0.2832340573116551, value: 2, r: 0.23209360948886723, depth: 1},
{y: 0.7254154893606051, x: 0.3852405506102519, value: 1, r: 0.16411496513964044, depth: 1}
]);
assert.deepEqual(d3.layout.pack().sort(null).nodes({children: [
{value: 2},
{value: 2},
{value: 1},
{value: .01}
]}).map(layout), [
{y: 0.5, x: 0.5, value: 5.01, r: 0.5, depth: 0},
{y: 0.6274712284943809, x: 0.26624891409386664, value: 2, r: 0.23375108590613333, depth: 1},
{y: 0.6274712284943809, x: 0.7337510859061334, value: 2, r: 0.23375108590613333, depth: 1},
{y: 0.30406466355343187, x: 0.5, value: 1, r: 0.1652869779539461, depth: 1},
{y: 0.3878967195987758, x: 0.3386645534068855, value: 0.01, r: 0.01652869779539461, depth: 1}
]);
},
"can handle residual floating point error": function(pack) {
var result = pack.nodes({children: [
{value: 0.005348322447389364},
Expand Down
14 changes: 12 additions & 2 deletions test/scale/log-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -106,13 +106,23 @@ suite.addBatch({
},
"can clamp to the domain": function(log) {
var x = log().clamp(true);
assert.inDelta(x(.5), 0, 1e-6);
assert.inDelta(x(-1), 0, 1e-6);
assert.inDelta(x(5), 0.69897, 1e-6);
assert.inDelta(x(15), 1, 1e-6);
var x = log().domain([10, 1]).clamp(true);
assert.inDelta(x(.5), 1, 1e-6);
assert.inDelta(x(-1), 1, 1e-6);
assert.inDelta(x(5), 0.30103, 1e-6);
assert.inDelta(x(15), 0, 1e-6);
},
"can clamp to the range": function(log) {
var x = log().clamp(true);
assert.inDelta(x.invert(-.1), 1, 1e-6);
assert.inDelta(x.invert(0.69897), 5, 1e-6);
assert.inDelta(x.invert(1.5), 10, 1e-6);
var x = log().domain([10, 1]).clamp(true);
assert.inDelta(x.invert(-.1), 10, 1e-6);
assert.inDelta(x.invert(0.30103), 5, 1e-6);
assert.inDelta(x.invert(1.5), 1, 1e-6);
}
},

Expand Down

0 comments on commit fbcb028

Please sign in to comment.