d3-rails 3.4.11 → 3.4.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: da6ac0888f02c6736f79a6d444d3155ada9b5380
4
- data.tar.gz: 0b2943921830c14b72a1c39f9805115313cd0d6b
3
+ metadata.gz: 448b4456604b6b4ec016e2df9cd2f9071dc5dee7
4
+ data.tar.gz: b74cf5c2c333af859432610867924a42fbfd1391
5
5
  SHA512:
6
- metadata.gz: 2adca8ab210f31901da1a8abab150baf10a40c7450d7bdf486f5bd18cc6ad1209e6a65867e22c848c1407d1a84628f2127a4b043cb7be7f166715944fe5ea41b
7
- data.tar.gz: da1baf3fe57ebbc604b016425623a8db72053d6ea5997d533c2fd6e03f5bc4065402485fdd14441e48961ef9858ad5e5311c84b7905de5f0d776f65c59034323
6
+ metadata.gz: 5e0e3ac25b4e49bc1079bfc68a418cc716c69575e4d66e181222805dedaba0458613f6e5e416226f722550e93dd6fd6f18e849379de9e95b49b265d357eced36
7
+ data.tar.gz: 28d4e1376ae65ff571fe49178307ab8ac9ae940b1d41ce04f2d9a212bccd126165151db0aab7308e64cebe15c713e0717704b991ec74b8c32dfd95c9c38056ea
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 3.4.13 (3 November 2014)
2
+
3
+ * Upgrade D3 to 3.4.13
4
+
1
5
  ## 3.4.11 (12 September 2014)
2
6
 
3
7
  * Upgrade D3 to 3.4.11
data/README.md CHANGED
@@ -6,7 +6,7 @@ d3-rails provides D3 for Rails 3.1 and higher.
6
6
 
7
7
  ## Version
8
8
 
9
- d3-rails comes with version 3.4.11 of D3.js. and will track the always
9
+ d3-rails comes with version 3.4.13 of D3.js. and will track the always
10
10
  mirror the version of D3 it comes with.
11
11
 
12
12
 
@@ -1,6 +1,6 @@
1
1
  !function() {
2
2
  var d3 = {
3
- version: "3.4.11"
3
+ version: "3.4.13"
4
4
  };
5
5
  if (!Date.now) Date.now = function() {
6
6
  return +new Date();
@@ -78,24 +78,27 @@
78
78
  }
79
79
  return [ a, c ];
80
80
  };
81
+ function d3_number(x) {
82
+ return x === null ? NaN : +x;
83
+ }
84
+ function d3_numeric(x) {
85
+ return !isNaN(x);
86
+ }
81
87
  d3.sum = function(array, f) {
82
88
  var s = 0, n = array.length, a, i = -1;
83
89
  if (arguments.length === 1) {
84
- while (++i < n) if (!isNaN(a = +array[i])) s += a;
90
+ while (++i < n) if (d3_numeric(a = +array[i])) s += a;
85
91
  } else {
86
- while (++i < n) if (!isNaN(a = +f.call(array, array[i], i))) s += a;
92
+ while (++i < n) if (d3_numeric(a = +f.call(array, array[i], i))) s += a;
87
93
  }
88
94
  return s;
89
95
  };
90
- function d3_number(x) {
91
- return x != null && !isNaN(x);
92
- }
93
96
  d3.mean = function(array, f) {
94
97
  var s = 0, n = array.length, a, i = -1, j = n;
95
98
  if (arguments.length === 1) {
96
- while (++i < n) if (d3_number(a = array[i])) s += a; else --j;
99
+ while (++i < n) if (d3_numeric(a = d3_number(array[i]))) s += a; else --j;
97
100
  } else {
98
- while (++i < n) if (d3_number(a = f.call(array, array[i], i))) s += a; else --j;
101
+ while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) s += a; else --j;
99
102
  }
100
103
  return j ? s / j : undefined;
101
104
  };
@@ -104,9 +107,13 @@
104
107
  return e ? v + e * (values[h] - v) : v;
105
108
  };
106
109
  d3.median = function(array, f) {
107
- if (arguments.length > 1) array = array.map(f);
108
- array = array.filter(d3_number);
109
- return array.length ? d3.quantile(array.sort(d3_ascending), .5) : undefined;
110
+ var numbers = [], n = array.length, a, i = -1;
111
+ if (arguments.length === 1) {
112
+ while (++i < n) if (d3_numeric(a = d3_number(array[i]))) numbers.push(a);
113
+ } else {
114
+ while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) numbers.push(a);
115
+ }
116
+ return numbers.length ? d3.quantile(numbers.sort(d3_ascending), .5) : undefined;
110
117
  };
111
118
  function d3_bisector(compare) {
112
119
  return {
@@ -223,15 +230,11 @@
223
230
  return k;
224
231
  }
225
232
  function d3_class(ctor, properties) {
226
- try {
227
- for (var key in properties) {
228
- Object.defineProperty(ctor.prototype, key, {
229
- value: properties[key],
230
- enumerable: false
231
- });
232
- }
233
- } catch (e) {
234
- ctor.prototype = properties;
233
+ for (var key in properties) {
234
+ Object.defineProperty(ctor.prototype, key, {
235
+ value: properties[key],
236
+ enumerable: false
237
+ });
235
238
  }
236
239
  }
237
240
  d3.map = function(object) {
@@ -241,62 +244,63 @@
241
244
  }); else for (var key in object) map.set(key, object[key]);
242
245
  return map;
243
246
  };
