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