Skip to content

Commit 84f4a62

Browse files
committed
Merge branch '3.2'
2 parents e15ac86 + f6108db commit 84f4a62

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

75 files changed

+2850
-1380
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ d3.min.js: d3.js
3333
@rm -f $@
3434
bin/uglify $< > $@
3535

36-
component.json: bin/component d3.js package.json
36+
component.json: bin/component package.json
3737
@rm -f $@
3838
bin/component > $@
3939
@chmod a-w $@

component.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "d3",
3-
"version": "3.1.10",
3+
"version": "3.2.0",
44
"main": "index-browserify.js",
55
"scripts": [
66
"index-browserify.js",

d3.js

Lines changed: 1119 additions & 928 deletions
Large diffs are not rendered by default.

d3.min.js

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

lib/geographiclib/LICENSE

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
This license applies to GeographicLib, versions 1.12 and later.
2+
3+
Copyright (c) 2008-2012, Charles Karney
4+
5+
Permission is hereby granted, free of charge, to any person
6+
obtaining a copy of this software and associated documentation
7+
files (the "Software"), to deal in the Software without
8+
restriction, including without limitation the rights to use, copy,
9+
modify, merge, publish, distribute, sublicense, and/or sell copies
10+
of the Software, and to permit persons to whom the Software is
11+
furnished to do so, subject to the following conditions:
12+
13+
The above copyright notice and this permission notice shall be
14+
included in all copies or substantial portions of the Software.
15+
16+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
21+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23+
DEALINGS IN THE SOFTWARE.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "d3",
3-
"version": "3.1.10",
3+
"version": "3.2.0",
44
"description": "A small, free JavaScript library for manipulating documents based on data.",
55
"keywords": [
66
"dom",
@@ -38,7 +38,7 @@
3838
},
3939
"devDependencies": {
4040
"smash": "~0.0.8",
41-
"uglify-js": "git://github.com/mishoo/UglifyJS2.git#3bd7ca9961125b39dcd54d2182cb72bd1ca6006e",
41+
"uglify-js": "2.3.6",
4242
"vows": "0.7.x"
4343
},
4444
"scripts": {

src/behavior/drag.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import "../core/rebind";
33
import "../event/event";
44
import "../event/mouse";
55
import "../event/touches";
6+
import "../event/user-select";
67
import "behavior";
78

89
d3.behavior.drag = function() {
@@ -21,7 +22,8 @@ d3.behavior.drag = function() {
2122
touchId = d3.event.touches ? d3.event.changedTouches[0].identifier : null,
2223
offset,
2324
origin_ = point(),
24-
moved = 0;
25+
moved = 0,
26+
selectEnable = d3_event_userSelectSuppress(touchId != null ? "drag-" + touchId : "drag");
2527

2628
var w = d3.select(d3_window)
2729
.on(touchId != null ? "touchmove.drag-" + touchId : "mousemove.drag", dragmove)
@@ -34,8 +36,6 @@ d3.behavior.drag = function() {
3436
offset = [0, 0];
3537
}
3638

37-
// Only cancel mousedown; touchstart is needed for draggable links.
38-
if (touchId == null) d3_eventCancel();
3939
event_({type: "dragstart"});
4040

4141
function point() {
@@ -70,6 +70,7 @@ d3.behavior.drag = function() {
7070

7171
w .on(touchId != null ? "touchmove.drag-" + touchId : "mousemove.drag", null)
7272
.on(touchId != null ? "touchend.drag-" + touchId : "mouseup.drag", null);
73+
selectEnable();
7374
}
7475
}
7576

src/behavior/zoom.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import "../core/rebind";
33
import "../event/event";
44
import "../event/mouse";
55
import "../event/touches";
6+
import "../event/user-select";
67
import "../selection/selection";
78
import "behavior";
89

@@ -102,10 +103,8 @@ d3.behavior.zoom = function() {
102103
eventTarget = d3.event.target,
103104
moved = 0,
104105
w = d3.select(d3_window).on("mousemove.zoom", mousemove).on("mouseup.zoom", mouseup),
105-
l = location(d3.mouse(target));
106-
107-
d3_window.focus();
108-
d3_eventCancel();
106+
l = location(d3.mouse(target)),
107+
selectEnable = d3_event_userSelectSuppress("zoom");
109108

110109
function mousemove() {
111110
moved = 1;
@@ -116,6 +115,7 @@ d3.behavior.zoom = function() {
116115
function mouseup() {
117116
if (moved) d3_eventCancel();
118117
w.on("mousemove.zoom", null).on("mouseup.zoom", null);
118+
selectEnable();
119119
if (moved && d3.event.target === eventTarget) d3_eventSuppress(w, "click.zoom");
120120
}
121121
}
@@ -145,7 +145,6 @@ d3.behavior.zoom = function() {
145145
scale0 = scale;
146146
translate0 = {};
147147
touches.forEach(function(t) { translate0[t.identifier] = location(t); });
148-
d3_eventCancel();
149148

150149
if (touches.length === 1) {
151150
if (now - touchtime < 500) { // dbltap

src/core/array.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ function d3_arraySlice(pseudoarray) {
1313
}
1414

1515
try {
16-
d3_array(d3_document.documentElement.childNodes)[0].nodeType;
16+
d3_array(d3_documentElement.childNodes)[0].nodeType;
1717
} catch(e) {
1818
d3_array = d3_arrayCopy;
1919
}

src/core/document.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
var d3_document = document,
2+
d3_documentElement = d3_document.documentElement,
23
d3_window = window;

src/core/vendor.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import "document";
2+
3+
function d3_vendorSymbol(object, name) {
4+
if (name in object) return name;
5+
name = name.charAt(0).toUpperCase() + name.substring(1);
6+
for (var i = 0, n = d3_vendorPrefixes.length; i < n; ++i) {
7+
var prefixName = d3_vendorPrefixes[i] + name;
8+
if (prefixName in object) return prefixName;
9+
}
10+
}
11+
12+
var d3_vendorPrefixes = ["webkit", "ms", "moz", "Moz", "o", "O"];

src/dsv/csv.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
import "dsv";
22

3-
d3.csv = d3_dsv(",", "text/csv");
3+
d3.csv = d3.dsv(",", "text/csv");

src/dsv/dsv.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import "../arrays/set";
22
import "../xhr/xhr";
33

4-
function d3_dsv(delimiter, mimeType) {
4+
d3.dsv = function(delimiter, mimeType) {
55
var reFormat = new RegExp("[\"" + delimiter + "\n]"),
66
delimiterCode = delimiter.charCodeAt(0);
77

@@ -133,4 +133,4 @@ function d3_dsv(delimiter, mimeType) {
133133
}
134134

135135
return dsv;
136-
}
136+
};

src/dsv/tsv.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
import "dsv";
22

3-
d3.tsv = d3_dsv("\t", "text/tab-separated-values");
3+
d3.tsv = d3.dsv("\t", "text/tab-separated-values");

src/event/mouse.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,14 @@ function d3_mousePoint(container, e) {
1212
if (svg.createSVGPoint) {
1313
var point = svg.createSVGPoint();
1414
if (d3_mouse_bug44083 < 0 && (d3_window.scrollX || d3_window.scrollY)) {
15-
svg = d3.select(d3_document.body).append("svg")
16-
.style("position", "absolute")
17-
.style("top", 0)
18-
.style("left", 0);
15+
svg = d3.select("body").append("svg").style({
16+
position: "absolute",
17+
top: 0,
18+
left: 0,
19+
margin: 0,
20+
padding: 0,
21+
border: "none"
22+
}, "important");
1923
var ctm = svg[0][0].getScreenCTM();
2024
d3_mouse_bug44083 = !(ctm.f || ctm.e);
2125
svg.remove();

src/event/timer.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import "../core/document";
2+
import "../core/vendor";
23

34
var d3_timer_queueHead,
45
d3_timer_queueTail,
@@ -77,9 +78,5 @@ function d3_timer_sweep() {
7778
return time;
7879
}
7980

80-
var d3_timer_frame = d3_window.requestAnimationFrame
81-
|| d3_window.webkitRequestAnimationFrame
82-
|| d3_window.mozRequestAnimationFrame
83-
|| d3_window.oRequestAnimationFrame
84-
|| d3_window.msRequestAnimationFrame
81+
var d3_timer_frame = d3_window[d3_vendorSymbol(d3_window, "requestAnimationFrame")]
8582
|| function(callback) { setTimeout(callback, 17); };

src/event/user-select.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import "../core/document";
2+
import "../core/vendor";
3+
import "event";
4+
5+
var d3_event_userSelectProperty = d3_vendorSymbol(d3_documentElement.style, "userSelect"),
6+
d3_event_userSelectSuppress = d3_event_userSelectProperty
7+
? function() {
8+
var style = d3_documentElement.style,
9+
select = style[d3_event_userSelectProperty];
10+
style[d3_event_userSelectProperty] = "none";
11+
return function() { style[d3_event_userSelectProperty] = select; };
12+
}
13+
: function(type) {
14+
var w = d3.select(d3_window).on("selectstart." + type, d3_eventCancel);
15+
return function() { w.on("selectstart." + type, null); };
16+
};

src/geo/area.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import "../core/noop";
2+
import "../math/adder";
23
import "../math/trigonometry";
34
import "geo";
45
import "stream";
@@ -10,7 +11,7 @@ d3.geo.area = function(object) {
1011
};
1112

1213
var d3_geo_areaSum,
13-
d3_geo_areaRingSum;
14+
d3_geo_areaRingSum = new d3_adder;
1415

1516
var d3_geo_area = {
1617
sphere: function() { d3_geo_areaSum += 4 * π; },
@@ -20,7 +21,7 @@ var d3_geo_area = {
2021

2122
// Only count area for polygon rings.
2223
polygonStart: function() {
23-
d3_geo_areaRingSum = 0;
24+
d3_geo_areaRingSum.reset();
2425
d3_geo_area.lineStart = d3_geo_areaRingStart;
2526
},
2627
polygonEnd: function() {
@@ -31,7 +32,7 @@ var d3_geo_area = {
3132
};
3233

3334
function d3_geo_areaRingStart() {
34-
var λ00, φ00, λ0, cosφ0, sinφ0; // start point and two previous points
35+
var λ00, φ00, λ0, cosφ0, sinφ0; // start point and previous point
3536

3637
// For the first point, …
3738
d3_geo_area.point = function(λ, φ) {
@@ -53,7 +54,7 @@ function d3_geo_areaRingStart() {
5354
k = sinφ0 * sinφ,
5455
u = cosφ0 * cosφ + k * Math.cos(),
5556
v = k * Math.sin();
56-
d3_geo_areaRingSum += Math.atan2(v, u);
57+
d3_geo_areaRingSum.add(Math.atan2(v, u));
5758

5859
// Advance the previous points.
5960
λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ;

src/geo/bounds.js

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -136,29 +136,34 @@ d3.geo.bounds = (function() {
136136

137137
d3.geo.stream(feature, bound);
138138

139-
// First, sort ranges by their minimum longitudes.
140-
ranges.sort(compareRanges);
141-
142-
// Then, merge any ranges that overlap.
143-
for (var i = 1, n = ranges.length, a = ranges[0], b, merged = [a]; i < n; ++i) {
144-
b = ranges[i];
145-
if (withinRange(b[0], a) || withinRange(b[1], a)) {
146-
if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];
147-
if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];
148-
} else {
149-
merged.push(a = b);
139+
var n = ranges.length;
140+
if (n) {
141+
// First, sort ranges by their minimum longitudes.
142+
ranges.sort(compareRanges);
143+
144+
// Then, merge any ranges that overlap.
145+
for (var i = 1, a = ranges[0], b, merged = [a]; i < n; ++i) {
146+
b = ranges[i];
147+
if (withinRange(b[0], a) || withinRange(b[1], a)) {
148+
if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];
149+
if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];
150+
} else {
151+
merged.push(a = b);
152+
}
150153
}
151-
}
152154

153-
// Finally, find the largest gap between the merged ranges.
154-
// The final bounding box will be the inverse of this gap.
155-
var best = -Infinity, ;
156-
for (var n = merged.length - 1, i = 0, a = merged[n], b; i <= n; a = b, ++i) {
157-
b = merged[i];
158-
if (( = angle(a[1], b[0])) > best) best = , λ0 = b[0], λ1 = a[1];
155+
// Finally, find the largest gap between the merged ranges.
156+
// The final bounding box will be the inverse of this gap.
157+
var best = -Infinity, ;
158+
for (var n = merged.length - 1, i = 0, a = merged[n], b; i <= n; a = b, ++i) {
159+
b = merged[i];
160+
if (( = angle(a[1], b[0])) > best) best = , λ0 = b[0], λ1 = a[1];
161+
}
159162
}
160163
ranges = range = null;
161164

162-
return [[λ0, φ0], [λ1, φ1]];
165+
return λ0 === Infinity || φ0 === Infinity
166+
? [[NaN, NaN], [NaN, NaN]]
167+
: [[λ0, φ0], [λ1, φ1]];
163168
};
164169
})();

0 commit comments

Comments
 (0)