244
- function d3_Map() {}
247
+ function d3_Map() {
248
+ this._ = Object.create(null);
249
+ }
250
+ var d3_map_proto = "__proto__", d3_map_zero = "\x00";
245
251
  d3_class(d3_Map, {
246
252
  has: d3_map_has,
247
253
  get: function(key) {
248
- return this[d3_map_prefix + key];
254
+ return this._[d3_map_escape(key)];
249
255
  },
250
256
  set: function(key, value) {
251
- return this[d3_map_prefix + key] = value;
257
+ return this._[d3_map_escape(key)] = value;
252
258
  },
253
259
  remove: d3_map_remove,
254
260
  keys: d3_map_keys,
255
261
  values: function() {
256
262
  var values = [];
257
- this.forEach(function(key, value) {
258
- values.push(value);
259
- });
263
+ for (var key in this._) values.push(this._[key]);
260
264
  return values;
261
265
  },
262
266
  entries: function() {
263
267
  var entries = [];
264
- this.forEach(function(key, value) {
265
- entries.push({
266
- key: key,
267
- value: value
268
- });
268
+ for (var key in this._) entries.push({
269
+ key: d3_map_unescape(key),
270
+ value: this._[key]
269
271
  });
270
272
  return entries;
271
273
  },
272
274
  size: d3_map_size,
273
275
  empty: d3_map_empty,
274
276
  forEach: function(f) {
275
- for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) f.call(this, key.substring(1), this[key]);
277
+ for (var key in this._) f.call(this, d3_map_unescape(key), this._[key]);
276
278
  }
277
279
  });
278
- var d3_map_prefix = "\x00", d3_map_prefixCode = d3_map_prefix.charCodeAt(0);
280
+ function d3_map_escape(key) {
281
+ return (key += "") === d3_map_proto || key[0] === d3_map_zero ? d3_map_zero + key : key;
282
+ }
283
+ function d3_map_unescape(key) {
284
+ return (key += "")[0] === d3_map_zero ? key.slice(1) : key;
285
+ }
279
286
  function d3_map_has(key) {
280
- return d3_map_prefix + key in this;
287
+ return d3_map_escape(key) in this._;
281
288
  }
282
289
  function d3_map_remove(key) {
283
- key = d3_map_prefix + key;
284
- return key in this && delete this[key];
290
+ return (key = d3_map_escape(key)) in this._ && delete this._[key];
285
291
  }
286
292
  function d3_map_keys() {
287
293
  var keys = [];
288
- this.forEach(function(key) {
289
- keys.push(key);
290
- });
294
+ for (var key in this._) keys.push(d3_map_unescape(key));
291
295
  return keys;
292
296
  }
293
297
  function d3_map_size() {
294
298
  var size = 0;
295
- for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) ++size;
299
+ for (var key in this._) ++size;
296
300
  return size;
297
301
  }
298
302
  function d3_map_empty() {
299
- for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) return false;
303
+ for (var key in this._) return false;
300
304
  return true;
301
305
  }
302
306
  d3.nest = function() {
@@ -367,22 +371,21 @@
367
371
  if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]);
368
372
  return set;
369
373
  };
370
- function d3_Set() {}
374
+ function d3_Set() {
375
+ this._ = Object.create(null);
376
+ }
371
377
  d3_class(d3_Set, {
372
378
  has: d3_map_has,
373
- add: function(value) {
374
- this[d3_map_prefix + value] = true;
375
- return value;
376
- },
377
- remove: function(value) {
378
- value = d3_map_prefix + value;
379
- return value in this && delete this[value];
379
+ add: function(key) {
380
+ this._[d3_map_escape(key += "")] = true;
381
+ return key;
380
382
  },
383
+ remove: d3_map_remove,
381
384
  values: d3_map_keys,
382
385
  size: d3_map_size,
383
386
  empty: d3_map_empty,
384
387
  forEach: function(f) {
385
- for (var value in this) if (value.charCodeAt(0) === d3_map_prefixCode) f.call(this, value.substring(1));
388
+ for (var key in this._) f.call(this, d3_map_unescape(key));
386
389
  }
387
390
  });
388
391
  d3.behavior = {};
@@ -399,7 +402,7 @@
399
402
  }
