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.Series");
12
dojo.require("dojo.lang.common");
13
dojo.require("dojo.charting.Plotters");
14
dojo.charting.Series = function (kwArgs) {
15
	var args = kwArgs || {length:1};
16
	this.dataSource = args.dataSource || null;
17
	this.bindings = {};
18
	this.color = args.color;
19
	this.label = args.label;
20
	if (args.bindings) {
21
		for (var p in args.bindings) {
22
			this.addBinding(p, args.bindings[p]);
23
		}
24
	}
25
};
26
dojo.extend(dojo.charting.Series, {bind:function (src, bindings) {
27
	this.dataSource = src;
28
	this.bindings = bindings;
29
}, addBinding:function (name, binding) {
30
	this.bindings[name] = binding;
31
}, evaluate:function (kwArgs) {
32
	var ret = [];
33
	var a = this.dataSource.getData();
34
	var l = a.length;
35
	var start = 0;
36
	var end = l;
37
	if (kwArgs) {
38
		if (kwArgs.between) {
39
			for (var i = 0; i < l; i++) {
40
				var fld = this.dataSource.getField(a[i], kwArgs.between.field);
41
				if (fld >= kwArgs.between.low && fld <= kwArgs.between.high) {
42
					var o = {src:a[i], series:this};
43
					for (var p in this.bindings) {
44
						o[p] = this.dataSource.getField(a[i], this.bindings[p]);
45
					}
46
					ret.push(o);
47
				}
48
			}
49
		} else {
50
			if (kwArgs.from || kwArgs.length) {
51
				if (kwArgs.from) {
52
					start = Math.max(kwArgs.from, 0);
53
					if (kwArgs.to) {
54
						end = Math.min(kwArgs.to, end);
55
					}
56
				} else {
57
					if (kwArgs.length < 0) {
58
						start = Math.max((end + length), 0);
59
					} else {
60
						end = Math.min((start + length), end);
61
					}
62
				}
63
				for (var i = start; i < end; i++) {
64
					var o = {src:a[i], series:this};
65
					for (var p in this.bindings) {
66
						o[p] = this.dataSource.getField(a[i], this.bindings[p]);
67
					}
68
					ret.push(o);
69
				}
70
			}
71
		}
72
	} else {
73
		for (var i = start; i < end; i++) {
74
			var o = {src:a[i], series:this};
75
			for (var p in this.bindings) {
76
				o[p] = this.dataSource.getField(a[i], this.bindings[p]);
77
			}
78
			ret.push(o);
79
		}
80
	}
81
	if (ret.length > 0 && typeof (ret[0].x) != "undefined") {
82
		ret.sort(function (a, b) {
83
			if (a.x > b.x) {
84
				return 1;
85
			}
86
			if (a.x < b.x) {
87
				return -1;
88
			}
89
			return 0;
90
		});
91
	}
92
	return ret;
93
}, trends:{createRange:function (values, len) {
94
	var idx = values.length - 1;
95
	var length = (len || values.length);
96
	return {"index":idx, "length":length, "start":Math.max(idx - length, 0)};
97
}, mean:function (values, len) {
98
	var range = this.createRange(values, len);
99
	if (range.index < 0) {
100
		return 0;
101
	}
102
	var total = 0;
103
	var count = 0;
104
	for (var i = range.index; i >= range.start; i--) {
105
		total += values[i].y;
106
		count++;
107
	}
108
	total /= Math.max(count, 1);
109
	return total;
110
}, variance:function (values, len) {
111
	var range = this.createRange(values, len);
112
	if (range.index < 0) {
113
		return 0;
114
	}
115
	var total = 0;
116
	var square = 0;
117
	var count = 0;
118
	for (var i = range.index; i >= range.start; i--) {
119
		total += values[i].y;
120
		square += Math.pow(values[i].y, 2);
121
		count++;
122
	}
123
	return (square / count) - Math.pow(total / count, 2);
124
}, standardDeviation:function (values, len) {
125
	return Math.sqrt(this.getVariance(values, len));
126
}, max:function (values, len) {
127
	var range = this.createRange(values, len);
128
	if (range.index < 0) {
129
		return 0;
130
	}
131
	var max = Number.MIN_VALUE;
132
	for (var i = range.index; i >= range.start; i--) {
133
		max = Math.max(values[i].y, max);
134
	}
135
	return max;
136
}, min:function (values, len) {
137
	var range = this.createRange(values, len);
138
	if (range.index < 0) {
139
		return 0;
140
	}
141
	var min = Number.MAX_VALUE;
142
	for (var i = range.index; i >= range.start; i--) {
143
		min = Math.min(values[i].y, min);
144
	}
145
	return min;
146
}, median:function (values, len) {
147
	var range = this.createRange(values, len);
148
	if (range.index < 0) {
149
		return 0;
150
	}
151
	var a = [];
152
	for (var i = range.index; i >= range.start; i--) {
153
		var b = false;
154
		for (var j = 0; j < a.length; j++) {
155
			if (values[i].y == a[j]) {
156
				b = true;
157
				break;
158
			}
159
		}
160
		if (!b) {
161
			a.push(values[i].y);
162
		}
163
	}
164
	a.sort();
165
	if (a.length > 0) {
166
		return a[Math.ceil(a.length / 2)];
167
	}
168
	return 0;
169
}, mode:function (values, len) {
170
	var range = this.createRange(values, len);
171
	if (range.index < 0) {
172
		return 0;
173
	}
174
	var o = {};
175
	var ret = 0;
176
	var median = Number.MIN_VALUE;
177
	for (var i = range.index; i >= range.start; i--) {
178
		if (!o[values[i].y]) {
179
			o[values[i].y] = 1;
180
		} else {
181
			o[values[i].y]++;
182
		}
183
	}
184
	for (var p in o) {
185
		if (median < o[p]) {
186
			median = o[p];
187
			ret = p;
188
		}
189
	}
190
	return ret;
191
}}});
192