d3_rails 0.1.7 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -14,8 +14,8 @@ or you can use it to build dynamic pages (like jQuery).
14
14
 
15
15
  # D3 Version
16
16
 
17
- The current release of this gem is using **D3 v=2.7.3**
18
- **Last Updated 2-1-2012**
17
+ The current release of this gem is using **D3 v=2.7.4**
18
+ **Last Updated 2-2-2012**
19
19
 
20
20
  # Included Javascripts
21
21
  **minified js files are not included, since the rails asset pipeline sorta necessitates the compiling (and likely minifying) your js files for production**
@@ -1,3 +1,3 @@
1
1
  module D3Rails
2
- VERSION = "0.1.7"
2
+ VERSION = "0.1.8"
3
3
  end
File without changes
File without changes
@@ -192,16 +192,16 @@ d3.geom.polygon = function(coordinates) {
192
192
 
193
193
  coordinates.centroid = function(k) {
194
194
  var i = -1,
195
- n = coordinates.length - 1,
195
+ n = coordinates.length,
196
196
  x = 0,
197
197
  y = 0,
198
198
  a,
199
- b,
199
+ b = coordinates[n - 1],
200
200
  c;
201
201
  if (!arguments.length) k = -1 / (6 * coordinates.area());
202
202
  while (++i < n) {
203
- a = coordinates[i];
204
- b = coordinates[i + 1];
203
+ a = b;
204
+ b = coordinates[i];
205
205
  c = a[0] * b[1] - b[0] * a[1];
206
206
  x += (a[0] + b[0]) * c;
207
207
  y += (a[1] + b[1]) * c;
@@ -10,7 +10,7 @@ try {
10
10
  d3_style_setProperty.call(this, name, value + "", priority);
11
11
  };
12
12
  }
13
- d3 = {version: "2.7.3"}; // semver
13
+ d3 = {version: "2.7.4"}; // semver
14
14
  var d3_array = d3_arraySlice; // conversion for NodeLists
15
15
 
16
16
  function d3_arrayCopy(pseudoarray) {
@@ -489,7 +489,7 @@ d3.dispatch = function() {
489
489
  var dispatch = new d3_dispatch(),
490
490
  i = -1,
491
491
  n = arguments.length;
492
- while (++i < n) dispatch[arguments[i]] = d3_dispatch_event();
492
+ while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);
493
493
  return dispatch;
494
494
  };
495
495
 
@@ -507,22 +507,23 @@ d3_dispatch.prototype.on = function(type, listener) {
507
507
 
508
508
  return arguments.length < 2
509
509
  ? this[type].on(name)
510
- : (this[type].on(name, listener), this);
510
+ : this[type].on(name, listener);
511
511
  };
512
512
 
513
- function d3_dispatch_event() {
513
+ function d3_dispatch_event(dispatch) {
514
514
  var listeners = [],
515
515
  listenerByName = {};
516
516
 
517
- function dispatch() {
517
+ function event() {
518
518
  var z = listeners, // defensive reference
519
519
  i = -1,
520
520
  n = z.length,
521
521
  l;
522
522
  while (++i < n) if (l = z[i].on) l.apply(this, arguments);
523
+ return dispatch;
523
524
  }
524
525
 
525
- dispatch.on = function(name, listener) {
526
+ event.on = function(name, listener) {
526
527
  var l, i;
527
528
 
528
529
  // return the current listener, if any
@@ -543,7 +544,7 @@ function d3_dispatch_event() {
543
544
  return dispatch;
544
545
  };
545
546
 
546
- return dispatch;
547
+ return event;
547
548
  };
548
549
  // TODO align
549
550
  d3.format = function(specifier) {
@@ -894,7 +895,54 @@ d3.interpolateString = function(a, b) {
894
895
  };
895
896
 
896
897
  d3.interpolateTransform = function(a, b) {
897
- return d3.interpolateString(d3.transform(a) + "", d3.transform(b) + "");
898
+ var s = [], // string constants and placeholders
899
+ q = [], // number interpolators
900
+ n,
901
+ A = d3.transform(a),
902
+ B = d3.transform(b),
903
+ ta = A.translate,
904
+ tb = B.translate,
905
+ ra = A.rotate,
906
+ rb = B.rotate,
907
+ wa = A.skew,
908
+ wb = B.skew,
909
+ ka = A.scale,
910
+ kb = B.scale;
911
+
912
+ if (ta[0] != tb[0] || ta[1] != tb[1]) {
913
+ s.push("translate(", null, ",", null, ")");
914
+ q.push({i: 1, x: d3.interpolateNumber(ta[0], tb[0])}, {i: 3, x: d3.interpolateNumber(ta[1], tb[1])});
915
+ } else if (tb[0] || tb[1]) {
916
+ s.push("translate(" + tb + ")");
917
+ } else {
918
+ s.push("");
919
+ }
920
+
921
+ if (ra != rb) {
922
+ q.push({i: s.push(s.pop() + "rotate(", null, ")") - 2, x: d3.interpolateNumber(ra, rb)});
923
+ } else if (rb) {
924
+ s.push(s.pop() + "rotate(" + rb + ")");
925
+ }
926
+
927
+ if (wa != wb) {
928
+ q.push({i: s.push(s.pop() + "skewX(", null, ")") - 2, x: d3.interpolateNumber(wa, wb)});
929
+ } else if (wb) {
930
+ s.push(s.pop() + "skewX(" + wb + ")");
931
+ }
932
+
933
+ if (ka[0] != kb[0] || ka[1] != kb[1]) {
934
+ n = s.push(s.pop() + "scale(", null, ",", null, ")");
935
+ q.push({i: n - 4, x: d3.interpolateNumber(ka[0], kb[0])}, {i: n - 2, x: d3.interpolateNumber(ka[1], kb[1])});
936
+ } else if (kb[0] != 1 || kb[1] != 1) {
937
+ s.push(s.pop() + "scale(" + kb + ")");
938
+ }
939
+
940
+ n = q.length;
941
+ return function(t) {
942
+ var i = -1, o;
943
+ while (++i < n) s[(o = q[i]).i] = o.x(t);
944
+ return s.join("");
945
+ };
898
946
  };
899
947
 
900
948
  d3.interpolateRgb = function(a, b) {
@@ -2458,7 +2506,6 @@ function d3_scale_linearNice(dx) {
2458
2506
  };
2459
2507
  }
2460
2508
 
2461
- // TODO Dates? Ugh.
2462
2509
  function d3_scale_linearTickRange(domain, m) {
2463
2510
  var extent = d3_scaleExtent(domain),
2464
2511
  span = extent[1] - extent[0],
File without changes
@@ -552,13 +552,15 @@ function d3_time_scale(linear, methods, format) {
552
552
  if (typeof m !== "function") {
553
553
  var span = extent[1] - extent[0],
554
554
  target = span / m,
555
- i = d3.bisect(d3_time_scaleSteps, target, 1, d3_time_scaleSteps.length - 1);
555
+ i = d3.bisect(d3_time_scaleSteps, target);
556
+ if (i == d3_time_scaleSteps.length) return methods.year(extent, m);
557
+ if (!i) return linear.ticks(m).map(d3_time_scaleDate);
556
558
  if (Math.log(target / d3_time_scaleSteps[i - 1]) < Math.log(d3_time_scaleSteps[i] / target)) --i;
557
559
  m = methods[i];
558
560
  k = m[1];
559
561
  m = m[0];
560
562
  }
561
- return m(extent[0], extent[1], k);
563
+ return m(extent[0], new Date(+extent[1] + 1), k); // inclusive upper bound
562
564
  };
563
565
 
564
566
  scale.tickFormat = function() {
@@ -591,6 +593,19 @@ function d3_time_scaleFormat(formats) {
591
593
  };
592
594
  }
593
595
 
596
+ function d3_time_scaleSetYear(y) {
597
+ var d = new Date(y, 0, 1);
598
+ d.setFullYear(y); // Y2K fail
599
+ return d;
600
+ }
601
+
602
+ function d3_time_scaleGetYear(d) {
603
+ var y = d.getFullYear(),
604
+ d0 = d3_time_scaleSetYear(y),
605
+ d1 = d3_time_scaleSetYear(y + 1);
606
+ return y + (d - d0) / (d1 - d0);
607
+ }
608
+
594
609
  var d3_time_scaleSteps = [
595
610
  1e3, // 1-second
596
611
  5e3, // 5-second
@@ -640,10 +655,16 @@ var d3_time_scaleLocalFormats = [
640
655
  [d3.time.format("%a %d"), function(d) { return d.getDay() && d.getDate() != 1; }],
641
656
  [d3.time.format("%I %p"), function(d) { return d.getHours(); }],
642
657
  [d3.time.format("%I:%M"), function(d) { return d.getMinutes(); }],
643
- [d3.time.format(":%S"), function(d) { return d.getSeconds() || d.getMilliseconds(); }]
658
+ [d3.time.format(":%S"), function(d) { return d.getSeconds(); }],
659
+ [d3.time.format(".%L"), function(d) { return d.getMilliseconds(); }]
644
660
  ];
645
661
 
646
- var d3_time_scaleLocalFormat = d3_time_scaleFormat(d3_time_scaleLocalFormats);
662
+ var d3_time_scaleLinear = d3.scale.linear(),
663
+ d3_time_scaleLocalFormat = d3_time_scaleFormat(d3_time_scaleLocalFormats);
664
+
665
+ d3_time_scaleLocalMethods.year = function(extent, m) {
666
+ return d3_time_scaleLinear.domain(extent.map(d3_time_scaleGetYear)).ticks(m).map(d3_time_scaleSetYear);
667
+ };
647
668
 
648
669
  d3.time.scale = function() {
649
670
  return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat);
@@ -676,11 +697,29 @@ var d3_time_scaleUTCFormats = [
676
697
  [d3.time.format.utc("%a %d"), function(d) { return d.getUTCDay() && d.getUTCDate() != 1; }],
677
698
  [d3.time.format.utc("%I %p"), function(d) { return d.getUTCHours(); }],
678
699
  [d3.time.format.utc("%I:%M"), function(d) { return d.getUTCMinutes(); }],
679
- [d3.time.format.utc(":%S"), function(d) { return d.getUTCSeconds() || d.getUTCMilliseconds(); }]
700
+ [d3.time.format.utc(":%S"), function(d) { return d.getUTCSeconds(); }],
701
+ [d3.time.format.utc(".%L"), function(d) { return d.getUTCMilliseconds(); }]
680
702
  ];
681
703
 
682
704
  var d3_time_scaleUTCFormat = d3_time_scaleFormat(d3_time_scaleUTCFormats);
683
705
 
706
+ function d3_time_scaleUTCSetYear(y) {
707
+ var d = new Date(Date.UTC(y, 0, 1));
708
+ d.setUTCFullYear(y); // Y2K fail
709
+ return d;
710
+ }
711
+
712
+ function d3_time_scaleUTCGetYear(d) {
713
+ var y = d.getUTCFullYear(),
714
+ d0 = d3_time_scaleUTCSetYear(y),
715
+ d1 = d3_time_scaleUTCSetYear(y + 1);
716
+ return y + (d - d0) / (d1 - d0);
717
+ }
718
+
719
+ d3_time_scaleUTCMethods.year = function(extent, m) {
720
+ return d3_time_scaleLinear.domain(extent.map(d3_time_scaleUTCGetYear)).ticks(m).map(d3_time_scaleUTCSetYear);
721
+ };
722
+
684
723
  d3.time.scale.utc = function() {
685
724
  return d3_time_scale(d3.scale.linear(), d3_time_scaleUTCMethods, d3_time_scaleUTCFormat);
686
725
  };
File without changes
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: d3_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-02 00:00:00.000000000Z
12
+ date: 2012-02-03 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: railties
16
- requirement: &70232689810580 !ruby/object:Gem::Requirement
16
+ requirement: &70233621458080 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 3.1.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70232689810580
24
+ version_requirements: *70233621458080
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bundler
27
- requirement: &70232689810080 !ruby/object:Gem::Requirement
27
+ requirement: &70233621457580 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.0.0
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70232689810080
35
+ version_requirements: *70233621457580
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rails
38
- requirement: &70232689809620 !ruby/object:Gem::Requirement
38
+ requirement: &70233621457120 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '3.1'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70232689809620
46
+ version_requirements: *70233621457120
47
47
  description: Gem installation of javascript framework for data visualization, D3
48
48
  email:
49
49
  - han@logicallsat.com