400
403
  function d3_vendorSymbol(object, name) {
401
404
  if (name in object) return name;
402
- name = name.charAt(0).toUpperCase() + name.substring(1);
405
+ name = name.charAt(0).toUpperCase() + name.slice(1);
403
406
  for (var i = 0, n = d3_vendorPrefixes.length; i < n; ++i) {
404
407
  var prefixName = d3_vendorPrefixes[i] + name;
405
408
  if (prefixName in object) return prefixName;
@@ -416,8 +419,8 @@
416
419
  d3_dispatch.prototype.on = function(type, listener) {
417
420
  var i = type.indexOf("."), name = "";
418
421
  if (i >= 0) {
419
- name = type.substring(i + 1);
420
- type = type.substring(0, i);
422
+ name = type.slice(i + 1);
423
+ type = type.slice(0, i);
421
424
  }
422
425
  if (type) return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener);
423
426
  if (arguments.length === 2) {
@@ -558,8 +561,8 @@
558
561
  qualify: function(name) {
559
562
  var i = name.indexOf(":"), prefix = name;
560
563
  if (i >= 0) {
561
- prefix = name.substring(0, i);
562
- name = name.substring(i + 1);
564
+ prefix = name.slice(0, i);
565
+ name = name.slice(i + 1);
563
566
  }
564
567
  return d3_nsPrefix.hasOwnProperty(prefix) ? {
565
568
  space: d3_nsPrefix[prefix],
@@ -762,29 +765,26 @@
762
765
  function bind(group, groupData) {
763
766
  var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData;
764
767
  if (key) {
765
- var nodeByKeyValue = new d3_Map(), dataByKeyValue = new d3_Map(), keyValues = [], keyValue;
768
+ var nodeByKeyValue = new d3_Map(), keyValues = new Array(n), keyValue;
766
769
  for (i = -1; ++i < n; ) {
767
- keyValue = key.call(node = group[i], node.__data__, i);
768
- if (nodeByKeyValue.has(keyValue)) {
770
+ if (nodeByKeyValue.has(keyValue = key.call(node = group[i], node.__data__, i))) {
769
771
  exitNodes[i] = node;
770
772
  } else {
771
773
  nodeByKeyValue.set(keyValue, node);
772
774
  }
773
- keyValues.push(keyValue);
775
+ keyValues[i] = keyValue;
774
776
  }
775
777
  for (i = -1; ++i < m; ) {
776
- keyValue = key.call(groupData, nodeData = groupData[i], i);
777
- if (node = nodeByKeyValue.get(keyValue)) {
778
+ if (!(node = nodeByKeyValue.get(keyValue = key.call(groupData, nodeData = groupData[i], i)))) {
779
+ enterNodes[i] = d3_selection_dataNode(nodeData);
780
+ } else if (node !== true) {
778
781
  updateNodes[i] = node;
779
782
  node.__data__ = nodeData;
780
- } else if (!dataByKeyValue.has(keyValue)) {
781
- enterNodes[i] = d3_selection_dataNode(nodeData);
782
783
  }
783
- dataByKeyValue.set(keyValue, nodeData);
784
- nodeByKeyValue.remove(keyValue);
784
+ nodeByKeyValue.set(keyValue, true);
785
785
  }
786
786
  for (i = -1; ++i < n; ) {
787
- if (nodeByKeyValue.has(keyValues[i])) {
787
+ if (nodeByKeyValue.get(keyValues[i]) !== true) {
788
788
  exitNodes[i] = group[i];
789
789
  }
790
790
  }
@@ -911,7 +911,7 @@
911
911
  };
912
912
  d3_selectionPrototype.size = function() {
913
913
  var n = 0;
914
- this.each(function() {
914
+ d3_selection_each(this, function() {
915
915
  ++n;
916
916
  });
917
917
  return n;
@@ -1008,7 +1008,7 @@
1008
1008
  };
1009
1009
  function d3_selection_on(type, listener, capture) {
1010
1010
  var name = "__on" + type, i = type.indexOf("."), wrap = d3_selection_onListener;
1011
- if (i > 0) type = type.substring(0, i);
1011
+ if (i > 0) type = type.slice(0, i);
1012
1012
  var filter = d3_selection_onFilters.get(type);
1013
1013
  if (filter) type = filter, wrap = d3_selection_onFilter;
1014
1014
  function onRemove() {
@@ -1116,13 +1116,13 @@
1116
1116
  var rect = container.getBoundingClientRect();
1117
1117
  return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ];
1118
1118
  }
1119
- d3.touches = function(container, touches) {
1120
- if (arguments.length < 2) touches = d3_eventSource().touches;
1121
- return touches ? d3_array(touches).map(function(touch) {
1122
- var point = d3_mousePoint(container, touch);
1123
- point.identifier = touch.identifier;
1124
- return point;
1125
- }) : [];
1119
+ d3.touch = function(container, touches, identifier) {
1120
+ if (arguments.length < 3) identifier = touches, touches = d3_eventSource().changedTouches;
1121
+ if (touches) for (var i = 0, n = touches.length, touch; i < n; ++i) {
1122
+ if ((touch = touches[i]).identifier === identifier) {
1123
+ return d3_mousePoint(container, touch);
1124
+ }
1125
+ }
1126
1126
  };
1127
1127
  d3.behavior.drag = function() {
1128
1128
  var event = d3_eventDispatch(drag, "drag", "dragstart", "dragend"), origin = null, mousedown = dragstart(d3_noop, d3.mouse, d3_behavior_dragMouseSubject, "mousemove", "mouseup"), touchstart = dragstart(d3_behavior_dragTouchId, d3.touch, d3_behavior_dragTouchSubject, "touchmove", "touchend");
@@ -1182,6 +1182,14 @@
1182
1182
  function d3_behavior_dragMouseSubject() {
1183
1183
  return d3_window;
1184
1184
  }
1185
+ d3.touches = function(container, touches) {
1186
+ if (arguments.length < 2) touches = d3_eventSource().touches;
1187
+ return touches ? d3_array(touches).map(function(touch) {
1188
+ var point = d3_mousePoint(container, touch);
1189
+ point.identifier = touch.identifier;
1190
+ return point;
1191
+ }) : [];
1192
+ };
1185
1193
  var π = Math.PI, τ = 2 * π, halfπ = π / 2, ε = 1e-6, ε2 = ε * ε, d3_radians = π / 180, d3_degrees = 180 / π;
1186
1194
  function d3_sgn(x) {
1187
1195
  return x > 0 ? 1 : x < 0 ? -1 : 0;
@@ -1377,10 +1385,11 @@
1377
1385
  }
1378
1386
  }
1379
1387
  function touchstarted() {
1380
- var that = this, dispatch = event.of(that, arguments), locations0 = {}, distance0 = 0, scale0, zoomName = ".zoom-" + d3.event.changedTouches[0].identifier, touchmove = "touchmove" + zoomName, touchend = "touchend" + zoomName, targets = [], subject = d3.select(that).on(mousedown, null).on(touchstart, started), dragRestore = d3_event_dragSuppress();
1388
+ var that = this, dispatch = event.of(that, arguments), locations0 = {}, distance0 = 0, scale0, zoomName = ".zoom-" + d3.event.changedTouches[0].identifier, touchmove = "touchmove" + zoomName, touchend = "touchend" + zoomName, targets = [], subject = d3.select(that), dragRestore = d3_event_dragSuppress();
1381
1389
  d3_selection_interrupt.call(that);
1382
1390
  started();
1383
1391
  zoomstarted(dispatch);
1392
+ subject.on(mousedown, null).on(touchstart, started);
1384
1393
  function relocate() {
1385
1394
  var touches = d3.touches(that);
1386
1395
  scale0 = view.k;
@@ -1539,7 +1548,7 @@
1539
1548
  }
1540
1549
  d3.lab = d3_lab;
1541
1550
  function d3_lab(l, a, b) {
1542
- return this instanceof d3_lab ? void (this.l = +l, this.a = +a, this.b = +b) : arguments.length < 2 ? l instanceof d3_lab ? new d3_lab(l.l, l.a, l.b) : l instanceof d3_hcl ? d3_hcl_lab(l.l, l.c, l.h) : d3_rgb_lab((l = d3_rgb(l)).r, l.g, l.b) : new d3_lab(l, a, b);
1551
+ return this instanceof d3_lab ? void (this.l = +l, this.a = +a, this.b = +b) : arguments.length < 2 ? l instanceof d3_lab ? new d3_lab(l.l, l.a, l.b) : l instanceof d3_hcl ? d3_hcl_lab(l.h, l.c, l.l) : d3_rgb_lab((l = d3_rgb(l)).r, l.g, l.b) : new d3_lab(l, a, b);
1543
1552
  }
1544
1553
  var d3_lab_K = 18;
1545
1554
  var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883;
@@ -1623,7 +1632,7 @@
1623
1632
  }
1624
1633
  }
1625
1634
  if (color = d3_rgb_names.get(format)) return rgb(color.r, color.g, color.b);
1626
- if (format != null && format.charAt(0) === "#" && !isNaN(color = parseInt(format.substring(1), 16))) {
1635
+ if (format != null && format.charAt(0) === "#" && !isNaN(color = parseInt(format.slice(1), 16))) {
1627
1636
  if (format.length === 4) {
1628
1637
  r = (color & 3840) >> 4;
1629
1638
  r = r >> 4 | r;
@@ -1842,7 +1851,7 @@
1842
1851
  };
1843
1852
  function respond() {
1844
1853
  var status = request.status, result;
1845
- if (!status && request.responseText || status >= 200 && status < 300 || status === 304) {
1854
+ if (!status && d3_xhrHasResponse(request) || status >= 200 && status < 300 || status === 304) {
1846
1855
  try {
1847
1856
  result = response.call(xhr, request);
1848
1857
  } catch (e) {
@@ -1914,6 +1923,10 @@
1914
1923
  callback(error == null ? request : null);
1915
1924
  } : callback;
1916
1925
  }
1926
+ function d3_xhrHasResponse(request) {
1927
+ var type = request.responseType;
1928
+ return type && type !== "text" ? request.response : request.responseText;
1929
+ }
1917
1930
  d3.dsv = function(delimiter, mimeType) {
1918
1931
  var reFormat = new RegExp('["' + delimiter + "\n]"), delimiterCode = delimiter.charCodeAt(0);
1919
1932
  function dsv(url, row, callback) {
@@ -1966,7 +1979,7 @@
1966
1979
  } else if (c === 10) {
1967
1980
  eol = true;
1968
1981
  }
1969
- return text.substring(j + 1, i).replace(/""/g, '"');
1982
+ return text.slice(j + 1, i).replace(/""/g, '"');
1970
1983
  }
1971
1984
  while (I < N) {
1972
1985
  var c = text.charCodeAt(I++), k = 1;
@@ -1974,9 +1987,9 @@
1974
1987
  eol = true;
1975
1988
  if (text.charCodeAt(I) === 10) ++I, ++k;
1976
1989
  } else if (c !== delimiterCode) continue;
1977
- return text.substring(j, I - k);
1990
+ return text.slice(j, I - k);
1978
1991
  }
1979
- return text.substring(j);
1992
+ return text.slice(j);
1980
1993
  }
1981
1994
  while ((t = token()) !== EOF) {
1982
1995
  var a = [];
@@ -1984,7 +1997,7 @@
1984
1997
  a.push(t);
1985
1998
  t = token();
1986
1999
  }
1987
- if (f && !(a = f(a, n++))) continue;
2000
+ if (f && (a = f(a, n++)) == null) continue;
1988
2001
  rows.push(a);
1989
2002
  }
1990
2003
  return rows;
@@ -2018,14 +2031,6 @@
2018
2031
  };
2019
2032
  d3.csv = d3.dsv(",", "text/csv");
2020
2033
  d3.tsv = d3.dsv(" ", "text/tab-separated-values");
2021
- d3.touch = function(container, touches, identifier) {
2022
- if (arguments.length < 3) identifier = touches, touches = d3_eventSource().changedTouches;
2023
- if (touches) for (var i = 0, n = touches.length, touch; i < n; ++i) {
2024
- if ((touch = touches[i]).identifier === identifier) {
2025
- return d3_mousePoint(container, touch);
2026
- }
2027
- }
2028
- };
2029
2034
  var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, d3_timer_timeout, d3_timer_active, d3_timer_frame = d3_window[d3_vendorSymbol(d3_window, "requestAnimationFrame")] || function(callback) {
2030
2035
  setTimeout(callback, 17);
2031
2036
  };
@@ -2115,21 +2120,22 @@
2115
2120
  };
2116
2121
  }
2117
2122
  function d3_locale_numberFormat(locale) {
2118
- var locale_decimal = locale.decimal, locale_thousands = locale.thousands, locale_grouping = locale.grouping, locale_currency = locale.currency, formatGroup = locale_grouping ? function(value) {
2119
- var i = value.length, t = [], j = 0, g = locale_grouping[0];
2123
+ var locale_decimal = locale.decimal, locale_thousands = locale.thousands, locale_grouping = locale.grouping, locale_currency = locale.currency, formatGroup = locale_grouping && locale_thousands ? function(value, width) {
2124
+ var i = value.length, t = [], j = 0, g = locale_grouping[0], length = 0;
2120
2125
  while (i > 0 && g > 0) {
2126
+ if (length + g + 1 > width) g = Math.max(1, width - length);
2121
2127
  t.push(value.substring(i -= g, i + g));
2128
+ if ((length += g + 1) > width) break;
2122
2129
  g = locale_grouping[j = (j + 1) % locale_grouping.length];
2123
2130
  }
2124
2131
  return t.reverse().join(locale_thousands);
2125
2132
  } : d3_identity;
2126
2133
  return function(specifier) {
2127
- var match = d3_format_re.exec(specifier), fill = match[1] || " ", align = match[2] || ">", sign = match[3] || "", symbol = match[4] || "", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, prefix = "", suffix = "", integer = false;
2134
+ var match = d3_format_re.exec(specifier), fill = match[1] || " ", align = match[2] || ">", sign = match[3] || "-", symbol = match[4] || "", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, prefix = "", suffix = "", integer = false, exponent = true;
2128
2135
  if (precision) precision = +precision.substring(1);
2129
2136
  if (zfill || fill === "0" && align === "=") {
2130
2137
  zfill = fill = "0";
2131
2138
  align = "=";
2132
- if (comma) width -= Math.floor((width - 1) / 4);
2133
2139
  }
2134
2140
  switch (type) {
2135
2141
  case "n":
@@ -2156,6 +2162,8 @@
2156
2162
  if (symbol === "#") prefix = "0" + type.toLowerCase();
2157
2163
 
2158
2164
  case "c":
2165
+ exponent = false;
2166
+
2159
2167
  case "d":
2160
2168
  integer = true;
2161
2169
  precision = 0;
@@ -2176,7 +2184,7 @@
2176
2184
  return function(value) {
2177
2185
  var fullSuffix = suffix;
2178
2186
  if (integer && value % 1) return "";
2179
- var negative = value < 0 || value === 0 && 1 / value < 0 ? (value = -value, "-") : sign;
2187
+ var negative = value < 0 || value === 0 && 1 / value < 0 ? (value = -value, "-") : sign === "-" ? "" : sign;
2180
2188
  if (scale < 0) {
2181
2189
  var unit = d3.formatPrefix(value, precision);
2182
2190
  value = unit.scale(value);
@@ -2185,10 +2193,17 @@
2185
2193
  value *= scale;
2186
2194
  }
2187
2195
  value = type(value, precision);
2188
- var i = value.lastIndexOf("."), before = i < 0 ? value : value.substring(0, i), after = i < 0 ? "" : locale_decimal + value.substring(i + 1);
2189
- if (!zfill && comma) before = formatGroup(before);
2196
+ var i = value.lastIndexOf("."), before, after;
2197
+ if (i < 0) {
2198
+ var j = exponent ? value.lastIndexOf("e") : -1;
2199
+ if (j < 0) before = value, after = ""; else before = value.substring(0, j), after = value.substring(j);
2200
+ } else {
2201
+ before = value.substring(0, i);
2202
+ after = locale_decimal + value.substring(i + 1);
2203
+ }
2204
+ if (!zfill && comma) before = formatGroup(before, Infinity);
2190
2205
  var length = prefix.length + before.length + after.length + (zcomma ? 0 : negative.length), padding = length < width ? new Array(length = width - length + 1).join(fill) : "";
2191
- if (zcomma) before = formatGroup(padding + before);
2206
+ if (zcomma) before = formatGroup(padding + before, padding.length ? width - after.length : Infinity);
2192
2207
  negative += prefix;
2193
2208
  value = before + after;
2194
2209
  return (align === "<" ? negative + value + padding : align === ">" ? padding + negative + value : align === "^" ? padding.substring(0, length >>= 1) + negative + value + padding.substring(length) : negative + (zcomma ? value : padding + value)) + fullSuffix;
@@ -2411,14 +2426,14 @@
2411
2426
  var string = [], i = -1, j = 0, c, p, f;
2412
2427
  while (++i < n) {
2413
2428
  if (template.charCodeAt(i) === 37) {
2414
- string.push(template.substring(j, i));
2429
+ string.push(template.slice(j, i));
2415
2430
  if ((p = d3_time_formatPads[c = template.charAt(++i)]) != null) c = template.charAt(++i);
2416
2431
  if (f = d3_time_formats[c]) c = f(date, p == null ? c === "e" ? " " : "0" : p);
2417
2432
  string.push(c);
2418
2433
  j = i + 1;
2419
2434
  }
2420
2435
  }
2421
- string.push(template.substring(j, i));
2436
+ string.push(template.slice(j, i));
2422
2437
  return string.join("");
2423
2438
  }
2424
2439
  format.parse = function(string) {
@@ -2439,7 +2454,7 @@
2439
2454
  date.setFullYear(d.y, 0, 1);
2440
2455
  date.setFullYear(d.y, 0, "W" in d ? (d.w + 6) % 7 + d.W * 7 - (date.getDay() + 5) % 7 : d.w + d.U * 7 - (date.getDay() + 6) % 7);
2441
2456
  } else date.setFullYear(d.y, d.m, d.d);
2442
- date.setHours(d.H + Math.floor(d.Z / 100), d.M + d.Z % 100, d.S, d.L);
2457
+ date.setHours(d.H + (d.Z / 100 | 0), d.M + d.Z % 100, d.S, d.L);
2443
2458
  return localZ ? date._ : date;
2444
2459
  };
2445
2460
  format.toString = function() {
@@ -2585,22 +2600,22 @@
2585
2600
  };
2586
2601
  function d3_time_parseWeekdayAbbrev(date, string, i) {
2587
2602
  d3_time_dayAbbrevRe.lastIndex = 0;
2588
- var n = d3_time_dayAbbrevRe.exec(string.substring(i));
2603
+ var n = d3_time_dayAbbrevRe.exec(string.slice(i));
2589
2604
  return n ? (date.w = d3_time_dayAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
2590
2605
  }
2591
2606
  function d3_time_parseWeekday(date, string, i) {
2592
2607
  d3_time_dayRe.lastIndex = 0;
2593
- var n = d3_time_dayRe.exec(string.substring(i));
2608
+ var n = d3_time_dayRe.exec(string.slice(i));
2594
2609
  return n ? (date.w = d3_time_dayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
2595
2610
  }
2596
2611
  function d3_time_parseMonthAbbrev(date, string, i) {
2597
2612
  d3_time_monthAbbrevRe.lastIndex = 0;
2598
- var n = d3_time_monthAbbrevRe.exec(string.substring(i));
2613
+ var n = d3_time_monthAbbrevRe.exec(string.slice(i));
2599
2614
  return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
2600
2615
  }
2601
2616
  function d3_time_parseMonth(date, string, i) {
2602
2617
  d3_time_monthRe.lastIndex = 0;
2603
- var n = d3_time_monthRe.exec(string.substring(i));
2618
+ var n = d3_time_monthRe.exec(string.slice(i));
2604
2619
  return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
2605
2620
  }
2606
2621
  function d3_time_parseLocaleFull(date, string, i) {
@@ -2613,7 +2628,7 @@
2613
2628
  return d3_time_parse(date, d3_time_formats.X.toString(), string, i);
2614
2629
  }
2615
2630
  function d3_time_parseAmPm(date, string, i) {
2616
- var n = d3_time_periodLookup.get(string.substring(i, i += 2).toLowerCase());
2631
+ var n = d3_time_periodLookup.get(string.slice(i, i += 2).toLowerCase());
2617
2632
  return n == null ? -1 : (date.p = n, i);
2618
2633
  }
2619
2634
  return d3_time_format;
@@ -2637,31 +2652,31 @@
2637
2652
  }
2638
2653
  function d3_time_parseWeekdayNumber(date, string, i) {
2639
2654
  d3_time_numberRe.lastIndex = 0;
2640
- var n = d3_time_numberRe.exec(string.substring(i, i + 1));
2655
+ var n = d3_time_numberRe.exec(string.slice(i, i + 1));
2641
2656
  return n ? (date.w = +n[0], i + n[0].length) : -1;
2642
2657
  }
2643
2658
  function d3_time_parseWeekNumberSunday(date, string, i) {
2644
2659
  d3_time_numberRe.lastIndex = 0;
2645
- var n = d3_time_numberRe.exec(string.substring(i));
2660
+ var n = d3_time_numberRe.exec(string.slice(i));
2646
2661
  return n ? (date.U = +n[0], i + n[0].length) : -1;
2647
2662
  }
2648
2663
  function d3_time_parseWeekNumberMonday(date, string, i) {
2649
2664
  d3_time_numberRe.lastIndex = 0;
2650
- var n = d3_time_numberRe.exec(string.substring(i));
2665
+ var n = d3_time_numberRe.exec(string.slice(i));
2651
2666
  return n ? (date.W = +n[0], i + n[0].length) : -1;
2652
2667
  }
2653
2668
  function d3_time_parseFullYear(date, string, i) {
2654
2669
  d3_time_numberRe.lastIndex = 0;
2655
- var n = d3_time_numberRe.exec(string.substring(i, i + 4));
2670
+ var n = d3_time_numberRe.exec(string.slice(i, i + 4));
2656
2671
  return n ? (date.y = +n[0], i + n[0].length) : -1;
2657
2672
  }
2658
2673
  function d3_time_parseYear(date, string, i) {
2659
2674
  d3_time_numberRe.lastIndex = 0;
2660
- var n = d3_time_numberRe.exec(string.substring(i, i + 2));
2675
+ var n = d3_time_numberRe.exec(string.slice(i, i + 2));
2661
2676
  return n ? (date.y = d3_time_expandYear(+n[0]), i + n[0].length) : -1;
2662
2677
  }
2663
2678
  function d3_time_parseZone(date, string, i) {
2664
- return /^[+-]\d{4}$/.test(string = string.substring(i, i + 5)) ? (date.Z = -string,
2679
+ return /^[+-]\d{4}$/.test(string = string.slice(i, i + 5)) ? (date.Z = -string,
2665
2680
  i + 5) : -1;
2666
2681
  }
2667
2682
  function d3_time_expandYear(d) {
@@ -2669,46 +2684,46 @@
2669
2684
  }
2670
2685
  function d3_time_parseMonthNumber(date, string, i) {
2671
2686
  d3_time_numberRe.lastIndex = 0;
2672
- var n = d3_time_numberRe.exec(string.substring(i, i + 2));
2687
+ var n = d3_time_numberRe.exec(string.slice(i, i + 2));
2673
2688
  return n ? (date.m = n[0] - 1, i + n[0].length) : -1;
2674
2689
  }
2675
2690
  function d3_time_parseDay(date, string, i) {
2676
2691
  d3_time_numberRe.lastIndex = 0;
2677
- var n = d3_time_numberRe.exec(string.substring(i, i + 2));
2692
+ var n = d3_time_numberRe.exec(string.slice(i, i + 2));
2678
2693
  return n ? (date.d = +n[0], i + n[0].length) : -1;
2679
2694
  }
2680
2695
  function d3_time_parseDayOfYear(date, string, i) {
2681
2696
  d3_time_numberRe.lastIndex = 0;
2682
- var n = d3_time_numberRe.exec(string.substring(i, i + 3));
2697
+ var n = d3_time_numberRe.exec(string.slice(i, i + 3));
2683
2698
  return n ? (date.j = +n[0], i + n[0].length) : -1;
2684
2699
  }
2685
2700
  function d3_time_parseHour24(date, string, i) {
2686
2701
  d3_time_numberRe.lastIndex = 0;
2687
- var n = d3_time_numberRe.exec(string.substring(i, i + 2));
2702
+ var n = d3_time_numberRe.exec(string.slice(i, i + 2));
2688
2703
  return n ? (date.H = +n[0], i + n[0].length) : -1;
2689
2704
  }
2690
2705
  function d3_time_parseMinutes(date, string, i) {
2691
2706
  d3_time_numberRe.lastIndex = 0;
2692
- var n = d3_time_numberRe.exec(string.substring(i, i + 2));
2707
+ var n = d3_time_numberRe.exec(string.slice(i, i + 2));
2693
2708
  return n ? (date.M = +n[0], i + n[0].length) : -1;
2694
2709
  }
2695
2710
  function d3_time_parseSeconds(date, string, i) {
2696
2711
  d3_time_numberRe.lastIndex = 0;
2697
- var n = d3_time_numberRe.exec(string.substring(i, i + 2));
2712
+ var n = d3_time_numberRe.exec(string.slice(i, i + 2));
2698
2713
  return n ? (date.S = +n[0], i + n[0].length) : -1;
2699
2714
  }
2700
2715
  function d3_time_parseMilliseconds(date, string, i) {
2701
2716
  d3_time_numberRe.lastIndex = 0;
2702
- var n = d3_time_numberRe.exec(string.substring(i, i + 3));
2717
+ var n = d3_time_numberRe.exec(string.slice(i, i + 3));
2703
2718
  return n ? (date.L = +n[0], i + n[0].length) : -1;
2704
2719
  }
2705
2720
  function d3_time_zone(d) {
2706
- var z = d.getTimezoneOffset(), zs = z > 0 ? "-" : "+", zh = ~~(abs(z) / 60), zm = abs(z) % 60;
2721
+ var z = d.getTimezoneOffset(), zs = z > 0 ? "-" : "+", zh = abs(z) / 60 | 0, zm = abs(z) % 60;
2707
2722
  return zs + d3_time_formatPad(zh, "0", 2) + d3_time_formatPad(zm, "0", 2);
2708
2723
  }
2709
2724
  function d3_time_parseLiteralPercent(date, string, i) {
2710
2725
  d3_time_percentRe.lastIndex = 0;
2711
- var n = d3_time_percentRe.exec(string.substring(i, i + 1));
2726
+ var n = d3_time_percentRe.exec(string.slice(i, i + 1));
2712
2727
  return n ? i + n[0].length : -1;
2713
2728
  }
2714
2729
  function d3_time_formatMulti(formats) {
@@ -3316,35 +3331,6 @@
3316
3331
  function d3_geo_clipSort(a, b) {
3317
3332
  return ((a = a.x)[0] < 0 ? a[1] - halfπ - ε : halfπ - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfπ - ε : halfπ - b[1]);
3318
3333
  }
3319
- function d3_geo_pointInPolygon(point, polygon) {
3320
- var meridian = point[0], parallel = point[1], meridianNormal = [ Math.sin(meridian), -Math.cos(meridian), 0 ], polarAngle = 0, winding = 0;
3321
- d3_geo_areaRingSum.reset();
3322
- for (var i = 0, n = polygon.length; i < n; ++i) {
3323
- var ring = polygon[i], m = ring.length;
3324
- if (!m) continue;
3325
- var point0 = ring[0], λ0 = point0[0], φ0 = point0[1] / 2 + π / 4, sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), j = 1;
3326
- while (true) {
3327
- if (j === m) j = 0;
3328
- point = ring[j];
3329
- var λ = point[0], φ = point[1] / 2 + π / 4, sinφ = Math.sin(φ), cosφ = Math.cos(φ), dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, antimeridian = adλ > π, k = sinφ0 * sinφ;
3330
- d3_geo_areaRingSum.add(Math.atan2(k * sdλ * Math.sin(adλ), cosφ0 * cosφ + k * Math.cos(adλ)));
3331
- polarAngle += antimeridian ? dλ + sdλ * τ : dλ;
3332
- if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) {
3333
- var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point));
3334
- d3_geo_cartesianNormalize(arc);
3335
- var intersection = d3_geo_cartesianCross(meridianNormal, arc);
3336
- d3_geo_cartesianNormalize(intersection);
3337
- var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]);
3338
- if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) {
3339
- winding += antimeridian ^ dλ >= 0 ? 1 : -1;
3340
- }
3341
- }
3342
- if (!j++) break;
3343
- λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point;
3344
- }
3345
- }
3346
- return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < 0) ^ winding & 1;
3347
- }
3348
3334
  var d3_geo_clipAntimeridian = d3_geo_clip(d3_true, d3_geo_clipAntimeridianLine, d3_geo_clipAntimeridianInterpolate, [ -π, -π / 2 ]);
3349
3335
  function d3_geo_clipAntimeridianLine(listener) {
3350
3336
  var λ0 = NaN, φ0 = NaN, sλ0 = NaN, clean;
@@ -3412,6 +3398,35 @@
3412
3398
  listener.point(to[0], to[1]);
3413
3399
  }
3414
3400
  }
3401
+ function d3_geo_pointInPolygon(point, polygon) {
3402
+ var meridian = point[0], parallel = point[1], meridianNormal = [ Math.sin(meridian), -Math.cos(meridian), 0 ], polarAngle = 0, winding = 0;
3403
+ d3_geo_areaRingSum.reset();
3404
+ for (var i = 0, n = polygon.length; i < n; ++i) {
3405
+ var ring = polygon[i], m = ring.length;
3406
+ if (!m) continue;
3407
+ var point0 = ring[0], λ0 = point0[0], φ0 = point0[1] / 2 + π / 4, sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), j = 1;
3408
+ while (true) {
3409
+ if (j === m) j = 0;
3410
+ point = ring[j];
3411
+ var λ = point[0], φ = point[1] / 2 + π / 4, sinφ = Math.sin(φ), cosφ = Math.cos(φ), dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, antimeridian = adλ > π, k = sinφ0 * sinφ;
3412
+ d3_geo_areaRingSum.add(Math.atan2(k * sdλ * Math.sin(adλ), cosφ0 * cosφ + k * Math.cos(adλ)));
3413
+ polarAngle += antimeridian ? dλ + sdλ * τ : dλ;
3414
+ if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) {
3415
+ var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point));
3416
+ d3_geo_cartesianNormalize(arc);
3417
+ var intersection = d3_geo_cartesianCross(meridianNormal, arc);
3418
+ d3_geo_cartesianNormalize(intersection);
3419
+ var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]);
3420
+ if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) {
3421
+ winding += antimeridian ^ dλ >= 0 ? 1 : -1;
3422
+ }
3423
+ }
3424
+ if (!j++) break;
3425
+ λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point;
3426
+ }
3427
+ }
3428
+ return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < 0) ^ winding & 1;
3429
+ }
3415
3430
  function d3_geo_clipCircle(radius) {
3416
3431
  var cr = Math.cos(radius), smallRadius = cr > 0, notHemisphere = abs(cr) > ε, interpolate = d3_geo_circleInterpolate(radius, 6 * d3_radians);
3417
3432
  return d3_geo_clip(visible, clipLine, interpolate, smallRadius ? [ 0, -radius ] : [ -π, radius - π ]);
@@ -5600,9 +5615,9 @@
5600
5615
  }
