This commit is contained in:
Mike Bostock 2012-09-03 19:19:37 -07:00
Родитель 38a6c302de 80009768b6
Коммит 39347b4c53
21 изменённых файлов: 4448 добавлений и 4433 удалений

8733
d3.v2.js поставляемый

Разница между файлами не показана из-за своего большого размера Загрузить разницу

8
d3.v2.min.js поставляемый

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -36,10 +36,9 @@ d3.json("../data/flare-imports.json", function(classes) {
.attr("class", "node")
.attr("transform", function(d) { return "rotate(" + (d.x - 90) + ")translate(" + d.y + ")"; })
.append("text")
.attr("dx", function(d) { return d.x < 180 ? 8 : -8; })
.attr("dy", ".31em")
.attr("text-anchor", function(d) { return d.x < 180 ? "start" : "end"; })
.attr("transform", function(d) { return d.x < 180 ? null : "rotate(180)"; })
.attr("transform", function(d) { return d.x < 180 ? "translate(8)" : "rotate(180)translate(-8)"; })
.text(function(d) { return d.key; });
});

Просмотреть файл

@ -31,9 +31,8 @@ d3.json("../data/flare.json", function(json) {
.attr("r", 4.5);
node.append("text")
.attr("dx", function(d) { return d.x < 180 ? 8 : -8; })
.attr("dy", ".31em")
.attr("text-anchor", function(d) { return d.x < 180 ? "start" : "end"; })
.attr("transform", function(d) { return d.x < 180 ? null : "rotate(180)"; })
.attr("transform", function(d) { return d.x < 180 ? "translate(8)" : "rotate(180)translate(-8)"; })
.text(function(d) { return d.name; });
});

Просмотреть файл

@ -19,26 +19,38 @@ var width = 960,
radius = 120;
var drag = d3.behavior.drag()
.origin(Object)
.on("drag", dragmove);
.origin(function(d) { return d; })
.on("dragstart", dragstart)
.on("drag", dragmove)
.on("dragend", dragend);
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
var circle = svg.append("circle")
.data([{x: width / 2, y: height / 2}])
var circle = svg.selectAll("circle")
.data([1 / 3, 2 / 3])
.enter().append("circle")
.datum(function(d) { return {x: width * d, y: height / 2}; })
.attr("r", radius)
.attr("cx", function(d) { return d.x; })
.attr("cy", function(d) { return d.y; })
.call(drag);
function dragstart() {
d3.select(this).style("fill", "red");
}
function dragmove(d) {
circle
d3.select(this)
.attr("cx", d.x = Math.max(radius, Math.min(width - radius, d3.event.x)))
.attr("cy", d.y = Math.max(radius, Math.min(height - radius, d3.event.y)));
}
function dragend() {
d3.select(this).style("fill", null);
}
</script>
</body>
</html>

Просмотреть файл

@ -32,9 +32,8 @@ d3.json("../data/flare.json", function(json) {
.attr("r", 4.5);
node.append("text")
.attr("dx", function(d) { return d.x < 180 ? 8 : -8; })
.attr("dy", ".31em")
.attr("text-anchor", function(d) { return d.x < 180 ? "start" : "end"; })
.attr("transform", function(d) { return d.x < 180 ? null : "rotate(180)"; })
.attr("transform", function(d) { return d.x < 180 ? "translate(8)" : "rotate(180)translate(-8)"; })
.text(function(d) { return d.name; });
});

Просмотреть файл

