rubyvis 0.6.0 → 0.6.1

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.
Files changed (113) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +16 -0
  3. data/.travis.yml +13 -0
  4. data/Gemfile +8 -0
  5. data/Gemfile.lock +37 -0
  6. data/History.txt +6 -0
  7. data/LICENSE.txt +23 -0
  8. data/{README.txt → README.md} +15 -12
  9. data/Rakefile +4 -11
  10. data/lib/rubyvis.rb +1 -1
  11. data/lib/rubyvis/scale/quantitative.rb +14 -18
  12. data/lib/rubyvis/scene/svg_label.rb +1 -1
  13. data/rubyvis.gemspec +21 -0
  14. data/spec/anchor_spec.rb +2 -1
  15. data/spec/line_spec.rb +2 -2
  16. data/spec/scale_linear_datetime_spec.rb +23 -8
  17. data/spec/spec_helper.rb +2 -1
  18. metadata +31 -214
  19. data/.gemtest +0 -0
  20. data/vendor/protovis/protovis-r3.3.js +0 -287
  21. data/vendor/protovis/src/behavior/Behavior.js +0 -32
  22. data/vendor/protovis/src/behavior/Drag.js +0 -112
  23. data/vendor/protovis/src/behavior/Pan.js +0 -110
  24. data/vendor/protovis/src/behavior/Point.js +0 -157
  25. data/vendor/protovis/src/behavior/Resize.js +0 -104
  26. data/vendor/protovis/src/behavior/Select.js +0 -100
  27. data/vendor/protovis/src/behavior/Zoom.js +0 -85
  28. data/vendor/protovis/src/color/Color.js +0 -598
  29. data/vendor/protovis/src/color/Colors.js +0 -135
  30. data/vendor/protovis/src/color/Ramp.js +0 -17
  31. data/vendor/protovis/src/data/Arrays.js +0 -277
  32. data/vendor/protovis/src/data/Dom.js +0 -380
  33. data/vendor/protovis/src/data/Flatten.js +0 -146
  34. data/vendor/protovis/src/data/Histogram.js +0 -120
  35. data/vendor/protovis/src/data/LinearScale.js +0 -54
  36. data/vendor/protovis/src/data/LogScale.js +0 -142
  37. data/vendor/protovis/src/data/Nest.js +0 -257
  38. data/vendor/protovis/src/data/Numbers.js +0 -313
  39. data/vendor/protovis/src/data/Objects.js +0 -78
  40. data/vendor/protovis/src/data/OrdinalScale.js +0 -267
  41. data/vendor/protovis/src/data/QuantileScale.js +0 -180
  42. data/vendor/protovis/src/data/QuantitativeScale.js +0 -440
  43. data/vendor/protovis/src/data/RootScale.js +0 -55
  44. data/vendor/protovis/src/data/Scale.js +0 -86
  45. data/vendor/protovis/src/data/Transform.js +0 -109
  46. data/vendor/protovis/src/data/Tree.js +0 -124
  47. data/vendor/protovis/src/data/Vector.js +0 -118
  48. data/vendor/protovis/src/geo/Geo.js +0 -5
  49. data/vendor/protovis/src/geo/GeoScale.js +0 -307
  50. data/vendor/protovis/src/geo/LatLng.js +0 -23
  51. data/vendor/protovis/src/geo/Projection.js +0 -43
  52. data/vendor/protovis/src/geo/Projections.js +0 -117
  53. data/vendor/protovis/src/lang/Array.js +0 -112
  54. data/vendor/protovis/src/lang/init.js +0 -26
  55. data/vendor/protovis/src/layout/Arc.js +0 -178
  56. data/vendor/protovis/src/layout/Bullet.js +0 -164
  57. data/vendor/protovis/src/layout/Cluster.js +0 -205
  58. data/vendor/protovis/src/layout/Force.js +0 -309
  59. data/vendor/protovis/src/layout/Grid.js +0 -119
  60. data/vendor/protovis/src/layout/Hierarchy.js +0 -249
  61. data/vendor/protovis/src/layout/Horizon.js +0 -159
  62. data/vendor/protovis/src/layout/Indent.js +0 -83
  63. data/vendor/protovis/src/layout/Layout.js +0 -56
  64. data/vendor/protovis/src/layout/Matrix.js +0 -177
  65. data/vendor/protovis/src/layout/Network.js +0 -302
  66. data/vendor/protovis/src/layout/Pack.js +0 -323
  67. data/vendor/protovis/src/layout/Partition.js +0 -203
  68. data/vendor/protovis/src/layout/Rollup.js +0 -203
  69. data/vendor/protovis/src/layout/Stack.js +0 -391
  70. data/vendor/protovis/src/layout/Tree.js +0 -282
  71. data/vendor/protovis/src/layout/Treemap.js +0 -347
  72. data/vendor/protovis/src/mark/Anchor.js +0 -81
  73. data/vendor/protovis/src/mark/Area.js +0 -268
  74. data/vendor/protovis/src/mark/Bar.js +0 -93
  75. data/vendor/protovis/src/mark/Dot.js +0 -212
  76. data/vendor/protovis/src/mark/Ease.js +0 -150
  77. data/vendor/protovis/src/mark/Image.js +0 -154
  78. data/vendor/protovis/src/mark/Label.js +0 -155
  79. data/vendor/protovis/src/mark/Line.js +0 -195
  80. data/vendor/protovis/src/mark/Mark.js +0 -1237
  81. data/vendor/protovis/src/mark/Panel.js +0 -273
  82. data/vendor/protovis/src/mark/Rule.js +0 -143
  83. data/vendor/protovis/src/mark/Transient.js +0 -7
  84. data/vendor/protovis/src/mark/Transition.js +0 -195
  85. data/vendor/protovis/src/mark/Wedge.js +0 -244
  86. data/vendor/protovis/src/physics/BoundConstraint.js +0 -75
  87. data/vendor/protovis/src/physics/ChargeForce.js +0 -184
  88. data/vendor/protovis/src/physics/CollisionConstraint.js +0 -113
  89. data/vendor/protovis/src/physics/Constraint.js +0 -26
  90. data/vendor/protovis/src/physics/DragForce.js +0 -49
  91. data/vendor/protovis/src/physics/Force.js +0 -25
  92. data/vendor/protovis/src/physics/Particle.js +0 -81
  93. data/vendor/protovis/src/physics/PositionConstraint.js +0 -72
  94. data/vendor/protovis/src/physics/Quadtree.js +0 -195
  95. data/vendor/protovis/src/physics/Simulation.js +0 -159
  96. data/vendor/protovis/src/physics/SpringForce.js +0 -141
  97. data/vendor/protovis/src/pv-internals.js +0 -154
  98. data/vendor/protovis/src/pv.js +0 -95
  99. data/vendor/protovis/src/scene/SvgArea.js +0 -172
  100. data/vendor/protovis/src/scene/SvgBar.js +0 -28
  101. data/vendor/protovis/src/scene/SvgCurve.js +0 -354
  102. data/vendor/protovis/src/scene/SvgDot.js +0 -81
  103. data/vendor/protovis/src/scene/SvgImage.js +0 -45
  104. data/vendor/protovis/src/scene/SvgLabel.js +0 -46
  105. data/vendor/protovis/src/scene/SvgLine.js +0 -159
  106. data/vendor/protovis/src/scene/SvgPanel.js +0 -126
  107. data/vendor/protovis/src/scene/SvgRule.js +0 -26
  108. data/vendor/protovis/src/scene/SvgScene.js +0 -185
  109. data/vendor/protovis/src/scene/SvgWedge.js +0 -66
  110. data/vendor/protovis/src/text/DateFormat.js +0 -262
  111. data/vendor/protovis/src/text/Format.js +0 -78
  112. data/vendor/protovis/src/text/NumberFormat.js +0 -227
  113. data/vendor/protovis/src/text/TimeFormat.js +0 -115