5601
5616
  d3.interpolateNumber = d3_interpolateNumber;
5602
5617
  function d3_interpolateNumber(a, b) {
5603
- b -= a = +a;
5618
+ a = +a, b = +b;
5604
5619
  return function(t) {
5605
- return a + b * t;
5620
+ return a * (1 - t) + b * t;
5606
5621
  };
5607
5622
  }
5608
5623
  d3.interpolateString = d3_interpolateString;
@@ -5611,7 +5626,7 @@
5611
5626
  a = a + "", b = b + "";
5612
5627
  while ((am = d3_interpolate_numberA.exec(a)) && (bm = d3_interpolate_numberB.exec(b))) {
5613
5628
  if ((bs = bm.index) > bi) {
5614
- bs = b.substring(bi, bs);
5629
+ bs = b.slice(bi, bs);
5615
5630
  if (s[i]) s[i] += bs; else s[++i] = bs;
5616
5631
  }
5617
5632
  if ((am = am[0]) === (bm = bm[0])) {
@@ -5626,7 +5641,7 @@
5626
5641
  bi = d3_interpolate_numberB.lastIndex;
5627
5642
  }
5628
5643
  if (bi < b.length) {
5629
- bs = b.substring(bi);
5644
+ bs = b.slice(bi);
5630
5645
  if (s[i]) s[i] += bs; else s[++i] = bs;
5631
5646
  }
5632
5647
  return s.length < 2 ? q[0] ? (b = q[0].x, function(t) {
@@ -5696,7 +5711,7 @@
5696
5711
  }
5697
5712
  });
