Changeset 32

Show
Ignore:
Timestamp:
04/06/06 19:50:02 (2 years ago)
Author:
al
Message:

Prototype.js awareness. People everywhere rejoice\!

Files:

Legend:

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

    r18 r32  
    8686} 
    8787 
     88 
     89// Detect whether we are using prototype.js 
     90PlotKit.Base.usingPrototype =  function() { 
     91    return (typeof(Object.extend) == 'function'); 
     92} 
     93 
     94 
    8895MochiKit.Base.update(PlotKit.Base, { 
    8996    roundInterval: function(range, intervals, precision) { 
     
    100107            biggerList = m.concat(biggerList, lst[i]); 
    101108        } 
     109        if (PlotKit.Base.usingPrototype()) { 
     110            delete biggerList.extend; 
     111            delete biggerList.from; 
     112            delete biggerList.inspect; 
     113        } 
     114         
    102115        return biggerList; 
    103116    }, 
     
    191204    findPosX: function(obj) { 
    192205        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; 
    200210            } 
     211        } 
    201212        else if (obj.x) 
    202213            curleft += obj.x; 
     
    206217   findPosY: function(obj) { 
    207218       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; 
    215223           } 
     224       } 
    216225       else if (obj.y) 
    217226           curtop += obj.y; 
    218227       return curtop; 
     228   }, 
     229    
     230   isFuncLike: function(obj) { 
     231       return (typeof(obj) == 'function'); 
    219232   } 
    220233});     
     234 
     235// 
     236// Prototype.js aware (crippled) versions of map and items. 
     237// 
     238 
     239PlotKit.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 
     253PlotKit.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 
     267PlotKit.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// 
    221284 
    222285PlotKit.Base.baseColors = function () { 
     
    317380   "roundInterval", 
    318381   "uniq", 
     382   "isFuncLike", 
    319383   "excanvasSupported" 
    320384]; 
  • plotkit/trunk/PlotKit/Canvas.js

    r31 r32  
    256256            ctx.moveTo(this.area.x, this.area.y + this.area.h); 
    257257            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); 
    261261            }; 
    262262            MochiKit.Iter.forEach(this.layout.points, partial(addPoint, ctx), this); 
     
    370370        if (this.layout.yticks) { 
    371371            var drawTick = function(tick) { 
     372                if (typeof(tick) == "function") return; 
    372373                var x = this.area.x; 
    373374                var y = this.area.y + tick[0] * this.area.h; 
     
    400401        if (this.layout.xticks) { 
    401402            var drawTick = function(tick) { 
     403                if (typeof(dataset) == "function") return; 
     404                 
    402405                var x = this.area.x + tick[0] * this.area.w; 
    403406                var y = this.area.y + this.area.h; 
  • plotkit/trunk/PlotKit/EasyPlot.js

    r31 r32  
    55    User friendly wrapper around the common plotting functions. 
    66 
    7      
    87    Copyright 
    98    --------- 
     
    6261    } 
    6362     
    64  
    6563    // load data sources 
    6664    if (isArrayLike(datasources)) { 
     
    7775        } 
    7876    } 
    79  
     77    else if (!isUndefinedOrNull(datasources)) { 
     78        throw "Passed datasources are not Array like"; 
     79    } 
    8080 
    8181    // setup canvas to render 
     
    9898    } 
    9999     
    100     if (this.deferredCount == 0) { 
     100    if ((this.deferredCount == 0) && (this.layout.datasets.length > 0)) { 
    101101        this.layout.evaluate(); 
    102102        this.renderer.clear(); 
     
    121121    this.deferredCount--; 
    122122     
    123     if (this.deferredCount == 0) { 
     123    if ((this.deferredCount == 0) && (this.layout.datasets.length > 0)) { 
    124124        this.layout.evaluate(); 
    125125        this.renderer.clear(); 
  • plotkit/trunk/PlotKit/Layout.js

    r29 r32  
    266266PlotKit.Layout.prototype._evaluateLimits = function() { 
    267267    // 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; 
    270270    var itemgetter = MochiKit.Base.itemgetter; 
    271271    var collapse = PlotKit.Base.collapse; 
     
    274274    var isNil = MochiKit.Base.isUndefinedOrNull; 
    275275 
     276 
    276277    var all = collapse(map(itemgetter(1), items(this.datasets))); 
    277  
    278278    if (isNil(this.options.xAxis)) { 
    279279        if (this.options.xOriginIsZero) 
     
    292292    this.maxxval = listMax(map(parseFloat, map(itemgetter(0), all))); 
    293293    this.maxyval = listMax(map(parseFloat, map(itemgetter(1), all))); 
     294     
    294295}; 
    295296 
     
    312313PlotKit.Layout.prototype._uniqueXValues = function() { 
    313314    var collapse = PlotKit.Base.collapse; 
    314     var map = MochiKit.Base.map; 
     315    var map = PlotKit.Base.map; 
    315316    var uniq = PlotKit.Base.uniq; 
    316317    var getter = MochiKit.Base.itemgetter; 
    317  
     318    var items = PlotKit.Base.items; 
     319     
    318320    var xvalues = map(parseFloat, map(getter(0), collapse(map(getter(1), items(this.datasets))))); 
    319321    xvalues.sort(MochiKit.Base.compare); 
     
    323325// Create the bars 
    324326PlotKit.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; 
    329330 
    330331    // work out how far separated values are 
     
    354355        barMargin = xdelta * this.xscale * (1.0 - this.options.barWidthFillFraction)/2; 
    355356    } 
    356  
     357     
    357358    this.minxdelta = xdelta; // need this for tick positions 
    358359 
     
    362363    for (var setName in this.datasets) { 
    363364        var dataset = this.datasets[setName]; 
     365        if (PlotKit.Base.isFuncLike(dataset)) continue; 
    364366        for (var j = 0; j < dataset.length; j++) { 
    365367            var item = dataset[j]; 
     
    381383// Create the horizontal bars 
    382384PlotKit.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; 
    387388 
    388389    // work out how far separated values are 
     
    422423    for (var setName in this.datasets) { 
    423424        var dataset = this.datasets[setName]; 
     425        if (PlotKit.Base.isFuncLike(dataset)) continue; 
    424426        for (var j = 0; j < dataset.length; j++) { 
    425427            var item = dataset[j]; 
     
    442444// Create the line charts 
    443445PlotKit.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; 
    448449 
    449450    // add all the rects 
     
    452453    for (var setName in this.datasets) { 
    453454        var dataset = this.datasets[setName]; 
     455        if (PlotKit.Base.isFuncLike(dataset)) continue; 
    454456        dataset.sort(function(a, b) { return compare(parseFloat(a[0]), parseFloat(b[0])); }); 
    455457        for (var j = 0; j < dataset.length; j++) { 
     
    470472// Create the pie charts 
    471473PlotKit.Layout.prototype._evaluatePieCharts = function() { 
    472     var items = MochiKit.Base.items; 
     474    var items = PlotKit.Base.items; 
    473475    var sum = MochiKit.Iter.sum; 
    474476    var getter = MochiKit.Base.itemgetter; 
    475477 
    476     var setCount = keys(this.datasets).length; 
     478    var setCount = items(this.datasets).length; 
    477479 
    478480    // we plot the y values of the first dataset 
  • plotkit/trunk/PlotKit/PlotKit_Packed.js

    r31 r32  
    4949return this.__repr__(); 
    5050}; 
     51PlotKit.Base.usingPrototype=function(){ 
     52return (typeof (Object.extend)=="function"); 
     53}; 
    5154MochiKit.Base.update(PlotKit.Base,{roundInterval:function(_1,_2,_3){ 
    5255var _4=MochiKit.Format.roundToFixed; 
     
    5861for(var i=0;i<_6.length;i++){ 
    5962_8=m.concat(_8,_6[i]); 
     63} 
     64if(PlotKit.Base.usingPrototype()){ 
     65delete _8.extend; 
     66delete _8.from; 
     67delete _8.inspect; 
    6068} 
    6169return _8; 
     
    144152} 
    145153return _33; 
     154},isFuncLike:function(obj){ 
     155return (typeof (obj)=="function"); 
    146156}}); 
     157PlotKit.Base.map=function(fn,lst){ 
     158if(PlotKit.Base.usingPrototype()){ 
     159var _36=[]; 
     160for(var x in lst){ 
     161if(typeof (lst[x])=="function"){ 
     162continue; 
     163} 
     164_36.push(fn(lst[x])); 
     165} 
     166return _36; 
     167}else{ 
     168return MochiKit.Base.map(fn,lst); 
     169} 
     170}; 
     171PlotKit.Base.items=function(lst){ 
     172if(PlotKit.Base.usingPrototype()){ 
     173var _38=[]; 
     174for(var x in lst){ 
     175if(typeof (lst[x])=="function"){ 
     176continue; 
     177} 
     178_38.push([x,lst[x]]); 
     179} 
     180return _38; 
     181}else{ 
     182return MochiKit.Base.items(lst); 
     183} 
     184}; 
     185PlotKit.Base.keys=function(lst){ 
     186if(PlotKit.Base.usingPrototype()){ 
     187var _39=[]; 
     188for(var x in lst){ 
     189if(typeof (lst[x])=="function"){ 
     190continue; 
     191} 
     192_39.push(x); 
     193} 
     194return _39; 
     195}else{ 
     196return MochiKit.Base.items(lst); 
     197} 
     198}; 
    147199PlotKit.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")]; 
     200var _40=MochiKit.Color.Color.fromHexString; 
     201return [_40("#476fb2"),_40("#be2c2b"),_40("#85b730"),_40("#734a99"),_40("#26a1c5"),_40("#fb8707"),_40("#000000")]; 
    150202}; 
    151203PlotKit.Base.officeBaseStyle={"axisLineWidth":2,"axisLabelColor":Color.grayColor(),"axisLineColor":Color.whiteColor(),"padding":{top:5,bottom:10,left:30,right:30}}; 
     
    179231return r; 
    180232}}); 
    181 PlotKit.Base.EXPORT=["baseColors","collapse","colorScheme","findPosX","findPosY","officeBaseStyle","officeBlue","officeRed","officeGreen","officePurple","officeCyan","officeOrange","officeBlack","roundInterval","uniq","excanvasSupported"]; 
     233PlotKit.Base.EXPORT=["baseColors","collapse","colorScheme","findPosX","findPosY","officeBaseStyle","officeBlue","officeRed","officeGreen","officePurple","officeCyan","officeOrange","officeBlack","roundInterval","uniq","isFuncLike","excanvasSupported"]; 
    182234PlotKit.Base.EXPORT_OK=[]; 
    183235PlotKit.Base.__new__=function(){ 
     
    208260}; 
    209261PlotKit.Layout.valid_styles=["bar","line","pie","point"]; 
    210 PlotKit.Layout=function(_36,_37){ 
     262PlotKit.Layout=function(_42,_43){ 
    211263this.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:{}); 
     264this.style=_42
     265MochiKit.Base.update(this.options,_43?_43:{}); 
    214266if(!MochiKit.Base.isUndefinedOrNull(this.options.xAxis)){ 
    215267this.minxval=this.options.xAxis[0]; 
     
    241293this.hitTestCache={x2maxy:null}; 
    242294}; 
    243 PlotKit.Layout.prototype.addDataset=function(_38,_39){ 
    244 this.datasets[_38]=_39
    245 }; 
    246 PlotKit.Layout.prototype.removeDataset=function(_40,_41){ 
    247 this.datasets[_40]=null; 
    248 }; 
    249 PlotKit.Layout.prototype.addDatasetFromTable=function(_42,_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 _50=new Array(); 
    261 if(!_46(_49)){ 
    262 for(var i=0;i<_49.length;i++){ 
    263 _50.push([parseFloat(_48(_47(_49[i].cells[_44]))),parseFloat(_48(_47(_49[i].cells[_45])))]); 
    264 } 
    265 this.addDataset(_42,_50); 
     295PlotKit.Layout.prototype.addDataset=function(_44,_45){ 
     296this.datasets[_44]=_45
     297}; 
     298PlotKit.Layout.prototype.removeDataset=function(_46,_47){ 
     299this.datasets[_46]=null; 
     300}; 
     301PlotKit.Layout.prototype.addDatasetFromTable=function(_48,_49,_50,_51){ 
     302var _52=MochiKit.Base.isUndefinedOrNull; 
     303var _53=MochiKit.DOM.scrapeText; 
     304var _54=MochiKit.Format.strip; 
     305if(_52(_50)){ 
     306_50=0; 
     307} 
     308if(_52(_51)){ 
     309_51=1; 
     310} 
     311var _55=_49.tBodies[0].rows; 
     312var _56=new Array(); 
     313if(!_52(_55)){ 
     314for(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} 
     317this.addDataset(_48,_56); 
    266318return true; 
    267319} 
     
    304356this._regenerateHitTestCache(); 
    305357} 
    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]; 
     358var _60=x/this.xscale; 
     359var _61=this.hitTestCache.xvalues; 
     360var _62=null; 
     361var _63=null; 
     362for(var i=1;i<_61.length;i++){ 
     363if(_61[i]>_60){ 
     364_62=_61[i-1]; 
     365_63=_61[i]; 
    314366break; 
    315367} 
    316368} 
    317 if((_57!=null)){ 
    318 var _59=this.hitTestCache.x2maxy[_57]; 
    319 var _60=this.hitTestCache.x2maxy[_58]; 
    320 var _61=(1-y)/this.yscale; 
    321 var _62=(_60-_59)/(_58-_57); 
    322 var _63=_59+_62*(_55-_57); 
    323 if(_63>=_61){ 
    324 var obj={xval:_55,yval:_61,xafter:_58,yafter:_60,xbefore:_57,ybefore:_59,yprojected:_63}; 
     369if((_62!=null)){ 
     370var _64=this.hitTestCache.x2maxy[_62]; 
     371var _65=this.hitTestCache.x2maxy[_63]; 
     372var _66=(1-y)/this.yscale; 
     373var _67=(_65-_64)/(_63-_62); 
     374var _68=_64+_67*(_60-_62); 
     375if(_68>=_66){ 
     376var obj={xval:_60,yval:_66,xafter:_63,yafter:_65,xbefore:_62,ybefore:_64,yprojected:_68}; 
    325377return obj; 
    326378} 
     
    328380}else{ 
    329381if(this.style=="pie"){ 
    330 var _64=Math.sqrt((y-0.5)*(y-0.5)+(x-0.5)*(x-0.5)); 
    331 if(_64>this.options.pieRadius){ 
     382var _69=Math.sqrt((y-0.5)*(y-0.5)+(x-0.5)*(x-0.5)); 
     383if(_69>this.options.pieRadius){ 
    332384return null; 
    333385} 
    334 var _65=Math.atan2(y-0.5,x-0.5)-Math.PI/2; 
     386var _70=Math.atan2(y-0.5,x-0.5)-Math.PI/2; 
    335387for(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
     388var _71=this.slices[i]; 
     389if(_71.startAngle<_70&&_71.endAngle>=_70){ 
     390return _71
    339391} 
    340392} 
     
    351403}; 
    352404PlotKit.Layout.prototype._evaluateLimits=function(){ 
    353 var map=MochiKit.Base.map; 
    354 var _68=MochiKit.Base.items; 
    355 var _69=MochiKit.Base.itemgetter; 
    356 var _70=PlotKit.Base.collapse; 
    357 var _71=MochiKit.Base.listMin; 
    358 var _72=MochiKit.Base.listMax; 
    359 var _73=MochiKit.Base.isUndefinedOrNull; 
    360 var all=_70(map(_69(1),_68(this.datasets))); 
    361 if(_73(this.options.xAxis)){ 
     405var map=PlotKit.Base.map; 
     406var _73=PlotKit.Base.items; 
     407var _74=MochiKit.Base.itemgetter; 
     408var _75=PlotKit.Base.collapse; 
     409var _76=MochiKit.Base.listMin; 
     410var _77=MochiKit.Base.listMax; 
     411var _78=MochiKit.Base.isUndefinedOrNull; 
     412var all=_75(map(_74(1),_73(this.datasets))); 
     413if(_78(this.options.xAxis)){ 
    362414if(this.options.xOriginIsZero){ 
    363415this.minxval=0; 
    364416}else{ 
    365 this.minxval=_71(map(parseFloat,map(_69(0),all))); 
    366 } 
    367 } 
    368 if(_73(this.options.yAxis)){ 
     417this.minxval=_76(map(parseFloat,map(_74(0),all))); 
     418} 
     419} 
     420if(_78(this.options.yAxis)){ 
    369421if(this.options.yOriginIsZero){ 
    370422this.minyval=0; 
    371423}else{ 
    372 this.minyval=_71(map(parseFloat,map(_69(1),all))); 
    373 } 
    374 } 
    375 this.maxxval=_72(map(parseFloat,map(_69(0),all))); 
    376 this.maxyval=_72(map(parseFloat,map(_69(1),all))); 
     424this.minyval=_76(map(parseFloat,map(_74(1),all))); 
     425} 
     426} 
     427this.maxxval=_77(map(parseFloat,map(_74(0),all))); 
     428this.maxyval=_77(map(parseFloat,map(_74(1),all))); 
    377429}; 
    378430PlotKit.Layout.prototype._evaluateScales=function(){ 
    379 var _75=MochiKit.Base.isUndefinedOrNull; 
     431var _80=MochiKit.Base.isUndefinedOrNull; 
    380432this.xrange=this.maxxval-this.minxval; 
    381433if(this.xrange==0){ 
     
    392444}; 
    393445PlotKit.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); 
     446var _81=PlotKit.Base.collapse; 
     447var map=PlotKit.Base.map; 
     448var _82=PlotKit.Base.uniq; 
     449var _83=MochiKit.Base.itemgetter; 
     450var _84=PlotKit.Base.items; 
     451var _85=map(parseFloat,map(_83(0),_81(map(_83(1),_84(this.datasets))))); 
     452_85.sort(MochiKit.Base.compare); 
     453return _82(_85); 
    401454}; 
    402455PlotKit.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; 
     456var _86=PlotKit.Base.items; 
     457var _87=_86(this.datasets).length; 
     458var _88=10000000; 
     459var _89=this._uniqueXValues(); 
     460for(var i=1;i<_89.length;i++){ 
     461_88=Math.min(Math.abs(_89[i]-_89[i-1]),_88); 
     462
     463var _90=0; 
     464var _91=0; 
     465var _92=0; 
     466if(_89.length==1){ 
     467_88=1; 
    416468this.xscale=1; 
    417 this.minxval=_84[0]; 
    418 _85=1*this.options.barWidthFillFraction; 
    419 _86=_85/_82
    420 _87=(1-this.options.barWidthFillFraction)/2; 
    421 }else{ 
    422 this.xscale=(1-_83/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=_83
     469this.minxval=_89[0]; 
     470_90=1*this.options.barWidthFillFraction; 
     471_91=_90/_87
     472_92=(1-this.options.barWidthFillFraction)/2; 
     473}else{ 
     474this.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} 
     479this.minxdelta=_88
    428480this.bars=new Array(); 
    429481var 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); 
     482for(var _93 in this.datasets){ 
     483var _94=this.datasets[_93]; 
     484if(PlotKit.Base.isFuncLike(_94)){ 
     485continue; 
     486
     487for(var j=0;j<_94.length;j++){ 
     488var _96=_94[j]; 
     489var _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}; 
     490this.bars.push(_97); 
    436491} 
    437492i++; 
     
    439494}; 
    440495PlotKit.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; 
     496var _98=PlotKit.Base.items; 
     497var _99=_98(this.datasets).length; 
     498var _100=10000000; 
     499var _101=this._uniqueXValues(); 
     500for(var i=1;i<_101.length;i++){ 
     501_100=Math.min(Math.abs(_101[i]-_101[i-1]),_100); 
     502
     503var _102=0; 
     504var _103=0; 
     505var _104=0; 
     506if(_101.length==1){ 
     507_100=1; 
    454508this.xscale=1; 
    455 this.minxval=_97[0]; 
    456 _98=1*this.options.barWidthFillFraction; 
    457 _99=_98/_95
    458 _100=(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 _100=_96*this.xscale*(1-this.options.barWidthFillFraction)/2; 
    464 } 
    465 this.minxdelta=_96
     509this.minxval=_101[0]; 
     510_102=1*this.options.barWidthFillFraction; 
     511_103=_102/_99
     512_104=(1-this.options.barWidthFillFraction)/2; 
     513}else{ 
     514this.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} 
     519this.minxdelta=_100
    466520this.bars=new Array(); 
    467521var 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}; 
     522for(var _105 in this.datasets){ 
     523var _106=this.datasets[_105]; 
     524if(PlotKit.Base.isFuncLike(_106)){ 
     525continue; 
     526
     527for(var j=0;j<_106.length;j++){ 
     528var item=_106[j]; 
     529var 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}; 
    473530this.bars.push(rect); 
    474531} 
     
    477534}; 
    478535PlotKit.Layout.prototype._evaluateLineCharts=function(){ 
    479 var keys=MochiKit.Base.keys; 
    480 var _106=MochiKit.Base.items; 
    481 var _107=keys(this.datasets).length; 
     536var _109=PlotKit.Base.items; 
     537var _110=_109(this.datasets).length; 
    482538this.points=new Array(); 
    483539var i=0; 
    484 for(var _108 in this.datasets){ 
    485 var _109=this.datasets[_108]; 
    486 _109.sort(function(a,b){ 
     540for(var _111 in this.datasets){ 
     541var _112=this.datasets[_111]; 
     542if(PlotKit.Base.isFuncLike(_112)){ 
     543continue; 
     544
     545_112.sort(function(a,b){ 
    487546return compare(parseFloat(a[0]),parseFloat(b[0])); 
    488547}); 
    489 for(var j=0;j<_109.length;j++){ 
    490 var item=_109[j]; 
    491 var _112={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(_112); 
     548for(var j=0;j<_112.length;j++){ 
     549var item=_112[j]; 
     550var _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}; 
     551this.points.push(_115); 
    493552} 
    494553i++; 
     
    496555}; 
    497556PlotKit.Layout.prototype._evaluatePieCharts=function(){ 
    498 var _113=MochiKit.Base.items; 
     557var _116=PlotKit.Base.items; 
    499558var sum=MochiKit.Iter.sum; 
    500 var _115=MochiKit.Base.itemgetter; 
    501 var _116=keys(this.datasets).length; 
    502 var _117=_113(this.datasets)[0][1]; 
    503 var _118=sum(map(_115(1),_117)); 
     559var _118=MochiKit.Base.itemgetter; 
     560var _119=_116(this.datasets).length; 
     561var _120=_116(this.datasets)[0][1]; 
     562var _121=sum(map(_118(1),_120)); 
    504563this.slices=new Array(); 
    505 var _119=0; 
    506 for(var i=0;i<_117.length;i++){ 
    507 var _120=_117[i][1]/_118
    508 var _121=_119*Math.PI*2; 
    509 var _122=(_119+_120)*Math.PI*2; 
    510 var _123={fraction:_120,xval:_117[i][0],yval:_117[i][1],startAngle:_121,endAngle:_122}; 
    511 this.slices.push(_123); 
    512 _119+=_120
     564var _122=0; 
     565for(var i=0;i<_120.length;i++){ 
     566var _123=_120[i][1]/_121
     567var _124=_122*Math.PI*2; 
     568var _125=(_122+_123)*Math.PI*2; 
     569var _126={fraction:_123,xval:_120[i][0],yval:_120[i][1],startAngle:_124,endAngle:_125}; 
     570this.slices.push(_126); 
     571_122+=_123
    513572} 
    514573}; 
    515574PlotKit.Layout.prototype._evaluateLineTicksForXAxis=function(){ 
    516 var _124=MochiKit.Base.isUndefinedOrNull; 
     575var _127=MochiKit.Base.isUndefinedOrNull; 
    517576if(this.options.xTicks){ 
    518577this.xticks=new Array(); 
    519 var _125=function(tick){ 
    520 var _127=tick.label; 
    521 if(_124(_127)){ 
    522 _127=tick.v.toString(); 
     578var _128=function(tick){ 
     579var _130=tick.label; 
     580if(_127(_130)){ 
     581_130=tick.v.toString(); 
    523582} 
    524583var pos=this.xscale*(tick.v-this.minxval); 
    525 this.xticks.push([pos,_127]); 
    526 }; 
    527 MochiKit.Iter.forEach(this.options.xTicks,bind(_125,this)); 
     584this.xticks.push([pos,_130]); 
     585}; 
     586MochiKit.Iter.forEach(this.options.xTicks,bind(_128,this)); 
    528587}else{ 
    529588if(this.options.xNumberOfTicks){ 
    530 var _129=this._uniqueXValues(); 
    531 var _130=this.xrange/this.options.xNumberOfTicks; 
    532 var _131=0; 
     589var _132=this._uniqueXValues(); 
     590var _133=this.xrange/this.options.xNumberOfTicks; 
     591var _134=0; 
    533592this.xticks=new Array(); 
    534 for(var i=0;i<=_129.length;i++){ 
    535 if(_129[i]>=(_131)*_130){ 
    536 var pos=this.xscale*(_129[i]-this.minxval); 
     593for(var i=0;i<=_132.length;i++){ 
     594if(_132[i]>=(_134)*_133){ 
     595var pos=this.xscale*(_132[i]-this.minxval); 
    537596if((pos>1)||(pos<0)){ 
    538597return; 
    539598} 
    540 this.xticks.push([pos,_129[i]]); 
    541 _131++; 
    542 } 
    543 if(_131>this.options.xNumberOfTicks){ 
     599this.xticks.push([pos,_132[i]]); 
     600_134++; 
     601} 
     602if(_134>this.options.xNumberOfTicks){ 
    544603break; 
    545604} 
     
    549608}; 
    550609PlotKit.Layout.prototype._evaluateLineTicksForYAxis=function(){ 
    551 var _132=MochiKit.Base.isUndefinedOrNull; 
     610var _135=MochiKit.Base.isUndefinedOrNull; 
    552611if(this.options.yTicks){ 
    553612this.yticks=new Array(); 
    554 var _133=function(tick){ 
    555 var _134=tick.label; 
    556 if(_132(_134)){ 
    557 _134=tick.v.toString(); 
     613var _136=function(tick){ 
     614var _137=tick.label; 
     615if(_135(_137)){ 
     616_137=tick.v.toString(); 
    558617} 
    559618var pos=1-(this.yscale*(tick.v+this.minxval)); 
     
    561620return; 
    562621} 
    563 this.yticks.push([pos,_134]); 
    564 }; 
    565 MochiKit.Iter.forEach(this.options.yTicks,bind(_133,this)); 
     622this.yticks.push([pos,_137]); 
     623}; 
     624MochiKit.Iter.forEach(this.options.yTicks,bind(_136,this)); 
    566625}else{ 
    567626if(this.options.yNumberOfTicks){ 
    568627this.yticks=new Array(); 
    569 var _135=PlotKit.Base.roundInterval; 
     628var _138=PlotKit.Base.roundInterval; 
    570629var prec=this.options.yTickPrecision; 
    571 var _137=_135(this.yrange,this.options.yNumberOfTicks,this.options.yTickPrecision); 
     630var _140=_138(this.yrange,this.options.yNumberOfTicks,this.options.yTickPrecision); 
    572631for(var i=0;i<=this.options.yNumberOfTicks;i++){ 
    573 var yval=this.minyval+(i*_137); 
     632var yval=this.minyval+(i*_140); 
    574633var pos=1-((yval-this.minyval)*this.yscale); 
    575634this.yticks.push([pos,MochiKit.Format.roundToFixed(yval,1)]); 
     
    584643PlotKit.Layout.prototype._evaluateBarTicks=function(){ 
    585644this._evaluateLineTicks(); 
    586 var _139=function(tick){ 
     645var _142=function(tick){ 
    587646return [tick[0]+(this.minxdelta*this.xscale)/2,tick[1]]; 
    588647}; 
    589 this.xticks=MochiKit.Base.map(bind(_139,this),this.xticks); 
     648this.xticks=MochiKit.Base.map(bind(_142,this),this.xticks); 
    590649if(this.options.barOrientation=="horizontal"){ 
    591 var _140=this.xticks; 
     650var _143=this.xticks; 
    592651this.xticks=this.yticks; 
    593 this.yticks=_140
    594 var _141=function(tick){ 
     652this.yticks=_143
     653var _144=function(tick){ 
    595654return [1-tick[0],tick[1]]; 
    596655}; 
    597 this.xticks=MochiKit.Base.map(_141,this.xticks); 
     656this.xticks=MochiKit.Base.map(_144,this.xticks); 
    598657} 
    599658}; 
    600659PlotKit.Layout.prototype._evaluatePieTicks=function(){ 
    601 var _142=MochiKit.Base.isUndefinedOrNull; 
    602 var _143=MochiKit.Format.numberFormatter("#%"); 
     660var _145=MochiKit.Base.isUndefinedOrNull; 
     661var _146=MochiKit.Format.numberFormatter("#%"); 
    603662this.xticks=new Array(); 
    604663if(this.options.xTicks){ 
    605 var _144=new Array(); 
     664var _147=new Array(); 
    606665for(var i=0;i<this.slices.length;i++){ 
    607 _144[this.slices[i].xval]=this.slices[i]; 
     666_147[this.slices[i].xval]=this.slices[i]; 
    608667} 
    609668for(var i=0;i<this.options.xTicks.length;i++){ 
    610669var tick=this.options.xTicks[i]; 
    611 var _145=_144[tick.v]; 
    612 var _146=tick.label; 
    613 if(_145){ 
    614 if(_142(_146)){ 
    615 _146=tick.v.toString(); 
    616 } 
    617 _146+=" ("+_143(_145.fraction)+")"; 
    618 this.xticks.push([tick.v,_146]); 
     670var _148=_147[tick.v]; 
     671var _149=tick.label; 
     672if(_148){ 
     673if(_145(_149)){ 
     674_149=tick.v.toString(); 
     675} 
     676_149+=" ("+_146(_148.fraction)+")"; 
     677this.xticks.push([tick.v,_149]); 
    619678} 
    620679} 
    621680}else{ 
    622681for(var i=0;i<this.slices.length;i++){ 
    623 var _145=this.slices[i]; 
    624 var _146=_145.xval+" ("+_143(_145.fraction)+")"; 
    625 this.xticks.push([_145.xval,_146]); 
     682var _148=this.slices[i]; 
     683var _149=_148.xval+" ("+_146(_148.fraction)+")"; 
     684this.xticks.push([_148.xval,_149]); 
    626685} 
    627686} 
     
    631690this.hitTestCache.xlookup=new Array(); 
    632691this.hitTestCache.x2maxy=new Array(); 
    633 var _147=MochiKit.Base.listMax; 
    634 var _148=MochiKit.Base.itemgetter; 
     692var _150=MochiKit.Base.listMax; 
     693var _151=MochiKit.Base.itemgetter; 
    635694var map=MochiKit.Base.map; 
    636 var _149=keys(this.datasets); 
    637 for(var i=0;i<_149.length;i++){ 
    638 var _150=this.datasets[_149[i]]; 
    639 for(var j=0;j<_150.length;j++){ 
    640 var xval=_150[j][0]; 
    641 var yval=_150[j][1]; 
     695var _152=keys(this.datasets); 
     696for(var i=0;i<_152.length;i++){ 
     697var _153=this.datasets[_152[i]]; 
     698for(var j=0;j<_153.length;j++){ 
     699var xval=_153[j][0]; 
     700var yval=_153[j][1]; 
    642701if(this.hitTestCache.xlookup[xval]){ 
    643 this.hitTestCache.xlookup[xval].push([yval,_149[i]]); 
    644 }else{ 
    645 this.hitTestCache.xlookup[xval]=[[yval,_149[i]]]; 
     702this.hitTestCache.xlookup[xval].push([yval,_152[i]]); 
     703}else{ 
     704this.hitTestCache.xlookup[xval]=[[yval,_152[i]]]; 
    646705} 
    647706} 
    648707} 
    649708for(var x in this.hitTestCache.xlookup){ 
    650 var _152=this.hitTestCache.xlookup[x]; 
    651 this.hitTestCache.x2maxy[x]=_147(map(_148(0),_152)); 
     709var _155=this.hitTestCache.xlookup[x]; 
     710this.hitTestCache.x2maxy[x]=_150(map(_151(0),_155)); 
    652711} 
    653712}; 
     
    682741return this.__repr__(); 
    683742}; 
    684 PlotKit.CanvasRenderer=function(_153,_154,_155){ 
     743PlotKit.CanvasRenderer=function(_156,_157,_158){ 
    685744if(arguments.length>0){ 
    686 this.__init__(_153,_154,_155); 
    687 } 
    688 }; 
    689 PlotKit.CanvasRenderer.prototype.__init__=function(_156,_157,_158){ 
    690 var _159=MochiKit.Base.isUndefinedOrNull; 
    691 var _160=MochiKit.Color.Color; 
    692 this.options={"drawBackground":true,"backgroundColor":_160.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,_158?_158:{}); 
    694 this.layout=_157
    695 this.style=_157.style; 
    696 this.element=_156
     745this.__init__(_156,_157,_158); 
     746} 
     747}; 
     748PlotKit.CanvasRenderer.prototype.__init__=function(_159,_160,_161){ 
     749var _162=MochiKit.Base.isUndefinedOrNull; 
     750var _163=MochiKit.Color.Color; 
     751this.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}; 
     752MochiKit.Base.update(this.options,_161?_161:{}); 
     753this.layout=_160
     754this.style=_160.style; 
     755this.element=_159
    697756this.container=this.element.parentNode; 
    698757this.isIE=PlotKit.Base.excanvasSupported(); 
    699 if(this.isIE&&!_159(G_vmlCanvasManager)){ 
     758if(this.isIE&&!_162(G_vmlCanvasManager)){ 
    700759this.IEDelay=0.5; 
    701760this.maxTries=5; 
     
    706765this.height=this.element.height; 
    707766this.width=this.element.width; 
    708 if(_159(this.element)){ 
     767if(_162(this.element)){ 
    709768throw "CanvasRenderer() - passed canvas is not found"; 
    710769} 
     
    712771throw "CanvasRenderer() - Canvas is not supported."; 
    713772} 
    714 if(_159(this.container)||(this.container.nodeName.toLowerCase()!="div")){ 
     773if(_162(this.container)||(this.container.nodeName.toLowerCase()!="div")){ 
    715774throw "CanvasRenderer() - <canvas> needs to be enclosed in <div>"; 
    716775} 
     
    736795this.renderDelay=null; 
    737796} 
    738 var _161=this.element.getContext("2d"); 
     797var _164=this.element.getContext("2d"); 
    739798} 
    740799catch(e){ 
     
    765824} 
    766825}; 
    767 PlotKit.CanvasRenderer.prototype._renderBarChartWrap=function(data,_163){ 
    768 var _164=this.element.getContext("2d"); 
    769 var _165=this.options.colorScheme.length; 
    770 var _166=this.options.colorScheme; 
    771 var _167=MochiKit.Base.keys(this.layout.datasets); 
    772 var _168=_167.length; 
    773 for(var i=0;i<_168;i++){ 
    774 var _169=_167[i]; 
    775 var _170=_166[i%_165]; 
    776 _164.save(); 
    777 _164.fillStyle=_170.toRGBString(); 
     826PlotKit.CanvasRenderer.prototype._renderBarChartWrap=function(data,_166){ 
     827var _167=this.element.getContext("2d"); 
     828var _168=this.options.colorScheme.length; 
     829var _169=this.options.colorScheme; 
     830var _170=MochiKit.Base.keys(this.layout.datasets); 
     831var _171=_170.length; 
     832for(var i=0;i<_171;i++){ 
     833var _172=_170[i]; 
     834var _173=_169[i%_168]; 
     835_167.save(); 
     836_167.fillStyle=_173.toRGBString(); 
    778837if(this.options.strokeColor){ 
    779 _164.strokeStyle=this.options.strokeColor.toRGBString(); 
     838_167.strokeStyle=this.options.strokeColor.toRGBString(); 
    780839}else{ 
    781840if(this.options.strokeColorTransform){ 
    782 _164.strokeStyle=_170[this.options.strokeColorTransform]().toRGBString(); 
    783&n