d3_rails 0.1.7 → 0.1.8

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.
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