[ Index ] |
PHP Cross Reference of vtigercrm-6.1.0 |
[Summary view] [Print] [Text view]
1 /** 2 * jqPlot 3 * Pure JavaScript plotting plugin using jQuery 4 * 5 * Version: 1.0.2 6 * Revision: 1108 7 * 8 * Copyright (c) 2009-2011 Chris Leonello 9 * jqPlot is currently available for use in all personal or commercial projects 10 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 11 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 12 * choose the license that best suits your project and use it accordingly. 13 * 14 * Although not required, the author would appreciate an email letting him 15 * know of any substantial use of jqPlot. You can reach the author at: 16 * chris at jqplot dot com or see http://www.jqplot.com/info.php . 17 * 18 * If you are feeling kind and generous, consider supporting the project by 19 * making a donation at: http://www.jqplot.com/donate.php . 20 * 21 * sprintf functions contained in jqplot.sprintf.js by Ash Searle: 22 * 23 * version 2007.04.27 24 * author Ash Searle 25 * http://hexmen.com/blog/2007/03/printf-sprintf/ 26 * http://hexmen.com/js/sprintf.js 27 * The author (Ash Searle) has placed this code in the public domain: 28 * "This code is unrestricted: you are free to use it however you like." 29 * 30 */ 31 (function($) { 32 // Class: $.jqplot.BezierCurveRenderer.js 33 // Renderer which draws lines as stacked bezier curves. 34 // Data for the line will not be specified as an array of 35 // [x, y] data point values, but as a an array of [start piont, bezier curve] 36 // So, the line is specified as: [[xstart, ystart], [cp1x, cp1y, cp2x, cp2y, xend, yend]]. 37 $.jqplot.BezierCurveRenderer = function(){ 38 $.jqplot.LineRenderer.call(this); 39 }; 40 41 $.jqplot.BezierCurveRenderer.prototype = new $.jqplot.LineRenderer(); 42 $.jqplot.BezierCurveRenderer.prototype.constructor = $.jqplot.BezierCurveRenderer; 43 44 45 // Method: setGridData 46 // converts the user data values to grid coordinates and stores them 47 // in the gridData array. 48 // Called with scope of a series. 49 $.jqplot.BezierCurveRenderer.prototype.setGridData = function(plot) { 50 // recalculate the grid data 51 var xp = this._xaxis.series_u2p; 52 var yp = this._yaxis.series_u2p; 53 // this._plotData should be same as this.data 54 var data = this.data; 55 this.gridData = []; 56 this._prevGridData = []; 57 // if seriesIndex = 0, fill to x axis. 58 // if seriesIndex > 0, fill to previous series data. 59 var idx = this.index; 60 if (data.length == 2) { 61 if (idx == 0) { 62 this.gridData = [ 63 [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])], 64 [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]), 65 xp.call(this._xaxis, data[1][2]), yp.call(this._yaxis, data[1][3]), 66 xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, data[1][5])], 67 [xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, this._yaxis.min)], 68 [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, this._yaxis.min)] 69 ]; 70 } 71 else { 72 var psd = plot.series[idx-1].data; 73 this.gridData = [ 74 [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])], 75 [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]), 76 xp.call(this._xaxis, data[1][2]), yp.call(this._yaxis, data[1][3]), 77 xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, data[1][5])], 78 [xp.call(this._xaxis, psd[1][4]), yp.call(this._yaxis, psd[1][5])], 79 [xp.call(this._xaxis, psd[1][2]), yp.call(this._yaxis, psd[1][3]), 80 xp.call(this._xaxis, psd[1][0]), yp.call(this._yaxis, psd[1][1]), 81 xp.call(this._xaxis, psd[0][0]), yp.call(this._yaxis, psd[0][1])] 82 ]; 83 } 84 } 85 else { 86 if (idx == 0) { 87 this.gridData = [ 88 [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])], 89 [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]), 90 xp.call(this._xaxis, data[2][0]), yp.call(this._yaxis, data[2][1]), 91 xp.call(this._xaxis, data[3][0]), yp.call(this._yaxis, data[3][1])], 92 [xp.call(this._xaxis, data[3][1]), yp.call(this._yaxis, this._yaxis.min)], 93 [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, this._yaxis.min)] 94 ]; 95 } 96 else { 97 var psd = plot.series[idx-1].data; 98 this.gridData = [ 99 [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])], 100 [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]), 101 xp.call(this._xaxis, data[2][0]), yp.call(this._yaxis, data[2][1]), 102 xp.call(this._xaxis, data[3][0]), yp.call(this._yaxis, data[3][1])], 103 [xp.call(this._xaxis, psd[3][0]), yp.call(this._yaxis, psd[3][1])], 104 [xp.call(this._xaxis, psd[2][0]), yp.call(this._yaxis, psd[2][1]), 105 xp.call(this._xaxis, psd[1][0]), yp.call(this._yaxis, psd[1][1]), 106 xp.call(this._xaxis, psd[0][0]), yp.call(this._yaxis, psd[0][1])] 107 ]; 108 } 109 } 110 }; 111 112 // Method: makeGridData 113 // converts any arbitrary data values to grid coordinates and 114 // returns them. This method exists so that plugins can use a series' 115 // linerenderer to generate grid data points without overwriting the 116 // grid data associated with that series. 117 // Called with scope of a series. 118 $.jqplot.BezierCurveRenderer.prototype.makeGridData = function(data, plot) { 119 // recalculate the grid data 120 var xp = this._xaxis.series_u2p; 121 var yp = this._yaxis.series_u2p; 122 var gd = []; 123 var pgd = []; 124 // if seriesIndex = 0, fill to x axis. 125 // if seriesIndex > 0, fill to previous series data. 126 var idx = this.index; 127 if (data.length == 2) { 128 if (idx == 0) { 129 gd = [ 130 [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])], 131 [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]), 132 xp.call(this._xaxis, data[1][2]), yp.call(this._yaxis, data[1][3]), 133 xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, data[1][5])], 134 [xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, this._yaxis.min)], 135 [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, this._yaxis.min)] 136 ]; 137 } 138 else { 139 var psd = plot.series[idx-1].data; 140 gd = [ 141 [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])], 142 [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]), 143 xp.call(this._xaxis, data[1][2]), yp.call(this._yaxis, data[1][3]), 144 xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, data[1][5])], 145 [xp.call(this._xaxis, psd[1][4]), yp.call(this._yaxis, psd[1][5])], 146 [xp.call(this._xaxis, psd[1][2]), yp.call(this._yaxis, psd[1][3]), 147 xp.call(this._xaxis, psd[1][0]), yp.call(this._yaxis, psd[1][1]), 148 xp.call(this._xaxis, psd[0][0]), yp.call(this._yaxis, psd[0][1])] 149 ]; 150 } 151 } 152 else { 153 if (idx == 0) { 154 gd = [ 155 [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])], 156 [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]), 157 xp.call(this._xaxis, data[2][0]), yp.call(this._yaxis, data[2][1]), 158 xp.call(this._xaxis, data[3][0]), yp.call(this._yaxis, data[3][1])], 159 [xp.call(this._xaxis, data[3][1]), yp.call(this._yaxis, this._yaxis.min)], 160 [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, this._yaxis.min)] 161 ]; 162 } 163 else { 164 var psd = plot.series[idx-1].data; 165 gd = [ 166 [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])], 167 [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]), 168 xp.call(this._xaxis, data[2][0]), yp.call(this._yaxis, data[2][1]), 169 xp.call(this._xaxis, data[3][0]), yp.call(this._yaxis, data[3][1])], 170 [xp.call(this._xaxis, psd[3][0]), yp.call(this._yaxis, psd[3][1])], 171 [xp.call(this._xaxis, psd[2][0]), yp.call(this._yaxis, psd[2][1]), 172 xp.call(this._xaxis, psd[1][0]), yp.call(this._yaxis, psd[1][1]), 173 xp.call(this._xaxis, psd[0][0]), yp.call(this._yaxis, psd[0][1])] 174 ]; 175 } 176 } 177 return gd; 178 }; 179 180 181 // called within scope of series. 182 $.jqplot.BezierCurveRenderer.prototype.draw = function(ctx, gd, options) { 183 var i; 184 ctx.save(); 185 if (gd.length) { 186 if (this.showLine) { 187 ctx.save(); 188 var opts = (options != null) ? options : {}; 189 ctx.fillStyle = opts.fillStyle || this.color; 190 ctx.beginPath(); 191 ctx.moveTo(gd[0][0], gd[0][1]); 192 ctx.bezierCurveTo(gd[1][0], gd[1][1], gd[1][2], gd[1][3], gd[1][4], gd[1][5]); 193 ctx.lineTo(gd[2][0], gd[2][1]); 194 if (gd[3].length == 2) { 195 ctx.lineTo(gd[3][0], gd[3][1]); 196 } 197 else { 198 ctx.bezierCurveTo(gd[3][0], gd[3][1], gd[3][2], gd[3][3], gd[3][4], gd[3][5]); 199 } 200 ctx.closePath(); 201 ctx.fill(); 202 ctx.restore(); 203 } 204 } 205 206 ctx.restore(); 207 }; 208 209 $.jqplot.BezierCurveRenderer.prototype.drawShadow = function(ctx, gd, options) { 210 // This is a no-op, shadows drawn with lines. 211 }; 212 213 $.jqplot.BezierAxisRenderer = function() { 214 $.jqplot.LinearAxisRenderer.call(this); 215 }; 216 217 $.jqplot.BezierAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer(); 218 $.jqplot.BezierAxisRenderer.prototype.constructor = $.jqplot.BezierAxisRenderer; 219 220 221 // Axes on a plot with Bezier Curves 222 $.jqplot.BezierAxisRenderer.prototype.init = function(options){ 223 $.extend(true, this, options); 224 var db = this._dataBounds; 225 // Go through all the series attached to this axis and find 226 // the min/max bounds for this axis. 227 for (var i=0; i<this._series.length; i++) { 228 var s = this._series[i]; 229 var d = s.data; 230 if (d.length == 4) { 231 for (var j=0; j<d.length; j++) { 232 if (this.name == 'xaxis' || this.name == 'x2axis') { 233 if (d[j][0] < db.min || db.min == null) { 234 db.min = d[j][0]; 235 } 236 if (d[j][0] > db.max || db.max == null) { 237 db.max = d[j][0]; 238 } 239 } 240 else { 241 if (d[j][1] < db.min || db.min == null) { 242 db.min = d[j][1]; 243 } 244 if (d[j][1] > db.max || db.max == null) { 245 db.max = d[j][1]; 246 } 247 } 248 } 249 } 250 else { 251 if (this.name == 'xaxis' || this.name == 'x2axis') { 252 if (d[0][0] < db.min || db.min == null) { 253 db.min = d[0][0]; 254 } 255 if (d[0][0] > db.max || db.max == null) { 256 db.max = d[0][0]; 257 } 258 for (var j=0; j<5; j+=2) { 259 if (d[1][j] < db.min || db.min == null) { 260 db.min = d[1][j]; 261 } 262 if (d[1][j] > db.max || db.max == null) { 263 db.max = d[1][j]; 264 } 265 } 266 } 267 else { 268 if (d[0][1] < db.min || db.min == null) { 269 db.min = d[0][1]; 270 } 271 if (d[0][1] > db.max || db.max == null) { 272 db.max = d[0][1]; 273 } 274 for (var j=1; j<6; j+=2) { 275 if (d[1][j] < db.min || db.min == null) { 276 db.min = d[1][j]; 277 } 278 if (d[1][j] > db.max || db.max == null) { 279 db.max = d[1][j]; 280 } 281 } 282 } 283 } 284 } 285 }; 286 287 // setup default renderers for axes and legend so user doesn't have to 288 // called with scope of plot 289 function preInit(target, data, options) { 290 options = options || {}; 291 options.axesDefaults = $.extend(true, {pad:0}, options.axesDefaults); 292 options.legend = $.extend(true, {placement:'outside'}, options.legend); 293 // only set these if there is a pie series 294 var setopts = false; 295 if (options.seriesDefaults.renderer == $.jqplot.BezierCurveRenderer) { 296 setopts = true; 297 } 298 else if (options.series) { 299 for (var i=0; i < options.series.length; i++) { 300 if (options.series[i].renderer == $.jqplot.BezierCurveRenderer) { 301 setopts = true; 302 } 303 } 304 } 305 306 if (setopts) { 307 options.axesDefaults.renderer = $.jqplot.BezierAxisRenderer; 308 } 309 } 310 311 $.jqplot.preInitHooks.push(preInit); 312 313 })(jQuery);
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:08:37 2014 | Cross-referenced by PHPXref 0.7.1 |