rubyvis 0.6.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
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
- */