Subversion Repositories Applications.papyrus

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1318 alexandre_ 1
/*
2
	Copyright (c) 2004-2006, The Dojo Foundation
3
	All Rights Reserved.
4
 
5
	Licensed under the Academic Free License version 2.1 or above OR the
6
	modified BSD license. For more information on Dojo licensing, see:
7
 
8
		http://dojotoolkit.org/community/licensing.shtml
9
*/
10
 
11
dojo.provide("dojo.charting.svg.Plotters");
12
dojo.require("dojo.lang.common");
13
if (dojo.render.svg.capable) {
14
	dojo.require("dojo.svg");
15
	dojo.mixin(dojo.charting.Plotters, {Bar:function (plotarea, plot, kwArgs, applyTo) {
16
		var area = plotarea.getArea();
17
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
18
		var n = plot.series.length;
19
		var data = [];
20
		for (var i = 0; i < n; i++) {
21
			var tmp = plot.series[i].data.evaluate(kwArgs);
22
			data.push(tmp);
23
		}
24
		var space = 8;
25
		var nPoints = data[0].length;
26
		if (nPoints == 0) {
27
			return group;
28
		}
29
		var width = ((area.right - area.left) - (space * (nPoints - 1))) / nPoints;
30
		var barWidth = width / n;
31
		var yOrigin = plot.axisY.getCoord(plot.axisX.origin, plotarea, plot);
32
		for (var i = 0; i < nPoints; i++) {
33
			var xStart = area.left + (width * i) + (space * i);
34
			for (var j = 0; j < n; j++) {
35
				var value = data[j][i].y;
36
				var yA = yOrigin;
37
				var x = xStart + (barWidth * j);
38
				var y = plot.axisY.getCoord(value, plotarea, plot);
39
				var h = Math.abs(yA - y);
40
				if (value < plot.axisX.origin) {
41
					yA = y;
42
					y = yOrigin;
43
				}
44
				var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
45
				bar.setAttribute("fill", data[j][i].series.color);
46
				bar.setAttribute("stroke-width", "0");
47
				bar.setAttribute("x", x);
48
				bar.setAttribute("y", y);
49
				bar.setAttribute("width", barWidth);
50
				bar.setAttribute("height", h);
51
				bar.setAttribute("fill-opacity", "0.6");
52
				if (applyTo) {
53
					applyTo(bar, data[j][i].src);
54
				}
55
				group.appendChild(bar);
56
			}
57
		}
58
		return group;
59
	}, HorizontalBar:function (plotarea, plot, kwArgs, applyTo) {
60
		var area = plotarea.getArea();
61
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
62
		var n = plot.series.length;
63
		var data = [];
64
		for (var i = 0; i < n; i++) {
65
			var tmp = plot.series[i].data.evaluate(kwArgs);
66
			data.push(tmp);
67
		}
68
		var space = 6;
69
		var nPoints = data[0].length;
70
		if (nPoints == 0) {
71
			return group;
72
		}
73
		var h = ((area.bottom - area.top) - (space * (nPoints - 1))) / nPoints;
74
		var barH = h / n;
75
		var xOrigin = plot.axisX.getCoord(0, plotarea, plot);
76
		for (var i = 0; i < nPoints; i++) {
77
			var yStart = area.top + (h * i) + (space * i);
78
			for (var j = 0; j < n; j++) {
79
				var value = data[j][i].y;
80
				var y = yStart + (barH * j);
81
				var xA = xOrigin;
82
				var x = plot.axisX.getCoord(value, plotarea, plot);
83
				var w = Math.abs(x - xA);
84
				if (value > 0) {
85
					x = xOrigin;
86
				}
87
				var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
88
				bar.setAttribute("fill", data[j][i].series.color);
89
				bar.setAttribute("stroke-width", "0");
90
				bar.setAttribute("x", xA);
91
				bar.setAttribute("y", y);
92
				bar.setAttribute("width", w);
93
				bar.setAttribute("height", barH);
94
				bar.setAttribute("fill-opacity", "0.6");
95
				if (applyTo) {
96
					applyTo(bar, data[j][i].src);
97
				}
98
				group.appendChild(bar);
99
			}
100
		}
101
		return group;
102
	}, Gantt:function (plotarea, plot, kwArgs, applyTo) {
103
		var area = plotarea.getArea();
104
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
105
		var n = plot.series.length;
106
		var data = [];
107
		for (var i = 0; i < n; i++) {
108
			var tmp = plot.series[i].data.evaluate(kwArgs);
109
			data.push(tmp);
110
		}
111
		var space = 2;
112
		var nPoints = data[0].length;
113
		if (nPoints == 0) {
114
			return group;
115
		}
116
		var h = ((area.bottom - area.top) - (space * (nPoints - 1))) / nPoints;
117
		var barH = h / n;
118
		for (var i = 0; i < nPoints; i++) {
119
			var yStart = area.top + (h * i) + (space * i);
120
			for (var j = 0; j < n; j++) {
121
				var high = data[j][i].high;
122
				var low = data[j][i].low;
123
				if (low > high) {
124
					var t = high;
125
					high = low;
126
					low = t;
127
				}
128
				var x = plot.axisX.getCoord(low, plotarea, plot);
129
				var w = plot.axisX.getCoord(high, plotarea, plot) - x;
130
				var y = yStart + (barH * j);
131
				var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
132
				bar.setAttribute("fill", data[j][i].series.color);
133
				bar.setAttribute("stroke-width", "0");
134
				bar.setAttribute("x", x);
135
				bar.setAttribute("y", y);
136
				bar.setAttribute("width", w);
137
				bar.setAttribute("height", barH);
138
				bar.setAttribute("fill-opacity", "0.6");
139
				if (applyTo) {
140
					applyTo(bar, data[j][i].src);
141
				}
142
				group.appendChild(bar);
143
			}
144
		}
145
		return group;
146
	}, StackedArea:function (plotarea, plot, kwArgs, applyTo) {
147
		var area = plotarea.getArea();
148
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
149
		var n = plot.series.length;
150
		var data = [];
151
		var totals = [];
152
		for (var i = 0; i < n; i++) {
153
			var tmp = plot.series[i].data.evaluate(kwArgs);
154
			for (var j = 0; j < tmp.length; j++) {
155
				if (i == 0) {
156
					totals.push(tmp[j].y);
157
				} else {
158
					totals[j] += tmp[j].y;
159
				}
160
				tmp[j].y = totals[j];
161
			}
162
			data.push(tmp);
163
		}
164
		for (var i = n - 1; i >= 0; i--) {
165
			var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
166
			path.setAttribute("fill", data[i][0].series.color);
167
			path.setAttribute("fill-opacity", "0.4");
168
			path.setAttribute("stroke", data[i][0].series.color);
169
			path.setAttribute("stroke-width", "1");
170
			path.setAttribute("stroke-opacity", "0.85");
171
			var cmd = [];
172
			var r = 3;
173
			for (var j = 0; j < data[i].length; j++) {
174
				var values = data[i];
175
				var x = plot.axisX.getCoord(values[j].x, plotarea, plot);
176
				var y = plot.axisY.getCoord(values[j].y, plotarea, plot);
177
				if (j == 0) {
178
					cmd.push("M");
179
				} else {
180
					cmd.push("L");
181
				}
182
				cmd.push(x + "," + y);
183
				var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
184
				c.setAttribute("cx", x);
185
				c.setAttribute("cy", y);
186
				c.setAttribute("r", "3");
187
				c.setAttribute("fill", values[j].series.color);
188
				c.setAttribute("fill-opacity", "0.6");
189
				c.setAttribute("stroke-width", "1");
190
				c.setAttribute("stroke-opacity", "0.85");
191
				group.appendChild(c);
192
				if (applyTo) {
193
					applyTo(c, data[i].src);
194
				}
195
			}
196
			if (i == 0) {
197
				cmd.push("L");
198
				cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
199
				cmd.push("L");
200
				cmd.push(plot.axisX.getCoord(data[0][0].x, plotarea, plot) + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
201
				cmd.push("Z");
202
			} else {
203
				var values = data[i - 1];
204
				cmd.push("L");
205
				cmd.push(x + "," + Math.round(plot.axisY.getCoord(values[values.length - 1].y, plotarea, plot)));
206
				for (var j = values.length - 2; j >= 0; j--) {
207
					var x = plot.axisX.getCoord(values[j].x, plotarea, plot);
208
					var y = plot.axisY.getCoord(values[j].y, plotarea, plot);
209
					cmd.push("L");
210
					cmd.push(x + "," + y);
211
				}
212
			}
213
			path.setAttribute("d", cmd.join(" ") + " Z");
214
			group.appendChild(path);
215
		}
216
		return group;
217
	}, StackedCurvedArea:function (plotarea, plot, kwArgs, applyTo) {
218
		var tension = 3;
219
		var area = plotarea.getArea();
220
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
221
		var n = plot.series.length;
222
		var data = [];
223
		var totals = [];
224
		for (var i = 0; i < n; i++) {
225
			var tmp = plot.series[i].data.evaluate(kwArgs);
226
			for (var j = 0; j < tmp.length; j++) {
227
				if (i == 0) {
228
					totals.push(tmp[j].y);
229
				} else {
230
					totals[j] += tmp[j].y;
231
				}
232
				tmp[j].y = totals[j];
233
			}
234
			data.push(tmp);
235
		}
236
		for (var i = n - 1; i >= 0; i--) {
237
			var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
238
			path.setAttribute("fill", data[i][0].series.color);
239
			path.setAttribute("fill-opacity", "0.4");
240
			path.setAttribute("stroke", data[i][0].series.color);
241
			path.setAttribute("stroke-width", "1");
242
			path.setAttribute("stroke-opacity", "0.85");
243
			var cmd = [];
244
			var r = 3;
245
			for (var j = 0; j < data[i].length; j++) {
246
				var values = data[i];
247
				var x = plot.axisX.getCoord(values[j].x, plotarea, plot);
248
				var y = plot.axisY.getCoord(values[j].y, plotarea, plot);
249
				var dx = area.left + 1;
250
				var dy = area.bottom;
251
				if (j > 0) {
252
					dx = x - plot.axisX.getCoord(values[j - 1].x, plotarea, plot);
253
					dy = plot.axisY.getCoord(values[j - 1].y, plotarea, plot);
254
				}
255
				if (j == 0) {
256
					cmd.push("M");
257
				} else {
258
					cmd.push("C");
259
					var cx = x - (tension - 1) * (dx / tension);
260
					cmd.push(cx + "," + dy);
261
					cx = x - (dx / tension);
262
					cmd.push(cx + "," + y);
263
				}
264
				cmd.push(x + "," + y);
265
				var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
266
				c.setAttribute("cx", x);
267
				c.setAttribute("cy", y);
268
				c.setAttribute("r", "3");
269
				c.setAttribute("fill", values[j].series.color);
270
				c.setAttribute("fill-opacity", "0.6");
271
				c.setAttribute("stroke-width", "1");
272
				c.setAttribute("stroke-opacity", "0.85");
273
				group.appendChild(c);
274
				if (applyTo) {
275
					applyTo(c, data[i].src);
276
				}
277
			}
278
			if (i == 0) {
279
				cmd.push("L");
280
				cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
281
				cmd.push("L");
282
				cmd.push(plot.axisX.getCoord(data[0][0].x, plotarea, plot) + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
283
				cmd.push("Z");
284
			} else {
285
				var values = data[i - 1];
286
				cmd.push("L");
287
				cmd.push(x + "," + Math.round(plot.axisY.getCoord(values[values.length - 1].y, plotarea, plot)));
288
				for (var j = values.length - 2; j >= 0; j--) {
289
					var x = plot.axisX.getCoord(values[j].x, plotarea, plot);
290
					var y = plot.axisY.getCoord(values[j].y, plotarea, plot);
291
					var dx = x - plot.axisX.getCoord(values[j + 1].x, plotarea, plot);
292
					var dy = plot.axisY.getCoord(values[j + 1].y, plotarea, plot);
293
					cmd.push("C");
294
					var cx = x - (tension - 1) * (dx / tension);
295
					cmd.push(cx + "," + dy);
296
					cx = x - (dx / tension);
297
					cmd.push(cx + "," + y);
298
					cmd.push(x + "," + y);
299
				}
300
			}
301
			path.setAttribute("d", cmd.join(" ") + " Z");
302
			group.appendChild(path);
303
		}
304
		return group;
305
	}, DataBar:function (data, plotarea, plot, applyTo) {
306
		var area = plotarea.getArea();
307
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
308
		var n = data.length;
309
		var w = (area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower);
310
		var yOrigin = plot.axisY.getCoord(plot.axisX.origin, plotarea, plot);
311
		for (var i = 0; i < n; i++) {
312
			var value = data[i].y;
313
			var yA = yOrigin;
314
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2);
315
			var y = plot.axisY.getCoord(value, plotarea, plot);
316
			var h = Math.abs(yA - y);
317
			if (value < plot.axisX.origin) {
318
				yA = y;
319
				y = yOrigin;
320
			}
321
			var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
322
			bar.setAttribute("fill", data[i].series.color);
323
			bar.setAttribute("stroke-width", "0");
324
			bar.setAttribute("x", x);
325
			bar.setAttribute("y", y);
326
			bar.setAttribute("width", w);
327
			bar.setAttribute("height", h);
328
			bar.setAttribute("fill-opacity", "0.6");
329
			if (applyTo) {
330
				applyTo(bar, data[i].src);
331
			}
332
			group.appendChild(bar);
333
		}
334
		return group;
335
	}, Line:function (data, plotarea, plot, applyTo) {
336
		var area = plotarea.getArea();
337
		var line = document.createElementNS(dojo.svg.xmlns.svg, "g");
338
		if (data.length == 0) {
339
			return line;
340
		}
341
		var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
342
		line.appendChild(path);
343
		path.setAttribute("fill", "none");
344
		path.setAttribute("stroke", data[0].series.color);
345
		path.setAttribute("stroke-width", "2");
346
		path.setAttribute("stroke-opacity", "0.85");
347
		if (data[0].series.label != null) {
348
			path.setAttribute("title", data[0].series.label);
349
		}
350
		var cmd = [];
351
		for (var i = 0; i < data.length; i++) {
352
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
353
			var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
354
			if (i == 0) {
355
				cmd.push("M");
356
			} else {
357
				cmd.push("L");
358
			}
359
			cmd.push(x + "," + y);
360
			var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
361
			c.setAttribute("cx", x);
362
			c.setAttribute("cy", y);
363
			c.setAttribute("r", "3");
364
			c.setAttribute("fill", data[i].series.color);
365
			c.setAttribute("fill-opacity", "0.6");
366
			c.setAttribute("stroke-width", "1");
367
			c.setAttribute("stroke-opacity", "0.85");
368
			line.appendChild(c);
369
			if (applyTo) {
370
				applyTo(c, data[i].src);
371
			}
372
		}
373
		path.setAttribute("d", cmd.join(" "));
374
		return line;
375
	}, CurvedLine:function (data, plotarea, plot, applyTo) {
376
		var tension = 3;
377
		var area = plotarea.getArea();
378
		var line = document.createElementNS(dojo.svg.xmlns.svg, "g");
379
		if (data.length == 0) {
380
			return line;
381
		}
382
		var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
383
		line.appendChild(path);
384
		path.setAttribute("fill", "none");
385
		path.setAttribute("stroke", data[0].series.color);
386
		path.setAttribute("stroke-width", "2");
387
		path.setAttribute("stroke-opacity", "0.85");
388
		if (data[0].series.label != null) {
389
			path.setAttribute("title", data[0].series.label);
390
		}
391
		var cmd = [];
392
		for (var i = 0; i < data.length; i++) {
393
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
394
			var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
395
			var dx = area.left + 1;
396
			var dy = area.bottom;
397
			if (i > 0) {
398
				dx = x - plot.axisX.getCoord(data[i - 1].x, plotarea, plot);
399
				dy = plot.axisY.getCoord(data[i - 1].y, plotarea, plot);
400
			}
401
			if (i == 0) {
402
				cmd.push("M");
403
			} else {
404
				cmd.push("C");
405
				var cx = x - (tension - 1) * (dx / tension);
406
				cmd.push(cx + "," + dy);
407
				cx = x - (dx / tension);
408
				cmd.push(cx + "," + y);
409
			}
410
			cmd.push(x + "," + y);
411
			var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
412
			c.setAttribute("cx", x);
413
			c.setAttribute("cy", y);
414
			c.setAttribute("r", "3");
415
			c.setAttribute("fill", data[i].series.color);
416
			c.setAttribute("fill-opacity", "0.6");
417
			c.setAttribute("stroke-width", "1");
418
			c.setAttribute("stroke-opacity", "0.85");
419
			line.appendChild(c);
420
			if (applyTo) {
421
				applyTo(c, data[i].src);
422
			}
423
		}
424
		path.setAttribute("d", cmd.join(" "));
425
		return line;
426
	}, Area:function (data, plotarea, plot, applyTo) {
427
		var area = plotarea.getArea();
428
		var line = document.createElementNS(dojo.svg.xmlns.svg, "g");
429
		if (data.length == 0) {
430
			return line;
431
		}
432
		var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
433
		line.appendChild(path);
434
		path.setAttribute("fill", data[0].series.color);
435
		path.setAttribute("fill-opacity", "0.4");
436
		path.setAttribute("stroke", data[0].series.color);
437
		path.setAttribute("stroke-width", "1");
438
		path.setAttribute("stroke-opacity", "0.85");
439
		if (data[0].series.label != null) {
440
			path.setAttribute("title", data[0].series.label);
441
		}
442
		var cmd = [];
443
		for (var i = 0; i < data.length; i++) {
444
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
445
			var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
446
			if (i == 0) {
447
				cmd.push("M");
448
			} else {
449
				cmd.push("L");
450
			}
451
			cmd.push(x + "," + y);
452
			var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
453
			c.setAttribute("cx", x);
454
			c.setAttribute("cy", y);
455
			c.setAttribute("r", "3");
456
			c.setAttribute("fill", data[i].series.color);
457
			c.setAttribute("fill-opacity", "0.6");
458
			c.setAttribute("stroke-width", "1");
459
			c.setAttribute("stroke-opacity", "0.85");
460
			line.appendChild(c);
461
			if (applyTo) {
462
				applyTo(c, data[i].src);
463
			}
464
		}
465
		cmd.push("L");
466
		cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
467
		cmd.push("L");
468
		cmd.push(plot.axisX.getCoord(data[0].x, plotarea, plot) + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
469
		cmd.push("Z");
470
		path.setAttribute("d", cmd.join(" "));
471
		return line;
472
	}, CurvedArea:function (data, plotarea, plot, applyTo) {
473
		var tension = 3;
474
		var area = plotarea.getArea();
475
		var line = document.createElementNS(dojo.svg.xmlns.svg, "g");
476
		if (data.length == 0) {
477
			return line;
478
		}
479
		var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
480
		line.appendChild(path);
481
		path.setAttribute("fill", data[0].series.color);
482
		path.setAttribute("fill-opacity", "0.4");
483
		path.setAttribute("stroke", data[0].series.color);
484
		path.setAttribute("stroke-width", "1");
485
		path.setAttribute("stroke-opacity", "0.85");
486
		if (data[0].series.label != null) {
487
			path.setAttribute("title", data[0].series.label);
488
		}
489
		var cmd = [];
490
		for (var i = 0; i < data.length; i++) {
491
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
492
			var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
493
			var dx = area.left + 1;
494
			var dy = area.bottom;
495
			if (i > 0) {
496
				dx = x - plot.axisX.getCoord(data[i - 1].x, plotarea, plot);
497
				dy = plot.axisY.getCoord(data[i - 1].y, plotarea, plot);
498
			}
499
			if (i == 0) {
500
				cmd.push("M");
501
			} else {
502
				cmd.push("C");
503
				var cx = x - (tension - 1) * (dx / tension);
504
				cmd.push(cx + "," + dy);
505
				cx = x - (dx / tension);
506
				cmd.push(cx + "," + y);
507
			}
508
			cmd.push(x + "," + y);
509
			var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
510
			c.setAttribute("cx", x);
511
			c.setAttribute("cy", y);
512
			c.setAttribute("r", "3");
513
			c.setAttribute("fill", data[i].series.color);
514
			c.setAttribute("fill-opacity", "0.6");
515
			c.setAttribute("stroke-width", "1");
516
			c.setAttribute("stroke-opacity", "0.85");
517
			line.appendChild(c);
518
			if (applyTo) {
519
				applyTo(c, data[i].src);
520
			}
521
		}
522
		cmd.push("L");
523
		cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
524
		cmd.push("L");
525
		cmd.push(plot.axisX.getCoord(data[0].x, plotarea, plot) + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
526
		cmd.push("Z");
527
		path.setAttribute("d", cmd.join(" "));
528
		return line;
529
	}, HighLow:function (data, plotarea, plot, applyTo) {
530
		var area = plotarea.getArea();
531
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
532
		var n = data.length;
533
		var part = ((area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower)) / 4;
534
		var w = part * 2;
535
		for (var i = 0; i < n; i++) {
536
			var high = data[i].high;
537
			var low = data[i].low;
538
			if (low > high) {
539
				var t = low;
540
				low = high;
541
				high = t;
542
			}
543
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2);
544
			var y = plot.axisY.getCoord(high, plotarea, plot);
545
			var h = plot.axisY.getCoord(low, plotarea, plot) - y;
546
			var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
547
			bar.setAttribute("fill", data[i].series.color);
548
			bar.setAttribute("stroke-width", "0");
549
			bar.setAttribute("x", x);
550
			bar.setAttribute("y", y);
551
			bar.setAttribute("width", w);
552
			bar.setAttribute("height", h);
553
			bar.setAttribute("fill-opacity", "0.6");
554
			if (applyTo) {
555
				applyTo(bar, data[i].src);
556
			}
557
			group.appendChild(bar);
558
		}
559
		return group;
560
	}, HighLowClose:function (data, plotarea, plot, applyTo) {
561
		var area = plotarea.getArea();
562
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
563
		var n = data.length;
564
		var part = ((area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower)) / 4;
565
		var w = part * 2;
566
		for (var i = 0; i < n; i++) {
567
			var high = data[i].high;
568
			var low = data[i].low;
569
			if (low > high) {
570
				var t = low;
571
				low = high;
572
				high = t;
573
			}
574
			var c = data[i].close;
575
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2);
576
			var y = plot.axisY.getCoord(high, plotarea, plot);
577
			var h = plot.axisY.getCoord(low, plotarea, plot) - y;
578
			var close = plot.axisY.getCoord(c, plotarea, plot);
579
			var g = document.createElementNS(dojo.svg.xmlns.svg, "g");
580
			var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
581
			bar.setAttribute("fill", data[i].series.color);
582
			bar.setAttribute("stroke-width", "0");
583
			bar.setAttribute("x", x);
584
			bar.setAttribute("y", y);
585
			bar.setAttribute("width", w);
586
			bar.setAttribute("height", h);
587
			bar.setAttribute("fill-opacity", "0.6");
588
			g.appendChild(bar);
589
			var line = document.createElementNS(dojo.svg.xmlns.svg, "line");
590
			line.setAttribute("x1", x);
591
			line.setAttribute("x2", x + w + (part * 2));
592
			line.setAttribute("y1", close);
593
			line.setAttribute("y2", close);
594
			line.setAttribute("style", "stroke:" + data[i].series.color + ";stroke-width:1px;stroke-opacity:0.6;");
595
			g.appendChild(line);
596
			if (applyTo) {
597
				applyTo(g, data[i].src);
598
			}
599
			group.appendChild(g);
600
		}
601
		return group;
602
	}, HighLowOpenClose:function (data, plotarea, plot, applyTo) {
603
		var area = plotarea.getArea();
604
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
605
		var n = data.length;
606
		var part = ((area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower)) / 4;
607
		var w = part * 2;
608
		for (var i = 0; i < n; i++) {
609
			var high = data[i].high;
610
			var low = data[i].low;
611
			if (low > high) {
612
				var t = low;
613
				low = high;
614
				high = t;
615
			}
616
			var o = data[i].open;
617
			var c = data[i].close;
618
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2);
619
			var y = plot.axisY.getCoord(high, plotarea, plot);
620
			var h = plot.axisY.getCoord(low, plotarea, plot) - y;
621
			var open = plot.axisY.getCoord(o, plotarea, plot);
622
			var close = plot.axisY.getCoord(c, plotarea, plot);
623
			var g = document.createElementNS(dojo.svg.xmlns.svg, "g");
624
			var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
625
			bar.setAttribute("fill", data[i].series.color);
626
			bar.setAttribute("stroke-width", "0");
627
			bar.setAttribute("x", x);
628
			bar.setAttribute("y", y);
629
			bar.setAttribute("width", w);
630
			bar.setAttribute("height", h);
631
			bar.setAttribute("fill-opacity", "0.6");
632
			g.appendChild(bar);
633
			var line = document.createElementNS(dojo.svg.xmlns.svg, "line");
634
			line.setAttribute("x1", x - (part * 2));
635
			line.setAttribute("x2", x + w);
636
			line.setAttribute("y1", open);
637
			line.setAttribute("y2", open);
638
			line.setAttribute("style", "stroke:" + data[i].series.color + ";stroke-width:1px;stroke-opacity:0.6;");
639
			g.appendChild(line);
640
			var line = document.createElementNS(dojo.svg.xmlns.svg, "line");
641
			line.setAttribute("x1", x);
642
			line.setAttribute("x2", x + w + (part * 2));
643
			line.setAttribute("y1", close);
644
			line.setAttribute("y2", close);
645
			line.setAttribute("style", "stroke:" + data[i].series.color + ";stroke-width:1px;stroke-opacity:0.6;");
646
			g.appendChild(line);
647
			if (applyTo) {
648
				applyTo(g, data[i].src);
649
			}
650
			group.appendChild(g);
651
		}
652
		return group;
653
	}, Scatter:function (data, plotarea, plot, applyTo) {
654
		var r = 7;
655
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
656
		for (var i = 0; i < data.length; i++) {
657
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
658
			var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
659
			var point = document.createElementNS(dojo.svg.xmlns.svg, "path");
660
			point.setAttribute("fill", data[i].series.color);
661
			point.setAttribute("stroke-width", "0");
662
			point.setAttribute("d", "M " + x + "," + (y - r) + " " + "Q " + x + "," + y + " " + (x + r) + "," + y + " " + "Q " + x + "," + y + " " + x + "," + (y + r) + " " + "Q " + x + "," + y + " " + (x - r) + "," + y + " " + "Q " + x + "," + y + " " + x + "," + (y - r) + " " + "Z");
663
			if (applyTo) {
664
				applyTo(point, data[i].src);
665
			}
666
			group.appendChild(point);
667
		}
668
		return group;
669
	}, Bubble:function (data, plotarea, plot, applyTo) {
670
		var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
671
		var sizeFactor = 1;
672
		for (var i = 0; i < data.length; i++) {
673
			var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
674
			var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
675
			if (i == 0) {
676
				var raw = data[i].size;
677
				var dy = plot.axisY.getCoord(data[i].y + raw, plotarea, plot) - y;
678
				sizeFactor = dy / raw;
679
			}
680
			if (sizeFactor < 1) {
681
				sizeFactor = 1;
682
			}
683
			var point = document.createElementNS(dojo.svg.xmlns.svg, "circle");
684
			point.setAttribute("fill", data[i].series.color);
685
			point.setAttribute("fill-opacity", "0.8");
686
			point.setAttribute("stroke", data[i].series.color);
687
			point.setAttribute("stroke-width", "1");
688
			point.setAttribute("cx", x);
689
			point.setAttribute("cy", y);
690
			point.setAttribute("r", (data[i].size / 2) * sizeFactor);
691
			if (applyTo) {
692
				applyTo(point, data[i].src);
693
			}
694
			group.appendChild(point);
695
		}
696
		return group;
697
	}});
698
	dojo.charting.Plotters["Default"] = dojo.charting.Plotters.Line;
699
}
700