Changeset 32
- Timestamp:
- 04/06/06 19:50:02 (2 years ago)
- Files:
-
- plotkit/trunk/PlotKit/Base.js (modified) (5 diffs)
- plotkit/trunk/PlotKit/Canvas.js (modified) (3 diffs)
- plotkit/trunk/PlotKit/EasyPlot.js (modified) (5 diffs)
- plotkit/trunk/PlotKit/Layout.js (modified) (12 diffs)
- plotkit/trunk/PlotKit/PlotKit_Packed.js (modified) (47 diffs)
- plotkit/trunk/PlotKit/SweetCanvas.js (modified) (2 diffs)
- plotkit/trunk/doc/PlotKit.Base.html (modified) (1 diff)
- plotkit/trunk/doc/PlotKit.Base.txt (modified) (1 diff)
- plotkit/trunk/doc/PlotKit.html (modified) (1 diff)
- plotkit/trunk/doc/PlotKit.txt (modified) (1 diff)
- plotkit/trunk/tests/basic.js (modified) (2 diffs)
- plotkit/trunk/tests/svg.html (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
plotkit/trunk/PlotKit/Base.js
r18 r32 86 86 } 87 87 88 89 // Detect whether we are using prototype.js 90 PlotKit.Base.usingPrototype = function() { 91 return (typeof(Object.extend) == 'function'); 92 } 93 94 88 95 MochiKit.Base.update(PlotKit.Base, { 89 96 roundInterval: function(range, intervals, precision) { … … 100 107 biggerList = m.concat(biggerList, lst[i]); 101 108 } 109 if (PlotKit.Base.usingPrototype()) { 110 delete biggerList.extend; 111 delete biggerList.from; 112 delete biggerList.inspect; 113 } 114 102 115 return biggerList; 103 116 }, … … 191 204 findPosX: function(obj) { 192 205 var curleft = 0; 193 if (obj.offsetParent) 194 { 195 while (obj.offsetParent) 196 { 197 curleft += obj.offsetLeft 198 obj = obj.offsetParent; 199 } 206 if (obj.offsetParent) { 207 while (obj.offsetParent) { 208 curleft += obj.offsetLeft 209 obj = obj.offsetParent; 200 210 } 211 } 201 212 else if (obj.x) 202 213 curleft += obj.x; … … 206 217 findPosY: function(obj) { 207 218 var curtop = 0; 208 if (obj.offsetParent) 209 { 210 while (obj.offsetParent) 211 { 212 curtop += obj.offsetTop 213 obj = obj.offsetParent; 214 } 219 if (obj.offsetParent) { 220 while (obj.offsetParent) { 221 curtop += obj.offsetTop 222 obj = obj.offsetParent; 215 223 } 224 } 216 225 else if (obj.y) 217 226 curtop += obj.y; 218 227 return curtop; 228 }, 229 230 isFuncLike: function(obj) { 231 return (typeof(obj) == 'function'); 219 232 } 220 233 }); 234 235 // 236 // Prototype.js aware (crippled) versions of map and items. 237 // 238 239 PlotKit.Base.map = function(fn, lst) { 240 if (PlotKit.Base.usingPrototype()) { 241 var rval = []; 242 for (var x in lst) { 243 if (typeof(lst[x]) == 'function') continue; 244 rval.push(fn(lst[x])); 245 } 246 return rval; 247 } 248 else { 249 return MochiKit.Base.map(fn, lst); 250 } 251 }; 252 253 PlotKit.Base.items = function(lst) { 254 if (PlotKit.Base.usingPrototype()) { 255 var rval = []; 256 for (var x in lst) { 257 if (typeof(lst[x]) == 'function') continue; 258 rval.push([x, lst[x]]); 259 } 260 return rval; 261 } 262 else { 263 return MochiKit.Base.items(lst); 264 } 265 }; 266 267 PlotKit.Base.keys = function(lst) { 268 if (PlotKit.Base.usingPrototype()) { 269 var rval = []; 270 for (var x in lst) { 271 if (typeof(lst[x]) == 'function') continue; 272 rval.push(x); 273 } 274 return rval; 275 } 276 else { 277 return MochiKit.Base.items(lst); 278 } 279 }; 280 281 // 282 // colour schemes 283 // 221 284 222 285 PlotKit.Base.baseColors = function () { … … 317 380 "roundInterval", 318 381 "uniq", 382 "isFuncLike", 319 383 "excanvasSupported" 320 384 ]; plotkit/trunk/PlotKit/Canvas.js
r31 r32 256 256 ctx.moveTo(this.area.x, this.area.y + this.area.h); 257 257 var addPoint = function(ctx_, point) { 258 if (point.name == setName)259 ctx_.lineTo(this.area.w * point.x + this.area.x,260 this.area.h * point.y + this.area.y);258 if (point.name == setName) 259 ctx_.lineTo(this.area.w * point.x + this.area.x, 260 this.area.h * point.y + this.area.y); 261 261 }; 262 262 MochiKit.Iter.forEach(this.layout.points, partial(addPoint, ctx), this); … … 370 370 if (this.layout.yticks) { 371 371 var drawTick = function(tick) { 372 if (typeof(tick) == "function") return; 372 373 var x = this.area.x; 373 374 var y = this.area.y + tick[0] * this.area.h; … … 400 401 if (this.layout.xticks) { 401 402 var drawTick = function(tick) { 403 if (typeof(dataset) == "function") return; 404 402 405 var x = this.area.x + tick[0] * this.area.w; 403 406 var y = this.area.y + this.area.h; plotkit/trunk/PlotKit/EasyPlot.js
r31 r32 5 5 User friendly wrapper around the common plotting functions. 6 6 7 8 7 Copyright 9 8 --------- … … 62 61 } 63 62 64 65 63 // load data sources 66 64 if (isArrayLike(datasources)) { … … 77 75 } 78 76 } 79 77 else if (!isUndefinedOrNull(datasources)) { 78 throw "Passed datasources are not Array like"; 79 } 80 80 81 81 // setup canvas to render … … 98 98 } 99 99 100 if ( this.deferredCount == 0) {100 if ((this.deferredCount == 0) && (this.layout.datasets.length > 0)) { 101 101 this.layout.evaluate(); 102 102 this.renderer.clear(); … … 121 121 this.deferredCount--; 122 122 123 if ( this.deferredCount == 0) {123 if ((this.deferredCount == 0) && (this.layout.datasets.length > 0)) { 124 124 this.layout.evaluate(); 125 125 this.renderer.clear(); plotkit/trunk/PlotKit/Layout.js
r29 r32 266 266 PlotKit.Layout.prototype._evaluateLimits = function() { 267 267 // take all values from all datasets and find max and min 268 var map = MochiKit.Base.map;269 var items = MochiKit.Base.items;268 var map = PlotKit.Base.map; 269 var items = PlotKit.Base.items; 270 270 var itemgetter = MochiKit.Base.itemgetter; 271 271 var collapse = PlotKit.Base.collapse; … … 274 274 var isNil = MochiKit.Base.isUndefinedOrNull; 275 275 276 276 277 var all = collapse(map(itemgetter(1), items(this.datasets))); 277 278 278 if (isNil(this.options.xAxis)) { 279 279 if (this.options.xOriginIsZero) … … 292 292 this.maxxval = listMax(map(parseFloat, map(itemgetter(0), all))); 293 293 this.maxyval = listMax(map(parseFloat, map(itemgetter(1), all))); 294 294 295 }; 295 296 … … 312 313 PlotKit.Layout.prototype._uniqueXValues = function() { 313 314 var collapse = PlotKit.Base.collapse; 314 var map = MochiKit.Base.map;315 var map = PlotKit.Base.map; 315 316 var uniq = PlotKit.Base.uniq; 316 317 var getter = MochiKit.Base.itemgetter; 317 318 var items = PlotKit.Base.items; 319 318 320 var xvalues = map(parseFloat, map(getter(0), collapse(map(getter(1), items(this.datasets))))); 319 321 xvalues.sort(MochiKit.Base.compare); … … 323 325 // Create the bars 324 326 PlotKit.Layout.prototype._evaluateBarCharts = function() { 325 var keys = MochiKit.Base.keys; 326 var items = MochiKit.Base.items; 327 328 var setCount = keys(this.datasets).length; 327 var items = PlotKit.Base.items; 328 329 var setCount = items(this.datasets).length; 329 330 330 331 // work out how far separated values are … … 354 355 barMargin = xdelta * this.xscale * (1.0 - this.options.barWidthFillFraction)/2; 355 356 } 356 357 357 358 this.minxdelta = xdelta; // need this for tick positions 358 359 … … 362 363 for (var setName in this.datasets) { 363 364 var dataset = this.datasets[setName]; 365 if (PlotKit.Base.isFuncLike(dataset)) continue; 364 366 for (var j = 0; j < dataset.length; j++) { 365 367 var item = dataset[j]; … … 381 383 // Create the horizontal bars 382 384 PlotKit.Layout.prototype._evaluateHorizBarCharts = function() { 383 var keys = MochiKit.Base.keys; 384 var items = MochiKit.Base.items; 385 386 var setCount = keys(this.datasets).length; 385 var items = PlotKit.Base.items; 386 387 var setCount = items(this.datasets).length; 387 388 388 389 // work out how far separated values are … … 422 423 for (var setName in this.datasets) { 423 424 var dataset = this.datasets[setName]; 425 if (PlotKit.Base.isFuncLike(dataset)) continue; 424 426 for (var j = 0; j < dataset.length; j++) { 425 427 var item = dataset[j]; … … 442 444 // Create the line charts 443 445 PlotKit.Layout.prototype._evaluateLineCharts = function() { 444 var keys = MochiKit.Base.keys; 445 var items = MochiKit.Base.items; 446 447 var setCount = keys(this.datasets).length; 446 var items = PlotKit.Base.items; 447 448 var setCount = items(this.datasets).length; 448 449 449 450 // add all the rects … … 452 453 for (var setName in this.datasets) { 453 454 var dataset = this.datasets[setName]; 455 if (PlotKit.Base.isFuncLike(dataset)) continue; 454 456 dataset.sort(function(a, b) { return compare(parseFloat(a[0]), parseFloat(b[0])); }); 455 457 for (var j = 0; j < dataset.length; j++) { … … 470 472 // Create the pie charts 471 473 PlotKit.Layout.prototype._evaluatePieCharts = function() { 472 var items = MochiKit.Base.items;474 var items = PlotKit.Base.items; 473 475 var sum = MochiKit.Iter.sum; 474 476 var getter = MochiKit.Base.itemgetter; 475 477 476 var setCount = keys(this.datasets).length;478 var setCount = items(this.datasets).length; 477 479 478 480 // we plot the y values of the first dataset plotkit/trunk/PlotKit/PlotKit_Packed.js
r31 r32 49 49 return this.__repr__(); 50 50 }; 51 PlotKit.Base.usingPrototype=function(){ 52 return (typeof (Object.extend)=="function"); 53 }; 51 54 MochiKit.Base.update(PlotKit.Base,{roundInterval:function(_1,_2,_3){ 52 55 var _4=MochiKit.Format.roundToFixed; … … 58 61 for(var i=0;i<_6.length;i++){ 59 62 _8=m.concat(_8,_6[i]); 63 } 64 if(PlotKit.Base.usingPrototype()){ 65 delete _8.extend; 66 delete _8.from; 67 delete _8.inspect; 60 68 } 61 69 return _8; … … 144 152 } 145 153 return _33; 154 },isFuncLike:function(obj){ 155 return (typeof (obj)=="function"); 146 156 }}); 157 PlotKit.Base.map=function(fn,lst){ 158 if(PlotKit.Base.usingPrototype()){ 159 var _36=[]; 160 for(var x in lst){ 161 if(typeof (lst[x])=="function"){ 162 continue; 163 } 164 _36.push(fn(lst[x])); 165 } 166 return _36; 167 }else{ 168 return MochiKit.Base.map(fn,lst); 169 } 170 }; 171 PlotKit.Base.items=function(lst){ 172 if(PlotKit.Base.usingPrototype()){ 173 var _38=[]; 174 for(var x in lst){ 175 if(typeof (lst[x])=="function"){ 176 continue; 177 } 178 _38.push([x,lst[x]]); 179 } 180 return _38; 181 }else{ 182 return MochiKit.Base.items(lst); 183 } 184 }; 185 PlotKit.Base.keys=function(lst){ 186 if(PlotKit.Base.usingPrototype()){ 187 var _39=[]; 188 for(var x in lst){ 189 if(typeof (lst[x])=="function"){ 190 continue; 191 } 192 _39.push(x); 193 } 194 return _39; 195 }else{ 196 return MochiKit.Base.items(lst); 197 } 198 }; 147 199 PlotKit.Base.baseColors=function(){ 148 var _ 34=MochiKit.Color.Color.fromHexString;149 return [_ 34("#476fb2"),_34("#be2c2b"),_34("#85b730"),_34("#734a99"),_34("#26a1c5"),_34("#fb8707"),_34("#000000")];200 var _40=MochiKit.Color.Color.fromHexString; 201 return [_40("#476fb2"),_40("#be2c2b"),_40("#85b730"),_40("#734a99"),_40("#26a1c5"),_40("#fb8707"),_40("#000000")]; 150 202 }; 151 203 PlotKit.Base.officeBaseStyle={"axisLineWidth":2,"axisLabelColor":Color.grayColor(),"axisLineColor":Color.whiteColor(),"padding":{top:5,bottom:10,left:30,right:30}}; … … 179 231 return r; 180 232 }}); 181 PlotKit.Base.EXPORT=["baseColors","collapse","colorScheme","findPosX","findPosY","officeBaseStyle","officeBlue","officeRed","officeGreen","officePurple","officeCyan","officeOrange","officeBlack","roundInterval","uniq"," excanvasSupported"];233 PlotKit.Base.EXPORT=["baseColors","collapse","colorScheme","findPosX","findPosY","officeBaseStyle","officeBlue","officeRed","officeGreen","officePurple","officeCyan","officeOrange","officeBlack","roundInterval","uniq","isFuncLike","excanvasSupported"]; 182 234 PlotKit.Base.EXPORT_OK=[]; 183 235 PlotKit.Base.__new__=function(){ … … 208 260 }; 209 261 PlotKit.Layout.valid_styles=["bar","line","pie","point"]; 210 PlotKit.Layout=function(_ 36,_37){262 PlotKit.Layout=function(_42,_43){ 211 263 this.options={"barWidthFillFraction":0.75,"barOrientation":"vertical","xOriginIsZero":true,"yOriginIsZero":true,"xAxis":null,"yAxis":null,"xTicks":null,"yTicks":null,"xNumberOfTicks":10,"yNumberOfTicks":5,"xTickPrecision":1,"yTickPrecision":3,"pieRadius":0.4}; 212 this.style=_ 36;213 MochiKit.Base.update(this.options,_ 37?_37:{});264 this.style=_42; 265 MochiKit.Base.update(this.options,_43?_43:{}); 214 266 if(!MochiKit.Base.isUndefinedOrNull(this.options.xAxis)){ 215 267 this.minxval=this.options.xAxis[0]; … … 241 293 this.hitTestCache={x2maxy:null}; 242 294 }; 243 PlotKit.Layout.prototype.addDataset=function(_ 38,_39){244 this.datasets[_ 38]=_39;245 }; 246 PlotKit.Layout.prototype.removeDataset=function(_4 0,_41){247 this.datasets[_4 0]=null;248 }; 249 PlotKit.Layout.prototype.addDatasetFromTable=function(_4 2,_43,_44,_45){250 var _ 46=MochiKit.Base.isUndefinedOrNull;251 var _ 47=MochiKit.DOM.scrapeText;252 var _ 48=MochiKit.Format.strip;253 if(_ 46(_44)){254 _ 44=0;255 } 256 if(_ 46(_45)){257 _ 45=1;258 } 259 var _ 49=_43.tBodies[0].rows;260 var _5 0=new Array();261 if(!_ 46(_49)){262 for(var i=0;i<_ 49.length;i++){263 _5 0.push([parseFloat(_48(_47(_49[i].cells[_44]))),parseFloat(_48(_47(_49[i].cells[_45])))]);264 } 265 this.addDataset(_4 2,_50);295 PlotKit.Layout.prototype.addDataset=function(_44,_45){ 296 this.datasets[_44]=_45; 297 }; 298 PlotKit.Layout.prototype.removeDataset=function(_46,_47){ 299 this.datasets[_46]=null; 300 }; 301 PlotKit.Layout.prototype.addDatasetFromTable=function(_48,_49,_50,_51){ 302 var _52=MochiKit.Base.isUndefinedOrNull; 303 var _53=MochiKit.DOM.scrapeText; 304 var _54=MochiKit.Format.strip; 305 if(_52(_50)){ 306 _50=0; 307 } 308 if(_52(_51)){ 309 _51=1; 310 } 311 var _55=_49.tBodies[0].rows; 312 var _56=new Array(); 313 if(!_52(_55)){ 314 for(var i=0;i<_55.length;i++){ 315 _56.push([parseFloat(_54(_53(_55[i].cells[_50]))),parseFloat(_54(_53(_55[i].cells[_51])))]); 316 } 317 this.addDataset(_48,_56); 266 318 return true; 267 319 } … … 304 356 this._regenerateHitTestCache(); 305 357 } 306 var _ 55=x/this.xscale;307 var _ 56=this.hitTestCache.xvalues;308 var _ 57=null;309 var _ 58=null;310 for(var i=1;i<_ 56.length;i++){311 if(_ 56[i]>_55){312 _ 57=_56[i-1];313 _ 58=_56[i];358 var _60=x/this.xscale; 359 var _61=this.hitTestCache.xvalues; 360 var _62=null; 361 var _63=null; 362 for(var i=1;i<_61.length;i++){ 363 if(_61[i]>_60){ 364 _62=_61[i-1]; 365 _63=_61[i]; 314 366 break; 315 367 } 316 368 } 317 if((_ 57!=null)){318 var _ 59=this.hitTestCache.x2maxy[_57];319 var _6 0=this.hitTestCache.x2maxy[_58];320 var _6 1=(1-y)/this.yscale;321 var _6 2=(_60-_59)/(_58-_57);322 var _6 3=_59+_62*(_55-_57);323 if(_6 3>=_61){324 var obj={xval:_ 55,yval:_61,xafter:_58,yafter:_60,xbefore:_57,ybefore:_59,yprojected:_63};369 if((_62!=null)){ 370 var _64=this.hitTestCache.x2maxy[_62]; 371 var _65=this.hitTestCache.x2maxy[_63]; 372 var _66=(1-y)/this.yscale; 373 var _67=(_65-_64)/(_63-_62); 374 var _68=_64+_67*(_60-_62); 375 if(_68>=_66){ 376 var obj={xval:_60,yval:_66,xafter:_63,yafter:_65,xbefore:_62,ybefore:_64,yprojected:_68}; 325 377 return obj; 326 378 } … … 328 380 }else{ 329 381 if(this.style=="pie"){ 330 var _6 4=Math.sqrt((y-0.5)*(y-0.5)+(x-0.5)*(x-0.5));331 if(_6 4>this.options.pieRadius){382 var _69=Math.sqrt((y-0.5)*(y-0.5)+(x-0.5)*(x-0.5)); 383 if(_69>this.options.pieRadius){ 332 384 return null; 333 385 } 334 var _ 65=Math.atan2(y-0.5,x-0.5)-Math.PI/2;386 var _70=Math.atan2(y-0.5,x-0.5)-Math.PI/2; 335 387 for(var i=0;i<this.slices.length;i++){ 336 var _ 66=this.slices[i];337 if(_ 66.startAngle<_65&&_66.endAngle>=_65){338 return _ 66;388 var _71=this.slices[i]; 389 if(_71.startAngle<_70&&_71.endAngle>=_70){ 390 return _71; 339 391 } 340 392 } … … 351 403 }; 352 404 PlotKit.Layout.prototype._evaluateLimits=function(){ 353 var map= MochiKit.Base.map;354 var _ 68=MochiKit.Base.items;355 var _ 69=MochiKit.Base.itemgetter;356 var _7 0=PlotKit.Base.collapse;357 var _7 1=MochiKit.Base.listMin;358 var _7 2=MochiKit.Base.listMax;359 var _7 3=MochiKit.Base.isUndefinedOrNull;360 var all=_7 0(map(_69(1),_68(this.datasets)));361 if(_7 3(this.options.xAxis)){405 var map=PlotKit.Base.map; 406 var _73=PlotKit.Base.items; 407 var _74=MochiKit.Base.itemgetter; 408 var _75=PlotKit.Base.collapse; 409 var _76=MochiKit.Base.listMin; 410 var _77=MochiKit.Base.listMax; 411 var _78=MochiKit.Base.isUndefinedOrNull; 412 var all=_75(map(_74(1),_73(this.datasets))); 413 if(_78(this.options.xAxis)){ 362 414 if(this.options.xOriginIsZero){ 363 415 this.minxval=0; 364 416 }else{ 365 this.minxval=_7 1(map(parseFloat,map(_69(0),all)));366 } 367 } 368 if(_7 3(this.options.yAxis)){417 this.minxval=_76(map(parseFloat,map(_74(0),all))); 418 } 419 } 420 if(_78(this.options.yAxis)){ 369 421 if(this.options.yOriginIsZero){ 370 422 this.minyval=0; 371 423 }else{ 372 this.minyval=_7 1(map(parseFloat,map(_69(1),all)));373 } 374 } 375 this.maxxval=_7 2(map(parseFloat,map(_69(0),all)));376 this.maxyval=_7 2(map(parseFloat,map(_69(1),all)));424 this.minyval=_76(map(parseFloat,map(_74(1),all))); 425 } 426 } 427 this.maxxval=_77(map(parseFloat,map(_74(0),all))); 428 this.maxyval=_77(map(parseFloat,map(_74(1),all))); 377 429 }; 378 430 PlotKit.Layout.prototype._evaluateScales=function(){ 379 var _ 75=MochiKit.Base.isUndefinedOrNull;431 var _80=MochiKit.Base.isUndefinedOrNull; 380 432 this.xrange=this.maxxval-this.minxval; 381 433 if(this.xrange==0){ … … 392 444 }; 393 445 PlotKit.Layout.prototype._uniqueXValues=function(){ 394 var _76=PlotKit.Base.collapse; 395 var map=MochiKit.Base.map; 396 var _77=PlotKit.Base.uniq; 397 var _78=MochiKit.Base.itemgetter; 398 var _79=map(parseFloat,map(_78(0),_76(map(_78(1),items(this.datasets))))); 399 _79.sort(MochiKit.Base.compare); 400 return _77(_79); 446 var _81=PlotKit.Base.collapse; 447 var map=PlotKit.Base.map; 448 var _82=PlotKit.Base.uniq; 449 var _83=MochiKit.Base.itemgetter; 450 var _84=PlotKit.Base.items; 451 var _85=map(parseFloat,map(_83(0),_81(map(_83(1),_84(this.datasets))))); 452 _85.sort(MochiKit.Base.compare); 453 return _82(_85); 401 454 }; 402 455 PlotKit.Layout.prototype._evaluateBarCharts=function(){ 403 var _80=MochiKit.Base.keys; 404 var _81=MochiKit.Base.items; 405 var _82=_80(this.datasets).length; 406 var _83=10000000; 407 var _84=this._uniqueXValues(); 408 for(var i=1;i<_84.length;i++){ 409 _83=Math.min(Math.abs(_84[i]-_84[i-1]),_83); 410 } 411 var _85=0; 412 var _86=0; 413 var _87=0; 414 if(_84.length==1){ 415 _83=1; 456 var _86=PlotKit.Base.items; 457 var _87=_86(this.datasets).length; 458 var _88=10000000; 459 var _89=this._uniqueXValues(); 460 for(var i=1;i<_89.length;i++){ 461 _88=Math.min(Math.abs(_89[i]-_89[i-1]),_88); 462 } 463 var _90=0; 464 var _91=0; 465 var _92=0; 466 if(_89.length==1){ 467 _88=1; 416 468 this.xscale=1; 417 this.minxval=_8 4[0];418 _ 85=1*this.options.barWidthFillFraction;419 _ 86=_85/_82;420 _ 87=(1-this.options.barWidthFillFraction)/2;421 }else{ 422 this.xscale=(1-_8 3/this.xrange)/this.xrange;423 _ 85=_83*this.xscale*this.options.barWidthFillFraction;424 _ 86=_85/_82;425 _ 87=_83*this.xscale*(1-this.options.barWidthFillFraction)/2;426 } 427 this.minxdelta=_8 3;469 this.minxval=_89[0]; 470 _90=1*this.options.barWidthFillFraction; 471 _91=_90/_87; 472 _92=(1-this.options.barWidthFillFraction)/2; 473 }else{ 474 this.xscale=(1-_88/this.xrange)/this.xrange; 475 _90=_88*this.xscale*this.options.barWidthFillFraction; 476 _91=_90/_87; 477 _92=_88*this.xscale*(1-this.options.barWidthFillFraction)/2; 478 } 479 this.minxdelta=_88; 428 480 this.bars=new Array(); 429 481 var i=0; 430 for(var _88 in this.datasets){ 431 var _89=this.datasets[_88]; 432 for(var j=0;j<_89.length;j++){ 433 var _91=_89[j]; 434 var _92={x:((parseFloat(_91[0])-this.minxval)*this.xscale)+(i*_86)+_87,y:1-((parseFloat(_91[1])-this.minyval)*this.yscale),w:_86,h:((parseFloat(_91[1])-this.minyval)*this.yscale),xval:parseFloat(_91[0]),yval:parseFloat(_91[1]),name:_88}; 435 this.bars.push(_92); 482 for(var _93 in this.datasets){ 483 var _94=this.datasets[_93]; 484 if(PlotKit.Base.isFuncLike(_94)){ 485 continue; 486 } 487 for(var j=0;j<_94.length;j++){ 488 var _96=_94[j]; 489 var _97={x:((parseFloat(_96[0])-this.minxval)*this.xscale)+(i*_91)+_92,y:1-((parseFloat(_96[1])-this.minyval)*this.yscale),w:_91,h:((parseFloat(_96[1])-this.minyval)*this.yscale),xval:parseFloat(_96[0]),yval:parseFloat(_96[1]),name:_93}; 490 this.bars.push(_97); 436 491 } 437 492 i++; … … 439 494 }; 440 495 PlotKit.Layout.prototype._evaluateHorizBarCharts=function(){ 441 var _93=MochiKit.Base.keys; 442 var _94=MochiKit.Base.items; 443 var _95=_93(this.datasets).length; 444 var _96=10000000; 445 var _97=this._uniqueXValues(); 446 for(var i=1;i<_97.length;i++){ 447 _96=Math.min(Math.abs(_97[i]-_97[i-1]),_96); 448 } 449 var _98=0; 450 var _99=0; 451 var _100=0; 452 if(_97.length==1){ 453 _96=1; 496 var _98=PlotKit.Base.items; 497 var _99=_98(this.datasets).length; 498 var _100=10000000; 499 var _101=this._uniqueXValues(); 500 for(var i=1;i<_101.length;i++){ 501 _100=Math.min(Math.abs(_101[i]-_101[i-1]),_100); 502 } 503 var _102=0; 504 var _103=0; 505 var _104=0; 506 if(_101.length==1){ 507 _100=1; 454 508 this.xscale=1; 455 this.minxval=_ 97[0];456 _ 98=1*this.options.barWidthFillFraction;457 _ 99=_98/_95;458 _10 0=(1-this.options.barWidthFillFraction)/2;459 }else{ 460 this.xscale=(1-_ 96/this.xrange)/this.xrange;461 _ 98=_96*this.xscale*this.options.barWidthFillFraction;462 _ 99=_98/_95;463 _10 0=_96*this.xscale*(1-this.options.barWidthFillFraction)/2;464 } 465 this.minxdelta=_ 96;509 this.minxval=_101[0]; 510 _102=1*this.options.barWidthFillFraction; 511 _103=_102/_99; 512 _104=(1-this.options.barWidthFillFraction)/2; 513 }else{ 514 this.xscale=(1-_100/this.xrange)/this.xrange; 515 _102=_100*this.xscale*this.options.barWidthFillFraction; 516 _103=_102/_99; 517 _104=_100*this.xscale*(1-this.options.barWidthFillFraction)/2; 518 } 519 this.minxdelta=_100; 466 520 this.bars=new Array(); 467 521 var i=0; 468 for(var _101 in this.datasets){ 469 var _102=this.datasets[_101]; 470 for(var j=0;j<_102.length;j++){ 471 var item=_102[j]; 472 var rect={y:((parseFloat(item[0])-this.minxval)*this.xscale)+(i*_99)+_100,x:0,h:_99,w:((parseFloat(item[1])-this.minyval)*this.yscale),xval:parseFloat(item[0]),yval:parseFloat(item[1]),name:_101}; 522 for(var _105 in this.datasets){ 523 var _106=this.datasets[_105]; 524 if(PlotKit.Base.isFuncLike(_106)){ 525 continue; 526 } 527 for(var j=0;j<_106.length;j++){ 528 var item=_106[j]; 529 var rect={y:((parseFloat(item[0])-this.minxval)*this.xscale)+(i*_103)+_104,x:0,h:_103,w:((parseFloat(item[1])-this.minyval)*this.yscale),xval:parseFloat(item[0]),yval:parseFloat(item[1]),name:_105}; 473 530 this.bars.push(rect); 474 531 } … … 477 534 }; 478 535 PlotKit.Layout.prototype._evaluateLineCharts=function(){ 479 var keys=MochiKit.Base.keys; 480 var _106=MochiKit.Base.items; 481 var _107=keys(this.datasets).length; 536 var _109=PlotKit.Base.items; 537 var _110=_109(this.datasets).length; 482 538 this.points=new Array(); 483 539 var i=0; 484 for(var _108 in this.datasets){ 485 var _109=this.datasets[_108]; 486 _109.sort(function(a,b){ 540 for(var _111 in this.datasets){ 541 var _112=this.datasets[_111]; 542 if(PlotKit.Base.isFuncLike(_112)){ 543 continue; 544 } 545 _112.sort(function(a,b){ 487 546 return compare(parseFloat(a[0]),parseFloat(b[0])); 488 547 }); 489 for(var j=0;j<_1 09.length;j++){490 var item=_1 09[j];491 var _11 2={x:((parseFloat(item[0])-this.minxval)*this.xscale),y:1-((parseFloat(item[1])-this.minyval)*this.yscale),xval:parseFloat(item[0]),yval:parseFloat(item[1]),name:_108};492 this.points.push(_11 2);548 for(var j=0;j<_112.length;j++){ 549 var item=_112[j]; 550 var _115={x:((parseFloat(item[0])-this.minxval)*this.xscale),y:1-((parseFloat(item[1])-this.minyval)*this.yscale),xval:parseFloat(item[0]),yval:parseFloat(item[1]),name:_111}; 551 this.points.push(_115); 493 552 } 494 553 i++; … … 496 555 }; 497 556 PlotKit.Layout.prototype._evaluatePieCharts=function(){ 498 var _11 3=MochiKit.Base.items;557 var _116=PlotKit.Base.items; 499 558 var sum=MochiKit.Iter.sum; 500 var _11 5=MochiKit.Base.itemgetter;501 var _11 6=keys(this.datasets).length;502 var _1 17=_113(this.datasets)[0][1];503 var _1 18=sum(map(_115(1),_117));559 var _118=MochiKit.Base.itemgetter; 560 var _119=_116(this.datasets).length; 561 var _120=_116(this.datasets)[0][1]; 562 var _121=sum(map(_118(1),_120)); 504 563 this.slices=new Array(); 505 var _1 19=0;506 for(var i=0;i<_1 17.length;i++){507 var _12 0=_117[i][1]/_118;508 var _12 1=_119*Math.PI*2;509 var _12 2=(_119+_120)*Math.PI*2;510 var _12 3={fraction:_120,xval:_117[i][0],yval:_117[i][1],startAngle:_121,endAngle:_122};511 this.slices.push(_12 3);512 _1 19+=_120;564 var _122=0; 565 for(var i=0;i<_120.length;i++){ 566 var _123=_120[i][1]/_121; 567 var _124=_122*Math.PI*2; 568 var _125=(_122+_123)*Math.PI*2; 569 var _126={fraction:_123,xval:_120[i][0],yval:_120[i][1],startAngle:_124,endAngle:_125}; 570 this.slices.push(_126); 571 _122+=_123; 513 572 } 514 573 }; 515 574 PlotKit.Layout.prototype._evaluateLineTicksForXAxis=function(){ 516 var _12 4=MochiKit.Base.isUndefinedOrNull;575 var _127=MochiKit.Base.isUndefinedOrNull; 517 576 if(this.options.xTicks){ 518 577 this.xticks=new Array(); 519 var _12 5=function(tick){520 var _1 27=tick.label;521 if(_12 4(_127)){522 _1 27=tick.v.toString();578 var _128=function(tick){ 579 var _130=tick.label; 580 if(_127(_130)){ 581 _130=tick.v.toString(); 523 582 } 524 583 var pos=this.xscale*(tick.v-this.minxval); 525 this.xticks.push([pos,_1 27]);526 }; 527 MochiKit.Iter.forEach(this.options.xTicks,bind(_12 5,this));584 this.xticks.push([pos,_130]); 585 }; 586 MochiKit.Iter.forEach(this.options.xTicks,bind(_128,this)); 528 587 }else{ 529 588 if(this.options.xNumberOfTicks){ 530 var _1 29=this._uniqueXValues();531 var _13 0=this.xrange/this.options.xNumberOfTicks;532 var _13 1=0;589 var _132=this._uniqueXValues(); 590 var _133=this.xrange/this.options.xNumberOfTicks; 591 var _134=0; 533 592 this.xticks=new Array(); 534 for(var i=0;i<=_1 29.length;i++){535 if(_1 29[i]>=(_131)*_130){536 var pos=this.xscale*(_1 29[i]-this.minxval);593 for(var i=0;i<=_132.length;i++){ 594 if(_132[i]>=(_134)*_133){ 595 var pos=this.xscale*(_132[i]-this.minxval); 537 596 if((pos>1)||(pos<0)){ 538 597 return; 539 598 } 540 this.xticks.push([pos,_1 29[i]]);541 _13 1++;542 } 543 if(_13 1>this.options.xNumberOfTicks){599 this.xticks.push([pos,_132[i]]); 600 _134++; 601 } 602 if(_134>this.options.xNumberOfTicks){ 544 603 break; 545 604 } … … 549 608 }; 550 609 PlotKit.Layout.prototype._evaluateLineTicksForYAxis=function(){ 551 var _13 2=MochiKit.Base.isUndefinedOrNull;610 var _135=MochiKit.Base.isUndefinedOrNull; 552 611 if(this.options.yTicks){ 553 612 this.yticks=new Array(); 554 var _13 3=function(tick){555 var _13 4=tick.label;556 if(_13 2(_134)){557 _13 4=tick.v.toString();613 var _136=function(tick){ 614 var _137=tick.label; 615 if(_135(_137)){ 616 _137=tick.v.toString(); 558 617 } 559 618 var pos=1-(this.yscale*(tick.v+this.minxval)); … … 561 620 return; 562 621 } 563 this.yticks.push([pos,_13 4]);564 }; 565 MochiKit.Iter.forEach(this.options.yTicks,bind(_13 3,this));622 this.yticks.push([pos,_137]); 623 }; 624 MochiKit.Iter.forEach(this.options.yTicks,bind(_136,this)); 566 625 }else{ 567 626 if(this.options.yNumberOfTicks){ 568 627 this.yticks=new Array(); 569 var _13 5=PlotKit.Base.roundInterval;628 var _138=PlotKit.Base.roundInterval; 570 629 var prec=this.options.yTickPrecision; 571 var _1 37=_135(this.yrange,this.options.yNumberOfTicks,this.options.yTickPrecision);630 var _140=_138(this.yrange,this.options.yNumberOfTicks,this.options.yTickPrecision); 572 631 for(var i=0;i<=this.options.yNumberOfTicks;i++){ 573 var yval=this.minyval+(i*_1 37);632 var yval=this.minyval+(i*_140); 574 633 var pos=1-((yval-this.minyval)*this.yscale); 575 634 this.yticks.push([pos,MochiKit.Format.roundToFixed(yval,1)]); … … 584 643 PlotKit.Layout.prototype._evaluateBarTicks=function(){ 585 644 this._evaluateLineTicks(); 586 var _1 39=function(tick){645 var _142=function(tick){ 587 646 return [tick[0]+(this.minxdelta*this.xscale)/2,tick[1]]; 588 647 }; 589 this.xticks=MochiKit.Base.map(bind(_1 39,this),this.xticks);648 this.xticks=MochiKit.Base.map(bind(_142,this),this.xticks); 590 649 if(this.options.barOrientation=="horizontal"){ 591 var _14 0=this.xticks;650 var _143=this.xticks; 592 651 this.xticks=this.yticks; 593 this.yticks=_14 0;594 var _14 1=function(tick){652 this.yticks=_143; 653 var _144=function(tick){ 595 654 return [1-tick[0],tick[1]]; 596 655 }; 597 this.xticks=MochiKit.Base.map(_14 1,this.xticks);656 this.xticks=MochiKit.Base.map(_144,this.xticks); 598 657 } 599 658 }; 600 659 PlotKit.Layout.prototype._evaluatePieTicks=function(){ 601 var _14 2=MochiKit.Base.isUndefinedOrNull;602 var _14 3=MochiKit.Format.numberFormatter("#%");660 var _145=MochiKit.Base.isUndefinedOrNull; 661 var _146=MochiKit.Format.numberFormatter("#%"); 603 662 this.xticks=new Array(); 604 663 if(this.options.xTicks){ 605 var _14 4=new Array();664 var _147=new Array(); 606 665 for(var i=0;i<this.slices.length;i++){ 607 _14 4[this.slices[i].xval]=this.slices[i];666 _147[this.slices[i].xval]=this.slices[i]; 608 667 } 609 668 for(var i=0;i<this.options.xTicks.length;i++){ 610 669 var tick=this.options.xTicks[i]; 611 var _14 5=_144[tick.v];612 var _14 6=tick.label;613 if(_14 5){614 if(_14 2(_146)){615 _14 6=tick.v.toString();616 } 617 _14 6+=" ("+_143(_145.fraction)+")";618 this.xticks.push([tick.v,_14 6]);670 var _148=_147[tick.v]; 671 var _149=tick.label; 672 if(_148){ 673 if(_145(_149)){ 674 _149=tick.v.toString(); 675 } 676 _149+=" ("+_146(_148.fraction)+")"; 677 this.xticks.push([tick.v,_149]); 619 678 } 620 679 } 621 680 }else{ 622 681 for(var i=0;i<this.slices.length;i++){ 623 var _14 5=this.slices[i];624 var _14 6=_145.xval+" ("+_143(_145.fraction)+")";625 this.xticks.push([_14 5.xval,_146]);682 var _148=this.slices[i]; 683 var _149=_148.xval+" ("+_146(_148.fraction)+")"; 684 this.xticks.push([_148.xval,_149]); 626 685 } 627 686 } … … 631 690 this.hitTestCache.xlookup=new Array(); 632 691 this.hitTestCache.x2maxy=new Array(); 633 var _1 47=MochiKit.Base.listMax;634 var _1 48=MochiKit.Base.itemgetter;692 var _150=MochiKit.Base.listMax; 693 var _151=MochiKit.Base.itemgetter; 635 694 var map=MochiKit.Base.map; 636 var _1 49=keys(this.datasets);637 for(var i=0;i<_1 49.length;i++){638 var _15 0=this.datasets[_149[i]];639 for(var j=0;j<_15 0.length;j++){640 var xval=_15 0[j][0];641 var yval=_15 0[j][1];695 var _152=keys(this.datasets); 696 for(var i=0;i<_152.length;i++){ 697 var _153=this.datasets[_152[i]]; 698 for(var j=0;j<_153.length;j++){ 699 var xval=_153[j][0]; 700 var yval=_153[j][1]; 642 701 if(this.hitTestCache.xlookup[xval]){ 643 this.hitTestCache.xlookup[xval].push([yval,_1 49[i]]);644 }else{ 645 this.hitTestCache.xlookup[xval]=[[yval,_1 49[i]]];702 this.hitTestCache.xlookup[xval].push([yval,_152[i]]); 703 }else{ 704 this.hitTestCache.xlookup[xval]=[[yval,_152[i]]]; 646 705 } 647 706 } 648 707 } 649 708 for(var x in this.hitTestCache.xlookup){ 650 var _15 2=this.hitTestCache.xlookup[x];651 this.hitTestCache.x2maxy[x]=_1 47(map(_148(0),_152));709 var _155=this.hitTestCache.xlookup[x]; 710 this.hitTestCache.x2maxy[x]=_150(map(_151(0),_155)); 652 711 } 653 712 }; … … 682 741 return this.__repr__(); 683 742 }; 684 PlotKit.CanvasRenderer=function(_15 3,_154,_155){743 PlotKit.CanvasRenderer=function(_156,_157,_158){ 685 744 if(arguments.length>0){ 686 this.__init__(_15 3,_154,_155);687 } 688 }; 689 PlotKit.CanvasRenderer.prototype.__init__=function(_15 6,_157,_158){690 var _1 59=MochiKit.Base.isUndefinedOrNull;691 var _16 0=MochiKit.Color.Color;692 this.options={"drawBackground":true,"backgroundColor":_16 0.whiteColor(),"padding":{left:30,right:30,top:5,bottom:10},"colorScheme":PlotKit.Base.palette(PlotKit.Base.baseColors()[0]),"strokeColor":_160.whiteColor(),"strokeColorTransform":"asStrokeColor","strokeWidth":0.5,"shouldFill":true,"shouldStroke":true,"drawXAxis":true,"drawYAxis":true,"axisLineColor":_160.blackColor(),"axisLineWidth":0.5,"axisTickSize":3,"axisLabelColor":_160.blackColor(),"axisLabelFont":"Arial","axisLabelFontSize":9,"axisLabelWidth":50,"pieRadius":0.4,"enableEvents":true};693 MochiKit.Base.update(this.options,_1 58?_158:{});694 this.layout=_1 57;695 this.style=_1 57.style;696 this.element=_15 6;745 this.__init__(_156,_157,_158); 746 } 747 }; 748 PlotKit.CanvasRenderer.prototype.__init__=function(_159,_160,_161){ 749 var _162=MochiKit.Base.isUndefinedOrNull; 750 var _163=MochiKit.Color.Color; 751 this.options={"drawBackground":true,"backgroundColor":_163.whiteColor(),"padding":{left:30,right:30,top:5,bottom:10},"colorScheme":PlotKit.Base.palette(PlotKit.Base.baseColors()[0]),"strokeColor":_163.whiteColor(),"strokeColorTransform":"asStrokeColor","strokeWidth":0.5,"shouldFill":true,"shouldStroke":true,"drawXAxis":true,"drawYAxis":true,"axisLineColor":_163.blackColor(),"axisLineWidth":0.5,"axisTickSize":3,"axisLabelColor":_163.blackColor(),"axisLabelFont":"Arial","axisLabelFontSize":9,"axisLabelWidth":50,"pieRadius":0.4,"enableEvents":true}; 752 MochiKit.Base.update(this.options,_161?_161:{}); 753 this.layout=_160; 754 this.style=_160.style; 755 this.element=_159; 697 756 this.container=this.element.parentNode; 698 757 this.isIE=PlotKit.Base.excanvasSupported(); 699 if(this.isIE&&!_1 59(G_vmlCanvasManager)){758 if(this.isIE&&!_162(G_vmlCanvasManager)){ 700 759 this.IEDelay=0.5; 701 760 this.maxTries=5; … … 706 765 this.height=this.element.height; 707 766 this.width=this.element.width; 708 if(_1 59(this.element)){767 if(_162(this.element)){ 709 768 throw "CanvasRenderer() - passed canvas is not found"; 710 769 } … … 712 771 throw "CanvasRenderer() - Canvas is not supported."; 713 772 } 714 if(_1 59(this.container)||(this.container.nodeName.toLowerCase()!="div")){773 if(_162(this.container)||(this.container.nodeName.toLowerCase()!="div")){ 715 774 throw "CanvasRenderer() - <canvas> needs to be enclosed in <div>"; 716 775 } … … 736 795 this.renderDelay=null; 737 796 } 738 var _16 1=this.element.getContext("2d");797 var _164=this.element.getContext("2d"); 739 798 } 740 799 catch(e){ … … 765 824 } 766 825 }; 767 PlotKit.CanvasRenderer.prototype._renderBarChartWrap=function(data,_16 3){768 var _16 4=this.element.getContext("2d");769 var _16 5=this.options.colorScheme.length;770 var _16 6=this.options.colorScheme;771 var _1 67=MochiKit.Base.keys(this.layout.datasets);772 var _1 68=_167.length;773 for(var i=0;i<_1 68;i++){774 var _1 69=_167[i];775 var _17 0=_166[i%_165];776 _16 4.save();777 _16 4.fillStyle=_170.toRGBString();826 PlotKit.CanvasRenderer.prototype._renderBarChartWrap=function(data,_166){ 827 var _167=this.element.getContext("2d"); 828 var _168=this.options.colorScheme.length; 829 var _169=this.options.colorScheme; 830 var _170=MochiKit.Base.keys(this.layout.datasets); 831 var _171=_170.length; 832 for(var i=0;i<_171;i++){ 833 var _172=_170[i]; 834 var _173=_169[i%_168]; 835 _167.save(); 836 _167.fillStyle=_173.toRGBString(); 778 837 if(this.options.strokeColor){ 779 _16 4.strokeStyle=this.options.strokeColor.toRGBString();838 _167.strokeStyle=this.options.strokeColor.toRGBString(); 780 839 }else{ 781 840 if(this.options.strokeColorTransform){ 782 _16 4.strokeStyle=_170[this.options.strokeColorTransform]().toRGBString();783 &n