5698
5713
  d3.ease = function(name) {
5699
- var i = name.indexOf("-"), t = i >= 0 ? name.substring(0, i) : name, m = i >= 0 ? name.substring(i + 1) : "in";
5714
+ var i = name.indexOf("-"), t = i >= 0 ? name.slice(0, i) : name, m = i >= 0 ? name.slice(i + 1) : "in";
5700
5715
  t = d3_ease.get(t) || d3_ease_default;
5701
5716
  m = d3_ease_mode.get(m) || d3_identity;
5702
5717
  return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1))));
@@ -5901,15 +5916,15 @@
5901
5916
  };
5902
5917
  }
5903
5918
  function d3_uninterpolateNumber(a, b) {
5904
- b = b - (a = +a) ? 1 / (b - a) : 0;
5919
+ b = (b -= a = +a) || 1 / b;
5905
5920
  return function(x) {
5906
- return (x - a) * b;
5921
+ return (x - a) / b;
5907
5922
  };
5908
5923
  }
5909
5924
  function d3_uninterpolateClamp(a, b) {
5910
- b = b - (a = +a) ? 1 / (b - a) : 0;
5925
+ b = (b -= a = +a) || 1 / b;
5911
5926
  return function(x) {
5912
- return Math.max(0, Math.min(1, (x - a) * b));
5927
+ return Math.max(0, Math.min(1, (x - a) / b));
5913
5928
  };
5914
5929
  }