@@ -1,23 +0,0 @@
1
- /**
2
- * Abstract; not implemented. There is no explicit constructor; this class
3
- * merely serves to document the representation used by {@link pv.Geo.scale}.
4
- *
5
- * @class Represents a pair of geographic coordinates.
6
- *
7
- * @name pv.Geo.LatLng
8
- * @see pv.Geo.scale
9
- */
10
-
11
- /**
12
- * The <i>latitude</i> coordinate in degrees; positive is North.
13
- *
14
- * @type number
15
- * @name pv.Geo.LatLng.prototype.lat
16
- */
17
-
18
- /**
19
- * The <i>longitude</i> coordinate in degrees; positive is East.
20
- *
21
- * @type number
22
- * @name pv.Geo.LatLng.prototype.lng
23
- */
@@ -1,43 +0,0 @@
1
- /**
2
- * Abstract; not implemented. There is no explicit constructor; this class
3
- * merely serves to document the representation used by {@link pv.Geo.scale}.
4
- *
5
- * @class Represents a geographic projection. This class provides the core
6
- * implementation for {@link pv.Geo.scale}s, mapping between geographic
7
- * coordinates (latitude and longitude) and normalized screen space in the range
8
- * [-1,1]. The remaining mapping between normalized screen space and actual
9
- * pixels is performed by <tt>pv.Geo.scale</tt>.
10
- *
11
- * <p>Many geographic projections have a point around which the projection is
12
- * centered. Rather than have each implementation add support for a
13
- * user-specified center point, the <tt>pv.Geo.scale</tt> translates the
14
- * geographic coordinates relative to the center point for both the forward and
15
- * inverse projection.
16
- *
17
- * <p>In general, this class should not be used directly, unless the desire is
18
- * to implement a new geographic projection. Instead, use <tt>pv.Geo.scale</tt>.
19
- * Implementations are not required to implement inverse projections, but are
20
- * needed for some forms of interactivity. Also note that some inverse
21
- * projections are ambiguous, such as the connecting points in Dymaxian maps.
22
- *
23
- * @name pv.Geo.Projection
24
- * @see pv.Geo.scale
25
- */
26
-
27
- /**
28
- * The <i>forward</i> projection.
29
- *
30
- * @function
31
- * @name pv.Geo.Projection.prototype.project
32
- * @param {pv.Geo.LatLng} latlng the latitude and longitude to project.
33
- * @returns {pv.Vector} the xy-coordinates of the given point.
34
- */
35
-
36
- /**
37
- * The <i>inverse</i> projection; optional.
38
- *
39
- * @function
40
- * @name pv.Geo.Projection.prototype.invert
41
- * @param {pv.Vector} xy the x- and y-coordinates to invert.
42
- * @returns {pv.Geo.LatLng} the latitude and longitude of the given point.
43
- */
@@ -1,117 +0,0 @@
1
- /**
2
- * The built-in projections.
3
- *
4
- * @see pv.Geo.Projection
5
- * @namespace
6
- */
7
- pv.Geo.projections = {
8
-
9
- /** @see http://en.wikipedia.org/wiki/Mercator_projection */
10
- mercator: {
11
- project: function(latlng) {
12
- return {
13
- x: latlng.lng / 180,
14
- y: latlng.lat > 85 ? 1 : latlng.lat < -85 ? -1
15
- : Math.log(Math.tan(Math.PI / 4
16
- + pv.radians(latlng.lat) / 2)) / Math.PI
17
- };
18
- },
19
- invert: function(xy) {
20
- return {
21
- lng: xy.x * 180,
22
- lat: pv.degrees(2 * Math.atan(Math.exp(xy.y * Math.PI)) - Math.PI / 2)
23
- };
24
- }
25
- },
26
-
27
- /** @see http://en.wikipedia.org/wiki/Gall-Peters_projection */
28
- "gall-peters": {
29
- project: function(latlng) {
30
- return {
31
- x: latlng.lng / 180,
32
- y: Math.sin(pv.radians(latlng.lat))
33
- };
34
- },
35
- invert: function(xy) {
36
- return {
37
- lng: xy.x * 180,
38
- lat: pv.degrees(Math.asin(xy.y))
39
- };
40
- }
41
- },
42
-
43
- /** @see http://en.wikipedia.org/wiki/Sinusoidal_projection */
44
- sinusoidal: {
45
- project: function(latlng) {
46
- return {
47
- x: pv.radians(latlng.lng) * Math.cos(pv.radians(latlng.lat)) / Math.PI,
48
- y: latlng.lat / 90
49
- };
50
- },
51
- invert: function(xy) {
52
- return {
53
- lng: pv.degrees((xy.x * Math.PI) / Math.cos(xy.y * Math.PI / 2)),
54
- lat: xy.y * 90
55
- };
56
- }
57
- },
58
-
59
- /** @see http://en.wikipedia.org/wiki/Aitoff_projection */
60
- aitoff: {
61
- project: function(latlng) {
62
- var l = pv.radians(latlng.lng),
63
- f = pv.radians(latlng.lat),
64
- a = Math.acos(Math.cos(f) * Math.cos(l / 2));
65
- return {
66
- x: 2 * (a ? (Math.cos(f) * Math.sin(l / 2) * a / Math.sin(a)) : 0) / Math.PI,
67
- y: 2 * (a ? (Math.sin(f) * a / Math.sin(a)) : 0) / Math.PI
68
- };
69
- },
70
- invert: function(xy) {
71
- var x = xy.x * Math.PI / 2,
72
- y = xy.y * Math.PI / 2;
73
- return {
74
- lng: pv.degrees(x / Math.cos(y)),
75
- lat: pv.degrees(y)
76
- };
77
- }
78
- },
79
-
80
- /** @see http://en.wikipedia.org/wiki/Hammer_projection */
81
- hammer: {
82
- project: function(latlng) {
83
- var l = pv.radians(latlng.lng),
84
- f = pv.radians(latlng.lat),
85
- c = Math.sqrt(1 + Math.cos(f) * Math.cos(l / 2));
86
- return {
87
- x: 2 * Math.SQRT2 * Math.cos(f) * Math.sin(l / 2) / c / 3,
88
- y: Math.SQRT2 * Math.sin(f) / c / 1.5
89
- };
90
- },
91
- invert: function(xy) {
92
- var x = xy.x * 3,
93
- y = xy.y * 1.5,
94
- z = Math.sqrt(1 - x * x / 16 - y * y / 4);
95
- return {
96
- lng: pv.degrees(2 * Math.atan2(z * x, 2 * (2 * z * z - 1))),
97
- lat: pv.degrees(Math.asin(z * y))
98
- };
99
- }
100
- },
101
-
102
- /** The identity or "none" projection. */
103
- identity: {
104
- project: function(latlng) {
105
- return {
106
- x: latlng.lng / 180,
107
- y: latlng.lat / 90
108
- };
109
- },
110
- invert: function(xy) {
111
- return {
112
- lng: xy.x * 180,
113
- lat: xy.y * 90
114
- };
115
- }
116
- }
117
- };
@@ -1,112 +0,0 @@
1
- /**
2
- * @class The built-in Array class.
3
- * @name Array
4
- */
5
-
6
- /**
7
- * Creates a new array with the results of calling a provided function on every
8
- * element in this array. Implemented in Javascript 1.6.
9
- *
10
- * @function
11
- * @name Array.prototype.map
12
- * @see <a
13
- * href="https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/Array/Map">map</a>
14
- * documentation.
15
- * @param {function} f function that produces an element of the new Array from
16
- * an element of the current one.
17
- * @param [o] object to use as <tt>this</tt> when executing <tt>f</tt>.
18
- */
19
- if (!Array.prototype.map) Array.prototype.map = function(f, o) {
20
- var n = this.length;
21
- var result = new Array(n);
22
- for (var i = 0; i < n; i++) {
23
- if (i in this) {
24
- result[i] = f.call(o, this[i], i, this);
25
- }
26
- }
27
- return result;
28
- };
29
-
30
- /**
31
- * Creates a new array with all elements that pass the test implemented by the
32
- * provided function. Implemented in Javascript 1.6.
33
- *
34
- * @function
35
- * @name Array.prototype.filter
36
- * @see <a
37
- * href="https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/Array/filter">filter</a>
38
- * documentation.
39
- * @param {function} f function to test each element of the array.
40
- * @param [o] object to use as <tt>this</tt> when executing <tt>f</tt>.
41
- */
42
- if (!Array.prototype.filter) Array.prototype.filter = function(f, o) {
43
- var n = this.length;
44
- var result = new Array();
45
- for (var i = 0; i < n; i++) {
46
- if (i in this) {
47
- var v = this[i];
48
- if (f.call(o, v, i, this)) result.push(v);
49
- }
50
- }
51
- return result;
52
- };
53
-
54
- /**
55
- * Executes a provided function once per array element. Implemented in
56
- * Javascript 1.6.
57
- *
58
- * @function
59
- * @name Array.prototype.forEach
60
- * @see <a
61
- * href="https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/Array/ForEach">forEach</a>
62
- * documentation.
63
- * @param {function} f function to execute for each element.
64
- * @param [o] object to use as <tt>this</tt> when executing <tt>f</tt>.
65
- */
66
- if (!Array.prototype.forEach) Array.prototype.forEach = function(f, o) {
67
- var n = this.length >>> 0;
68
- for (var i = 0; i < n; i++) {
69
- if (i in this) f.call(o, this[i], i, this);
70
- }
71
- };
72
-
73
- /**
74
- * Apply a function against an accumulator and each value of the array (from
75
- * left-to-right) as to reduce it to a single value. Implemented in Javascript
76
- * 1.8.
77
- *
78
- * @function
79
- * @name Array.prototype.reduce
80
- * @see <a
81
- * href="https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/Array/Reduce">reduce</a>
82
- * documentation.
83
- * @param {function} f function to execute on each value in the array.
84
- * @param [v] object to use as the first argument to the first call of
85
- * <tt>t</tt>.
86
- */
87
- if (!Array.prototype.reduce) Array.prototype.reduce = function(f, v) {
88
- var len = this.length;
89
- if (!len && (arguments.length == 1)) {
90
- throw new Error("reduce: empty array, no initial value");
91
- }
92
-
93
- var i = 0;
94
- if (arguments.length < 2) {
95
- while (true) {
96
- if (i in this) {
97
- v = this[i++];
98
- break;
99
- }
100
- if (++i >= len) {
101
- throw new Error("reduce: no values, no initial value");
102
- }
103
- }
104
- }
105
-
106
- for (; i < len; i++) {
107
- if (i in this) {
108
- v = f(v, this[i], i, this);
109
- }
110
- }
111
- return v;
112
- };
@@ -1,26 +0,0 @@
1
- /*
2
- * Parses the Protovis specifications on load, allowing the use of JavaScript
3
- * 1.8 function expressions on browsers that only support JavaScript 1.6.
4
- *
5
- * @see pv.parse
6
- */
7
- pv.listen(window, "load", function() {
8
- /*
9
- * Note: in Firefox any variables declared here are visible to the eval'd
10
- * script below. Even worse, any global variables declared by the script
11
- * could overwrite local variables here (such as the index, `i`)! To protect
12
- * against this, all variables are explicitly scoped on a pv.$ object.
13
- */
14
- pv.$ = {i:0, x:document.getElementsByTagName("script")};
15
- for (; pv.$.i < pv.$.x.length; pv.$.i++) {
16
- pv.$.s = pv.$.x[pv.$.i];
17
- if (pv.$.s.type == "text/javascript+protovis") {
18
- try {
19
- window.eval(pv.parse(pv.$.s.text));
20
- } catch (e) {
21
- pv.error(e);
22
- }
23
- }
24
- }
25
- delete pv.$;
26
- });
@@ -1,178 +0,0 @@
1
- /**
2
- * Constructs a new, empty arc layout. Layouts are not typically constructed
3
- * directly; instead, they are added to an existing panel via
4
- * {@link pv.Mark#add}.
5
- *
6
- * @class Implements a layout for arc diagrams. An arc diagram is a network
7
- * visualization with a one-dimensional layout of nodes, using circular arcs to
8
- * render links between nodes. For undirected networks, arcs are rendering on a
9
- * single side; this makes arc diagrams useful as annotations to other
10
- * two-dimensional network layouts, such as rollup, matrix or table layouts. For
11
- * directed networks, links in opposite directions can be rendered on opposite
12
- * sides using <tt>directed(true)</tt>.
13
- *
14
- * <p>Arc layouts are particularly sensitive to node ordering; for best results,
15
- * order the nodes such that related nodes are close to each other. A poor
16
- * (e.g., random) order may result in large arcs with crossovers that impede
17
- * visual processing. A future improvement to this layout may include automatic
18
- * reordering using, e.g., spectral graph layout or simulated annealing.
19
- *
20
- * <p>This visualization technique is related to that developed by
21
- * M. Wattenberg, <a
22
- * href="http://www.research.ibm.com/visual/papers/arc-diagrams.pdf">"Arc
23
- * Diagrams: Visualizing Structure in Strings"</a> in <i>IEEE InfoVis</i>, 2002.
24
- * However, this implementation is limited to simple node-link networks, as
25
- * opposed to structures with hierarchical self-similarity (such as strings).
26
- *
27
- * <p>As with other network layouts, three mark prototypes are provided:<ul>
28
- *
29
- * <li><tt>node</tt> - for rendering nodes; typically a {@link pv.Dot}.
30
- * <li><tt>link</tt> - for rendering links; typically a {@link pv.Line}.
31
- * <li><tt>label</tt> - for rendering node labels; typically a {@link pv.Label}.
32
- *
33
- * </ul>For more details on how this layout is structured and can be customized,
34
- * see {@link pv.Layout.Network}.
35
- *
36
- * @extends pv.Layout.Network
37
- **/
38
- pv.Layout.Arc = function() {
39
- pv.Layout.Network.call(this);
40
- var interpolate, // cached interpolate
41
- directed, // cached directed
42
- reverse, // cached reverse
43
- buildImplied = this.buildImplied;
44
-
45
- /** @private Cache layout state to optimize properties. */
46
- this.buildImplied = function(s) {
47
- buildImplied.call(this, s);
48
- directed = s.directed;
49
- interpolate = s.orient == "radial" ? "linear" : "polar";
50
- reverse = s.orient == "right" || s.orient == "top";
51
- };
52
-
53
- /* Override link properties to handle directedness and orientation. */
54
- this.link
55
- .data(function(p) {
56
- var s = p.sourceNode, t = p.targetNode;
57
- return reverse != (directed || (s.breadth < t.breadth)) ? [s, t] : [t, s];
58
- })
59
- .interpolate(function() { return interpolate; });
60
- };
61
-
62
- pv.Layout.Arc.prototype = pv.extend(pv.Layout.Network)
63
- .property("orient", String)
64
- .property("directed", Boolean);
65
-
66
- /**
67
- * Default properties for arc layouts. By default, the orientation is "bottom".
68
- *
69
- * @type pv.Layout.Arc
70
- */
71
- pv.Layout.Arc.prototype.defaults = new pv.Layout.Arc()
72
- .extend(pv.Layout.Network.prototype.defaults)
73
- .orient("bottom");
74
-
75
- /**
76
- * Specifies an optional sort function. The sort function follows the same
77
- * comparator contract required by {@link pv.Dom.Node#sort}. Specifying a sort
78
- * function provides an alternative to sort the nodes as they are specified by
79
- * the <tt>nodes</tt> property; the main advantage of doing this is that the
80
- * comparator function can access implicit fields populated by the network
81
- * layout, such as the <tt>linkDegree</tt>.
82
- *
83
- * <p>Note that arc diagrams are particularly sensitive to order. This is
84
- * referred to as the seriation problem, and many different techniques exist to
85
- * find good node orders that emphasize clusters, such as spectral layout and
86
- * simulated annealing.
87
- *
88
- * @param {function} f comparator function for nodes.
89
- * @returns {pv.Layout.Arc} this.
90
- */
91
- pv.Layout.Arc.prototype.sort = function(f) {
92
- this.$sort = f;
93
- return this;
94
- };
95
-
96
- /** @private Populates the x, y and angle attributes on the nodes. */
97
- pv.Layout.Arc.prototype.buildImplied = function(s) {
98
- if (pv.Layout.Network.prototype.buildImplied.call(this, s)) return;
99
-
100
- var nodes = s.nodes,
101
- orient = s.orient,
102
- sort = this.$sort,
103
- index = pv.range(nodes.length),
104
- w = s.width,
105
- h = s.height,
106
- r = Math.min(w, h) / 2;
107
-
108
- /* Sort the nodes. */
109
- if (sort) index.sort(function(a, b) { return sort(nodes[a], nodes[b]); });
110
-
111
- /** @private Returns the mid-angle, given the breadth. */
112
- function midAngle(b) {
113
- switch (orient) {
114
- case "top": return -Math.PI / 2;
115
- case "bottom": return Math.PI / 2;
116
- case "left": return Math.PI;
117
- case "right": return 0;
118
- case "radial": return (b - .25) * 2 * Math.PI;
119
- }
120
- }
121
-
122
- /** @private Returns the x-position, given the breadth. */
123
- function x(b) {
124
- switch (orient) {
125
- case "top":
126
- case "bottom": return b * w;
127
- case "left": return 0;
128
- case "right": return w;
129
- case "radial": return w / 2 + r * Math.cos(midAngle(b));
130
- }
131
- }
132
-
133
- /** @private Returns the y-position, given the breadth. */
134
- function y(b) {
135
- switch (orient) {
136
- case "top": return 0;
137
- case "bottom": return h;
138
- case "left":
139
- case "right": return b * h;
140
- case "radial": return h / 2 + r * Math.sin(midAngle(b));
141
- }
142
- }
143
-
144
- /* Populate the x, y and mid-angle attributes. */
145
- for (var i = 0; i < nodes.length; i++) {
146
- var n = nodes[index[i]], b = n.breadth = (i + .5) / nodes.length;
147
- n.x = x(b);
148
- n.y = y(b);
149
- n.midAngle = midAngle(b);
150
- }
151
- };
152
-
153
- /**
154
- * The orientation. The default orientation is "left", which means that nodes
155
- * will be positioned from left-to-right in the order they are specified in the
156
- * <tt>nodes</tt> property. The following orientations are supported:<ul>
157
- *
158
- * <li>left - left-to-right.
159
- * <li>right - right-to-left.
160
- * <li>top - top-to-bottom.
161
- * <li>bottom - bottom-to-top.
162
- * <li>radial - radially, starting at 12 o'clock and proceeding clockwise.</ul>
163
- *
164
- * @type string
165
- * @name pv.Layout.Arc.prototype.orient
166
- */
167
-
168
- /**
169
- * Whether this arc digram is directed (bidirectional); only applies to
170
- * non-radial orientations. By default, arc digrams are undirected, such that
171
- * all arcs appear on one side. If the arc digram is directed, then forward
172
- * links are drawn on the conventional side (the same as as undirected
173
- * links--right, left, bottom and top for left, right, top and bottom,
174
- * respectively), while reverse links are drawn on the opposite side.
175
- *
176
- * @type boolean
177
- * @name pv.Layout.Arc.prototype.directed
178
- */