@ -1,6 +1,6 @@
{
"name": "d3",
"version": "2.10.0",
"version": "2.10.1",
"description": "A small, free JavaScript library for manipulating documents based on data.",
"keywords": [
"dom",
@ -26,9 +26,9 @@
"sizzle": "1.1.x"
},
"devDependencies": {
"uglify-js": "1.2.3",
"uglify-js": "1.3.3",
"vows": "0.6.x",
"canvas": "0.12.1"
"canvas": "0.13.0"
},
"scripts": {
"test": "./node_modules/vows/bin/vows"

Просмотреть файл

@ -1,5 +1,3 @@
// TODO Track touch points by identifier.
d3.behavior.drag = function() {
var event = d3_eventDispatch(drag, "drag", "dragstart", "dragend"),
origin = null;
@ -13,15 +11,14 @@ d3.behavior.drag = function() {
var target = this,
event_ = event.of(target, arguments),
eventTarget = d3.event.target,
touchId = d3.event.touches && d3.event.changedTouches[0].identifier,
offset,
origin_ = point(),
moved = 0;
var w = d3.select(window)
.on("mousemove.drag", dragmove)
.on("touchmove.drag", dragmove)
.on("mouseup.drag", dragend, true)
.on("touchend.drag", dragend, true);
.on(touchId ? "touchmove.drag-" + touchId : "mousemove.drag", dragmove)
.on(touchId ? "touchend.drag-" + touchId : "mouseup.drag", dragend, true);
if (origin) {
offset = origin.apply(target, arguments);
@ -30,13 +27,15 @@ d3.behavior.drag = function() {
offset = [0, 0];
}
d3_eventCancel();
// Only cancel mousedown; touchstart is needed for draggable links.
if (!touchId) d3_eventCancel();
event_({type: "dragstart"});
function point() {
var p = target.parentNode,
t = d3.event.changedTouches;
return t ? d3.touches(p, t)[0] : d3.mouse(p);
var p = target.parentNode;
return touchId
? d3.touches(p).filter(function(p) { return p.identifier === touchId; })[0]
: d3.mouse(p);
}
function dragmove() {
@ -62,10 +61,8 @@ d3.behavior.drag = function() {
if (d3.event.target === eventTarget) w.on("click.drag", click, true);
}
w .on("mousemove.drag", null)
.on("touchmove.drag", null)
.on("mouseup.drag", null)
.on("touchend.drag", null);
w .on(touchId ? "touchmove.drag-" + touchId : "mousemove.drag", null)
.on(touchId ? "touchend.drag-" + touchId : "mouseup.drag", null);
}
// prevent the subsequent click from propagating (e.g., for anchors)

Просмотреть файл

@ -1 +1 @@
d3 = {version: "2.10.0"}; // semver
d3 = {version: "2.10.1"}; // semver

Просмотреть файл

@ -38,7 +38,7 @@ d3.format = function(specifier) {
if (integer && (value % 1)) return "";
// Convert negative to positive, and record the sign prefix.
var negative = (value < 0) && (value = -value) ? "-" : sign;
var negative = value < 0 && (value = -value) ? "-" : sign;
// Apply the scale, computing it from the value's exponent for si format.
if (scale < 0) {

Просмотреть файл

@ -254,7 +254,7 @@ function d3_interpolateByName(name) {
d3.interpolators = [
d3.interpolateObject,
function(a, b) { return (b instanceof Array) && d3.interpolateArray(a, b); },
function(a, b) { return b instanceof Array && d3.interpolateArray(a, b); },
function(a, b) { return (typeof a === "string" || typeof b === "string") && d3.interpolateString(a + "", b + ""); },
function(a, b) { return (typeof b === "string" ? d3_rgb_names.has(b) || /^(#|rgb\(|hsl\()/.test(b) : b instanceof d3_Rgb || b instanceof d3_Hsl) && d3.interpolateRgb(a, b); },
function(a, b) { return !isNaN(a = +a) && !isNaN(b = +b) && d3.interpolateNumber(a, b); }

Просмотреть файл

@ -9,7 +9,7 @@ function d3_mousePoint(container, e) {
var svg = container.ownerSVGElement || container;
if (svg.createSVGPoint) {
var point = svg.createSVGPoint();
if ((d3_mouse_bug44083 < 0) && (window.scrollX || window.scrollY)) {
if (d3_mouse_bug44083 < 0 && (window.scrollX || window.scrollY)) {
svg = d3.select(document.body)
.append("svg")
.style("position", "absolute")

Просмотреть файл

@ -28,8 +28,8 @@ d3.nest = function() {
}
}
valuesByKey.forEach(function(keyValue) {
o[keyValue] = map(valuesByKey.get(keyValue), depth);
valuesByKey.forEach(function(keyValue, values) {
o[keyValue] = map(values, depth);
});
return o;

Просмотреть файл

@ -70,7 +70,7 @@ function d3_dsv(delimiter, mimeType) {
while ((t = token()) !== EOF) {
var a = [];
while ((t !== EOL) && (t !== EOF)) {
while (t !== EOL && t !== EOF) {
a.push(t);
t = token();
}

Просмотреть файл

@ -274,43 +274,44 @@ d3.layout.force = function() {
force.drag = function() {
if (!drag) drag = d3.behavior.drag()
.origin(d3_identity)
.on("dragstart", dragstart)
.on("drag", d3_layout_forceDrag)
.on("dragend", d3_layout_forceDragEnd);
.on("dragstart", d3_layout_forceDragstart)
.on("drag", dragmove)
.on("dragend", d3_layout_forceDragend);
this.on("mouseover.force", d3_layout_forceDragOver)
.on("mouseout.force", d3_layout_forceDragOut)
this.on("mouseover.force", d3_layout_forceMouseover)
.on("mouseout.force", d3_layout_forceMouseout)
.call(drag);
};
function dragstart(d) {
d3_layout_forceDragOver(d3_layout_forceDragNode = d);
d3_layout_forceDragForce = force;
function dragmove(d) {
d.px = d3.event.x;
d.py = d3.event.y;
force.resume(); // restart annealing
}
return d3.rebind(force, event, "on");
};
var d3_layout_forceDragForce,
d3_layout_forceDragNode;
// The fixed property has three bits:
// Bit 1 can be set externally (e.g., d.fixed = true) and show persist.
// Bit 2 stores the dragging state, from mousedown to mouseup.
// Bit 3 stores the hover state, from mouseover to mouseout.
// Dragend is a special case: it also clears the hover state.
function d3_layout_forceDragOver(d) {
d.fixed |= 2;
function d3_layout_forceDragstart(d) {
d.fixed |= 2; // set bit 2
}
function d3_layout_forceDragOut(d) {
if (d !== d3_layout_forceDragNode) d.fixed &= 1;
function d3_layout_forceDragend(d) {
d.fixed &= 1; // unset bits 2 and 3
}
function d3_layout_forceDragEnd() {
d3_layout_forceDragNode.fixed &= 1;
d3_layout_forceDragForce = d3_layout_forceDragNode = null;
function d3_layout_forceMouseover(d) {
d.fixed |= 4; // set bit 3
}
function d3_layout_forceDrag() {
d3_layout_forceDragNode.px = d3.event.x;
d3_layout_forceDragNode.py = d3.event.y;
d3_layout_forceDragForce.resume(); // restart annealing
function d3_layout_forceMouseout(d) {
d.fixed &= 3; // unset bit 3
}
function d3_layout_forceAccumulate(quad, alpha, charges) {

Просмотреть файл

@ -27,7 +27,7 @@ d3.layout.histogram = function() {
if (m > 0) {
i = -1; while(++i < n) {
x = values[i];
if ((x >= range[0]) && (x <= range[1])) {
if (x >= range[0] && x <= range[1]) {
bin = bins[d3.bisect(thresholds, x, 1, m) - 1];
bin.y += k;
bin.push(data[i]);

Просмотреть файл

@ -15,9 +15,9 @@ require("util").puts(JSON.stringify({
"sizzle": "1.1.x"
},
"devDependencies": {
"uglify-js": "1.2.3",
"uglify-js": "1.3.3",
"vows": "0.6.x",
"canvas": "0.12.1" // for node-canvas example
"canvas": "0.13.0" // for node-canvas example
},
"scripts": {"test": "./node_modules/vows/bin/vows"}
}, null, 2));

Просмотреть файл

@ -36,7 +36,7 @@ function d3_scale_ordinal(domain, ranger) {
if (arguments.length < 2) padding = 0;
var start = x[0],
stop = x[1],
step = (stop - start) / (domain.length - 1 + padding);
step = (stop - start) / (Math.max(1, domain.length - 1) + padding);
range = steps(domain.length < 2 ? (start + stop) / 2 : start + step * padding / 2, step);
rangeBand = 0;
ranger = {t: "rangePoints", a: arguments};

Просмотреть файл

@ -1,6 +1,6 @@
d3.time.day = d3_time_interval(function(date) {
var day = new d3_time(0, date.getMonth(), date.getDate());
day.setFullYear(date.getFullYear());
var day = new d3_time(1970, 0);
day.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());
return day;
}, function(date, offset) {
date.setDate(date.getDate() + offset);

Просмотреть файл

@ -120,6 +120,11 @@ suite.addBatch({
assert.deepEqual(x.range(), [30, 60, 90]);
assert.equal(x.rangeBand(), 0);
},
"correctly handles singleton domains": function(ordinal) {
var x = ordinal().domain(["a"]).rangePoints([0, 120]);
assert.deepEqual(x.range(), [60]);
assert.equal(x.rangeBand(), 0);
},
"can be set to a descending range": function(ordinal) {
var x = ordinal().domain(["a", "b", "c"]).rangePoints([120, 0]);
assert.deepEqual(x.range(), [120, 60,0]);

Просмотреть файл

@ -61,6 +61,10 @@ suite.addBatch({
assert.deepEqual(ceil(utc(2011, 10, 06, 08)), local(2011, 10, 07));
assert.deepEqual(ceil(utc(2011, 10, 06, 09)), local(2011, 10, 07));
assert.deepEqual(ceil(utc(2011, 10, 06, 10)), local(2011, 10, 07));
},
"handles midnight for leap years": function(ceil) {
assert.deepEqual(ceil(utc(2012, 02, 01, 00)), local(2012, 02, 01));
assert.deepEqual(ceil(utc(2012, 02, 01, 00)), local(2012, 02, 01));
}
},
"offset": {