5915
5930
  d3.layout = {};
@@ -6511,6 +6526,7 @@
6511
6526
  d3.layout.stack = function() {
6512
6527
  var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY;
6513
6528
  function stack(data, index) {
6529
+ if (!(n = data.length)) return data;
6514
6530
  var series = data.map(function(d, i) {
6515
6531
  return values.call(stack, d, i);
6516
6532
  });
@@ -6523,7 +6539,7 @@
6523
6539
  series = d3.permute(series, orders);
6524
6540
  points = d3.permute(points, orders);
6525
6541
  var offsets = offset.call(stack, points, index);
6526
- var n = series.length, m = series[0].length, i, j, o;
6542
+ var m = series[0].length, n, i, j, o;
6527
6543
  for (j = 0; j < m; ++j) {
6528
6544
  out.call(stack, series[0][j], o = offsets[j], points[0][j][1]);
6529
6545
  for (i = 1; i < n; ++i) {
@@ -7678,7 +7694,7 @@
7678
7694
  }
7679
7695
  scale.domain = function(x) {
7680
7696
  if (!arguments.length) return domain;
7681
- domain = x.filter(d3_number).sort(d3_ascending);
7697
+ domain = x.map(d3_number).filter(d3_numeric).sort(d3_ascending);
7682
7698
  return rescale();
7683
7699
  };
7684
7700
  scale.range = function(x) {
@@ -8627,61 +8643,25 @@
8627
8643
  g.each(function() {
8628
8644
  var g = d3.select(this);
8629
8645
  var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = scale.copy();
8630
- var ticks = tickValues == null ? scale1.ticks ? scale1.ticks.apply(scale1, tickArguments_) : scale1.domain() : tickValues, tickFormat = tickFormat_ == null ? scale1.tickFormat ? scale1.tickFormat.apply(scale1, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(".tick").data(ticks, scale1), tickEnter = tick.enter().insert("g", ".domain").attr("class", "tick").style("opacity", ε), tickExit = d3.transition(tick.exit()).style("opacity", ε).remove(), tickUpdate = d3.transition(tick.order()).style("opacity", 1), tickTransform;
8646
+ var ticks = tickValues == null ? scale1.ticks ? scale1.ticks.apply(scale1, tickArguments_) : scale1.domain() : tickValues, tickFormat = tickFormat_ == null ? scale1.tickFormat ? scale1.tickFormat.apply(scale1, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(".tick").data(ticks, scale1), tickEnter = tick.enter().insert("g", ".domain").attr("class", "tick").style("opacity", ε), tickExit = d3.transition(tick.exit()).style("opacity", ε).remove(), tickUpdate = d3.transition(tick.order()).style("opacity", 1), tickSpacing = Math.max(innerTickSize, 0) + tickPadding, tickTransform;
8631
8647
  var range = d3_scaleRange(scale1), path = g.selectAll(".domain").data([ 0 ]), pathUpdate = (path.enter().append("path").attr("class", "domain"),
8632
8648
  d3.transition(path));
8633
8649
  tickEnter.append("line");
8634
8650
  tickEnter.append("text");
8635
- var lineEnter = tickEnter.select("line"), lineUpdate = tickUpdate.select("line"), text = tick.select("text").text(tickFormat), textEnter = tickEnter.select("text"), textUpdate = tickUpdate.select("text");
8636
- switch (orient) {
8637
- case "bottom":
8638
- {
8639
- tickTransform = d3_svg_axisX;
8640
- lineEnter.attr("y2", innerTickSize);
8641
- textEnter.attr("y", Math.max(innerTickSize, 0) + tickPadding);
8642
- lineUpdate.attr("x2", 0).attr("y2", innerTickSize);
8643
- textUpdate.attr("x", 0).attr("y", Math.max(innerTickSize, 0) + tickPadding);
8644
- text.attr("dy", ".71em").style("text-anchor", "middle");
8645
- pathUpdate.attr("d", "M" + range[0] + "," + outerTickSize + "V0H" + range[1] + "V" + outerTickSize);
8646
- break;
8647
- }
8648
-
8649
- case "top":
8650
- {
8651
- tickTransform = d3_svg_axisX;
8652
- lineEnter.attr("y2", -innerTickSize);
8653
- textEnter.attr("y", -(Math.max(innerTickSize, 0) + tickPadding));
8654
- lineUpdate.attr("x2", 0).attr("y2", -innerTickSize);
8655
- textUpdate.attr("x", 0).attr("y", -(Math.max(innerTickSize, 0) + tickPadding));
8656
- text.attr("dy", "0em").style("text-anchor", "middle");
8657
- pathUpdate.attr("d", "M" + range[0] + "," + -outerTickSize + "V0H" + range[1] + "V" + -outerTickSize);
8658
- break;
8659
- }
8660
-
8661
- case "left":
8662
- {
8663
- tickTransform = d3_svg_axisY;
8664
- lineEnter.attr("x2", -innerTickSize);
8665
- textEnter.attr("x", -(Math.max(innerTickSize, 0) + tickPadding));
8666
- lineUpdate.attr("x2", -innerTickSize).attr("y2", 0);
8667
- textUpdate.attr("x", -(Math.max(innerTickSize, 0) + tickPadding)).attr("y", 0);
8668
- text.attr("dy", ".32em").style("text-anchor", "end");
8669
- pathUpdate.attr("d", "M" + -outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + -outerTickSize);
8670
- break;
8671
- }
8672
-
8673
- case "right":
8674
- {
8675
- tickTransform = d3_svg_axisY;
8676
- lineEnter.attr("x2", innerTickSize);
8677
- textEnter.attr("x", Math.max(innerTickSize, 0) + tickPadding);
8678
- lineUpdate.attr("x2", innerTickSize).attr("y2", 0);
8679
- textUpdate.attr("x", Math.max(innerTickSize, 0) + tickPadding).attr("y", 0);
8680
- text.attr("dy", ".32em").style("text-anchor", "start");
8681
- pathUpdate.attr("d", "M" + outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + outerTickSize);
8682
- break;
8683
- }
8684
- }
8651
+ var lineEnter = tickEnter.select("line"), lineUpdate = tickUpdate.select("line"), text = tick.select("text").text(tickFormat), textEnter = tickEnter.select("text"), textUpdate = tickUpdate.select("text"), sign = orient === "top" || orient === "left" ? -1 : 1, x1, x2, y1, y2;
8652
+ if (orient === "bottom" || orient === "top") {
8653
+ tickTransform = d3_svg_axisX, x1 = "x", y1 = "y", x2 = "x2", y2 = "y2";
8654
+ text.attr("dy", sign < 0 ? "0em" : ".71em").style("text-anchor", "middle");
8655
+ pathUpdate.attr("d", "M" + range[0] + "," + sign * outerTickSize + "V0H" + range[1] + "V" + sign * outerTickSize);
8656
+ } else {
8657
+ tickTransform = d3_svg_axisY, x1 = "y", y1 = "x", x2 = "y2", y2 = "x2";
8658
+ text.attr("dy", ".32em").style("text-anchor", sign < 0 ? "end" : "start");
8659
+ pathUpdate.attr("d", "M" + sign * outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + sign * outerTickSize);
8660
+ }
8661
+ lineEnter.attr(y2, sign * innerTickSize);
8662
+ textEnter.attr(y1, sign * tickSpacing);
8663
+ lineUpdate.attr(x2, 0).attr(y2, sign * innerTickSize);
8664
+ textUpdate.attr(x1, 0).attr(y1, sign * tickSpacing);
8685
8665
  if (scale1.rangeBand) {
8686
8666
  var x = scale1, dx = x.rangeBand() / 2;
8687
8667
  scale0 = scale1 = function(d) {
@@ -8690,10 +8670,10 @@
8690
8670
  } else if (scale0.rangeBand) {
8691
8671
  scale0 = scale1;
8692
8672
  } else {
8693
- tickExit.call(tickTransform, scale1);
8673
+ tickExit.call(tickTransform, scale1, scale0);
8694
8674
  }
8695
- tickEnter.call(tickTransform, scale0);
8696
- tickUpdate.call(tickTransform, scale1);
8675
+ tickEnter.call(tickTransform, scale0, scale1);
8676
+ tickUpdate.call(tickTransform, scale1, scale1);
8697
8677
  });
8698
8678
  }
8699
8679
  axis.scale = function(x) {
@@ -8754,14 +8734,16 @@
8754
8734
  bottom: 1,
8755
8735
  left: 1
8756
8736
  };
8757
- function d3_svg_axisX(selection, x) {
8737
+ function d3_svg_axisX(selection, x0, x1) {
8758
8738
  selection.attr("transform", function(d) {
8759
- return "translate(" + x(d) + ",0)";
8739
+ var v0 = x0(d);
8740
+ return "translate(" + (isFinite(v0) ? v0 : x1(d)) + ",0)";
8760
8741
  });
8761
8742
  }
8762
- function d3_svg_axisY(selection, y) {
8743
+ function d3_svg_axisY(selection, y0, y1) {
8763
8744
  selection.attr("transform", function(d) {
8764
- return "translate(0," + y(d) + ")";
8745
+ var v0 = y0(d);
8746
+ return "translate(0," + (isFinite(v0) ? v0 : y1(d)) + ")";
8765
8747
  });
8766
8748
  }
8767
8749
  d3.svg.brush = function() {