Changeset 57

Show
Ignore:
Timestamp:
29/08/06 21:05:59 (2 years ago)
Author:
al
Message:

Added optional argument to addDatasetFromTable to extract labels from the columns. Inspired by Attiks in http://projects.liquidx.net/js/wiki/addDatasetFromTableWithLabels

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • plotkit/trunk/PlotKit/Layout.js

    r56 r57  
    125125}; 
    126126 
    127 PlotKit.Layout.prototype.addDatasetFromTable = function(name, tableElement, xcol, ycol) { 
     127PlotKit.Layout.prototype.addDatasetFromTable = function(name, tableElement, xcol, ycol,  lcol) { 
    128128        var isNil = MochiKit.Base.isUndefinedOrNull; 
    129129        var scrapeText = MochiKit.DOM.scrapeText; 
     
    134134        if (isNil(ycol)) 
    135135                ycol = 1; 
     136        if (isNil(lcol)) 
     137            lcol = -1; 
    136138         
    137139    var rows = tableElement.tBodies[0].rows; 
    138140    var data = new Array(); 
     141    var labels = new Array(); 
     142     
    139143    if (!isNil(rows)) { 
    140144        for (var i = 0; i < rows.length; i++) { 
    141145            data.push([parseFloat(strip(scrapeText(rows[i].cells[xcol]))), 
    142146                       parseFloat(strip(scrapeText(rows[i].cells[ycol])))]); 
     147            if (lcol >= 0){ 
     148               labels.push({v: parseFloat(strip(scrapeText(rows[i].cells[xcol]))), 
     149                            label:  strip(scrapeText(rows[i].cells[lcol]))}); 
     150            } 
    143151        } 
    144152        this.addDataset(name, data); 
     153        if (lcol >= 0) { 
     154            this.options.xTicks = labels; 
     155        } 
    145156        return true; 
    146157    } 
  • plotkit/trunk/PlotKit/PlotKit_Packed.js

    r56 r57  
    304304delete this.datasets[_46]; 
    305305}; 
    306 PlotKit.Layout.prototype.addDatasetFromTable=function(_48,_49,_50,_51){ 
    307 var _52=MochiKit.Base.isUndefinedOrNull; 
    308 var _53=MochiKit.DOM.scrapeText; 
    309 var _54=MochiKit.Format.strip; 
    310 if(_52(_50)){ 
     306PlotKit.Layout.prototype.addDatasetFromTable=function(_48,_49,_50,_51,_52){ 
     307var _53=MochiKit.Base.isUndefinedOrNull; 
     308var _54=MochiKit.DOM.scrapeText; 
     309var _55=MochiKit.Format.strip; 
     310if(_53(_50)){ 
    311311_50=0; 
    312312} 
    313 if(_52(_51)){ 
     313if(_53(_51)){ 
    314314_51=1; 
    315315} 
    316 var _55=_49.tBodies[0].rows; 
    317 var _56=new Array(); 
    318 if(!_52(_55)){ 
    319 for(var i=0;i<_55.length;i++){ 
    320 _56.push([parseFloat(_54(_53(_55[i].cells[_50]))),parseFloat(_54(_53(_55[i].cells[_51])))]); 
    321 
    322 this.addDataset(_48,_56); 
     316if(_53(_52)){ 
     317_52=-1; 
     318
     319var _56=_49.tBodies[0].rows; 
     320var _57=new Array(); 
     321var _58=new Array(); 
     322if(!_53(_56)){ 
     323for(var i=0;i<_56.length;i++){ 
     324_57.push([parseFloat(_55(_54(_56[i].cells[_50]))),parseFloat(_55(_54(_56[i].cells[_51])))]); 
     325if(_52>=0){ 
     326_58.push({v:parseFloat(_55(_54(_56[i].cells[_50]))),label:_55(_54(_56[i].cells[_52]))}); 
     327
     328
     329this.addDataset(_48,_57); 
     330if(_52>=0){ 
     331this.options.xTicks=_58; 
     332
    323333return true; 
    324334} 
     
    361371this._regenerateHitTestCache(); 
    362372} 
    363 var _60=x/this.xscale; 
    364 var _61=this.hitTestCache.xvalues; 
    365 var _62=null; 
    366 var _63=null; 
    367 for(var i=1;i<_61.length;i++){ 
    368 if(_61[i]>_60){ 
    369 _62=_61[i-1]; 
    370 _63=_61[i]; 
     373var _62=x/this.xscale; 
     374var _63=this.hitTestCache.xvalues; 
     375var _64=null; 
     376var _65=null; 
     377for(var i=1;i<_63.length;i++){ 
     378if(_63[i]>_62){ 
     379_64=_63[i-1]; 
     380_65=_63[i]; 
    371381break; 
    372382} 
    373383} 
    374 if((_62!=null)){ 
    375 var _64=this.hitTestCache.x2maxy[_62]; 
    376 var _65=this.hitTestCache.x2maxy[_63]; 
    377 var _66=(1-y)/this.yscale; 
    378 var _67=(_65-_64)/(_63-_62); 
    379 var _68=_64+_67*(_60-_62); 
    380 if(_68>=_66){ 
    381 var obj={xval:_60,yval:_66,xafter:_63,yafter:_65,xbefore:_62,ybefore:_64,yprojected:_68}; 
     384if((_64!=null)){ 
     385var _66=this.hitTestCache.x2maxy[_64]; 
     386var _67=this.hitTestCache.x2maxy[_65]; 
     387var _68=(1-y)/this.yscale; 
     388var _69=(_67-_66)/(_65-_64); 
     389var _70=_66+_69*(_62-_64); 
     390if(_70>=_68){ 
     391var obj={xval:_62,yval:_68,xafter:_65,yafter:_67,xbefore:_64,ybefore:_66,yprojected:_70}; 
    382392return obj; 
    383393} 
     
    385395}else{ 
    386396if(this.style=="pie"){ 
    387 var _69=Math.sqrt((y-0.5)*(y-0.5)+(x-0.5)*(x-0.5)); 
    388 if(_69>this.options.pieRadius){ 
     397var _71=Math.sqrt((y-0.5)*(y-0.5)+(x-0.5)*(x-0.5)); 
     398if(_71>this.options.pieRadius){ 
    389399return null; 
    390400} 
    391 var _70=Math.atan2(y-0.5,x-0.5)-Math.PI/2; 
     401var _72=Math.atan2(y-0.5,x-0.5)-Math.PI/2; 
    392402for(var i=0;i<this.slices.length;i++){ 
    393 var _71=this.slices[i]; 
    394 if(_71.startAngle<_70&&_71.endAngle>=_70){ 
    395 return _71
     403var _73=this.slices[i]; 
     404if(_73.startAngle<_72&&_73.endAngle>=_72){ 
     405return _73
    396406} 
    397407} 
     
    409419PlotKit.Layout.prototype._evaluateLimits=function(){ 
    410420var map=PlotKit.Base.map; 
    411 var _73=PlotKit.Base.items; 
    412 var _74=MochiKit.Base.itemgetter; 
    413 var _75=PlotKit.Base.collapse; 
    414 var _76=MochiKit.Base.listMin; 
    415 var _77=MochiKit.Base.listMax; 
    416 var _78=MochiKit.Base.isUndefinedOrNull; 
    417 var all=_75(map(_74(1),_73(this.datasets))); 
    418 if(_78(this.options.xAxis)){ 
     421var _75=PlotKit.Base.items; 
     422var _76=MochiKit.Base.itemgetter; 
     423var _77=PlotKit.Base.collapse; 
     424var _78=MochiKit.Base.listMin; 
     425var _79=MochiKit.Base.listMax; 
     426var _80=MochiKit.Base.isUndefinedOrNull; 
     427var all=_77(map(_76(1),_75(this.datasets))); 
     428if(_80(this.options.xAxis)){ 
    419429if(this.options.xOriginIsZero){ 
    420430this.minxval=0; 
    421431}else{ 
    422 this.minxval=_76(map(parseFloat,map(_74(0),all))); 
    423 } 
    424 this.maxxval=_77(map(parseFloat,map(_74(0),all))); 
     432this.minxval=_78(map(parseFloat,map(_76(0),all))); 
     433} 
     434this.maxxval=_79(map(parseFloat,map(_76(0),all))); 
    425435}else{ 
    426436this.minxval=this.options.xAxis[0]; 
     
    428438this.xscale=this.maxval-this.minxval; 
    429439} 
    430 if(_78(this.options.yAxis)){ 
     440if(_80(this.options.yAxis)){ 
    431441if(this.options.yOriginIsZero){ 
    432442this.minyval=0; 
    433443}else{ 
    434 this.minyval=_76(map(parseFloat,map(_74(1),all))); 
    435 } 
    436 this.maxyval=_77(map(parseFloat,map(_74(1),all))); 
     444this.minyval=_78(map(parseFloat,map(_76(1),all))); 
     445} 
     446this.maxyval=_79(map(parseFloat,map(_76(1),all))); 
    437447}else{ 
    438448this.minyval=this.options.yAxis[0]; 
     
    442452}; 
    443453PlotKit.Layout.prototype._evaluateScales=function(){ 
    444 var _80=MochiKit.Base.isUndefinedOrNull; 
     454var _82=MochiKit.Base.isUndefinedOrNull; 
    445455this.xrange=this.maxxval-this.minxval; 
    446456if(this.xrange==0){ 
     
    457467}; 
    458468PlotKit.Layout.prototype._uniqueXValues=function(){ 
    459 var _81=PlotKit.Base.collapse; 
     469var _83=PlotKit.Base.collapse; 
    460470var map=PlotKit.Base.map; 
    461 var _82=PlotKit.Base.uniq; 
    462 var _83=MochiKit.Base.itemgetter; 
    463 var _84=PlotKit.Base.items; 
    464 var _85=map(parseFloat,map(_83(0),_81(map(_83(1),_84(this.datasets))))); 
    465 _85.sort(MochiKit.Base.compare); 
    466 return _82(_85); 
     471var _84=PlotKit.Base.uniq; 
     472var _85=MochiKit.Base.itemgetter; 
     473var _86=PlotKit.Base.items; 
     474var _87=map(parseFloat,map(_85(0),_83(map(_85(1),_86(this.datasets))))); 
     475_87.sort(MochiKit.Base.compare); 
     476return _84(_87); 
    467477}; 
    468478PlotKit.Layout.prototype._evaluateBarCharts=function(){ 
    469 var _86=PlotKit.Base.items; 
    470 var _87=_86(this.datasets).length; 
    471 var _88=10000000; 
    472 var _89=this._uniqueXValues(); 
    473 for(var i=1;i<_89.length;i++){ 
    474 _88=Math.min(Math.abs(_89[i]-_89[i-1]),_88); 
    475 
    476 var _90=0; 
    477 var _91=0; 
     479var _88=PlotKit.Base.items; 
     480var _89=_88(this.datasets).length; 
     481var _90=10000000; 
     482var _91=this._uniqueXValues(); 
     483for(var i=1;i<_91.length;i++){ 
     484_90=Math.min(Math.abs(_91[i]-_91[i-1]),_90); 
     485
    478486var _92=0; 
    479 if(_89.length==1){ 
    480 _88=1; 
     487var _93=0; 
     488var _94=0; 
     489if(_91.length==1){ 
     490_90=1; 
    481491this.xscale=1; 
    482 this.minxval=_89[0]; 
    483 _90=1*this.options.barWidthFillFraction; 
    484 _91=_90/_87
    485 _92=(1-this.options.barWidthFillFraction)/2; 
     492this.minxval=_91[0]; 
     493_92=1*this.options.barWidthFillFraction; 
     494_93=_92/_89
     495_94=(1-this.options.barWidthFillFraction)/2; 
    486496}else{ 
    487497if(this.xrange==1){ 
     
    491501this.xscale=1/3; 
    492502}else{ 
    493 this.xscale=(1-_88/this.xrange)/this.xrange; 
    494 } 
    495 } 
    496 _90=_88*this.xscale*this.options.barWidthFillFraction; 
    497 _91=_90/_87
    498 _92=_88*this.xscale*(1-this.options.barWidthFillFraction)/2; 
    499 } 
    500 this.minxdelta=_88
     503this.xscale=(1-_90/this.xrange)/this.xrange; 
     504} 
     505} 
     506_92=_90*this.xscale*this.options.barWidthFillFraction; 
     507_93=_92/_89
     508_94=_90*this.xscale*(1-this.options.barWidthFillFraction)/2; 
     509} 
     510this.minxdelta=_90
    501511this.bars=new Array(); 
    502512var i=0; 
    503 for(var _93 in this.datasets){ 
    504 var _94=this.datasets[_93]; 
    505 if(PlotKit.Base.isFuncLike(_94)){ 
     513for(var _95 in this.datasets){ 
     514var _96=this.datasets[_95]; 
     515if(PlotKit.Base.isFuncLike(_96)){ 
    506516continue; 
    507517} 
    508 for(var j=0;j<_94.length;j++){ 
    509 var _96=_94[j]; 
    510 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}; 
    511 if((_97.x>=0)&&(_97.x<=1)&&(_97.y>=0)&&(_97.y<=1)){ 
    512 this.bars.push(_97); 
     518for(var j=0;j<_96.length;j++){ 
     519var _98=_96[j]; 
     520var _99={x:((parseFloat(_98[0])-this.minxval)*this.xscale)+(i*_93)+_94,y:1-((parseFloat(_98[1])-this.minyval)*this.yscale),w:_93,h:((parseFloat(_98[1])-this.minyval)*this.yscale),xval:parseFloat(_98[0]),yval:parseFloat(_98[1]),name:_95}; 
     521if((_99.x>=0)&&(_99.x<=1)&&(_99.y>=0)&&(_99.y<=1)){ 
     522this.bars.push(_99); 
    513523} 
    514524} 
     
    517527}; 
    518528PlotKit.Layout.prototype._evaluateHorizBarCharts=function(){ 
    519 var _98=PlotKit.Base.items; 
    520 var _99=_98(this.datasets).length; 
    521 var _100=10000000; 
    522 var _101=this._uniqueXValues(); 
    523 for(var i=1;i<_101.length;i++){ 
    524 _100=Math.min(Math.abs(_101[i]-_101[i-1]),_100); 
    525 
    526 var _102=0; 
    527 var _103=0; 
     529var _100=PlotKit.Base.items; 
     530var _101=_100(this.datasets).length; 
     531var _102=10000000; 
     532var _103=this._uniqueXValues(); 
     533for(var i=1;i<_103.length;i++){ 
     534_102=Math.min(Math.abs(_103[i]-_103[i-1]),_102); 
     535
    528536var _104=0; 
    529 if(_101.length==1){ 
    530 _100=1; 
     537var _105=0; 
     538var _106=0; 
     539if(_103.length==1){ 
     540_102=1; 
    531541this.xscale=1; 
    532 this.minxval=_101[0]; 
    533 _102=1*this.options.barWidthFillFraction; 
    534 _103=_102/_99
    535 _104=(1-this.options.barWidthFillFraction)/2; 
    536 }else{ 
    537 this.xscale=(1-_100/this.xrange)/this.xrange; 
    538 _102=_100*this.xscale*this.options.barWidthFillFraction; 
    539 _103=_102/_99
    540 _104=_100*this.xscale*(1-this.options.barWidthFillFraction)/2; 
    541 } 
    542 this.minxdelta=_100
     542this.minxval=_103[0]; 
     543_104=1*this.options.barWidthFillFraction; 
     544_105=_104/_101
     545_106=(1-this.options.barWidthFillFraction)/2; 
     546}else{ 
     547this.xscale=(1-_102/this.xrange)/this.xrange; 
     548_104=_102*this.xscale*this.options.barWidthFillFraction; 
     549_105=_104/_101
     550_106=_102*this.xscale*(1-this.options.barWidthFillFraction)/2; 
     551} 
     552this.minxdelta=_102
    543553this.bars=new Array(); 
    544554var i=0; 
    545 for(var _105 in this.datasets){ 
    546 var _106=this.datasets[_105]; 
    547 if(PlotKit.Base.isFuncLike(_106)){ 
     555for(var _107 in this.datasets){ 
     556var _108=this.datasets[_107]; 
     557if(PlotKit.Base.isFuncLike(_108)){ 
    548558continue; 
    549559} 
    550 for(var j=0;j<_106.length;j++){ 
    551 var item=_106[j]; 
    552 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}; 
     560for(var j=0;j<_108.length;j++){ 
     561var item=_108[j]; 
     562var rect={y:((parseFloat(item[0])-this.minxval)*this.xscale)+(i*_105)+_106,x:0,h:_105,w:((parseFloat(item[1])-this.minyval)*this.yscale),xval:parseFloat(item[0]),yval:parseFloat(item[1]),name:_107}; 
    553563if(rect.y<=0){ 
    554564rect.y=0; 
     
    565575}; 
    566576PlotKit.Layout.prototype._evaluateLineCharts=function(){ 
    567 var _109=PlotKit.Base.items; 
    568 var _110=_109(this.datasets).length; 
     577var _111=PlotKit.Base.items; 
     578var _112=_111(this.datasets).length; 
    569579this.points=new Array(); 
    570580var i=0; 
    571 for(var _111 in this.datasets){ 
    572 var _112=this.datasets[_111]; 
    573 if(PlotKit.Base.isFuncLike(_112)){ 
     581for(var _113 in this.datasets){ 
     582var _114=this.datasets[_113]; 
     583if(PlotKit.Base.isFuncLike(_114)){ 
    574584continue; 
    575585} 
    576 _112.sort(function(a,b){ 
     586_114.sort(function(a,b){ 
    577587return compare(parseFloat(a[0]),parseFloat(b[0])); 
    578588}); 
    579 for(var j=0;j<_112.length;j++){ 
    580 var item=_112[j]; 
    581 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}; 
    582 if(_115.y<=0){ 
    583 _115.y=0; 
    584 } 
    585 if(_115.y>=1){ 
    586 _115.y=1; 
    587 } 
    588 if((_115.x>=0)&&(_115.x<=1)){ 
    589 this.points.push(_115); 
     589for(var j=0;j<_114.length;j++){ 
     590var item=_114[j]; 
     591var _117={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:_113}; 
     592if(_117.y<=0){ 
     593_117.y=0; 
     594} 
     595if(_117.y>=1){ 
     596_117.y=1; 
     597} 
     598if((_117.x>=0)&&(_117.x<=1)){ 
     599this.points.push(_117); 
    590600} 
    591601} 
     
    594604}; 
    595605PlotKit.Layout.prototype._evaluatePieCharts=function(){ 
    596 var _116=PlotKit.Base.items; 
     606var _118=PlotKit.Base.items; 
    597607var sum=MochiKit.Iter.sum; 
    598 var _118=MochiKit.Base.itemgetter; 
    599 var _119=_116(this.datasets).length; 
    600 var _120=_116(this.datasets)[0][1]; 
    601 var _121=sum(map(_118(1),_120)); 
     608var _120=MochiKit.Base.itemgetter; 
     609var _121=_118(this.datasets).length; 
     610var _122=_118(this.datasets)[0][1]; 
     611var _123=sum(map(_120(1),_122)); 
    602612this.slices=new Array(); 
    603 var _122=0; 
    604 for(var i=0;i<_120.length;i++){ 
    605 var _123=_120[i][1]/_121
    606 var _124=_122*Math.PI*2; 
    607 var _125=(_122+_123)*Math.PI*2; 
    608 var _126={fraction:_123,xval:_120[i][0],yval:_120[i][1],startAngle:_124,endAngle:_125}; 
    609 if(_120[i][1]!=0){ 
    610 this.slices.push(_126); 
    611 } 
    612 _122+=_123
     613var _124=0; 
     614for(var i=0;i<_122.length;i++){ 
     615var _125=_122[i][1]/_123
     616var _126=_124*Math.PI*2; 
     617var _127=(_124+_125)*Math.PI*2; 
     618var _128={fraction:_125,xval:_122[i][0],yval:_122[i][1],startAngle:_126,endAngle:_127}; 
     619if(_122[i][1]!=0){ 
     620this.slices.push(_128); 
     621} 
     622_124+=_125
    613623} 
    614624}; 
    615625PlotKit.Layout.prototype._evaluateLineTicksForXAxis=function(){ 
    616 var _127=MochiKit.Base.isUndefinedOrNull; 
     626var _129=MochiKit.Base.isUndefinedOrNull; 
    617627if(this.options.xTicks){ 
    618628this.xticks=new Array(); 
    619 var _128=function(tick){ 
    620 var _130=tick.label; 
    621 if(_127(_130)){ 
    622 _130=tick.v.toString(); 
     629var _130=function(tick){ 
     630var _132=tick.label; 
     631if(_129(_132)){ 
     632_132=tick.v.toString(); 
    623633} 
    624634var pos=this.xscale*(tick.v-this.minxval); 
    625635if((pos>=0)&&(pos<=1)){ 
    626 this.xticks.push([pos,_130]); 
    627 } 
    628 }; 
    629 MochiKit.Iter.forEach(this.options.xTicks,bind(_128,this)); 
     636this.xticks.push([pos,_132]); 
     637} 
     638}; 
     639MochiKit.Iter.forEach(this.options.xTicks,bind(_130,this)); 
    630640}else{ 
    631641if(this.options.xNumberOfTicks){ 
    632 var _132=this._uniqueXValues(); 
    633 var _133=this.xrange/this.options.xNumberOfTicks; 
    634 var _134=0; 
     642var _134=this._uniqueXValues(); 
     643var _135=this.xrange/this.options.xNumberOfTicks; 
     644var _136=0; 
    635645this.xticks=new Array(); 
    636 for(var i=0;i<=_132.length;i++){ 
    637 if((_132[i]-this.minxval)>=(_134*_133)){ 
    638 var pos=this.xscale*(_132[i]-this.minxval); 
     646for(var i=0;i<=_134.length;i++){ 
     647if((_134[i]-this.minxval)>=(_136*_135)){ 
     648var pos=this.xscale*(_134[i]-this.minxval); 
    639649if((pos>1)||(pos<0)){ 
    640650continue; 
    641651} 
    642 this.xticks.push([pos,_132[i]]); 
    643 _134++; 
    644 } 
    645 if(_134>this.options.xNumberOfTicks){ 
     652this.xticks.push([pos,_134[i]]); 
     653_136++; 
     654} 
     655if(_136>this.options.xNumberOfTicks){ 
    646656break; 
    647657} 
     
    651661}; 
    652662PlotKit.Layout.prototype._evaluateLineTicksForYAxis=function(){ 
    653 var _135=MochiKit.Base.isUndefinedOrNull; 
     663var _137=MochiKit.Base.isUndefinedOrNull; 
    654664if(this.options.yTicks){ 
    655665this.yticks=new Array(); 
    656 var _136=function(tick){ 
    657 var _137=tick.label; 
    658 if(_135(_137)){ 
    659 _137=tick.v.toString(); 
     666var _138=function(tick){ 
     667var _139=tick.label; 
     668if(_137(_139)){ 
     669_139=tick.v.toString(); 
    660670} 
    661671var pos=1-(this.yscale*(tick.v-this.minyval)); 
    662672if((pos>=0)&&(pos<=1)){ 
    663 this.yticks.push([pos,_137]); 
    664 } 
    665 }; 
    666 MochiKit.Iter.forEach(this.options.yTicks,bind(_136,this)); 
     673this.yticks.push([pos,_139]); 
     674} 
     675}; 
     676MochiKit.Iter.forEach(this.options.yTicks,bind(_138,this)); 
    667677}else{ 
    668678if(this.options.yNumberOfTicks){ 
    669679this.yticks=new Array(); 
    670 var _138=PlotKit.Base.roundInterval; 
     680var _140=PlotKit.Base.roundInterval; 
    671681var prec=this.options.yTickPrecision; 
    672 var _140=_138(this.yrange,this.options.yNumberOfTicks,prec); 
     682var _142=_140(this.yrange,this.options.yNumberOfTicks,prec); 
    673683for(var i=0;i<=this.options.yNumberOfTicks;i++){ 
    674 var yval=this.minyval+(i*_140); 
     684var yval=this.minyval+(i*_142); 
    675685var pos=1-((yval-this.minyval)*this.yscale); 
    676686if((pos>1)||(pos<0)){ 
     
    688698PlotKit.Layout.prototype._evaluateBarTicks=function(){ 
    689699this._evaluateLineTicks(); 
    690 var _142=function(tick){ 
     700var _144=function(tick){ 
    691701return [tick[0]+(this.minxdelta*this.xscale)/2,tick[1]]; 
    692702}; 
    693 this.xticks=MochiKit.Base.map(bind(_142,this),this.xticks); 
     703this.xticks=MochiKit.Base.map(bind(_144,this),this.xticks); 
    694704if(this.options.barOrientation=="horizontal"){ 
    695 var _143=this.xticks; 
     705var _145=this.xticks; 
    696706this.xticks=this.yticks; 
    697 this.yticks=_143
    698 var _144=function(tick){ 
     707this.yticks=_145
     708var _146=function(tick){ 
    699709return [1-tick[0],tick[1]]; 
    700710}; 
    701 this.xticks=MochiKit.Base.map(_144,this.xticks); 
     711this.xticks=MochiKit.Base.map(_146,this.xticks); 
    702712} 
    703713}; 
    704714PlotKit.Layout.prototype._evaluatePieTicks=function(){ 
    705 var _145=MochiKit.Base.isUndefinedOrNull; 
    706 var _146=MochiKit.Format.numberFormatter("#%"); 
     715var _147=MochiKit.Base.isUndefinedOrNull; 
     716var _148=MochiKit.Format.numberFormatter("#%"); 
    707717this.xticks=new Array(); 
    708718if(this.options.xTicks){ 
    709 var _147=new Array(); 
     719var _149=new Array(); 
    710720for(var i=0;i<this.slices.length;i++){ 
    711 _147[this.slices[i].xval]=this.slices[i]; 
     721_149[this.slices[i].xval]=this.slices[i]; 
    712722} 
    713723for(var i=0;i<this.options.xTicks.length;i++){ 
    714724var tick=this.options.xTicks[i]; 
    715 var _148=_147[tick.v]; 
    716 var _149=tick.label; 
    717 if(_148){ 
    718 if(_145(_149)){ 
    719 _149=tick.v.toString(); 
    720 } 
    721 _149+=" ("+_146(_148.fraction)+")"; 
    722 this.xticks.push([tick.v,_149]); 
     725var _150=_149[tick.v]; 
     726var _151=tick.label; 
     727if(_150){ 
     728if(_147(_151)){ 
     729_151=tick.v.toString(); 
     730} 
     731_151+=" ("+_148(_150.fraction)+")"; 
     732this.xticks.push([tick.v,_151]); 
    723733} 
    724734} 
    725735}else{ 
    726736for(var i=0;i<this.slices.length;i++){ 
    727 var _148=this.slices[i]; 
    728 var _149=_148.xval+" ("+_146(_148.fraction)+")"; 
    729 this.xticks.push([_148.xval,_149]); 
     737var _150=this.slices[i]; 
     738var _151=_150.xval+" ("+_148(_150.fraction)+")"; 
     739this.xticks.push([_150.xval,_151]); 
    730740} 
    731741} 
     
    735745this.hitTestCache.xlookup=new Array(); 
    736746this.hitTestCache.x2maxy=new Array(); 
    737 var _150=MochiKit.Base.listMax; 
    738 var _151=MochiKit.Base.itemgetter; 
     747var _152=MochiKit.Base.listMax; 
     748var _153=MochiKit.Base.itemgetter; 
    739749var map=MochiKit.Base.map; 
    740 var _152=keys(this.datasets); 
    741 for(var i=0;i<_152.length;i++){ 
    742 var _153=this.datasets[_152[i]]; 
    743 for(var j=0;j<_153.length;j++){ 
    744 var xval=_153[j][0]; 
    745 var yval=_153[j][1]; 
     750var _154=keys(this.datasets); 
     751for(var i=0;i<_154.length;i++){ 
     752var _155=this.datasets[_154[i]]; 
     753for(var j=0;j<_155.length;j++){ 
     754var xval=_155[j][0]; 
     755var yval=_155[j][1]; 
    746756if(this.hitTestCache.xlookup[xval]){ 
    747 this.hitTestCache.xlookup[xval].push([yval,_152[i]]); 
    748 }else{ 
    749 this.hitTestCache.xlookup[xval]=[[yval,_152[i]]]; 
     757this.hitTestCache.xlookup[xval].push([yval,_154[i]]); 
     758}else{ 
     759this.hitTestCache.xlookup[xval]=[[yval,_154[i]]]; 
    750760} 
    751761} 
    752762} 
    753763for(var x in this.hitTestCache.xlookup){ 
    754 var _155=this.hitTestCache.xlookup[x]; 
    755 this.hitTestCache.x2maxy[x]=_150(map(_151(0),_155)); 
     764var _157=this.hitTestCache.xlookup[x]; 
     765this.hitTestCache.x2maxy[x]=_152(map(_153(0),_157)); 
    756766} 
    757767}; 
     
    786796return this.__repr__(); 
    787797}; 
    788 PlotKit.CanvasRenderer=function(_156,_157,_158){ 
     798PlotKit.CanvasRenderer=function(_158,_159,_160){ 
    789799if(arguments.length>0){ 
    790 this.__init__(_156,_157,_158); 
    791 } 
    792 }; 
    793 PlotKit.CanvasRenderer.prototype.__init__=function(_159,_160,_161){ 
    794 var _162=MochiKit.Base.isUndefinedOrNull; 
    795 var _163=MochiKit.Color.Color; 
    796 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}; 
    797 MochiKit.Base.update(this.options,_161?_161:{}); 
    798 this.layout=_160
    799 this.element=MochiKit.DOM.getElement(_159); 
     800this.__init__(_158,_159,_160); 
     801} 
     802}; 
     803PlotKit.CanvasRenderer.prototype.__init__=function(_161,_162,_163){ 
     804var _164=MochiKit.Base.isUndefinedOrNull; 
     805var _165=MochiKit.Color.Color; 
     806this.options={"drawBackground":true,"backgroundColor":_165.whiteColor(),"padding":{left:30,right:30,top:5,bottom:10},"colorScheme":PlotKit.Base.palette(PlotKit.Base.baseColors()[0]),"strokeColor":_165.whiteColor(),"strokeColorTransform":"asStrokeColor","strokeWidth":0.5,"shouldFill":true,"shouldStroke":true,"drawXAxis":true,"drawYAxis":true,"axisLineColor":_165.blackColor(),"axisLineWidth":0.5,"axisTickSize":3,"axisLabelColor":_165.blackColor(),"axisLabelFont":"Arial","axisLabelFontSize":9,"axisLabelWidth":50,"pieRadius":0.4,"enableEvents":true}; 
     807MochiKit.Base.update(this.options,_163?_163:{}); 
     808this.layout=_162
     809this.element=MochiKit.DOM.getElement(_161); 
    800810this.container=this.element.parentNode; 
    801811this.isIE=PlotKit.Base.excanvasSupported(); 
    802 if(this.isIE&&!_162(G_vmlCanvasManager)){ 
     812if(this.isIE&&!_164(G_vmlCanvasManager)){ 
    803813this.IEDelay=0.5; 
    804814this.maxTries=5; 
     
    809819this.height=this.element.height; 
    810820this.width=this.element.width; 
    811 if(_162(this.element)){ 
     821if(_164(this.element)){ 
    812822throw "CanvasRenderer() - passed canvas is not found"; 
    813823} 
     
    815825throw "CanvasRenderer() - Canvas is not supported."; 
    816826} 
    817 if(_162(this.container)||(this.container.nodeName.toLowerCase()!="div")){ 
     827if(_164(this.container)||(this.container.nodeName.toLowerCase()!="div")){ 
    818828throw "CanvasRenderer() - <canvas> needs to be enclosed in <div>"; 
    819829} 
     
    839849this.renderDelay=null; 
    840850} 
    841 var _164=this.element.getContext("2d"); 
     851var _166=this.element.getContext("2d"); 
    842852} 
    843853catch(e){ 
     
    868878} 
    869879}; 
    870 PlotKit.CanvasRenderer.prototype._renderBarChartWrap=function(data,_166){ 
    871 var _167=this.element.getContext("2d"); 
    872 var _168=this.options.colorScheme.length; 
    873 var _169=this.options.colorScheme; 
    874 var _170=MochiKit.Base.keys(this.layout.datasets); 
    875 var _171=_170.length; 
    876 for(var i=0;i<_171;i++){ 
    877 var _172=_170[i]; 
    878 var _173=_169[i%_168]; 
    879 _167.save(); 
    880 _167.fillStyle=_173.toRGBString(); 
     880PlotKit.CanvasRenderer.prototype._renderBarChartWrap=function(data,_168){ 
     881var _169=this.element.getContext("2d"); 
     882var _170=this.options.colorScheme.length; 
     883var _171=this.options.colorScheme; 
     884var _172=MochiKit.Base.keys(this.layout.datasets); 
     885var _173=_172.length; 
     886for(var i=0;i<_173;i++){ 
     887var _174=_172[i]; 
     888var _175=_171[i%_170]; 
     889_169.save(); 
     890_169.fillStyle=_175.toRGBString(); 
    881891if(this.options.strokeColor){ 
    882 _167.strokeStyle=this.options.strokeColor.toRGBString(); 
     892_169.strokeStyle=this.options.strokeColor.toRGBString(); 
    883893}else{ 
    884894if(this.options.strokeColorTransform){ 
    885 _167.strokeStyle=_173[this.options.strokeColorTransform]().toRGBString(); 
    886 } 
    887 } 
    888 _167.lineWidth=this.options.strokeWidth; 
    889 var _174=function(obj){ 
    890 if(obj.name==_172){ 
    891 _166(_167,obj); 
    892 } 
    893 }; 
    894 MochiKit.Iter.forEach(data,bind(_174,this)); 
    895 _167.restore(); 
     895_169.strokeStyle=_175[this.options.strokeColorTransform]().toRGBString(); 
     896} 
     897} 
     898_169.lineWidth=this.options.strokeWidth; 
     899var _176=function(obj){ 
     900if(obj.name==_174){ 
     901_168(_169,obj); 
     902} 
     903}; 
     904MochiKit.Iter.forEach(data,bind(_176,this)); 
     905_169.restore(); 
    896906} 
    897907}; 
    898908PlotKit.CanvasRenderer.prototype._renderBarChart=function(){ 
    899909var bind=MochiKit.Base.bind; 
    900 var _176=function(_177,bar){ 
     910var _178=function(_179,bar){ 
    901911var x=this.area.w*bar.x+this.area.x; 
    902912var y=this.area.h*bar.y+this.area.y; 
     
    907917} 
    908918if(this.options.shouldFill){ 
    909 _177.fillRect(x,y,w,h); 
     919_179.fillRect(x,y,w,h); 
    910920} 
    911921if(this.options.shouldStroke){ 
    912 _177.strokeRect(x,y,w,h); 
    913 } 
    914 }; 
    915 this._renderBarChartWrap(this.layout.bars,bind(_176,this)); 
     922_179.strokeRect(x,y,w,h); 
     923} 
     924}; 
     925this._renderBarChartWrap(this.layout.bars,bind(_178,this)); 
    916926}; 
    917927PlotKit.CanvasRenderer.prototype._renderLineChart=function(){ 
    918 var _180=this.element.getContext("2d"); 
    919 var _181=this.options.colorScheme.length; 
    920 var _182=this.options.colorScheme; 
    921 var _183=MochiKit.Base.keys(this.layout.datasets); 
    922 var _184=_183.length; 
     928var _182=this.element.getContext("2d"); 
     929var _183=this.options.colorScheme.length; 
     930var _184=this.options.colorScheme; 
     931var _185=MochiKit.Base.keys(this.layout.datasets); 
     932var _186=_185.length; 
    923933var bind=MochiKit.Base.bind; 
    924 var _185=MochiKit.Base.partial; 
    925 for(var i=0;i<_184;i++){ 
    926 var _186=_183[i]; 
    927 var _187=_182[i%_181]; 
    928 var _188=this.options.strokeColorTransform; 
    929 _180.save(); 
    930 _180.fillStyle=_187.toRGBString(); 
     934var _187=MochiKit.Base.partial; 
     935for(var i=0;i<_186;i++){ 
     936var _188=_185[i]; 
     937var _189=_184[i%_183]; 
     938var _190=this.options.strokeColorTransform; 
     939_182.save(); 
     940_182.fillStyle=_189.toRGBString(); 
    931941if(this.options.strokeColor){ 
    932 _180.strokeStyle=this.options.strokeColor.toRGBString(); 
     942_182.strokeStyle=this.options.strokeColor.toRGBString(); 
    933943}else{ 
    934944if(this.options.strokeColorTransform){ 
    935 _180.strokeStyle=_187[_188]().toRGBString(); 
    936 } 
    937 } 
    938 _180.lineWidth=this.options.strokeWidth; 
    939 var _189=function(ctx){ 
     945_182.strokeStyle=_189[_190]().toRGBString(); 
     946} 
     947} 
     948_182.lineWidth=this.options.strokeWidth; 
     949var _191=function(ctx){ 
    940950ctx.beginPath(); 
    941951ctx.moveTo(this.area.x,this.area.y+this.area.h); 
    942 var _191=function(ctx_,_193){ 
    943 if(_193.name==_186){ 
    944 ctx_.lineTo(this.area.w*_193.x+this.area.x,this.area.h*_193.y+this.area.y); 
    945 } 
    946 }; 
    947 MochiKit.Iter.forEach(this.layout.points,_185(_191,ctx),this); 
     952var _193=function(ctx_,_195){ 
     953if(_195.name==_188){ 
     954ctx_.lineTo(this.area.w*_195.x+this.area.x,this.area.h*_195.y+this.area.y); 
     955} 
     956}; 
     957MochiKit.Iter.forEach(this.layout.points,_187(_193,ctx),this); 
    948958ctx.lineTo(this.area.w+this.area.x,this.area.h+this.area.y); 
    949959ctx.lineTo(this.area.x,this.area.y+this.area.h); 
     
    951961}; 
    952962if(this.options.shouldFill){ 
    953 bind(_189,this)(_180); 
    954 _180.fill(); 
     963bind(_191,this)(_182); 
     964_182.fill(); 
    955965} 
    956966if(this.options.shouldStroke){ 
    957 bind(_189,this)(_180); 
    958 _180.stroke(); 
    959 } 
    960 _180.restore(); 
     967bind(_191,this)(_182); 
     968_182.stroke(); 
     969} 
     970_182.restore(); 
    961971} 
    962972}; 
    963973PlotKit.CanvasRenderer.prototype._renderPieChart=function(){ 
    964 var _194=this.element.getContext("2d"); 
    965 var _195=this.options.colorScheme.length; 
    966 var _196=this.layout.slices; 
    967 var _197=this.area.x+this.area.w*0.5; 
    968 var _198=this.area.y+this.area.h*0.5; 
    969 var _199=Math.min(this.area.w*this.options.pieRadius,this.area.h*this.options.pieRadius); 
     974var _196=this.element.getContext("2d"); 
     975var _197=this.options.colorScheme.length; 
     976var _198=this.layout.slices; 
     977var _199=this.area.x+this.area.w*0.5; 
     978var _200=this.area.y+this.area.h*0.5; 
     979var _201=Math.min(this.area.w*this.options.pieRadius,this.area.h*this.options.pieRadius); 
    970980if(this.isIE){ 
    971 _197=parseInt(_197); 
    972 _198=parseInt(_198); 
    973981_199=parseInt(_199); 
    974 
    975 for(var i=0;i<_196.length;i++){ 
    976 var _200=this.options.colorScheme[i%_195]; 
    977 _194.save(); 
    978 _194.fillStyle=_200.toRGBString(); 
    979 var _201=function(){ 
    980 _194.beginPath(); 
    981 _194.moveTo(_197,_198); 
    982 _194.arc(_197,_198,_199,_196[i].startAngle-Math.PI/2,_196[i].endAngle-Math.PI/2,false); 
    983 _194.lineTo(_197,_198); 
    984 _194.closePath(); 
    985 }; 
    986 if(Math.abs(_196[i].startAngle-_196[i].endAngle)>0.001){ 
     982_200=parseInt(_200); 
     983_201=parseInt(_201); 
     984
     985for(var i=0;i<_198.length;i++){ 
     986var _202=this.options.colorScheme[i%_197]; 
     987_196.save(); 
     988_196.fillStyle=_202.toRGBString(); 
     989var _203=function(){ 
     990_196.beginPath(); 
     991_196.moveTo(_199,_200); 
     992_196.arc(_199,_200,_201,_198[i].startAngle-Math.PI/2,_198[i].endAngle-Math.PI/2,false); 
     993_196.lineTo(_199,_200); 
     994_196.closePath(); 
     995}; 
     996if(Math.abs(_198[i].startAngle-_198[i].endAngle)>0.001){ 
    987997if(this.options.shouldFill){ 
    988 _201(); 
    989 _194.fill(); 
     998_203(); 
     999_196.fill(); 
    9901000} 
    9911001if(this.options.shouldStroke){ 
    992 _201(); 
    993 _194.lineWidth=this.options.strokeWidth; 
     1002_203(); 
     1003_196.lineWidth=this.options.strokeWidth; 
    9941004if(this.options.strokeColor){ 
    995 _194.strokeStyle=this.options.strokeColor.toRGBString(); 
     1005_196.strokeStyle=this.options.strokeColor.toRGBString(); 
    9961006}else{ 
    9971007if(this.options.strokeColorTransform){ 
    998 _194.strokeStyle=_200[this.options.strokeColorTransform]().toRGBString(); 
    999 } 
    1000 } 
    1001 _194.stroke(); 
    1002 } 
    1003 } 
    1004 _194.restore(); 
     1008_196.strokeStyle=_202[this.options.strokeColorTransform]().toRGBString(); 
     1009} 
     1010} 
     1011_196.stroke(); 
     1012} 
     1013} 
     1014_196.restore(); 
    10051015} 
    10061016}; 
     
    10151025return; 
    10161026} 
    1017 var _202=this.element.getContext("2d"); 
    1018 var _203={"style":{"position":"absolute","fontSize":this.options.axisLabelFontSize+"px","zIndex":10,"color":this.options.axisLabelColor.toRGBString(),"width":this.options.axisLabelWidth+"px","overflow":"hidden"}}; 
    1019 _202.save(); 
    1020 _202.strokeStyle=this.options.axisLineColor.toRGBString(); 
    1021 _202.lineWidth=this.options.axisLineWidth; 
     1027var _204=this.element.getContext("2d"); 
     1028var _205={"style":{"position":"absolute","fontSize":this.options.axisLabelFontSize+"px","zIndex":10,"color":this.options.axisLabelColor.toRGBString(),"width":this.options.axisLabelWidth+"px","overflow":"hidden"}}; 
     1029_204.save(); 
     1030_204.strokeStyle=this.options.axisLineColor.toRGBString(); 
     1031_204.lineWidth=this.options.axisLineWidth; 
    10221032if(this.options.drawYAxis){ 
    10231033if(this.layout.yticks){ 
    1024 var _204=function(tick){ 
     1034var _206=function(tick){ 
    10251035if(typeof (tick)=="function"){ 
    10261036return; 
     
    10281038var x=this.area.x; 
    10291039var y=this.area.y+tick[0]*this.area.h; 
    1030 _202.beginPath(); 
    1031 _202.moveTo(x,y); 
    1032 _202.lineTo(x-this.options.axisTickSize,y); 
    1033 _202.closePath(); 
    1034 _202.stroke(); 
    1035 var _205=DIV(_203,tick[1]); 
    1036 _205.style.top=(y-this.options.axisLabelFontSize)+"px"; 
    1037 _205.style.left=(x-this.options.padding.left-this.options.axisTickSize)+"px"; 
    1038 _205.style.textAlign="right"; 
    1039 _205.style.width=(this.options.padding.left-this.options.axisTickSize*2)+"px"; 
    1040 MochiKit.DOM.appendChildNodes(this.container,_205); 
    1041 this.ylabels.push(_205); 
    1042 }; 
    1043 MochiKit.Iter.forEach(this.layout.yticks,bind(_204,this)); 
    1044 } 
    1045 _202.beginPath(); 
    1046 _202.moveTo(this.area.x,this.area.y); 
    1047 _202.lineTo(this.area.x,this.area.y+this.area.h); 
    1048 _202.closePath(); 
    1049 _202.stroke(); 
     1040_204.beginPath(); 
     1041_204.moveTo(x,y); 
     1042_204.lineTo(x-this.options.axisTickSize,y); 
     1043_204.closePath(); 
     1044_204.stroke(); 
     1045var _207=DIV(_205,tick[1]); 
     1046_207.style.top=(y-this.options.axisLabelFontSize)+"px"; 
     1047_207.style.left=(x-this.options.padding.left-this.options.axisTickSize)+"px"; 
     1048_207.style.textAlign="right"; 
     1049_207.style.width=(this.options.padding.left-this.options.axisTickSize*2)+"px"; 
     1050MochiKit.DOM.appendChildNodes(this.container,_207); 
     1051this.ylabels.push(_207); 
     1052}; 
     1053MochiKit.Iter.forEach(this.layout.yticks,bind(_206,this)); 
     1054} 
     1055_204.beginPath(); 
     1056_204.moveTo(this.area.x,this.area.y); 
     1057_204.lineTo(this.area.x,this.area.y+this.area.h); 
     1058_204.closePath(); 
     1059_204.stroke(); 
    10501060} 
    10511061if(this.options.drawXAxis){ 
    10521062if(this.layout.xticks){ 
    1053 var _204=function(tick){ 
     1063var _206=function(tick){ 
    10541064if(typeof (dataset)=="function"){ 
    10551065return; 
     
    10571067var x=this.area.x+tick[0]*this.area.w; 
    10581068var y=this.area.y+this.area.h; 
    1059 _202.beginPath(); 
    1060 _202.moveTo(x,y); 
    1061 _202.lineTo(x,y+this.options.axisTickSize); 
    1062 _202.closePath(); 
    1063 _202.stroke(); 
    1064 var _206=DIV(_203,tick[1]); 
    1065 _206.style.top=(y+this.options.axisTickSize)+"px"; 
    1066 _206.style.left=(x-this.options.axisLabelWidth/2)+"px"; 
    1067 _206.style.textAlign="center"; 
    1068 _206.style.width=this.options.axisLabelWidth+"px"; 
    1069 MochiKit.DOM.appendChildNodes(this.container,_206); 
    1070 this.xlabels.push(_206); 
    1071 }; 
    1072 MochiKit.Iter.forEach(this.layout.xticks,bind(_204,this)); 
    1073 } 
    1074 _202.beginPath(); 
    1075 _202.moveTo(this.area.x,this.area.y+this.area.h); 
    1076 _202.lineTo(this.area.x+this.area.w,this.area.y+this.area.h); 
    1077 _202.closePath(); 
    1078 _202.stroke(); 
    1079 } 
    1080 _202.restore(); 
     1069_204.beginPath(); 
     1070_204.moveTo(x,y); 
     1071_204.lineTo(x,y+this.options.axisTickSize); 
     1072_204.closePath(); 
     1073_204.stroke(); 
     1074var _208=DIV(_205,tick[1]); 
     1075_208.style.top=(y+this.options.axisTickSize)+"px"; 
     1076_208.style.left=(x-this.options.axisLabelWidth/2)+"px"; 
     1077_208.style.textAlign="center"; 
     1078_208.style.width=this.options.axisLabelWidth+"px"; 
     1079MochiKit.DOM.appendChildNodes(this.container,_208); 
     1080this.xlabels.push(_208); 
     1081}; 
     1082MochiKit.Iter.forEach(this.layout.xticks,bind(_206,this)); 
     1083} 
     1084_204.beginPath(); 
     1085_204.moveTo(this.area.x,this.area.y+this.area.h); 
     1086_204.lineTo(this.area.x+this.area.w,this.area.y+this.area.h); 
     1087_204.closePath(); 
     1088_204.stroke(); 
     1089} 
     1090_204.restore(); 
    10811091}; 
    10821092PlotKit.CanvasRenderer.prototype._renderPieAxis=function(){ 
     
    10851095} 
    10861096if(this.layout.xticks){ 
    1087 var _207=new Array(); 
     1097var _209=new Array(); 
    10881098for(var i=0;i<this.layout.slices.length;i++){ 
    1089 _207[this.layout.slices[i].xval]=this.layout.slices[i]; 
    1090 } 
    1091 var _208=this.area.x+this.area.w*0.5; 
    1092 var _209=this.area.y+this.area.h*0.5; 
    1093 var _210=Math.min(this.area.w*this.options.pieRadius,this.area.h*this.options.pieRadius); 
    1094 var _211=this.options.axisLabelWidth; 
     1099_209[this.layout.slices[i].xval]=this.layout.slices[i]; 
     1100} 
     1101var _210=this.area.x+this.area.w*0.5; 
     1102var _211=this.area.y+this.area.h*0.5; 
     1103var _212=Math.min(this.area.w*this.options.pieRadius,this.area.h*this.options.pieRadius); 
     1104var _213=this.options.axisLabelWidth; 
    10951105for(var i=0;i<this.layout.xticks.length;i++){ 
    1096 var _212=_207[this.layout.xticks[i][0]]; 
    1097 if(MochiKit.Base.isUndefinedOrNull(_212)){ 
     1106var _214=_209[this.layout.xticks[i][0]]; 
     1107if(MochiKit.Base.isUndefinedOrNull(_214)){ 
    10981108continue; 
    10991109} 
    1100 var _213=(_212.startAngle+_212.endAngle)/2; 
    1101 var _214=_213
    1102 if(_214>Math.PI*2){ 
    1103 _214=_214-Math.PI*2; 
    1104 }else{ 
    1105 if(_214<0){ 
    1106 _214=_214+Math.PI*2; 
    1107 } 
    1108 } 
    1109 var _215=_208+Math.sin(_214)*(_210+10); 
    1110 var _216=_209-Math.cos(_214)*(_210+10); 
    1111 var _217={"position":"absolute","zIndex":11,"width":_211+"px","fontSize":this.options.axisLabelFontSize+"px","overflow":"hidden","color":this.options.axisLabelColor.toHexString()}; 
    1112 if(_214<=Math.PI*0.5){ 
    1113 _217["textAlign"]="left"; 
    1114 _217["verticalAlign"]="top"; 
    1115 _217["left"]=_215+"px"; 
    1116 _217["top"]=(_216-this.options.axisLabelFontSize)+"px"; 
    1117 }else{ 
    1118 if((_214>Math.PI*0.5)&&(_214<=Math.PI)){ 
    1119 _217["textAlign"]="left"; 
    1120 _217["verticalAlign"]="bottom"; 
    1121 _217["left"]=_215+"px"; 
    1122 _217["top"]=_216+"px"; 
    1123 }else{ 
    1124 if((_214>Math.PI)&&(_214<=Math.PI*1.5)){ 
    1125 _217["textAlign"]="right"; 
    1126 _217["verticalAlign"]="bottom"; 
    1127 _217["left"]=(_215-_211)+"px"; 
    1128 _217["top"]=_216+"px"; 
    1129 }else{ 
    1130 _217["textAlign"]="right"; 
    1131 _217["verticalAlign"]="bottom"; 
    1132 _217["left"]=(_215-_211)+"px"; 
    1133 _217["top"]=(_216-this.options.axisLabelFontSize)+"px"; 
    1134 } 
    1135 } 
    1136 } 
    1137 var _218=DIV({"style":_217},this.layout.xticks[i][1]); 
    1138 this.xlabels.push(_218); 
    1139 MochiKit.DOM.appendChildNodes(this.container,_218); 
     1110var _215=(_214.startAngle+_214.endAngle)/2; 
     1111var _216=_215
     1112if(_216>Math.PI*2){ 
     1113_216=_216-Math.PI*2; 
     1114}else{ 
     1115if(_216<0){ 
     1116_216=_216+Math.PI*2; 
     1117} 
     1118} 
     1119var _217=_210+Math.sin(_216)*(_212+10); 
     1120var _218=_211-Math.cos(_216)*(_212+10); 
     1121var _219={"position":"absolute","zIndex":11,"width":_213+"px","fontSize":this.options.axisLabelFontSize+"px","overflow":"hidden","color":this.options.axisLabelColor.toHexString()}; 
     1122if(_216<=Math.PI*0.5){ 
     1123_219["textAlign"]="left"; 
     1124_219["verticalAlign"]="top"; 
     1125_219["left"]=_217+"px"; 
     1126_219["top"]=(_218-this.options.axisLabelFontSiz