annotate webapp/src/main/webapp/jquery/svg/jquery.svggraph.js @ 1151:139ad480333b

update jquery svg plugin to ver. 1.4.6
author hertzhaft
date Mon, 26 Nov 2012 23:49:41 +0100
parents 301ef9bf1965
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
756
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1 /* http://keith-wood.name/svg.html
1151
139ad480333b update jquery svg plugin to ver. 1.4.6
hertzhaft
parents: 1050
diff changeset
2 SVG graphing extension for jQuery v1.4.5.
756
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
3 Written by Keith Wood (kbwood{at}iinet.com.au) August 2007.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
4 Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
5 MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
6 Please attribute the author if you use it. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
7
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
8 (function($) { // Hide scope, no $ conflict
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
9
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
10 $.svg.addExtension('graph', SVGGraph);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
11
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
12 // Singleton primary SVG graphing interface
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
13 $.svg.graphing = new SVGGraphing();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
14
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
15 function SVGGraphing() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
16 this.regional = [];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
17 this.regional[''] = {percentageText: 'Percentage'};
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
18 this.region = this.regional[''];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
19 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
20
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
21 $.extend(SVGGraphing.prototype, {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
22 _chartTypes: [],
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
23
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
24 /* Add a new chart rendering type to the package.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
25 The rendering object must implement the following functions:
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
26 getTitle(), getDescription(), getOptions(), drawChart(graph).
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
27 @param id (string) the ID of this graph renderer
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
28 @param chartType (object) the object implementing this chart type */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
29 addChartType: function(id, chartType) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
30 this._chartTypes[id] = chartType;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
31 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
32
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
33 /* Retrieve the list of chart types.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
34 @return (object[string]) the array of chart types indexed by ID */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
35 chartTypes: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
36 return this._chartTypes;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
37 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
38 });
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
39
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
40 /* Extension point for SVG graphing.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
41 Access through svg.graph. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
42 function SVGGraph(wrapper) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
43 this._wrapper = wrapper; // The attached SVG wrapper object
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
44 this._drawNow = false; // True for immediate update, false to wait for redraw call
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
45 for (var id in $.svg.graphing._chartTypes) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
46 this._chartType = $.svg.graphing._chartTypes[id]; // Use first graph renderer
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
47 break;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
48 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
49 this._chartOptions = {}; // Extra options for the graph type
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
50 // The graph title and settings
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
51 this._title = {value: '', offset: 25, settings: {textAnchor: 'middle'}};
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
52 this._area = [0.1, 0.1, 0.8, 0.9]; // The chart area: left, top, right, bottom,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
53 // > 1 in pixels, <= 1 as proportion
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
54 this._chartFormat = {fill: 'none', stroke: 'black'}; // The formatting for the chart area
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
55 this._gridlines = []; // The formatting of the x- and y-gridlines
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
56 this._series = []; // The series to be plotted, each is an object
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
57 this._onstatus = null; // The callback function for status updates
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
58 this._chartCont = this._wrapper.svg(0, 0, 0, 0, {class_: 'svg-graph'}); // The main container for the graph
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
59
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
60 this.xAxis = new SVGGraphAxis(this); // The main x-axis
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
61 this.xAxis.title('', 40);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
62 this.yAxis = new SVGGraphAxis(this); // The main y-axis
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
63 this.yAxis.title('', 40);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
64 this.x2Axis = null; // The secondary x-axis
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
65 this.y2Axis = null; // The secondary y-axis
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
66 this.legend = new SVGGraphLegend(this); // The chart legend
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
67 this._drawNow = true;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
68 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
69
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
70 $.extend(SVGGraph.prototype, {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
71
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
72 /* Useful indexes. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
73 X: 0,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
74 Y: 1,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
75 W: 2,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
76 H: 3,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
77 L: 0,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
78 T: 1,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
79 R: 2,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
80 B: 3,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
81
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
82 /* Standard percentage axis. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
83 _percentageAxis: new SVGGraphAxis(this, $.svg.graphing.region.percentageText, 0, 100, 10, 0),
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
84
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
85 /* Set or retrieve the container for the graph.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
86 @param cont (SVG element) the container for the graph
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
87 @return (SVGGraph) this graph object or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
88 (SVG element) the current container (if no parameters) */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
89 container: function(cont) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
90 if (arguments.length == 0) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
91 return this._chartCont;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
92 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
93 this._chartCont = cont;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
94 return this;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
95 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
96
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
97 /* Set or retrieve the type of chart to be rendered.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
98 See $.svg.graphing.getChartTypes() for the list of available types.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
99 @param id (string) the ID of the chart type
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
100 @param options (object) additional settings for this chart type (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
101 @return (SVGGraph) this graph object or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
102 (string) the chart type (if no parameters)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
103 @deprecated use type() */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
104 chartType: function(id, options) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
105 return (arguments.length == 0 ? this.type() : this.type(id, options));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
106 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
107
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
108 /* Set or retrieve the type of chart to be rendered.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
109 See $.svg.graphing.getChartTypes() for the list of available types.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
110 @param id (string) the ID of the chart type
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
111 @param options (object) additional settings for this chart type (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
112 @return (SVGGraph) this graph object or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
113 (string) the chart type (if no parameters) */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
114 type: function(id, options) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
115 if (arguments.length == 0) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
116 return this._chartType;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
117 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
118 var chartType = $.svg.graphing._chartTypes[id];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
119 if (chartType) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
120 this._chartType = chartType;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
121 this._chartOptions = $.extend({}, options || {});
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
122 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
123 this._drawGraph();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
124 return this;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
125 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
126
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
127 /* Set or retrieve additional options for the particular chart type.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
128 @param options (object) the extra options
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
129 @return (SVGGraph) this graph object or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
130 (object) the chart options (if no parameters)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
131 @deprecated use options() */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
132 chartOptions: function(options) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
133 return(arguments.length == 0 ? this.options() : this.options(options));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
134 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
135
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
136 /* Set or retrieve additional options for the particular chart type.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
137 @param options (object) the extra options
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
138 @return (SVGGraph) this graph object or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
139 (object) the chart options (if no parameters) */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
140 options: function(options) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
141 if (arguments.length == 0) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
142 return this._chartOptions;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
143 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
144 this._chartOptions = $.extend({}, options);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
145 this._drawGraph();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
146 return this;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
147 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
148
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
149 /* Set or retrieve the background of the graph chart.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
150 @param fill (string) how to fill the chart background
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
151 @param stroke (string) the colour of the outline (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
152 @param settings (object) additional formatting for the chart background (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
153 @return (SVGGraph) this graph object or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
154 (object) the chart format (if no parameters)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
155 @deprecated use format() */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
156 chartFormat: function(fill, stroke, settings) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
157 return (arguments.length == 0 ? this.format() : this.format(fill, stroke, settings));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
158 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
159
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
160 /* Set or retrieve the background of the graph chart.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
161 @param fill (string) how to fill the chart background
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
162 @param stroke (string) the colour of the outline (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
163 @param settings (object) additional formatting for the chart background (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
164 @return (SVGGraph) this graph object or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
165 (object) the chart format (if no parameters) */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
166 format: function(fill, stroke, settings) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
167 if (arguments.length == 0) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
168 return this._chartFormat;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
169 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
170 if (typeof stroke == 'object') {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
171 settings = stroke;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
172 stroke = null;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
173 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
174 this._chartFormat = $.extend({fill: fill},
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
175 (stroke ? {stroke: stroke} : {}), settings || {});
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
176 this._drawGraph();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
177 return this;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
178 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
179
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
180 /* Set or retrieve the main chart area.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
181 @param left (number) > 1 is pixels, <= 1 is proportion of width or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
182 (number[4]) for left, top, right, bottom
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
183 @param top (number) > 1 is pixels, <= 1 is proportion of height
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
184 @param right (number) > 1 is pixels, <= 1 is proportion of width
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
185 @param bottom (number) > 1 is pixels, <= 1 is proportion of height
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
186 @return (SVGGraph) this graph object or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
187 (number[4]) the chart area: left, top, right, bottom (if no parameters)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
188 @deprecated use area() */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
189 chartArea: function(left, top, right, bottom) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
190 return (arguments.length == 0 ? this.area() : this.area(left, top, right, bottom));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
191 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
192
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
193 /* Set or retrieve the main chart area.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
194 @param left (number) > 1 is pixels, <= 1 is proportion of width or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
195 (number[4]) for left, top, right, bottom
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
196 @param top (number) > 1 is pixels, <= 1 is proportion of height
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
197 @param right (number) > 1 is pixels, <= 1 is proportion of width
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
198 @param bottom (number) > 1 is pixels, <= 1 is proportion of height
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
199 @return (SVGGraph) this graph object or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
200 (number[4]) the chart area: left, top, right, bottom (if no parameters) */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
201 area: function(left, top, right, bottom) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
202 if (arguments.length == 0) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
203 return this._area;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
204 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
205 this._area = (isArray(left) ? left : [left, top, right, bottom]);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
206 this._drawGraph();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
207 return this;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
208 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
209
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
210 /* Set or retrieve the gridlines formatting for the graph chart.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
211 @param xSettings (string) the colour of the gridlines along the x-axis, or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
212 (object) formatting for the gridlines along the x-axis, or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
213 null for none
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
214 @param ySettings (string) the colour of the gridlines along the y-axis, or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
215 (object) formatting for the gridlines along the y-axis, or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
216 null for none
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
217 @return (SVGGraph) this graph object or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
218 (object[2]) the gridlines formatting (if no parameters) */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
219 gridlines: function(xSettings, ySettings) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
220 if (arguments.length == 0) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
221 return this._gridlines;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
222 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
223 this._gridlines = [(typeof xSettings == 'string' ? {stroke: xSettings} : xSettings),
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
224 (typeof ySettings == 'string' ? {stroke: ySettings} : ySettings)];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
225 if (this._gridlines[0] == null && this._gridlines[1] == null) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
226 this._gridlines = [];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
227 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
228 this._drawGraph();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
229 return this;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
230 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
231
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
232 /* Set or retrieve the title of the graph and its formatting.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
233 @param value (string) the title
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
234 @param offset (number) the vertical positioning of the title
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
235 > 1 is pixels, <= 1 is proportion of width (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
236 @param colour (string) the colour of the title (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
237 @param settings (object) formatting for the title (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
238 @return (SVGGraph) this graph object or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
239 (object) value, offset, and settings for the title (if no parameters) */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
240 title: function(value, offset, colour, settings) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
241 if (arguments.length == 0) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
242 return this._title;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
243 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
244 if (typeof offset != 'number') {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
245 settings = colour;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
246 colour = offset;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
247 offset = null;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
248 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
249 if (typeof colour != 'string') {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
250 settings = colour;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
251 colour = null;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
252 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
253 this._title = {value: value, offset: offset || this._title.offset,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
254 settings: $.extend({textAnchor: 'middle'},
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
255 (colour ? {fill: colour} : {}), settings || {})};
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
256 this._drawGraph();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
257 return this;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
258 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
259
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
260 /* Add a series of values to be plotted on the graph.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
261 @param name (string) the name of this series (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
262 @param values (number[]) the values to be plotted
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
263 @param fill (string) how the plotted values are filled
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
264 @param stroke (string) the colour of the plotted lines (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
265 @param strokeWidth (number) the width of the plotted lines (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
266 @param settings (object) additional settings for the plotted values (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
267 @return (SVGGraph) this graph object */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
268 addSeries: function(name, values, fill, stroke, strokeWidth, settings) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
269 this._series.push(new SVGGraphSeries(
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
270 this, name, values, fill, stroke, strokeWidth, settings));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
271 this._drawGraph();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
272 return this;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
273 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
274
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
275 /* Retrieve the series wrappers.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
276 @param i (number) the series index (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
277 @return (SVGGraphSeries) the specified series or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
278 (SVGGraphSeries[]) the list of series */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
279 series: function(i) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
280 return (arguments.length > 0 ? this._series[i] : null) || this._series;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
281 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
282
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
283 /* Suppress drawing of the graph until redraw() is called.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
284 @return (SVGGraph) this graph object */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
285 noDraw: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
286 this._drawNow = false;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
287 return this;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
288 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
289
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
290 /* Redraw the entire graph with the current settings and values.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
291 @return (SVGGraph) this graph object */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
292 redraw: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
293 this._drawNow = true;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
294 this._drawGraph();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
295 return this;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
296 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
297
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
298 /* Set the callback function for status updates.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
299 @param onstatus (function) the callback function
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
300 @return (SVGGraph) this graph object */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
301 status: function(onstatus) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
302 this._onstatus = onstatus;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
303 return this;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
304 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
305
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
306 /* Actually draw the graph (if allowed) based on the graph type set. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
307 _drawGraph: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
308 if (!this._drawNow) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
309 return;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
310 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
311 while (this._chartCont.firstChild) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
312 this._chartCont.removeChild(this._chartCont.firstChild);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
313 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
314 if (!this._chartCont.parent) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
315 this._wrapper._svg.appendChild(this._chartCont);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
316 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
317 // Set sizes if not already there
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
318 if (!this._chartCont.width) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
319 this._chartCont.setAttribute('width',
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
320 parseInt(this._chartCont.getAttribute('width'), 10) || this._wrapper._width());
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
321 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
322 else if (this._chartCont.width.baseVal) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
323 this._chartCont.width.baseVal.value =
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
324 this._chartCont.width.baseVal.value || this._wrapper._width();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
325 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
326 else {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
327 this._chartCont.width = this._chartCont.width || this._wrapper._width();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
328 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
329 if (!this._chartCont.height) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
330 this._chartCont.setAttribute('height',
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
331 parseInt(this._chartCont.getAttribute('height'), 10) || this._wrapper._height());
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
332 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
333 else if (this._chartCont.height.baseVal) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
334 this._chartCont.height.baseVal.value =
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
335 this._chartCont.height.baseVal.value || this._wrapper._height();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
336 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
337 else {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
338 this._chartCont.height = this._chartCont.height || this._wrapper._height();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
339 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
340 this._chartType.drawGraph(this);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
341 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
342
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
343 /* Decode an attribute value.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
344 @param node the node to examine
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
345 @param name the attribute name
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
346 @return the actual value */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
347 _getValue: function(node, name) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
348 return (!node[name] ? parseInt(node.getAttribute(name), 10) :
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
349 (node[name].baseVal ? node[name].baseVal.value : node[name]));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
350 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
351
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
352 /* Draw the graph title - centred. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
353 _drawTitle: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
354 this._wrapper.text(this._chartCont, this._getValue(this._chartCont, 'width') / 2,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
355 this._title.offset, this._title.value, this._title.settings);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
356 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
357
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
358 /* Calculate the actual dimensions of the chart area.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
359 @param area (number[4]) the area values to evaluate (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
360 @return (number[4]) an array of dimension values: left, top, width, height */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
361 _getDims: function(area) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
362 area = area || this._area;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
363 var availWidth = this._getValue(this._chartCont, 'width');
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
364 var availHeight = this._getValue(this._chartCont, 'height');
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
365 var left = (area[this.L] > 1 ? area[this.L] : availWidth * area[this.L]);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
366 var top = (area[this.T] > 1 ? area[this.T] : availHeight * area[this.T]);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
367 var width = (area[this.R] > 1 ? area[this.R] : availWidth * area[this.R]) - left;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
368 var height = (area[this.B] > 1 ? area[this.B] : availHeight * area[this.B]) - top;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
369 return [left, top, width, height];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
370 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
371
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
372 /* Draw the chart background, including gridlines.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
373 @param noXGrid (boolean) true to suppress the x-gridlines, false to draw them (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
374 @param noYGrid (boolean) true to suppress the y-gridlines, false to draw them (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
375 @return (element) the background group element */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
376 _drawChartBackground: function(noXGrid, noYGrid) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
377 var bg = this._wrapper.group(this._chartCont, {class_: 'background'});
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
378 var dims = this._getDims();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
379 this._wrapper.rect(bg, dims[this.X], dims[this.Y], dims[this.W], dims[this.H], this._chartFormat);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
380 if (this._gridlines[0] && this.yAxis._ticks.major && !noYGrid) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
381 this._drawGridlines(bg, this.yAxis, true, dims, this._gridlines[0]);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
382 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
383 if (this._gridlines[1] && this.xAxis._ticks.major && !noXGrid) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
384 this._drawGridlines(bg, this.xAxis, false, dims, this._gridlines[1]);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
385 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
386 return bg;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
387 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
388
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
389 /* Draw one set of gridlines.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
390 @param bg (element) the background group element
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
391 @param axis (SVGGraphAxis) the axis definition
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
392 @param horiz (boolean) true if horizontal, false if vertical
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
393 @param dims (number[]) the left, top, width, height of the chart area
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
394 @param format (object) additional settings for the gridlines */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
395 _drawGridlines: function(bg, axis, horiz, dims, format) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
396 var g = this._wrapper.group(bg, format);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
397 var scale = (horiz ? dims[this.H] : dims[this.W]) / (axis._scale.max - axis._scale.min);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
398 var major = Math.floor(axis._scale.min / axis._ticks.major) * axis._ticks.major;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
399 major = (major < axis._scale.min ? major + axis._ticks.major : major);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
400 while (major <= axis._scale.max) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
401 var v = (horiz ? axis._scale.max - major : major - axis._scale.min) * scale +
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
402 (horiz ? dims[this.Y] : dims[this.X]);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
403 this._wrapper.line(g, (horiz ? dims[this.X] : v), (horiz ? v : dims[this.Y]),
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
404 (horiz ? dims[this.X] + dims[this.W] : v), (horiz ? v : dims[this.Y] + dims[this.H]));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
405 major += axis._ticks.major;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
406 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
407 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
408
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
409 /* Draw the axes in their standard configuration.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
410 @param noX (boolean) true to suppress the x-axes, false to draw it (optional) */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
411 _drawAxes: function(noX) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
412 var dims = this._getDims();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
413 if (this.xAxis && !noX) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
414 if (this.xAxis._title) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
415 this._wrapper.text(this._chartCont, dims[this.X] + dims[this.W] / 2,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
416 dims[this.Y] + dims[this.H] + this.xAxis._titleOffset,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
417 this.xAxis._title, this.xAxis._titleFormat);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
418 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
419 this._drawAxis(this.xAxis, 'xAxis', dims[this.X], dims[this.Y] + dims[this.H],
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
420 dims[this.X] + dims[this.W], dims[this.Y] + dims[this.H]);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
421 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
422 if (this.yAxis) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
423 if (this.yAxis._title) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
424 this._wrapper.text(this._chartCont, 0, 0, this.yAxis._title, $.extend({textAnchor: 'middle',
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
425 transform: 'translate(' + (dims[this.X] - this.yAxis._titleOffset) + ',' +
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
426 (dims[this.Y] + dims[this.H] / 2) + ') rotate(-90)'}, this.yAxis._titleFormat || {}));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
427 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
428 this._drawAxis(this.yAxis, 'yAxis', dims[this.X], dims[this.Y],
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
429 dims[this.X], dims[this.Y] + dims[this.H]);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
430 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
431 if (this.x2Axis && !noX) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
432 if (this.x2Axis._title) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
433 this._wrapper.text(this._chartCont, dims[this.X] + dims[this.W] / 2,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
434 dims[this.X] - this.x2Axis._titleOffset, this.x2Axis._title, this.x2Axis._titleFormat);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
435 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
436 this._drawAxis(this.x2Axis, 'x2Axis', dims[this.X], dims[this.Y],
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
437 dims[this.X] + dims[this.W], dims[this.Y]);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
438 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
439 if (this.y2Axis) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
440 if (this.y2Axis._title) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
441 this._wrapper.text(this._chartCont, 0, 0, this.y2Axis._title, $.extend({textAnchor: 'middle',
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
442 transform: 'translate(' + (dims[this.X] + dims[this.W] + this.y2Axis._titleOffset) +
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
443 ',' + (dims[this.Y] + dims[this.H] / 2) + ') rotate(-90)'}, this.y2Axis._titleFormat || {}));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
444 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
445 this._drawAxis(this.y2Axis, 'y2Axis', dims[this.X] + dims[this.W], dims[this.Y],
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
446 dims[this.X] + dims[this.W], dims[this.Y] + dims[this.H]);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
447 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
448 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
449
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
450 /* Draw an axis and its tick marks.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
451 @param axis (SVGGraphAxis) the axis definition
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
452 @param id (string) the identifier for the axis group element
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
453 @param x1 (number) starting x-coodinate for the axis
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
454 @param y1 (number) starting y-coodinate for the axis
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
455 @param x2 (number) ending x-coodinate for the axis
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
456 @param y2 (number) ending y-coodinate for the axis */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
457 _drawAxis: function(axis, id, x1, y1, x2, y2) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
458 var horiz = (y1 == y2);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
459 var gl = this._wrapper.group(this._chartCont, $.extend({class_: id}, axis._lineFormat));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
460 var gt = this._wrapper.group(this._chartCont, $.extend({class_: id + 'Labels',
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
461 textAnchor: (horiz ? 'middle' : 'end')}, axis._labelFormat));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
462 this._wrapper.line(gl, x1, y1, x2, y2);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
463 if (axis._ticks.major) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
464 var bottomRight = (x2 > (this._getValue(this._chartCont, 'width') / 2) &&
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
465 y2 > (this._getValue(this._chartCont, 'height') / 2));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
466 var scale = (horiz ? x2 - x1 : y2 - y1) / (axis._scale.max - axis._scale.min);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
467 var size = axis._ticks.size;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
468 var major = Math.floor(axis._scale.min / axis._ticks.major) * axis._ticks.major;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
469 major = (major < axis._scale.min ? major + axis._ticks.major : major);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
470 var minor = (!axis._ticks.minor ? axis._scale.max + 1 :
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
471 Math.floor(axis._scale.min / axis._ticks.minor) * axis._ticks.minor);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
472 minor = (minor < axis._scale.min ? minor + axis._ticks.minor : minor);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
473 var offsets = this._getTickOffsets(axis, bottomRight);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
474 var count = 0;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
475 while (major <= axis._scale.max || minor <= axis._scale.max) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
476 var cur = Math.min(major, minor);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
477 var len = (cur == major ? size : size / 2);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
478 var v = (horiz ? x1 : y1) +
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
479 (horiz ? cur - axis._scale.min : axis._scale.max - cur) * scale;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
480 this._wrapper.line(gl, (horiz ? v : x1 + len * offsets[0]),
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
481 (horiz ? y1 + len * offsets[0] : v),
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
482 (horiz ? v : x1 + len * offsets[1]),
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
483 (horiz ? y1 + len * offsets[1] : v));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
484 if (cur == major) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
485 this._wrapper.text(gt, (horiz ? v : x1 - size), (horiz ? y1 + 2 * size : v),
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
486 (axis._labels ? axis._labels[count++] : '' + cur));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
487 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
488 major += (cur == major ? axis._ticks.major : 0);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
489 minor += (cur == minor ? axis._ticks.minor : 0);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
490 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
491 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
492 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
493
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
494 /* Calculate offsets based on axis and tick positions.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
495 @param axis (SVGGraphAxis) the axis definition
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
496 @param bottomRight (boolean) true if this axis is appearing on the bottom or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
497 right of the chart area, false if to the top or left
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
498 @return (number[2]) the array of offset multipliers (-1..+1) */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
499 _getTickOffsets: function(axis, bottomRight) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
500 return [(axis._ticks.position == (bottomRight ? 'in' : 'out') ||
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
501 axis._ticks.position == 'both' ? -1 : 0),
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
502 (axis._ticks.position == (bottomRight ? 'out' : 'in') ||
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
503 axis._ticks.position == 'both' ? +1 : 0), ];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
504 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
505
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
506 /* Retrieve the standard percentage axis.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
507 @return (SVGGraphAxis) percentage axis */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
508 _getPercentageAxis: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
509 this._percentageAxis._title = $.svg.graphing.region.percentageText;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
510 return this._percentageAxis;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
511 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
512
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
513 /* Calculate the column totals across all the series. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
514 _getTotals: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
515 var totals = [];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
516 var numVal = (this._series.length ? this._series[0]._values.length : 0);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
517 for (var i = 0; i < numVal; i++) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
518 totals[i] = 0;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
519 for (var j = 0; j < this._series.length; j++) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
520 totals[i] += this._series[j]._values[i];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
521 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
522 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
523 return totals;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
524 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
525
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
526 /* Draw the chart legend. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
527 _drawLegend: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
528 if (!this.legend._show) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
529 return;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
530 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
531 var g = this._wrapper.group(this._chartCont, {class_: 'legend'});
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
532 var dims = this._getDims(this.legend._area);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
533 this._wrapper.rect(g, dims[this.X], dims[this.Y], dims[this.W], dims[this.H],
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
534 this.legend._bgSettings);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
535 var horiz = dims[this.W] > dims[this.H];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
536 var numSer = this._series.length;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
537 var offset = (horiz ? dims[this.W] : dims[this.H]) / numSer;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
538 var xBase = dims[this.X] + 5;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
539 var yBase = dims[this.Y] + ((horiz ? dims[this.H] : offset) + this.legend._sampleSize) / 2;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
540 for (var i = 0; i < numSer; i++) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
541 var series = this._series[i];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
542 this._wrapper.rect(g, xBase + (horiz ? i * offset : 0),
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
543 yBase + (horiz ? 0 : i * offset) - this.legend._sampleSize,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
544 this.legend._sampleSize, this.legend._sampleSize,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
545 {fill: series._fill, stroke: series._stroke, strokeWidth: 1});
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
546 this._wrapper.text(g, xBase + (horiz ? i * offset : 0) + this.legend._sampleSize + 5,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
547 yBase + (horiz ? 0 : i * offset), series._name, this.legend._textSettings);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
548 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
549 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
550
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
551 /* Show the current value status on hover. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
552 _showStatus: function(elem, label, value) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
553 var status = this._onstatus;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
554 if (this._onstatus) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
555 $(elem).hover(function() { status.apply(this, [label, value]); },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
556 function() { status.apply(this, ['', 0]); });
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
557 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
558 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
559 });
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
560
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
561 /* Details about each graph series.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
562 @param graph (SVGGraph) the owning graph
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
563 @param name (string) the name of this series (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
564 @param values (number[]) the list of values to be plotted
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
565 @param fill (string) how the series should be displayed
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
566 @param stroke (string) the colour of the (out)line for the series (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
567 @param strokeWidth (number) the width of the (out)line for the series (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
568 @param settings (object) additional formatting settings (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
569 @return (SVGGraphSeries) the new series object */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
570 function SVGGraphSeries(graph, name, values, fill, stroke, strokeWidth, settings) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
571 if (typeof name != 'string') {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
572 settings = strokeWidth;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
573 strokeWidth = stroke;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
574 stroke = fill;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
575 fill = values;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
576 values = name;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
577 name = null;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
578 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
579 if (typeof stroke != 'string') {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
580 settings = strokeWidth;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
581 strokeWidth = stroke;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
582 stroke = null;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
583 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
584 if (typeof strokeWidth != 'number') {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
585 settings = strokeWidth;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
586 strokeWidth = null;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
587 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
588 this._graph = graph; // The owning graph
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
589 this._name = name || ''; // The name of this series
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
590 this._values = values || []; // The list of values for this series
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
591 this._axis = 1; // Which axis this series applies to: 1 = primary, 2 = secondary
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
592 this._fill = fill || 'green'; // How the series is plotted
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
593 this._stroke = stroke || 'black'; // The colour for the (out)line
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
594 this._strokeWidth = strokeWidth || 1; // The (out)line width
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
595 this._settings = settings || {}; // Additional formatting settings for the series
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
596 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
597
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
598 $.extend(SVGGraphSeries.prototype, {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
599
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
600 /* Set or retrieve the name for this series.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
601 @param name (string) the series' name
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
602 @return (SVGGraphSeries) this series object or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
603 (string) the series name (if no parameters) */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
604 name: function(name) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
605 if (arguments.length == 0) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
606 return this._name;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
607 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
608 this._name = name;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
609 this._graph._drawGraph();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
610 return this;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
611 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
612
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
613 /* Set or retrieve the values for this series.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
614 @param name (string) the series' name (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
615 @param values (number[]) the values to be graphed
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
616 @return (SVGGraphSeries) this series object or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
617 (number[]) the series values (if no parameters) */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
618 values: function(name, values) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
619 if (arguments.length == 0) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
620 return this._values;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
621 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
622 if (isArray(name)) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
623 values = name;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
624 name = null;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
625 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
626 this._name = name || this._name;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
627 this._values = values;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
628 this._graph._drawGraph();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
629 return this;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
630 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
631
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
632 /* Set or retrieve the formatting for this series.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
633 @param fill (string) how the values are filled when plotted
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
634 @param stroke (string) the (out)line colour (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
635 @param strokeWidth (number) the line's width (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
636 @param settings (object) additional formatting settings for the series (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
637 @return (SVGGraphSeries) this series object or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
638 (object) formatting settings (if no parameters) */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
639 format: function(fill, stroke, strokeWidth, settings) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
640 if (arguments.length == 0) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
641 return $.extend({fill: this._fill, stroke: this._stroke,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
642 strokeWidth: this._strokeWidth}, this._settings);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
643 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
644 if (typeof stroke != 'string') {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
645 settings = strokeWidth;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
646 strokeWidth = stroke;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
647 stroke = null;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
648 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
649 if (typeof strokeWidth != 'number') {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
650 settings = strokeWidth;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
651 strokeWidth = null;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
652 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
653 this._fill = fill || this._fill;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
654 this._stroke = stroke || this._stroke;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
655 this._strokeWidth = strokeWidth || this._strokeWidth;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
656 $.extend(this._settings, settings || {});
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
657 this._graph._drawGraph();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
658 return this;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
659 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
660
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
661 /* Return to the parent graph. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
662 end: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
663 return this._graph;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
664 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
665 });
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
666
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
667 /* Details about each graph axis.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
668 @param graph (SVGGraph) the owning graph
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
669 @param title (string) the title of the axis
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
670 @param min (number) the minimum value displayed on this axis
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
671 @param max (number) the maximum value displayed on this axis
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
672 @param major (number) the distance between major ticks
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
673 @param minor (number) the distance between minor ticks (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
674 @return (SVGGraphAxis) the new axis object */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
675 function SVGGraphAxis(graph, title, min, max, major, minor) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
676 this._graph = graph; // The owning graph
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
677 this._title = title || ''; // Title of this axis
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
678 this._titleFormat = {}; // Formatting settings for the title
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
679 this._titleOffset = 0; // The offset for positioning the title
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
680 this._labels = null; // List of labels for this axis - one per possible value across all series
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
681 this._labelFormat = {}; // Formatting settings for the labels
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
682 this._lineFormat = {stroke: 'black', strokeWidth: 1}; // Formatting settings for the axis lines
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
683 this._ticks = {major: major || 10, minor: minor || 0, size: 10, position: 'out'}; // Tick mark options
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
684 this._scale = {min: min || 0, max: max || 100}; // Axis scale settings
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
685 this._crossAt = 0; // Where this axis crosses the other one
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
686 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
687
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
688 $.extend(SVGGraphAxis.prototype, {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
689
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
690 /* Set or retrieve the scale for this axis.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
691 @param min (number) the minimum value shown
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
692 @param max (number) the maximum value shown
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
693 @return (SVGGraphAxis) this axis object or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
694 (object) min and max values (if no parameters) */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
695 scale: function(min, max) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
696 if (arguments.length == 0) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
697 return this._scale;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
698 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
699 this._scale.min = min;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
700 this._scale.max = max;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
701 this._graph._drawGraph();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
702 return this;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
703 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
704
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
705 /* Set or retrieve the ticks for this axis.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
706 @param major (number) the distance between major ticks
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
707 @param minor (number) the distance between minor ticks
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
708 @param size (number) the length of the major ticks (minor are half) (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
709 @param position (string) the location of the ticks:
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
710 'in', 'out', 'both' (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
711 @return (SVGGraphAxis) this axis object or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
712 (object) major, minor, size, and position values (if no parameters) */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
713 ticks: function(major, minor, size, position) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
714 if (arguments.length == 0) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
715 return this._ticks;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
716 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
717 if (typeof size == 'string') {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
718 position = size;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
719 size = null;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
720 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
721 this._ticks.major = major;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
722 this._ticks.minor = minor;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
723 this._ticks.size = size || this._ticks.size;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
724 this._ticks.position = position || this._ticks.position;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
725 this._graph._drawGraph();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
726 return this;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
727 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
728
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
729 /* Set or retrieve the title for this axis.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
730 @param title (string) the title text
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
731 @param offset (number) the distance to offset the title position (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
732 @param colour (string) how to colour the title (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
733 @param format (object) formatting settings for the title (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
734 @return (SVGGraphAxis) this axis object or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
735 (object) title, offset, and format values (if no parameters) */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
736 title: function(title, offset, colour, format) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
737 if (arguments.length == 0) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
738 return {title: this._title, offset: this._titleOffset, format: this._titleFormat};
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
739 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
740 if (typeof offset != 'number') {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
741 format = colour;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
742 colour = offset;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
743 offset = null;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
744 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
745 if (typeof colour != 'string') {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
746 format = colour;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
747 colour = null;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
748 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
749 this._title = title;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
750 this._titleOffset = (offset != null ? offset : this._titleOffset);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
751 if (colour || format) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
752 this._titleFormat = $.extend(format || {}, (colour ? {fill: colour} : {}));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
753 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
754 this._graph._drawGraph();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
755 return this;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
756 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
757
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
758 /* Set or retrieve the labels for this axis.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
759 @param labels (string[]) the text for each entry
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
760 @param colour (string) how to colour the labels (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
761 @param format (object) formatting settings for the labels (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
762 @return (SVGGraphAxis) this axis object or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
763 (object) labels and format values (if no parameters) */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
764 labels: function(labels, colour, format) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
765 if (arguments.length == 0) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
766 return {labels: this._labels, format: this._labelFormat};
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
767 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
768 if (typeof colour != 'string') {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
769 format = colour;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
770 colour = null;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
771 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
772 this._labels = labels;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
773 if (colour || format) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
774 this._labelFormat = $.extend(format || {}, (colour ? {fill: colour} : {}));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
775 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
776 this._graph._drawGraph();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
777 return this;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
778 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
779
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
780 /* Set or retrieve the line formatting for this axis.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
781 @param colour (string) the line's colour
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
782 @param width (number) the line's width (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
783 @param settings (object) additional formatting settings for the line (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
784 @return (SVGGraphAxis) this axis object or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
785 (object) line formatting values (if no parameters) */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
786 line: function(colour, width, settings) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
787 if (arguments.length == 0) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
788 return this._lineFormat;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
789 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
790 if (typeof width == 'object') {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
791 settings = width;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
792 width = null;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
793 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
794 $.extend(this._lineFormat, {stroke: colour},
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
795 (width ? {strokeWidth: width} : {}), settings || {});
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
796 this._graph._drawGraph();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
797 return this;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
798 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
799
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
800 /* Return to the parent graph. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
801 end: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
802 return this._graph;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
803 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
804 });
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
805
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
806 /* Details about the graph legend.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
807 @param graph (SVGGraph) the owning graph
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
808 @param bgSettings (object) additional formatting settings for the legend background (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
809 @param textSettings (object) additional formatting settings for the legend text (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
810 @return (SVGGraphLegend) the new legend object */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
811 function SVGGraphLegend(graph, bgSettings, textSettings) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
812 this._graph = graph; // The owning graph
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
813 this._show = true; // Show the legend?
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
814 this._area = [0.9, 0.1, 1.0, 0.9]; // The legend area: left, top, right, bottom,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
815 // > 1 in pixels, <= 1 as proportion
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
816 this._sampleSize = 15; // Size of sample box
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
817 this._bgSettings = bgSettings || {stroke: 'gray'}; // Additional formatting settings for the legend background
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
818 this._textSettings = textSettings || {}; // Additional formatting settings for the text
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
819 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
820
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
821 $.extend(SVGGraphLegend.prototype, {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
822
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
823 /* Set or retrieve whether the legend should be shown.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
824 @param show (boolean) true to display it, false to hide it
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
825 @return (SVGGraphLegend) this legend object or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
826 (boolean) show the legend? (if no parameters) */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
827 show: function(show) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
828 if (arguments.length == 0) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
829 return this._show;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
830 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
831 this._show = show;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
832 this._graph._drawGraph();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
833 return this;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
834 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
835
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
836 /* Set or retrieve the legend area.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
837 @param left (number) > 1 is pixels, <= 1 is proportion of width or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
838 (number[4]) for left, top, right, bottom
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
839 @param top (number) > 1 is pixels, <= 1 is proportion of height
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
840 @param right (number) > 1 is pixels, <= 1 is proportion of width
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
841 @param bottom (number) > 1 is pixels, <= 1 is proportion of height
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
842 @return (SVGGraphLegend) this legend object or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
843 (number[4]) the legend area: left, top, right, bottom (if no parameters) */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
844 area: function(left, top, right, bottom) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
845 if (arguments.length == 0) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
846 return this._area;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
847 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
848 this._area = (isArray(left) ? left : [left, top, right, bottom]);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
849 this._graph._drawGraph();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
850 return this;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
851 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
852
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
853 /* Set or retrieve additional settings for the legend area.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
854 @param sampleSize (number) the size of the sample box to display (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
855 @param bgSettings (object) additional formatting settings for the legend background
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
856 @param textSettings (object) additional formatting settings for the legend text (optional)
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
857 @return (SVGGraphLegend) this legend object or
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
858 (object) bgSettings and textSettings for the legend (if no parameters) */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
859 settings: function(sampleSize, bgSettings, textSettings) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
860 if (arguments.length == 0) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
861 return {sampleSize: this._sampleSize, bgSettings: this._bgSettings,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
862 textSettings: this._textSettings};
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
863 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
864 if (typeof sampleSize != 'number') {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
865 textSettings = bgSettings;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
866 bgSettings = sampleSize;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
867 sampleSize = null;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
868 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
869 this._sampleSize = sampleSize || this._sampleSize;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
870 this._bgSettings = bgSettings;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
871 this._textSettings = textSettings || this._textSettings;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
872 this._graph._drawGraph();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
873 return this;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
874 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
875
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
876 /* Return to the parent graph. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
877 end: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
878 return this._graph;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
879 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
880 });
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
881
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
882 //==============================================================================
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
883
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
884 /* Round a number to a given number of decimal points. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
885 function roundNumber(num, dec) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
886 return Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
887 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
888
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
889 var barOptions = ['barWidth (number) - the width of each bar',
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
890 'barGap (number) - the gap between sets of bars'];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
891
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
892 //------------------------------------------------------------------------------
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
893
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
894 /* Draw a standard grouped column bar chart. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
895 function SVGColumnChart() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
896 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
897
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
898 $.extend(SVGColumnChart.prototype, {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
899
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
900 /* Retrieve the display title for this chart type.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
901 @return the title */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
902 title: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
903 return 'Basic column chart';
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
904 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
905
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
906 /* Retrieve a description of this chart type.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
907 @return its description */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
908 description: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
909 return 'Compare sets of values as vertical bars with grouped categories.';
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
910 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
911
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
912 /* Retrieve a list of the options that may be set for this chart type.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
913 @return options list */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
914 options: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
915 return barOptions;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
916 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
917
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
918 /* Actually draw the graph in this type's style.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
919 @param graph (object) the SVGGraph object */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
920 drawGraph: function(graph) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
921 graph._drawChartBackground(true);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
922 var barWidth = graph._chartOptions.barWidth || 10;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
923 var barGap = graph._chartOptions.barGap || 10;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
924 var numSer = graph._series.length;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
925 var numVal = (numSer ? (graph._series[0])._values.length : 0);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
926 var dims = graph._getDims();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
927 var xScale = dims[graph.W] / ((numSer * barWidth + barGap) * numVal + barGap);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
928 var yScale = dims[graph.H] / (graph.yAxis._scale.max - graph.yAxis._scale.min);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
929 this._chart = graph._wrapper.group(graph._chartCont, {class_: 'chart'});
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
930 for (var i = 0; i < numSer; i++) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
931 this._drawSeries(graph, i, numSer, barWidth, barGap, dims, xScale, yScale);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
932 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
933 graph._drawTitle();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
934 graph._drawAxes(true);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
935 this._drawXAxis(graph, numSer, numVal, barWidth, barGap, dims, xScale);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
936 graph._drawLegend();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
937 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
938
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
939 /* Plot an individual series. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
940 _drawSeries: function(graph, cur, numSer, barWidth, barGap, dims, xScale, yScale) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
941 var series = graph._series[cur];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
942 var g = graph._wrapper.group(this._chart,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
943 $.extend({class_: 'series' + cur, fill: series._fill, stroke: series._stroke,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
944 strokeWidth: series._strokeWidth}, series._settings || {}));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
945 for (var i = 0; i < series._values.length; i++) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
946 var r = graph._wrapper.rect(g,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
947 dims[graph.X] + xScale * (barGap + i * (numSer * barWidth + barGap) + (cur * barWidth)),
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
948 dims[graph.Y] + yScale * (graph.yAxis._scale.max - series._values[i]),
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
949 xScale * barWidth, yScale * series._values[i]);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
950 graph._showStatus(r, series._name, series._values[i]);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
951 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
952 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
953
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
954 /* Draw the x-axis and its ticks. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
955 _drawXAxis: function(graph, numSer, numVal, barWidth, barGap, dims, xScale) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
956 var axis = graph.xAxis;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
957 if (axis._title) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
958 graph._wrapper.text(graph._chartCont, dims[graph.X] + dims[graph.W] / 2,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
959 dims[graph.Y] + dims[graph.H] + axis._titleOffset,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
960 axis._title, $.extend({textAnchor: 'middle'}, axis._titleFormat || {}));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
961 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
962 var gl = graph._wrapper.group(graph._chartCont, $.extend({class_: 'xAxis'}, axis._lineFormat));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
963 var gt = graph._wrapper.group(graph._chartCont, $.extend({class_: 'xAxisLabels',
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
964 textAnchor: 'middle'}, axis._labelFormat));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
965 graph._wrapper.line(gl, dims[graph.X], dims[graph.Y] + dims[graph.H],
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
966 dims[graph.X] + dims[graph.W], dims[graph.Y] + dims[graph.H]);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
967 if (axis._ticks.major) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
968 var offsets = graph._getTickOffsets(axis, true);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
969 for (var i = 1; i < numVal; i++) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
970 var x = dims[graph.X] + xScale * (barGap / 2 + i * (numSer * barWidth + barGap));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
971 graph._wrapper.line(gl, x, dims[graph.Y] + dims[graph.H] + offsets[0] * axis._ticks.size,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
972 x, dims[graph.Y] + dims[graph.H] + offsets[1] * axis._ticks.size);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
973 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
974 for (var i = 0; i < numVal; i++) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
975 var x = dims[graph.X] + xScale * (barGap / 2 + (i + 0.5) * (numSer * barWidth + barGap));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
976 graph._wrapper.text(gt, x, dims[graph.Y] + dims[graph.H] + 2 * axis._ticks.size,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
977 (axis._labels ? axis._labels[i] : '' + i));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
978 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
979 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
980 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
981 });
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
982
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
983 //------------------------------------------------------------------------------
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
984
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
985 /* Draw a stacked column bar chart. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
986 function SVGStackedColumnChart() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
987 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
988
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
989 $.extend(SVGStackedColumnChart.prototype, {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
990
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
991 /* Retrieve the display title for this chart type.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
992 @return the title */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
993 title: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
994 return 'Stacked column chart';
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
995 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
996
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
997 /* Retrieve a description of this chart type.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
998 @return its description */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
999 description: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1000 return 'Compare sets of values as vertical bars showing ' +
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1001 'relative contributions to the whole for each category.';
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1002 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1003
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1004 /* Retrieve a list of the options that may be set for this chart type.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1005 @return options list */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1006 options: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1007 return barOptions;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1008 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1009
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1010 /* Actually draw the graph in this type's style.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1011 @param graph (object) the SVGGraph object */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1012 drawGraph: function(graph) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1013 var bg = graph._drawChartBackground(true, true);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1014 var dims = graph._getDims();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1015 if (graph._gridlines[0] && graph.xAxis._ticks.major) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1016 graph._drawGridlines(bg, graph._getPercentageAxis(), true, dims, graph._gridlines[0]);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1017 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1018 var barWidth = graph._chartOptions.barWidth || 10;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1019 var barGap = graph._chartOptions.barGap || 10;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1020 var numSer = graph._series.length;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1021 var numVal = (numSer ? (graph._series[0])._values.length : 0);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1022 var xScale = dims[graph.W] / ((barWidth + barGap) * numVal + barGap);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1023 var yScale = dims[graph.H];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1024 this._chart = graph._wrapper.group(graph._chartCont, {class_: 'chart'});
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1025 this._drawColumns(graph, numSer, numVal, barWidth, barGap, dims, xScale, yScale);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1026 graph._drawTitle();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1027 graph._wrapper.text(graph._chartCont, 0, 0, $.svg.graphing.region.percentageText,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1028 $.extend({textAnchor: 'middle', transform: 'translate(' +
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1029 (dims[graph.X] - graph.yAxis._titleOffset) + ',' +
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1030 (dims[graph.Y] + dims[graph.H] / 2) + ') rotate(-90)'}, graph.yAxis._titleFormat || {}));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1031 var pAxis = $.extend({}, graph._getPercentageAxis());
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1032 $.extend(pAxis._labelFormat, graph.yAxis._labelFormat || {});
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1033 graph._drawAxis(pAxis, 'yAxis', dims[graph.X], dims[graph.Y],
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1034 dims[graph.X], dims[graph.Y] + dims[graph.H]);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1035 this._drawXAxis(graph, numVal, barWidth, barGap, dims, xScale);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1036 graph._drawLegend();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1037 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1038
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1039 /* Plot all of the columns. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1040 _drawColumns: function(graph, numSer, numVal, barWidth, barGap, dims, xScale, yScale) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1041 var totals = graph._getTotals();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1042 var accum = [];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1043 for (var i = 0; i < numVal; i++) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1044 accum[i] = 0;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1045 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1046 for (var s = 0; s < numSer; s++) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1047 var series = graph._series[s];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1048 var g = graph._wrapper.group(this._chart,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1049 $.extend({class_: 'series' + s, fill: series._fill,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1050 stroke: series._stroke, strokeWidth: series._strokeWidth},
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1051 series._settings || {}));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1052 for (var i = 0; i < series._values.length; i++) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1053 accum[i] += series._values[i];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1054 var r = graph._wrapper.rect(g,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1055 dims[graph.X] + xScale * (barGap + i * (barWidth + barGap)),
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1056 dims[graph.Y] + yScale * (totals[i] - accum[i]) / totals[i],
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1057 xScale * barWidth, yScale * series._values[i] / totals[i]);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1058 graph._showStatus(r, series._name,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1059 roundNumber(series._values[i] / totals[i] * 100, 2));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1060 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1061 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1062 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1063
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1064 /* Draw the x-axis and its ticks. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1065 _drawXAxis: function(graph, numVal, barWidth, barGap, dims, xScale) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1066 var axis = graph.xAxis;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1067 if (axis._title) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1068 graph._wrapper.text(graph._chartCont, dims[graph.X] + dims[graph.W] / 2,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1069 dims[graph.Y] + dims[graph.H] + axis._titleOffset,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1070 axis._title, $.extend({textAnchor: 'middle'}, axis._titleFormat || {}));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1071 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1072 var gl = graph._wrapper.group(graph._chartCont, $.extend({class_: 'xAxis'}, axis._lineFormat));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1073 var gt = graph._wrapper.group(graph._chartCont, $.extend({class_: 'xAxisLabels',
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1074 textAnchor: 'middle'}, axis._labelFormat));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1075 graph._wrapper.line(gl, dims[graph.X], dims[graph.Y] + dims[graph.H],
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1076 dims[graph.X] + dims[graph.W], dims[graph.Y] + dims[graph.H]);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1077 if (axis._ticks.major) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1078 var offsets = graph._getTickOffsets(axis, true);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1079 for (var i = 1; i < numVal; i++) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1080 var x = dims[graph.X] + xScale * (barGap / 2 + i * (barWidth + barGap));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1081 graph._wrapper.line(gl, x, dims[graph.Y] + dims[graph.H] + offsets[0] * axis._ticks.size,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1082 x, dims[graph.Y] + dims[graph.H] + offsets[1] * axis._ticks.size);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1083 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1084 for (var i = 0; i < numVal; i++) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1085 var x = dims[graph.X] + xScale * (barGap / 2 + (i + 0.5) * (barWidth + barGap));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1086 graph._wrapper.text(gt, x, dims[graph.Y] + dims[graph.H] + 2 * axis._ticks.size,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1087 (axis._labels ? axis._labels[i] : '' + i));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1088 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1089 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1090 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1091 });
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1092
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1093 //------------------------------------------------------------------------------
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1094
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1095 /* Draw a standard grouped row bar chart. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1096 function SVGRowChart() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1097 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1098
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1099 $.extend(SVGRowChart.prototype, {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1100
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1101 /* Retrieve the display title for this chart type.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1102 @return the title */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1103 title: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1104 return 'Basic row chart';
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1105 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1106
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1107 /* Retrieve a description of this chart type.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1108 @return its description */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1109 description: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1110 return 'Compare sets of values as horizontal rows with grouped categories.';
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1111 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1112
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1113 /* Retrieve a list of the options that may be set for this chart type.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1114 @return options list */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1115 options: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1116 return barOptions;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1117 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1118
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1119 /* Actually draw the graph in this type's style.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1120 @param graph (object) the SVGGraph object */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1121 drawGraph: function(graph) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1122 var bg = graph._drawChartBackground(true, true);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1123 var dims = graph._getDims();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1124 graph._drawGridlines(bg, graph.yAxis, false, dims, graph._gridlines[0]);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1125 var barWidth = graph._chartOptions.barWidth || 10;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1126 var barGap = graph._chartOptions.barGap || 10;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1127 var numSer = graph._series.length;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1128 var numVal = (numSer ? (graph._series[0])._values.length : 0);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1129 var xScale = dims[graph.W] / (graph.yAxis._scale.max - graph.yAxis._scale.min);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1130 var yScale = dims[graph.H] / ((numSer * barWidth + barGap) * numVal + barGap);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1131 this._chart = graph._wrapper.group(graph._chartCont, {class_: 'chart'});
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1132 for (var i = 0; i < numSer; i++) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1133 this._drawSeries(graph, i, numSer, barWidth, barGap, dims, xScale, yScale);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1134 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1135 graph._drawTitle();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1136 this._drawAxes(graph, numSer, numVal, barWidth, barGap, dims, yScale);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1137 graph._drawLegend();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1138 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1139
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1140 /* Plot an individual series. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1141 _drawSeries: function(graph, cur, numSer, barWidth, barGap, dims, xScale, yScale) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1142 var series = graph._series[cur];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1143 var g = graph._wrapper.group(this._chart,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1144 $.extend({class_: 'series' + cur, fill: series._fill,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1145 stroke: series._stroke, strokeWidth: series._strokeWidth},
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1146 series._settings || {}));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1147 for (var i = 0; i < series._values.length; i++) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1148 var r = graph._wrapper.rect(g,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1149 dims[graph.X] + xScale * (0 - graph.yAxis._scale.min),
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1150 dims[graph.Y] + yScale * (barGap + i * (numSer * barWidth + barGap) + (cur * barWidth)),
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1151 xScale * series._values[i], yScale * barWidth);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1152 graph._showStatus(r, series._name, series._values[i]);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1153 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1154 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1155
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1156 /* Draw the axes for this graph. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1157 _drawAxes: function(graph, numSer, numVal, barWidth, barGap, dims, yScale) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1158 // X-axis
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1159 var axis = graph.yAxis;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1160 if (axis) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1161 if (axis._title) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1162 graph._wrapper.text(graph._chartCont, dims[graph.X] + dims[graph.W] / 2,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1163 dims[graph.Y] + dims[graph.H] + axis._titleOffset, axis._title, axis._titleFormat);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1164 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1165 graph._drawAxis(axis, 'xAxis', dims[graph.X], dims[graph.Y] + dims[graph.H],
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1166 dims[graph.X] + dims[graph.W], dims[graph.Y] + dims[graph.H]);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1167 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1168 // Y-axis
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1169 var axis = graph.xAxis;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1170 if (axis._title) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1171 graph._wrapper.text(graph._chartCont, 0, 0, axis._title, $.extend({textAnchor: 'middle',
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1172 transform: 'translate(' + (dims[graph.X] - axis._titleOffset) + ',' +
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1173 (dims[graph.Y] + dims[graph.H] / 2) + ') rotate(-90)'}, axis._titleFormat || {}));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1174 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1175 var gl = graph._wrapper.group(graph._chartCont, $.extend({class_: 'yAxis'}, axis._lineFormat));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1176 var gt = graph._wrapper.group(graph._chartCont, $.extend(
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1177 {class_: 'yAxisLabels', textAnchor: 'end'}, axis._labelFormat));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1178 graph._wrapper.line(gl, dims[graph.X], dims[graph.Y], dims[graph.X], dims[graph.Y] + dims[graph.H]);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1179 if (axis._ticks.major) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1180 var offsets = graph._getTickOffsets(axis, false);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1181 for (var i = 1; i < numVal; i++) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1182 var y = dims[graph.Y] + yScale * (barGap / 2 + i * (numSer * barWidth + barGap));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1183 graph._wrapper.line(gl, dims[graph.X] + offsets[0] * axis._ticks.size, y,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1184 dims[graph.X] + offsets[1] * axis._ticks.size, y);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1185 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1186 for (var i = 0; i < numVal; i++) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1187 var y = dims[graph.Y] + yScale * (barGap / 2 + (i + 0.5) * (numSer * barWidth + barGap));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1188 graph._wrapper.text(gt, dims[graph.X] - axis._ticks.size, y,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1189 (axis._labels ? axis._labels[i] : '' + i));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1190 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1191 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1192 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1193 });
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1194
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1195 //------------------------------------------------------------------------------
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1196
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1197 /* Draw a stacked row bar chart. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1198 function SVGStackedRowChart() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1199 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1200
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1201 $.extend(SVGStackedRowChart.prototype, {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1202
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1203 /* Retrieve the display title for this chart type.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1204 @return the title */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1205 title: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1206 return 'Stacked row chart';
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1207 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1208
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1209 /* Retrieve a description of this chart type.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1210 @return its description */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1211 description: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1212 return 'Compare sets of values as horizontal bars showing ' +
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1213 'relative contributions to the whole for each category.';
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1214 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1215
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1216 /* Retrieve a list of the options that may be set for this chart type.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1217 @return options list */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1218 options: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1219 return barOptions;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1220 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1221
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1222 /* Actually draw the graph in this type's style.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1223 @param graph (object) the SVGGraph object */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1224 drawGraph: function(graph) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1225 var bg = graph._drawChartBackground(true, true);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1226 var dims = graph._getDims();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1227 if (graph._gridlines[0] && graph.xAxis._ticks.major) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1228 graph._drawGridlines(bg, graph._getPercentageAxis(), false, dims, graph._gridlines[0]);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1229 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1230 var barWidth = graph._chartOptions.barWidth || 10;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1231 var barGap = graph._chartOptions.barGap || 10;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1232 var numSer = graph._series.length;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1233 var numVal = (numSer ? (graph._series[0])._values.length : 0);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1234 var xScale = dims[graph.W];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1235 var yScale = dims[graph.H] / ((barWidth + barGap) * numVal + barGap);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1236 this._chart = graph._wrapper.group(graph._chartCont, {class_: 'chart'});
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1237 this._drawRows(graph, numSer, numVal, barWidth, barGap, dims, xScale, yScale);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1238 graph._drawTitle();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1239 graph._wrapper.text(graph._chartCont, dims[graph.X] + dims[graph.W] / 2,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1240 dims[graph.Y] + dims[graph.H] + graph.xAxis._titleOffset,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1241 $.svg.graphing.region.percentageText,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1242 $.extend({textAnchor: 'middle'}, graph.yAxis._titleFormat || {}));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1243 var pAxis = $.extend({}, graph._getPercentageAxis());
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1244 $.extend(pAxis._labelFormat, graph.yAxis._labelFormat || {});
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1245 graph._drawAxis(pAxis, 'xAxis', dims[graph.X], dims[graph.Y] + dims[graph.H],
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1246 dims[graph.X] + dims[graph.W], dims[graph.Y] + dims[graph.H]);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1247 this._drawYAxis(graph, numVal, barWidth, barGap, dims, yScale);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1248 graph._drawLegend();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1249 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1250
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1251 /* Plot all of the rows. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1252 _drawRows: function(graph, numSer, numVal, barWidth, barGap, dims, xScale, yScale) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1253 var totals = graph._getTotals();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1254 var accum = [];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1255 for (var i = 0; i < numVal; i++) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1256 accum[i] = 0;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1257 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1258 for (var s = 0; s < numSer; s++) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1259 var series = graph._series[s];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1260 var g = graph._wrapper.group(this._chart,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1261 $.extend({class_: 'series' + s, fill: series._fill,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1262 stroke: series._stroke, strokeWidth: series._strokeWidth},
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1263 series._settings || {}));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1264 for (var i = 0; i < series._values.length; i++) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1265 var r = graph._wrapper.rect(g,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1266 dims[graph.X] + xScale * accum[i] / totals[i],
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1267 dims[graph.Y] + yScale * (barGap + i * (barWidth + barGap)),
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1268 xScale * series._values[i] / totals[i], yScale * barWidth);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1269 graph._showStatus(r, series._name,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1270 roundNumber(series._values[i] / totals[i] * 100, 2));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1271 accum[i] += series._values[i];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1272 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1273 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1274 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1275
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1276 /* Draw the y-axis and its ticks. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1277 _drawYAxis: function(graph, numVal, barWidth, barGap, dims, yScale) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1278 var axis = graph.xAxis;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1279 if (axis._title) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1280 graph._wrapper.text(graph._chartCont, 0, 0, axis._title, $.extend({textAnchor: 'middle',
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1281 transform: 'translate(' + (dims[graph.X] - axis._titleOffset) + ',' +
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1282 (dims[graph.Y] + dims[graph.H] / 2) + ') rotate(-90)'}, axis._titleFormat || {}));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1283 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1284 var gl = graph._wrapper.group(graph._chartCont,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1285 $.extend({class_: 'yAxis'}, axis._lineFormat));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1286 var gt = graph._wrapper.group(graph._chartCont,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1287 $.extend({class_: 'yAxisLabels', textAnchor: 'end'}, axis._labelFormat));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1288 graph._wrapper.line(gl, dims[graph.X], dims[graph.Y],
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1289 dims[graph.X], dims[graph.Y] + dims[graph.H]);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1290 if (axis._ticks.major) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1291 var offsets = graph._getTickOffsets(axis, false);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1292 for (var i = 1; i < numVal; i++) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1293 var y = dims[graph.Y] + yScale * (barGap / 2 + i * (barWidth + barGap));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1294 graph._wrapper.line(gl, dims[graph.X] + offsets[0] * axis._ticks.size, y,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1295 dims[graph.X] + offsets[1] * axis._ticks.size, y);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1296 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1297 for (var i = 0; i < numVal; i++) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1298 var y = dims[graph.Y] + yScale * (barGap / 2 + (i + 0.5) * (barWidth + barGap));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1299 graph._wrapper.text(gt, dims[graph.X] - axis._ticks.size, y,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1300 (axis._labels ? axis._labels[i] : '' + i));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1301 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1302 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1303 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1304 });
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1305
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1306 //------------------------------------------------------------------------------
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1307
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1308 /* Draw a standard line chart. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1309 function SVGLineChart() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1310 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1311
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1312 $.extend(SVGLineChart.prototype, {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1313
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1314 /* Retrieve the display title for this chart type.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1315 @return the title */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1316 title: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1317 return 'Basic line chart';
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1318 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1319
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1320 /* Retrieve a description of this chart type.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1321 @return its description */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1322 description: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1323 return 'Compare sets of values as continuous lines.';
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1324 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1325
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1326 /* Retrieve a list of the options that may be set for this chart type.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1327 @return options list */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1328 options: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1329 return [];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1330 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1331
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1332 /* Actually draw the graph in this type's style.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1333 @param graph (object) the SVGGraph object */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1334 drawGraph: function(graph) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1335 graph._drawChartBackground();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1336 var dims = graph._getDims();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1337 var xScale = dims[graph.W] / (graph.xAxis._scale.max - graph.xAxis._scale.min);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1338 var yScale = dims[graph.H] / (graph.yAxis._scale.max - graph.yAxis._scale.min);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1339 this._chart = graph._wrapper.group(graph._chartCont, {class_: 'chart'});
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1340 for (var i = 0; i < graph._series.length; i++) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1341 this._drawSeries(graph, i, dims, xScale, yScale);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1342 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1343 graph._drawTitle();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1344 graph._drawAxes();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1345 graph._drawLegend();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1346 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1347
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1348 /* Plot an individual series. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1349 _drawSeries: function(graph, cur, dims, xScale, yScale) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1350 var series = graph._series[cur];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1351 var path = graph._wrapper.createPath();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1352 for (var i = 0; i < series._values.length; i++) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1353 var x = dims[graph.X] + i * xScale;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1354 var y = dims[graph.Y] + (graph.yAxis._scale.max - series._values[i]) * yScale;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1355 if (i == 0) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1356 path.move(x, y);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1357 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1358 else {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1359 path.line(x, y);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1360 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1361 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1362 var p = graph._wrapper.path(this._chart, path,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1363 $.extend({id: 'series' + cur, fill: 'none', stroke: series._stroke,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1364 strokeWidth: series._strokeWidth}, series._settings || {}));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1365 graph._showStatus(p, series._name, 0);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1366 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1367 });
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1368
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1369 //------------------------------------------------------------------------------
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1370
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1371 /* Draw a standard pie chart. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1372 function SVGPieChart() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1373 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1374
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1375 $.extend(SVGPieChart.prototype, {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1376
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1377 _options: ['explode (number or number[]) - indexes of sections to explode out of the pie',
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1378 'explodeDist (number) - the distance to move an exploded section',
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1379 'pieGap (number) - the distance between pies for multiple values'],
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1380
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1381 /* Retrieve the display title for this chart type.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1382 @return the title */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1383 title: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1384 return 'Pie chart';
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1385 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1386
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1387 /* Retrieve a description of this chart type.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1388 @return its description */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1389 description: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1390 return 'Compare relative sizes of values as contributions to the whole.';
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1391 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1392
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1393 /* Retrieve a list of the options that may be set for this chart type.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1394 @return options list */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1395 options: function() {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1396 return this._options;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1397 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1398
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1399 /* Actually draw the graph in this type's style.
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1400 @param graph (object) the SVGGraph object */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1401 drawGraph: function(graph) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1402 graph._drawChartBackground(true, true);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1403 this._chart = graph._wrapper.group(graph._chartCont, {class_: 'chart'});
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1404 var dims = graph._getDims();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1405 this._drawSeries(graph, dims);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1406 graph._drawTitle();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1407 graph._drawLegend();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1408 },
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1409
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1410 /* Plot all the series. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1411 _drawSeries: function(graph, dims) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1412 var totals = graph._getTotals();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1413 var numSer = graph._series.length;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1414 var numVal = (numSer ? (graph._series[0])._values.length : 0);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1415 var path = graph._wrapper.createPath();
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1416 var explode = graph._chartOptions.explode || [];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1417 explode = (isArray(explode) ? explode : [explode]);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1418 var explodeDist = graph._chartOptions.explodeDist || 10;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1419 var pieGap = (numVal <= 1 ? 0 : graph._chartOptions.pieGap || 10);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1420 var xBase = (dims[graph.W] - (numVal * pieGap) - pieGap) / numVal / 2;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1421 var yBase = dims[graph.H] / 2;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1422 var radius = Math.min(xBase, yBase) - (explode.length > 0 ? explodeDist : 0);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1423 var gt = graph._wrapper.group(graph._chartCont, $.extend(
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1424 {class_: 'xAxisLabels', textAnchor: 'middle'}, graph.xAxis._labelFormat));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1425 var gl = [];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1426 for (var i = 0; i < numVal; i++) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1427 var cx = dims[graph.X] + xBase + (i * (2 * Math.min(xBase, yBase) + pieGap)) + pieGap;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1428 var cy = dims[graph.Y] + yBase;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1429 var curTotal = 0;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1430 for (var j = 0; j < numSer; j++) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1431 var series = graph._series[j];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1432 if (i == 0) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1433 gl[j] = graph._wrapper.group(this._chart, $.extend({class_: 'series' + j,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1434 fill: series._fill, stroke: series._stroke,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1435 strokeWidth: series._strokeWidth}, series._settings || {}));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1436 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1437 if (series._values[i] == 0) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1438 continue;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1439 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1440 var start = (curTotal / totals[i]) * 2 * Math.PI;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1441 curTotal += series._values[i];
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1442 var end = (curTotal / totals[i]) * 2 * Math.PI;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1443 var exploding = false;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1444 for (var k = 0; k < explode.length; k++) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1445 if (explode[k] == j) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1446 exploding = true;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1447 break;
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1448 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1449 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1450 var x = cx + (exploding ? explodeDist * Math.cos((start + end) / 2) : 0);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1451 var y = cy + (exploding ? explodeDist * Math.sin((start + end) / 2) : 0);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1452 var p = graph._wrapper.path(gl[j], path.reset().move(x, y).
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1453 line(x + radius * Math.cos(start), y + radius * Math.sin(start)).
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1454 arc(radius, radius, 0, (end - start < Math.PI ? 0 : 1), 1,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1455 x + radius * Math.cos(end), y + radius * Math.sin(end)).close());
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1456 graph._showStatus(p, series._name,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1457 roundNumber((end - start) / 2 / Math.PI * 100, 2));
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1458 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1459 if (graph.xAxis) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1460 graph._wrapper.text(gt, cx, dims[graph.Y] + dims[graph.H] + graph.xAxis._titleOffset,
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1461 graph.xAxis._labels[i])
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1462 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1463 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1464 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1465 });
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1466
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1467 //------------------------------------------------------------------------------
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1468
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1469 /* Determine whether an object is an array. */
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1470 function isArray(a) {
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1471 return (a && a.constructor == Array);
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1472 }
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1473
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1474 // Basic chart types
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1475 $.svg.graphing.addChartType('column', new SVGColumnChart());
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1476 $.svg.graphing.addChartType('stackedColumn', new SVGStackedColumnChart());
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1477 $.svg.graphing.addChartType('row', new SVGRowChart());
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1478 $.svg.graphing.addChartType('stackedRow', new SVGStackedRowChart());
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1479 $.svg.graphing.addChartType('line', new SVGLineChart());
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1480 $.svg.graphing.addChartType('pie', new SVGPieChart());
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1481
ccf67eaf97ee added jQuery ui and svg javascripts
hertzhaft
parents:
diff changeset
1482 })(jQuery)