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,81 +0,0 @@
1
- /**
2
- * Constructs a new mark anchor with default properties.
3
- *
4
- * @class Represents an anchor on a given mark. An anchor is itself a mark, but
5
- * without a visual representation. It serves only to provide useful default
6
- * properties that can be inherited by other marks. Each type of mark can define
7
- * any number of named anchors for convenience. If the concrete mark type does
8
- * not define an anchor implementation specifically, one will be inherited from
9
- * the mark's parent class.
10
- *
11
- * <p>For example, the bar mark provides anchors for its four sides: left,
12
- * right, top and bottom. Adding a label to the top anchor of a bar,
13
- *
14
- * <pre>bar.anchor("top").add(pv.Label);</pre>
15
- *
16
- * will render a text label on the top edge of the bar; the top anchor defines
17
- * the appropriate position properties (top and left), as well as text-rendering
18
- * properties for convenience (textAlign and textBaseline).
19
- *
20
- * <p>Note that anchors do not <i>inherit</i> from their targets; the positional
21
- * properties are copied from the scene graph, which guarantees that the anchors
22
- * are positioned correctly, even if the positional properties are not defined
23
- * deterministically. (In addition, it also improves performance by avoiding
24
- * re-evaluating expensive properties.) If you want the anchor to inherit from
25
- * the target, use {@link pv.Mark#extend} before adding. For example:
26
- *
27
- * <pre>bar.anchor("top").extend(bar).add(pv.Label);</pre>
28
- *
29
- * The anchor defines it's own positional properties, but other properties (such
30
- * as the title property, say) can be inherited using the above idiom. Also note
31
- * that you can override positional properties in the anchor for custom
32
- * behavior.
33
- *
34
- * @extends pv.Mark
35
- * @param {pv.Mark} target the anchor target.
36
- */
37
- pv.Anchor = function(target) {
38
- pv.Mark.call(this);
39
- this.target = target;
40
- this.parent = target.parent;
41
- };
42
-
43
- pv.Anchor.prototype = pv.extend(pv.Mark)
44
- .property("name", String);
45
-
46
- /**
47
- * The anchor name. The set of supported anchor names is dependent on the
48
- * concrete mark type; see the mark type for details. For example, bars support
49
- * left, right, top and bottom anchors.
50
- *
51
- * <p>While anchor names are typically constants, the anchor name is a true
52
- * property, which means you can specify a function to compute the anchor name
53
- * dynamically. For instance, if you wanted to alternate top and bottom anchors,
54
- * saying
55
- *
56
- * <pre>m.anchor(function() (this.index % 2) ? "top" : "bottom").add(pv.Dot);</pre>
57
- *
58
- * would have the desired effect.
59
- *
60
- * @type string
61
- * @name pv.Anchor.prototype.name
62
- */
63
-
64
- /**
65
- * Sets the prototype of this anchor to the specified mark. Any properties not
66
- * defined on this mark may be inherited from the specified prototype mark, or
67
- * its prototype, and so on. The prototype mark need not be the same type of
68
- * mark as this mark. (Note that for inheritance to be useful, properties with
69
- * the same name on different mark types should have equivalent meaning.)
70
- *
71
- * <p>This method differs slightly from the normal mark behavior in that the
72
- * anchor's target is preserved.
73
- *
74
- * @param {pv.Mark} proto the new prototype.
75
- * @returns {pv.Anchor} this anchor.
76
- * @see pv.Mark#add
77
- */
78
- pv.Anchor.prototype.extend = function(proto) {
79
- this.proto = proto;
80
- return this;
81
- };
@@ -1,268 +0,0 @@
1
- /**
2
- * Constructs a new area mark with default properties. Areas are not typically
3
- * constructed directly, but by adding to a panel or an existing mark via
4
- * {@link pv.Mark#add}.
5
- *
6
- * @class Represents an area mark: the solid area between two series of
7
- * connected line segments. Unsurprisingly, areas are used most frequently for
8
- * area charts.
9
- *
10
- * <p>Just as a line represents a polyline, the <tt>Area</tt> mark type
11
- * represents a <i>polygon</i>. However, an area is not an arbitrary polygon;
12
- * vertices are paired either horizontally or vertically into parallel
13
- * <i>spans</i>, and each span corresponds to an associated datum. Either the
14
- * width or the height must be specified, but not both; this determines whether
15
- * the area is horizontally-oriented or vertically-oriented. Like lines, areas
16
- * can be stroked and filled with arbitrary colors.
17
- *
18
- * <p>See also the <a href="../../api/Area.html">Area guide</a>.
19
- *
20
- * @extends pv.Mark
21
- */
22
- pv.Area = function() {
23
- pv.Mark.call(this);
24
- };
25
-
26
- pv.Area.prototype = pv.extend(pv.Mark)
27
- .property("width", Number)
28
- .property("height", Number)
29
- .property("lineWidth", Number)
30
- .property("strokeStyle", pv.color)
31
- .property("fillStyle", pv.color)
32
- .property("segmented", Boolean)
33
- .property("interpolate", String)
34
- .property("tension", Number);
35
-
36
- pv.Area.prototype.type = "area";
37
-
38
- /**
39
- * The width of a given span, in pixels; used for horizontal spans. If the width
40
- * is specified, the height property should be 0 (the default). Either the top
41
- * or bottom property should be used to space the spans vertically, typically as
42
- * a multiple of the index.
43
- *
44
- * @type number
45
- * @name pv.Area.prototype.width
46
- */
47
-
48
- /**
49
- * The height of a given span, in pixels; used for vertical spans. If the height
50
- * is specified, the width property should be 0 (the default). Either the left
51
- * or right property should be used to space the spans horizontally, typically
52
- * as a multiple of the index.
53
- *
54
- * @type number
55
- * @name pv.Area.prototype.height
56
- */
57
-
58
- /**
59
- * The width of stroked lines, in pixels; used in conjunction with
60
- * <tt>strokeStyle</tt> to stroke the perimeter of the area. Unlike the
61
- * {@link Line} mark type, the entire perimeter is stroked, rather than just one
62
- * edge. The default value of this property is 1.5, but since the default stroke
63
- * style is null, area marks are not stroked by default.
64
- *
65
- * <p>This property is <i>fixed</i> for non-segmented areas. See
66
- * {@link pv.Mark}.
67
- *
68
- * @type number
69
- * @name pv.Area.prototype.lineWidth
70
- */
71
-
72
- /**
73
- * The style of stroked lines; used in conjunction with <tt>lineWidth</tt> to
74
- * stroke the perimeter of the area. Unlike the {@link Line} mark type, the
75
- * entire perimeter is stroked, rather than just one edge. The default value of
76
- * this property is null, meaning areas are not stroked by default.
77
- *
78
- * <p>This property is <i>fixed</i> for non-segmented areas. See
79
- * {@link pv.Mark}.
80
- *
81
- * @type string
82
- * @name pv.Area.prototype.strokeStyle
83
- * @see pv.color
84
- */
85
-
86
- /**
87
- * The area fill style; if non-null, the interior of the polygon forming the
88
- * area is filled with the specified color. The default value of this property
89
- * is a categorical color.
90
- *
91
- * <p>This property is <i>fixed</i> for non-segmented areas. See
92
- * {@link pv.Mark}.
93
- *
94
- * @type string
95
- * @name pv.Area.prototype.fillStyle
96
- * @see pv.color
97
- */
98
-
99
- /**
100
- * Whether the area is segmented; whether variations in fill style, stroke
101
- * style, and the other properties are treated as fixed. Rendering segmented
102
- * areas is noticeably slower than non-segmented areas.
103
- *
104
- * <p>This property is <i>fixed</i>. See {@link pv.Mark}.
105
- *
106
- * @type boolean
107
- * @name pv.Area.prototype.segmented
108
- */
109
-
110
- /**
111
- * How to interpolate between values. Linear interpolation ("linear") is the
112
- * default, producing a straight line between points. For piecewise constant
113
- * functions (i.e., step functions), either "step-before" or "step-after" can be
114
- * specified. To draw open uniform b-splines, specify "basis". To draw cardinal
115
- * splines, specify "cardinal"; see also {@link #tension}.
116
- *
117
- * <p>This property is <i>fixed</i>. See {@link pv.Mark}.
118
- *
119
- * @type string
120
- * @name pv.Area.prototype.interpolate
121
- */
122
-
123
- /**
124
- * The tension of cardinal splines; used in conjunction with
125
- * interpolate("cardinal"). A value between 0 and 1 draws cardinal splines with
126
- * the given tension. In some sense, the tension can be interpreted as the
127
- * "length" of the tangent; a tension of 1 will yield all zero tangents (i.e.,
128
- * linear interpolation), and a tension of 0 yields a Catmull-Rom spline. The
129
- * default value is 0.7.
130
- *
131
- * <p>This property is <i>fixed</i>. See {@link pv.Mark}.
132
- *
133
- * @type number
134
- * @name pv.Area.prototype.tension
135
- */
136
-
137
- /**
138
- * Default properties for areas. By default, there is no stroke and the fill
139
- * style is a categorical color.
140
- *
141
- * @type pv.Area
142
- */
143
- pv.Area.prototype.defaults = new pv.Area()
144
- .extend(pv.Mark.prototype.defaults)
145
- .lineWidth(1.5)
146
- .fillStyle(pv.Colors.category20().by(pv.parent))
147
- .interpolate("linear")
148
- .tension(.7);
149
-
150
- /** @private Sets width and height to zero if null. */
151
- pv.Area.prototype.buildImplied = function(s) {
152
- if (s.height == null) s.height = 0;
153
- if (s.width == null) s.width = 0;
154
- pv.Mark.prototype.buildImplied.call(this, s);
155
- };
156
-
157
- /** @private Records which properties may be fixed. */
158
- pv.Area.fixed = {
159
- lineWidth: 1,
160
- lineJoin: 1,
161
- strokeStyle: 1,
162
- fillStyle: 1,
163
- segmented: 1,
164
- interpolate: 1,
165
- tension: 1
166
- };
167
-
168
- /**
169
- * @private Make segmented required, such that this fixed property is always
170
- * evaluated, even if the first segment is not visible. Also cache which
171
- * properties are normally fixed.
172
- */
173
- pv.Area.prototype.bind = function() {
174
- pv.Mark.prototype.bind.call(this);
175
- var binds = this.binds,
176
- required = binds.required,
177
- optional = binds.optional;
178
- for (var i = 0, n = optional.length; i < n; i++) {
179
- var p = optional[i];
180
- p.fixed = p.name in pv.Area.fixed;
181
- if (p.name == "segmented") {
182
- required.push(p);
183
- optional.splice(i, 1);
184
- i--;
185
- n--;
186
- }
187
- }
188
-
189
- /* Cache the original arrays so they can be restored on build. */
190
- this.binds.$required = required;
191
- this.binds.$optional = optional;
192
- };
193
-
194
- /**
195
- * @private Override the default build behavior such that fixed properties are
196
- * determined dynamically, based on the value of the (always) fixed segmented
197
- * property. Any fixed properties are only evaluated on the first instance,
198
- * although their values are propagated to subsequent instances, so that they
199
- * are available for property chaining and the like.
200
- */
201
- pv.Area.prototype.buildInstance = function(s) {
202
- var binds = this.binds;
203
-
204
- /* Handle fixed properties on secondary instances. */
205
- if (this.index) {
206
- var fixed = binds.fixed;
207
-
208
- /* Determine which properties are fixed. */
209
- if (!fixed) {
210
- fixed = binds.fixed = [];
211
- function f(p) { return !p.fixed || (fixed.push(p), false); }
212
- binds.required = binds.required.filter(f);
213
- if (!this.scene[0].segmented) binds.optional = binds.optional.filter(f);
214
- }
215
-
216
- /* Copy fixed property values from the first instance. */
217
- for (var i = 0, n = fixed.length; i < n; i++) {
218
- var p = fixed[i].name;
219
- s[p] = this.scene[0][p];
220
- }
221
- }
222
-
223
- /* Evaluate all properties on the first instance. */
224
- else {
225
- binds.required = binds.$required;
226
- binds.optional = binds.$optional;
227
- binds.fixed = null;
228
- }
229
-
230
- pv.Mark.prototype.buildInstance.call(this, s);
231
- };
232
-
233
- /**
234
- * Constructs a new area anchor with default properties. Areas support five
235
- * different anchors:<ul>
236
- *
237
- * <li>top
238
- * <li>left
239
- * <li>center
240
- * <li>bottom
241
- * <li>right
242
- *
243
- * </ul>In addition to positioning properties (left, right, top bottom), the
244
- * anchors support text rendering properties (text-align, text-baseline). Text
245
- * is rendered to appear inside the area. The area anchor also propagates the
246
- * interpolate, eccentricity, and tension properties such that an anchored area
247
- * or line will match positions between control points.
248
- *
249
- * <p>For consistency with the other mark types, the anchor positions are
250
- * defined in terms of their opposite edge. For example, the top anchor defines
251
- * the bottom property, such that an area added to the top anchor grows upward.
252
- *
253
- * @param {string} name the anchor name; either a string or a property function.
254
- * @returns {pv.Anchor}
255
- */
256
- pv.Area.prototype.anchor = function(name) {
257
- var scene;
258
- return pv.Mark.prototype.anchor.call(this, name)
259
- .interpolate(function() {
260
- return this.scene.target[this.index].interpolate;
261
- })
262
- .eccentricity(function() {
263
- return this.scene.target[this.index].eccentricity;
264
- })
265
- .tension(function() {
266
- return this.scene.target[this.index].tension;
267
- });
268
- };
@@ -1,93 +0,0 @@
1
- /**
2
- * Constructs a new bar mark with default properties. Bars are not typically
3
- * constructed directly, but by adding to a panel or an existing mark via
4
- * {@link pv.Mark#add}.
5
- *
6
- * @class Represents a bar: an axis-aligned rectangle that can be stroked and
7
- * filled. Bars are used for many chart types, including bar charts, histograms
8
- * and Gantt charts. Bars can also be used as decorations, for example to draw a
9
- * frame border around a panel; in fact, a panel is a special type (a subclass)
10
- * of bar.
11
- *
12
- * <p>Bars can be positioned in several ways. Most commonly, one of the four
13
- * corners is fixed using two margins, and then the width and height properties
14
- * determine the extent of the bar relative to this fixed location. For example,
15
- * using the bottom and left properties fixes the bottom-left corner; the width
16
- * then extends to the right, while the height extends to the top. As an
17
- * alternative to the four corners, a bar can be positioned exclusively using
18
- * margins; this is convenient as an inset from the containing panel, for
19
- * example. See {@link pv.Mark} for details on the prioritization of redundant
20
- * positioning properties.
21
- *
22
- * <p>See also the <a href="../../api/Bar.html">Bar guide</a>.
23
- *
24
- * @extends pv.Mark
25
- */
26
- pv.Bar = function() {
27
- pv.Mark.call(this);
28
- };
29
-
30
- pv.Bar.prototype = pv.extend(pv.Mark)
31
- .property("width", Number)
32
- .property("height", Number)
33
- .property("lineWidth", Number)
34
- .property("strokeStyle", pv.color)
35
- .property("fillStyle", pv.color);
36
-
37
- pv.Bar.prototype.type = "bar";
38
-
39
- /**
40
- * The width of the bar, in pixels. If the left position is specified, the bar
41
- * extends rightward from the left edge; if the right position is specified, the
42
- * bar extends leftward from the right edge.
43
- *
44
- * @type number
45
- * @name pv.Bar.prototype.width
46
- */
47
-
48
- /**
49
- * The height of the bar, in pixels. If the bottom position is specified, the
50
- * bar extends upward from the bottom edge; if the top position is specified,
51
- * the bar extends downward from the top edge.
52
- *
53
- * @type number
54
- * @name pv.Bar.prototype.height
55
- */
56
-
57
- /**
58
- * The width of stroked lines, in pixels; used in conjunction with
59
- * <tt>strokeStyle</tt> to stroke the bar's border.
60
- *
61
- * @type number
62
- * @name pv.Bar.prototype.lineWidth
63
- */
64
-
65
- /**
66
- * The style of stroked lines; used in conjunction with <tt>lineWidth</tt> to
67
- * stroke the bar's border. The default value of this property is null, meaning
68
- * bars are not stroked by default.
69
- *
70
- * @type string
71
- * @name pv.Bar.prototype.strokeStyle
72
- * @see pv.color
73
- */
74
-
75
- /**
76
- * The bar fill style; if non-null, the interior of the bar is filled with the
77
- * specified color. The default value of this property is a categorical color.
78
- *
79
- * @type string
80
- * @name pv.Bar.prototype.fillStyle
81
- * @see pv.color
82
- */
83
-
84
- /**
85
- * Default properties for bars. By default, there is no stroke and the fill
86
- * style is a categorical color.
87
- *
88
- * @type pv.Bar
89
- */
90
- pv.Bar.prototype.defaults = new pv.Bar()
91
- .extend(pv.Mark.prototype.defaults)
92
- .lineWidth(1.5)
93
- .fillStyle(pv.Colors.category20().by(pv.parent));
@@ -1,212 +0,0 @@
1
- /**
2
- * Constructs a new dot mark with default properties. Dots are not typically
3
- * constructed directly, but by adding to a panel or an existing mark via
4
- * {@link pv.Mark#add}.
5
- *
6
- * @class Represents a dot; a dot is simply a sized glyph centered at a given
7
- * point that can also be stroked and filled. The <tt>size</tt> property is
8
- * proportional to the area of the rendered glyph to encourage meaningful visual
9
- * encodings. Dots can visually encode up to eight dimensions of data, though
10
- * this may be unwise due to integrality. See {@link pv.Mark} for details on the
11
- * prioritization of redundant positioning properties.
12
- *
13
- * <p>See also the <a href="../../api/Dot.html">Dot guide</a>.
14
- *
15
- * @extends pv.Mark
16
- */
17
- pv.Dot = function() {
18
- pv.Mark.call(this);
19
- };
20
-
21
- pv.Dot.prototype = pv.extend(pv.Mark)
22
- .property("shape", String)
23
- .property("shapeAngle", Number)
24
- .property("shapeRadius", Number)
25
- .property("shapeSize", Number)
26
- .property("lineWidth", Number)
27
- .property("strokeStyle", pv.color)
28
- .property("fillStyle", pv.color);
29
-
30
- pv.Dot.prototype.type = "dot";
31
-
32
- /**
33
- * The size of the shape, in square pixels. Square pixels are used such that the
34
- * area of the shape is linearly proportional to the value of the
35
- * <tt>shapeSize</tt> property, facilitating representative encodings. This is
36
- * an alternative to using {@link #shapeRadius}.
37
- *
38
- * @see #shapeRadius
39
- * @type number
40
- * @name pv.Dot.prototype.shapeSize
41
- */
42
-
43
- /**
44
- * The radius of the shape, in pixels. This is an alternative to using
45
- * {@link #shapeSize}.
46
- *
47
- * @see #shapeSize
48
- * @type number
49
- * @name pv.Dot.prototype.shapeRadius
50
- */
51
-
52
- /**
53
- * The shape name. Several shapes are supported:<ul>
54
- *
55
- * <li>cross
56
- * <li>triangle
57
- * <li>diamond
58
- * <li>square
59
- * <li>circle
60
- * <li>tick
61
- * <li>bar
62
- *
63
- * </ul>These shapes can be further changed using the {@link #angle} property;
64
- * for instance, a cross can be turned into a plus by rotating. Similarly, the
65
- * tick, which is vertical by default, can be rotated horizontally. Note that
66
- * some shapes (cross and tick) do not have interior areas, and thus do not
67
- * support fill style meaningfully.
68
- *
69
- * <p>Note: it may be more natural to use the {@link pv.Rule} mark for
70
- * horizontal and vertical ticks. The tick shape is only necessary if angled
71
- * ticks are needed.
72
- *
73
- * @type string
74
- * @name pv.Dot.prototype.shape
75
- */
76
-
77
- /**
78
- * The shape rotation angle, in radians. Used to rotate shapes, such as to turn
79
- * a cross into a plus.
80
- *
81
- * @type number
82
- * @name pv.Dot.prototype.shapeAngle
83
- */
84
-
85
- /**
86
- * The width of stroked lines, in pixels; used in conjunction with
87
- * <tt>strokeStyle</tt> to stroke the dot's shape.
88
- *
89
- * @type number
90
- * @name pv.Dot.prototype.lineWidth
91
- */
92
-
93
- /**
94
- * The style of stroked lines; used in conjunction with <tt>lineWidth</tt> to
95
- * stroke the dot's shape. The default value of this property is a categorical
96
- * color.
97
- *
98
- * @type string
99
- * @name pv.Dot.prototype.strokeStyle
100
- * @see pv.color
101
- */
102
-
103
- /**
104
- * The fill style; if non-null, the interior of the dot is filled with the
105
- * specified color. The default value of this property is null, meaning dots are
106
- * not filled by default.
107
- *
108
- * @type string
109
- * @name pv.Dot.prototype.fillStyle
110
- * @see pv.color
111
- */
112
-
113
- /**
114
- * Default properties for dots. By default, there is no fill and the stroke
115
- * style is a categorical color. The default shape is "circle" with radius 4.5.
116
- *
117
- * @type pv.Dot
118
- */
119
- pv.Dot.prototype.defaults = new pv.Dot()
120
- .extend(pv.Mark.prototype.defaults)
121
- .shape("circle")
122
- .lineWidth(1.5)
123
- .strokeStyle(pv.Colors.category10().by(pv.parent));
124
-
125
- /**
126
- * Constructs a new dot anchor with default properties. Dots support five
127
- * different anchors:<ul>
128
- *
129
- * <li>top
130
- * <li>left
131
- * <li>center
132
- * <li>bottom
133
- * <li>right
134
- *
135
- * </ul>In addition to positioning properties (left, right, top bottom), the
136
- * anchors support text rendering properties (text-align, text-baseline). Text is
137
- * rendered to appear outside the dot. Note that this behavior is different from
138
- * other mark anchors, which default to rendering text <i>inside</i> the mark.
139
- *
140
- * <p>For consistency with the other mark types, the anchor positions are
141
- * defined in terms of their opposite edge. For example, the top anchor defines
142
- * the bottom property, such that a bar added to the top anchor grows upward.
143
- *
144
- * @param {string} name the anchor name; either a string or a property function.
145
- * @returns {pv.Anchor}
146
- */
147
- pv.Dot.prototype.anchor = function(name) {
148
- var scene;
149
- return pv.Mark.prototype.anchor.call(this, name)
150
- .left(function() {
151
- var s = this.scene.target[this.index];
152
- switch (this.name()) {
153
- case "bottom":
154
- case "top":
155
- case "center": return s.left;
156
- case "left": return null;
157
- }
158
- return s.left + s.shapeRadius;
159
- })
160
- .right(function() {
161
- var s = this.scene.target[this.index];
162
- return this.name() == "left" ? s.right + s.shapeRadius : null;
163
- })
164
- .top(function() {
165
- var s = this.scene.target[this.index];
166
- switch (this.name()) {
167
- case "left":
168
- case "right":
169
- case "center": return s.top;
170
- case "top": return null;
171
- }
172
- return s.top + s.shapeRadius;
173
- })
174
- .bottom(function() {
175
- var s = this.scene.target[this.index];
176
- return this.name() == "top" ? s.bottom + s.shapeRadius : null;
177
- })
178
- .textAlign(function() {
179
- switch (this.name()) {
180
- case "left": return "right";
181
- case "bottom":
182
- case "top":
183
- case "center": return "center";
184
- }
185
- return "left";
186
- })
187
- .textBaseline(function() {
188
- switch (this.name()) {
189
- case "right":
190
- case "left":
191
- case "center": return "middle";
192
- case "bottom": return "top";
193
- }
194
- return "bottom";
195
- });
196
- };
197
-
198
- /** @private Sets radius based on size or vice versa. */
199
- pv.Dot.prototype.buildImplied = function(s) {
200
- var r = s.shapeRadius, z = s.shapeSize;
201
- if (r == null) {
202
- if (z == null) {
203
- s.shapeSize = 20.25;
204
- s.shapeRadius = 4.5;
205
- } else {
206
- s.shapeRadius = Math.sqrt(z);
207
- }
208
- } else if (z == null) {
209
- s.shapeSize = r * r;
210
- }
211
- pv.Mark.prototype.buildImplied.call(this, s);
212
- };