PlotKit.CanvasRenderer.prototype.__init__=function(_72,_73,_74){
var _75=MochiKit.Base.isUndefinedOrNull;
var _76=MochiKit.Color.Color;
-this.options={"drawBackground":true,"backgroundColor":_76.whiteColor(),"padding":{left:30,right:30,top:5,bottom:10},"colorScheme":PlotKit.Base.palette(PlotKit.Base.baseColors()[0]),"strokeColor":_76.whiteColor(),"strokeColorTransform":"asStrokeColor","strokeWidth":0.5,"shouldFill":true,"shouldStroke":true,"drawXAxis":true,"drawYAxis":true,"axisLineColor":_76.blackColor(),"axisLineWidth":0.5,"axisTickSize":3,"axisLabelColor":_76.blackColor(),"axisLabelFont":"Arial","axisLabelFontSize":9,"axisLabelWidth":50,"pieRadius":0.4,"enableEvents":true};
+this.options={"drawBackground":true,"backgroundColor":_76.whiteColor(),"colorScheme":PlotKit.Base.palette(PlotKit.Base.baseColors()[0]),"strokeColor":_76.whiteColor(),"strokeColorTransform":"asStrokeColor","strokeWidth":0.5,"shouldFill":true,"shouldStroke":true,"drawXAxis":true,"drawYAxis":true,"axisLineColor":_76.blackColor(),"axisLineWidth":0.5,"axisTickSize":3,"axisLabelColor":_76.blackColor(),"axisLabelFont":"Arial","axisLabelFontSize":9,"axisLabelWidth":50,"pieRadius":0.4,"enableEvents":true};
MochiKit.Base.update(this.options,_74?_74:{});
this.layout=_73;
this.element=MochiKit.DOM.getElement(_72);
this.xlabels=new Array();
this.ylabels=new Array();
this.isFirstRender=true;
-this.area={x:this.options.padding.left,y:this.options.padding.top,w:this.width-this.options.padding.left-this.options.padding.right,h:this.height-this.options.padding.top-this.options.padding.bottom};
+this.area={x:this.options.yAxisLabelWidth+2*this.options.axisTickSize,y:0};
+this.area.w=this.width-this.area.x-this.options.rightGap;
+this.area.h=this.height-this.options.axisLabelFontSize-2*this.options.axisTickSize;
MochiKit.DOM.updateNodeAttributes(this.container,{"style":{"position":"relative","width":this.width+"px"}});
};
PlotKit.CanvasRenderer.prototype.render=function(){
_93.closePath();
_93.stroke();
var _98=DIV(_94,_96[1]);
-_98.style.top=(y-this.options.axisLabelFontSize)+"px";
-_98.style.left=(x-this.options.padding.left-this.options.axisTickSize)+"px";
+var top=(y-this.options.axisLabelFontSize/2);
+if(top<0){
+top=0;
+}
+if(top+this.options.axisLabelFontSize+3>this.height){
+_98.style.bottom="0px";
+}else{
+_98.style.top=top+"px";
+}
+_98.style.left="0px";
_98.style.textAlign="right";
-_98.style.width=(this.options.padding.left-this.options.axisTickSize*2)+"px";
+_98.style.width=this.options.yAxisLabelWidth+"px";
MochiKit.DOM.appendChildNodes(this.container,_98);
this.ylabels.push(_98);
};
MochiKit.Iter.forEach(this.layout.yticks,bind(_95,this));
+var _100=this.ylabels[0];
+var _101=this.options.axisLabelFontSize;
+var _102=parseInt(_100.style.top)+_101;
+if(_102>this.height-_101){
+_100.style.top=(parseInt(_100.style.top)-_101/2)+"px";
+}
}
_93.beginPath();
_93.moveTo(this.area.x,this.area.y);
}
if(this.options.drawXAxis){
if(this.layout.xticks){
-var _95=function(_99){
+var _95=function(tick){
if(typeof (dataset)=="function"){
return;
}
-var x=this.area.x+_99[0]*this.area.w;
+var x=this.area.x+tick[0]*this.area.w;
var y=this.area.y+this.area.h;
_93.beginPath();
_93.moveTo(x,y);
_93.lineTo(x,y+this.options.axisTickSize);
_93.closePath();
_93.stroke();
-var _100=DIV(_94,_99[1]);
-_100.style.top=(y+this.options.axisTickSize)+"px";
-_100.style.left=(x-this.options.axisLabelWidth/2)+"px";
-_100.style.textAlign="center";
-_100.style.width=this.options.axisLabelWidth+"px";
-MochiKit.DOM.appendChildNodes(this.container,_100);
-this.xlabels.push(_100);
+var _104=DIV(_94,tick[1]);
+_104.style.textAlign="center";
+_104.style.bottom="0px";
+var left=(x-this.options.axisLabelWidth/2);
+if(left+this.options.axisLabelWidth>this.width){
+left=this.width-this.options.xAxisLabelWidth;
+_104.style.textAlign="right";
+}
+if(left<0){
+left=0;
+_104.style.textAlign="left";
+}
+_104.style.left=left+"px";
+_104.style.width=this.options.xAxisLabelWidth+"px";
+MochiKit.DOM.appendChildNodes(this.container,_104);
+this.xlabels.push(_104);
};
MochiKit.Iter.forEach(this.layout.xticks,bind(_95,this));
}
_93.restore();
};
PlotKit.CanvasRenderer.prototype._renderBackground=function(){
-var _101=this.element.getContext("2d");
-_101.save();
-_101.fillStyle=this.options.backgroundColor.toRGBString();
-_101.fillRect(0,0,this.width,this.height);
-_101.restore();
+var _106=this.element.getContext("2d");
+_106.save();
+_106.fillStyle=this.options.backgroundColor.toRGBString();
+_106.fillRect(0,0,this.width,this.height);
+_106.restore();
};
PlotKit.CanvasRenderer.prototype.clear=function(){
if(this.isIE){
this.clearDelay.cancel();
this.clearDelay=null;
}
-var _102=this.element.getContext("2d");
+var _107=this.element.getContext("2d");
}
catch(e){
this.isFirstRender=false;
return;
}
}
-var _102=this.element.getContext("2d");
-_102.clearRect(0,0,this.width,this.height);
+var _107=this.element.getContext("2d");
+_107.clearRect(0,0,this.width,this.height);
MochiKit.Iter.forEach(this.xlabels,MochiKit.DOM.removeElement);
MochiKit.Iter.forEach(this.ylabels,MochiKit.DOM.removeElement);
this.xlabels=new Array();
this.ylabels=new Array();
};
PlotKit.CanvasRenderer.prototype._initialiseEvents=function(){
-var _103=MochiKit.Signal.connect;
+var _108=MochiKit.Signal.connect;
var bind=MochiKit.Base.bind;
-_103(this.element,"onclick",bind(this.onclick,this));
+_108(this.element,"onclick",bind(this.onclick,this));
};
PlotKit.CanvasRenderer.prototype._resolveObject=function(e){
var x=(e.mouse().page.x-PlotKit.Base.findPosX(this.element)-this.area.x)/this.area.w;
var y=(e.mouse().page.y-PlotKit.Base.findPosY(this.element)-this.area.y)/this.area.h;
-var _106=this.layout.hitTest(x,y);
-if(_106){
-return _106;
+var _111=this.layout.hitTest(x,y);
+if(_111){
+return _111;
}
return null;
};
-PlotKit.CanvasRenderer.prototype._createEventObject=function(_107,e){
-if(_107==null){
+PlotKit.CanvasRenderer.prototype._createEventObject=function(_112,e){
+if(_112==null){
return null;
}
-e.chart=_107;
+e.chart=_112;
return e;
};
PlotKit.CanvasRenderer.prototype.onclick=function(e){
-var _108=this._resolveObject(e);
-var _109=this._createEventObject(_108,e);
-if(_109!=null){
-MochiKit.Signal.signal(this,"onclick",_109);
+var _113=this._resolveObject(e);
+var _114=this._createEventObject(_113,e);
+if(_114!=null){
+MochiKit.Signal.signal(this,"onclick",_114);
}
};
PlotKit.CanvasRenderer.prototype.onmouseover=function(e){
-var _110=this._resolveObject(e);
-var _111=this._createEventObject(_110,e);
-if(_111!=null){
-signal(this,"onmouseover",_111);
+var _115=this._resolveObject(e);
+var _116=this._createEventObject(_115,e);
+if(_116!=null){
+signal(this,"onmouseover",_116);
}
};
PlotKit.CanvasRenderer.prototype.onmouseout=function(e){
-var _112=this._resolveObject(e);
-var _113=this._createEventObject(_112,e);
-if(_113==null){
+var _117=this._resolveObject(e);
+var _118=this._createEventObject(_117,e);
+if(_118==null){
signal(this,"onmouseout",e);
}else{
-signal(this,"onmouseout",_113);
+signal(this,"onmouseout",_118);
}
};
PlotKit.CanvasRenderer.prototype.onmousemove=function(e){
-var _114=this._resolveObject(e);
-var _115=this._createEventObject(_114,e);
-if((_114==null)&&(this.event_isinside==null)){
+var _119=this._resolveObject(e);
+var _120=this._createEventObject(_119,e);
+if((_119==null)&&(this.event_isinside==null)){
return;
}
-if((_114!=null)&&(this.event_isinside==null)){
-signal(this,"onmouseover",_115);
+if((_119!=null)&&(this.event_isinside==null)){
+signal(this,"onmouseover",_120);
}
-if((_114==null)&&(this.event_isinside!=null)){
-signal(this,"onmouseout",_115);
+if((_119==null)&&(this.event_isinside!=null)){
+signal(this,"onmouseout",_120);
}
-if((_114!=null)&&(this.event_isinside!=null)){
-signal(this,"onmousemove",_115);
+if((_119!=null)&&(this.event_isinside!=null)){
+signal(this,"onmousemove",_120);
}
-this.event_isinside=_114;
+this.event_isinside=_119;
};
-PlotKit.CanvasRenderer.isSupported=function(_116){
-var _117=null;
+PlotKit.CanvasRenderer.isSupported=function(_121){
+var _122=null;
try{
-if(MochiKit.Base.isUndefinedOrNull(_116)){
-_117=MochiKit.DOM.CANVAS({});
+if(MochiKit.Base.isUndefinedOrNull(_121)){
+_122=MochiKit.DOM.CANVAS({});
}else{
-_117=MochiKit.DOM.getElement(_116);
+_122=MochiKit.DOM.getElement(_121);
}
-var _118=_117.getContext("2d");
+var _123=_122.getContext("2d");
}
catch(e){
var ie=navigator.appVersion.match(/MSIE (\d\.\d)/);
-var _120=(navigator.userAgent.toLowerCase().indexOf("opera")!=-1);
-if((!ie)||(ie[1]<6)||(_120)){
+var _125=(navigator.userAgent.toLowerCase().indexOf("opera")!=-1);
+if((!ie)||(ie[1]<6)||(_125)){
return false;
}
return true;
var _32=true;
var _33=function(_34,_31){
if(_31.name==_28){
+if(!_31.canvasy||isNaN(_31.canvasy)){
+_32=true;
+}else{
if(_32){
_34.moveTo(_31.canvasx,_31.canvasy);
+_32=false;
}else{
_34.lineTo(_31.canvasx,_31.canvasy);
}
-_32=false;
+}
}
};
MochiKit.Iter.forEach(this.layout.points,_24(_33,ctx),this);
var _43=function(_44,_45){
_41++;
if(_45.name==_36){
+if(!_45.y||isNaN(_45.y)){
+_39=-1;
+return;
+}
var _46=[_45.y-_45.errorPlus*_42,_45.y+_45.errorMinus*_42];
_46[0]=this.area.h*_46[0]+this.area.y;
_46[1]=this.area.h*_46[1]+this.area.y;
Dygraph.DEFAULT_WIDTH=480;
Dygraph.DEFAULT_HEIGHT=320;
Dygraph.AXIS_LINE_WIDTH=0.3;
-Dygraph.DEFAULT_ATTRS={highlightCircleSize:3,pixelsPerXLabel:60,pixelsPerYLabel:30,labelsDivWidth:250,labelsDivStyles:{},labelsSeparateLines:false,labelsKMB:false,strokeWidth:1,showRoller:false,xValueFormatter:Dygraph.dateString_,xValueParser:Dygraph.dateParser,xTicker:Dygraph.dateTicker,sigma:2,errorBars:false,fractions:false,wilsonInterval:true,customBars:false};
+Dygraph.DEFAULT_ATTRS={highlightCircleSize:3,pixelsPerXLabel:60,pixelsPerYLabel:30,labelsDivWidth:250,labelsDivStyles:{},labelsSeparateLines:false,labelsKMB:false,strokeWidth:1,axisTickSize:3,axisLabelFontSize:14,xAxisLabelWidth:50,yAxisLabelWidth:50,rightGap:5,showRoller:false,xValueFormatter:Dygraph.dateString_,xValueParser:Dygraph.dateParser,xTicker:Dygraph.dateTicker,sigma:2,errorBars:false,fractions:false,wilsonInterval:true,customBars:false};
Dygraph.DEBUG=1;
Dygraph.INFO=2;
Dygraph.WARNING=3;
this.valueRange_=_56.valueRange||null;
this.wilsonInterval_=_56.wilsonInterval||true;
this.customBars_=_56.customBars||false;
+div.innerHTML="";
if(div.style.width==""){
div.style.width=Dygraph.DEFAULT_WIDTH+"px";
}
MochiKit.Base.update(this.layoutOptions_,this.attrs_);
MochiKit.Base.update(this.layoutOptions_,this.user_attrs_);
this.layout_=new DygraphLayout(this.layoutOptions_);
-this.renderOptions_={colorScheme:this.colors_,strokeColor:null,strokeWidth:this.attr_("strokeWidth"),axisLabelFontSize:14,axisLineWidth:Dygraph.AXIS_LINE_WIDTH};
+this.renderOptions_={colorScheme:this.colors_,strokeColor:null,axisLineWidth:Dygraph.AXIS_LINE_WIDTH};
MochiKit.Base.update(this.renderOptions_,this.attrs_);
MochiKit.Base.update(this.renderOptions_,this.user_attrs_);
this.plotter_=new DygraphCanvasRenderer(this.hidden_,this.layout_,this.renderOptions_);
Dygraph.prototype.createStatusMessage_=function(){
if(!this.attr_("labelsDiv")){
var _74=this.attr_("labelsDivWidth");
-var _75={"style":{"position":"absolute","fontSize":"14px","zIndex":10,"width":_74+"px","top":"0px","left":this.width_-_74+"px","background":"white","textAlign":"left","overflow":"hidden"}};
+var _75={"style":{"position":"absolute","fontSize":"14px","zIndex":10,"width":_74+"px","top":"0px","left":(this.width_-_74-2)+"px","background":"white","textAlign":"left","overflow":"hidden"}};
MochiKit.Base.update(_75["style"],this.attr_("labelsDivStyles"));
var div=MochiKit.DOM.DIV(_75);
MochiKit.DOM.appendChildNodes(this.graphDiv,div);
}
};
Dygraph.prototype.createRollInterface_=function(){
-var _76=this.plotter_.options.padding;
-var _77=this.attr_("showRoller")?"block":"none";
-var _78={"type":"text","size":"2","value":this.rollPeriod_,"style":{"position":"absolute","zIndex":10,"top":(this.height_-25-_76.bottom)+"px","left":(_76.left+1)+"px","display":_77}};
-var _79=MochiKit.DOM.INPUT(_78);
+var _76=this.attr_("showRoller")?"block":"none";
+var _77={"type":"text","size":"2","value":this.rollPeriod_,"style":{"position":"absolute","zIndex":10,"top":(this.plotter_.area.h-25)+"px","left":(this.plotter_.area.x+1)+"px","display":_76}};
+var _78=MochiKit.DOM.INPUT(_77);
var pa=this.graphDiv;
-MochiKit.DOM.appendChildNodes(pa,_79);
-connect(_79,"onchange",this,function(){
-this.adjustRoll(_79.value);
+MochiKit.DOM.appendChildNodes(pa,_78);
+connect(_78,"onchange",this,function(){
+this.adjustRoll(_78.value);
});
-return _79;
+return _78;
};
Dygraph.prototype.createDragInterface_=function(){
-var _81=this;
-var _82=false;
+var _80=this;
+var _81=false;
+var _82=null;
var _83=null;
var _84=null;
var _85=null;
var _86=null;
-var _87=null;
var px=0;
var py=0;
-var _90=function(e){
+var _89=function(e){
return e.mouse().page.x-px;
};
-var _91=function(e){
+var _90=function(e){
return e.mouse().page.y-py;
};
-connect(this.hidden_,"onmousemove",function(_92){
-if(_82){
-_85=_90(_92);
-_86=_91(_92);
-_81.drawZoomRect_(_83,_85,_87);
-_87=_85;
+connect(this.hidden_,"onmousemove",function(_91){
+if(_81){
+_84=_89(_91);
+_85=_90(_91);
+_80.drawZoomRect_(_82,_84,_86);
+_86=_84;
}
});
-connect(this.hidden_,"onmousedown",function(_93){
-_82=true;
-px=PlotKit.Base.findPosX(_81.canvas_);
-py=PlotKit.Base.findPosY(_81.canvas_);
-_83=_90(_93);
-_84=_91(_93);
+connect(this.hidden_,"onmousedown",function(_92){
+_81=true;
+px=PlotKit.Base.findPosX(_80.canvas_);
+py=PlotKit.Base.findPosY(_80.canvas_);
+_82=_89(_92);
+_83=_90(_92);
});
-connect(document,"onmouseup",this,function(_94){
-if(_82){
-_82=false;
+connect(document,"onmouseup",this,function(_93){
+if(_81){
+_81=false;
+_82=null;
_83=null;
-_84=null;
}
});
-connect(this.hidden_,"onmouseout",this,function(_95){
-if(_82){
+connect(this.hidden_,"onmouseout",this,function(_94){
+if(_81){
+_84=null;
_85=null;
-_86=null;
}
});
-connect(this.hidden_,"onmouseup",this,function(_96){
-if(_82){
-_82=false;
-_85=_90(_96);
-_86=_91(_96);
+connect(this.hidden_,"onmouseup",this,function(_95){
+if(_81){
+_81=false;
+_84=_89(_95);
+_85=_90(_95);
+var _96=Math.abs(_84-_82);
var _97=Math.abs(_85-_83);
-var _98=Math.abs(_86-_84);
-if(_97<2&&_98<2&&_81.attr_("clickCallback")!=null&&_81.lastx_!=undefined){
-_81.attr_("clickCallback")(_96,new Date(_81.lastx_));
+if(_96<2&&_97<2&&_80.attr_("clickCallback")!=null&&_80.lastx_!=undefined){
+_80.attr_("clickCallback")(_95,new Date(_80.lastx_));
}
-if(_97>=10){
-_81.doZoom_(Math.min(_83,_85),Math.max(_83,_85));
+if(_96>=10){
+_80.doZoom_(Math.min(_82,_84),Math.max(_82,_84));
}else{
-_81.canvas_.getContext("2d").clearRect(0,0,_81.canvas_.width,_81.canvas_.height);
+_80.canvas_.getContext("2d").clearRect(0,0,_80.canvas_.width,_80.canvas_.height);
}
+_82=null;
_83=null;
-_84=null;
}
});
-connect(this.hidden_,"ondblclick",this,function(_99){
-_81.dateWindow_=null;
-_81.drawGraph_(_81.rawData_);
-var _100=_81.rawData_[0][0];
-var _101=_81.rawData_[_81.rawData_.length-1][0];
-if(_81.attr_("zoomCallback")){
-_81.attr_("zoomCallback")(_100,_101);
+connect(this.hidden_,"ondblclick",this,function(_98){
+_80.dateWindow_=null;
+_80.drawGraph_(_80.rawData_);
+var _99=_80.rawData_[0][0];
+var _100=_80.rawData_[_80.rawData_.length-1][0];
+if(_80.attr_("zoomCallback")){
+_80.attr_("zoomCallback")(_99,_100);
}
});
};
-Dygraph.prototype.drawZoomRect_=function(_102,endX,_104){
+Dygraph.prototype.drawZoomRect_=function(_101,endX,_103){
var ctx=this.canvas_.getContext("2d");
-if(_104){
-ctx.clearRect(Math.min(_102,_104),0,Math.abs(_102-_104),this.height_);
+if(_103){
+ctx.clearRect(Math.min(_101,_103),0,Math.abs(_101-_103),this.height_);
}
-if(endX&&_102){
+if(endX&&_101){
ctx.fillStyle="rgba(128,128,128,0.33)";
-ctx.fillRect(Math.min(_102,endX),0,Math.abs(endX-_102),this.height_);
+ctx.fillRect(Math.min(_101,endX),0,Math.abs(endX-_101),this.height_);
}
};
-Dygraph.prototype.doZoom_=function(lowX,_106){
-var _107=this.layout_.points;
+Dygraph.prototype.doZoom_=function(lowX,_105){
+var _106=this.layout_.points;
+var _107=null;
var _108=null;
-var _109=null;
-for(var i=0;i<_107.length;i++){
-var cx=_107[i].canvasx;
-var x=_107[i].xval;
-if(cx<lowX&&(_108==null||x>_108)){
+for(var i=0;i<_106.length;i++){
+var cx=_106[i].canvasx;
+var x=_106[i].xval;
+if(cx<lowX&&(_107==null||x>_107)){
+_107=x;
+}
+if(cx>_105&&(_108==null||x<_108)){
_108=x;
}
-if(cx>_106&&(_109==null||x<_109)){
-_109=x;
}
+if(_107==null){
+_107=_106[0].xval;
}
if(_108==null){
-_108=_107[0].xval;
+_108=_106[_106.length-1].xval;
}
-if(_109==null){
-_109=_107[_107.length-1].xval;
-}
-this.dateWindow_=[_108,_109];
+this.dateWindow_=[_107,_108];
this.drawGraph_(this.rawData_);
if(this.attr_("zoomCallback")){
-this.attr_("zoomCallback")(_108,_109);
+this.attr_("zoomCallback")(_107,_108);
}
};
-Dygraph.prototype.mouseMove_=function(_111){
-var _112=_111.mouse().page.x-PlotKit.Base.findPosX(this.hidden_);
-var _113=this.layout_.points;
+Dygraph.prototype.mouseMove_=function(_110){
+var _111=_110.mouse().page.x-PlotKit.Base.findPosX(this.hidden_);
+var _112=this.layout_.points;
+var _113=-1;
var _114=-1;
-var _115=-1;
-var _116=1e+100;
+var _115=1e+100;
var idx=-1;
-for(var i=0;i<_113.length;i++){
-var dist=Math.abs(_113[i].canvasx-_112);
-if(dist>_116){
+for(var i=0;i<_112.length;i++){
+var dist=Math.abs(_112[i].canvasx-_111);
+if(dist>_115){
break;
}
-_116=dist;
+_115=dist;
idx=i;
}
if(idx>=0){
-_114=_113[idx].xval;
+_113=_112[idx].xval;
}
-if(_112>_113[_113.length-1].canvasx){
-_114=_113[_113.length-1].xval;
+if(_111>_112[_112.length-1].canvasx){
+_113=_112[_112.length-1].xval;
}
-var _119=[];
-for(var i=0;i<_113.length;i++){
-if(_113[i].xval==_114){
-_119.push(_113[i]);
+var _118=[];
+for(var i=0;i<_112.length;i++){
+if(_112[i].xval==_113){
+_118.push(_112[i]);
}
}
-var _120=this.attr_("highlightCircleSize");
+var _119=this.attr_("highlightCircleSize");
var ctx=this.canvas_.getContext("2d");
if(this.previousVerticalX_>=0){
var px=this.previousVerticalX_;
-ctx.clearRect(px-_120-1,0,2*_120+2,this.height_);
+ctx.clearRect(px-_119-1,0,2*_119+2,this.height_);
}
-if(_119.length>0){
-var _112=_119[0].canvasx;
-var _121=this.attr_("xValueFormatter")(_114,this)+":";
+var isOK=function(x){
+return x&&!isNaN(x);
+};
+if(_118.length>0){
+var _111=_118[0].canvasx;
+var _121=this.attr_("xValueFormatter")(_113,this)+":";
var clen=this.colors_.length;
-for(var i=0;i<_119.length;i++){
+for(var i=0;i<_118.length;i++){
+if(!isOK(_118[i].canvasy)){
+continue;
+}
if(this.attr_("labelsSeparateLines")){
_121+="<br/>";
}
-var _123=_119[i];
+var _123=_118[i];
_121+=" <b><font color='"+this.colors_[i%clen].toHexString()+"'>"+_123.name+"</font></b>:"+this.round_(_123.yval,2);
}
this.attr_("labelsDiv").innerHTML=_121;
-this.lastx_=_114;
+this.lastx_=_113;
ctx.save();
-for(var i=0;i<_119.length;i++){
+for(var i=0;i<_118.length;i++){
+if(!isOK(_118[i%clen].canvasy)){
+continue;
+}
ctx.beginPath();
ctx.fillStyle=this.colors_[i%clen].toRGBString();
-ctx.arc(_112,_119[i%clen].canvasy,_120,0,360,false);
+ctx.arc(_111,_118[i%clen].canvasy,_119,0,360,false);
ctx.fill();
}
ctx.restore();
-this.previousVerticalX_=_112;
+this.previousVerticalX_=_111;
}
};
Dygraph.prototype.mouseOut_=function(_124){
var _178=Dygraph.numericTicks(minY,maxY,this);
this.layout_.updateOptions({yAxis:[minY,maxY],yTicks:_178});
};
+Dygraph.prototype.extremeValues_=function(_179){
+var minY=null,maxY=null;
+var bars=this.attr_("errorBars")||this.customBars_;
+if(bars){
+for(var j=0;j<_179.length;j++){
+var y=_179[j][1][0];
+if(!y){
+continue;
+}
+var low=y-_179[j][1][1];
+var high=y+_179[j][1][2];
+if(low>y){
+low=y;
+}
+if(high<y){
+high=y;
+}
+if(maxY==null||high>maxY){
+maxY=high;
+}
+if(minY==null||low<minY){
+minY=low;
+}
+}
+}else{
+for(var j=0;j<_179.length;j++){
+var y=_179[j][1];
+if(!y){
+continue;
+}
+if(maxY==null||y>maxY){
+maxY=y;
+}
+if(minY==null||y<minY){
+minY=y;
+}
+}
+}
+return [minY,maxY];
+};
Dygraph.prototype.drawGraph_=function(data){
-var maxY=null;
+var minY=null,maxY=null;
this.layout_.removeAllDatasets();
this.setColors_();
for(var i=1;i<data[0].length;i++){
-var _179=[];
+var _183=[];
for(var j=0;j<data.length;j++){
var date=data[j][0];
-_179[j]=[date,data[j][i]];
+_183[j]=[date,data[j][i]];
}
-_179=this.rollingAverage(_179,this.rollPeriod_);
+_183=this.rollingAverage(_183,this.rollPeriod_);
var bars=this.attr_("errorBars")||this.customBars_;
if(this.dateWindow_){
var low=this.dateWindow_[0];
var high=this.dateWindow_[1];
-var _183=[];
-for(var k=0;k<_179.length;k++){
-if(_179[k][0]>=low&&_179[k][0]<=high){
-_183.push(_179[k]);
-var y=bars?_179[k][1][0]:_179[k][1];
-if(maxY==null||y>maxY){
-maxY=y;
+var _184=[];
+for(var k=0;k<_183.length;k++){
+if(_183[k][0]>=low&&_183[k][0]<=high){
+_184.push(_183[k]);
}
}
+_183=_184;
}
-_179=_183;
-}else{
-if(!this.customBars_){
-for(var j=0;j<_179.length;j++){
-var y=bars?_179[j][1][0]:_179[j][1];
-if(maxY==null||y>maxY){
-maxY=bars?y+_179[j][1][1]:y;
-}
-}
-}else{
-for(var j=0;j<_179.length;j++){
-var y=_179[j][1][0];
-var high=_179[j][1][2];
-if(high>y){
-y=high;
-}
-if(maxY==null||y>maxY){
-maxY=y;
-}
-}
+var _185=this.extremeValues_(_183);
+var _186=_185[0];
+var _187=_185[1];
+if(!minY||_186<minY){
+minY=_186;
}
+if(!maxY||_187>maxY){
+maxY=_187;
}
if(bars){
var vals=[];
-for(var j=0;j<_179.length;j++){
-vals[j]=[_179[j][0],_179[j][1][0],_179[j][1][1],_179[j][1][2]];
+for(var j=0;j<_183.length;j++){
+vals[j]=[_183[j][0],_183[j][1][0],_183[j][1][1],_183[j][1][2]];
}
this.layout_.addDataset(this.attr_("labels")[i],vals);
}else{
-this.layout_.addDataset(this.attr_("labels")[i],_179);
+this.layout_.addDataset(this.attr_("labels")[i],_183);
}
}
if(this.valueRange_!=null){
this.addYTicks_(this.valueRange_[0],this.valueRange_[1]);
}else{
-maxY*=1.1;
-if(maxY<=0){
-maxY=1;
+var span=maxY-minY;
+var _190=maxY+0.1*span;
+var _191=minY-0.1*span;
+if(_191<0&&minY>=0){
+_191=0;
+}
+if(_190>0&&maxY<=0){
+_190=0;
}
-this.addYTicks_(0,maxY);
+if(this.attr_("includeZero")){
+if(maxY<0){
+_190=0;
+}
+if(minY>0){
+_191=0;
+}
+}
+this.addYTicks_(_191,_190);
}
this.addXTicks_();
this.layout_.evaluateWithError();
this.plotter_.render();
this.canvas_.getContext("2d").clearRect(0,0,this.canvas_.width,this.canvas_.height);
};
-Dygraph.prototype.rollingAverage=function(_185,_186){
-if(_185.length<2){
-return _185;
+Dygraph.prototype.rollingAverage=function(_192,_193){
+if(_192.length<2){
+return _192;
}
-var _186=Math.min(_186,_185.length-1);
-var _187=[];
-var _188=this.attr_("sigma");
+var _193=Math.min(_193,_192.length-1);
+var _194=[];
+var _195=this.attr_("sigma");
if(this.fractions_){
var num=0;
var den=0;
var mult=100;
-for(var i=0;i<_185.length;i++){
-num+=_185[i][1][0];
-den+=_185[i][1][1];
-if(i-_186>=0){
-num-=_185[i-_186][1][0];
-den-=_185[i-_186][1][1];
-}
-var date=_185[i][0];
-var _191=den?num/den:0;
+for(var i=0;i<_192.length;i++){
+num+=_192[i][1][0];
+den+=_192[i][1][1];
+if(i-_193>=0){
+num-=_192[i-_193][1][0];
+den-=_192[i-_193][1][1];
+}
+var date=_192[i][0];
+var _198=den?num/den:0;
if(this.attr_("errorBars")){
if(this.wilsonInterval_){
if(den){
-var p=_191<0?0:_191,n=den;
-var pm=_188*Math.sqrt(p*(1-p)/n+_188*_188/(4*n*n));
-var _194=1+_188*_188/den;
-var low=(p+_188*_188/(2*den)-pm)/_194;
-var high=(p+_188*_188/(2*den)+pm)/_194;
-_187[i]=[date,[p*mult,(p-low)*mult,(high-p)*mult]];
+var p=_198<0?0:_198,n=den;
+var pm=_195*Math.sqrt(p*(1-p)/n+_195*_195/(4*n*n));
+var _201=1+_195*_195/den;
+var low=(p+_195*_195/(2*den)-pm)/_201;
+var high=(p+_195*_195/(2*den)+pm)/_201;
+_194[i]=[date,[p*mult,(p-low)*mult,(high-p)*mult]];
}else{
-_187[i]=[date,[0,0,0]];
+_194[i]=[date,[0,0,0]];
}
}else{
-var _195=den?_188*Math.sqrt(_191*(1-_191)/den):1;
-_187[i]=[date,[mult*_191,mult*_195,mult*_195]];
+var _202=den?_195*Math.sqrt(_198*(1-_198)/den):1;
+_194[i]=[date,[mult*_198,mult*_202,mult*_202]];
}
}else{
-_187[i]=[date,mult*_191];
+_194[i]=[date,mult*_198];
}
}
}else{
var low=0;
var mid=0;
var high=0;
-var _197=0;
-for(var i=0;i<_185.length;i++){
-var data=_185[i][1];
+var _204=0;
+for(var i=0;i<_192.length;i++){
+var data=_192[i][1];
var y=data[1];
-_187[i]=[_185[i][0],[y,y-data[0],data[2]-y]];
+_194[i]=[_192[i][0],[y,y-data[0],data[2]-y]];
low+=data[0];
mid+=y;
high+=data[2];
-_197+=1;
-if(i-_186>=0){
-var prev=_185[i-_186];
+_204+=1;
+if(i-_193>=0){
+var prev=_192[i-_193];
low-=prev[1][0];
mid-=prev[1][1];
high-=prev[1][2];
-_197-=1;
+_204-=1;
}
-_187[i]=[_185[i][0],[1*mid/_197,1*(mid-low)/_197,1*(high-mid)/_197]];
+_194[i]=[_192[i][0],[1*mid/_204,1*(mid-low)/_204,1*(high-mid)/_204]];
}
}else{
-var _199=Math.min(_186-1,_185.length-2);
+var _206=Math.min(_193-1,_192.length-2);
if(!this.attr_("errorBars")){
-for(var i=0;i<_199;i++){
+if(_193==1){
+return _192;
+}
+for(var i=0;i<_206;i++){
var sum=0;
for(var j=0;j<i+1;j++){
-sum+=_185[j][1];
+sum+=_192[j][1];
}
-_187[i]=[_185[i][0],sum/(i+1)];
+_194[i]=[_192[i][0],sum/(i+1)];
}
-for(var i=Math.min(_186-1,_185.length-2);i<_185.length;i++){
+for(var i=Math.min(_193-1,_192.length-2);i<_192.length;i++){
var sum=0;
-for(var j=i-_186+1;j<i+1;j++){
-sum+=_185[j][1];
+for(var j=i-_193+1;j<i+1;j++){
+sum+=_192[j][1];
}
-_187[i]=[_185[i][0],sum/_186];
+_194[i]=[_192[i][0],sum/_193];
}
}else{
-for(var i=0;i<_199;i++){
+for(var i=0;i<_206;i++){
var sum=0;
-var _201=0;
+var _208=0;
+var _209=0;
for(var j=0;j<i+1;j++){
-sum+=_185[j][1][0];
-_201+=Math.pow(_185[j][1][1],2);
+var y=_192[j][1][0];
+if(!y||isNaN(y)){
+continue;
}
-var _195=Math.sqrt(_201)/(i+1);
-_187[i]=[_185[i][0],[sum/(i+1),_188*_195,_188*_195]];
+_209++;
+sum+=y;
+_208+=Math.pow(_192[j][1][1],2);
}
-for(var i=Math.min(_186-1,_185.length-2);i<_185.length;i++){
+if(_209){
+var _202=Math.sqrt(_208)/_209;
+_194[i]=[_192[i][0],[sum/_209,_195*_202,_195*_202]];
+}else{
+_194[i]=[_192[i][0],[null,null,null]];
+}
+}
+for(var i=Math.min(_193-1,_192.length-2);i<_192.length;i++){
var sum=0;
-var _201=0;
-for(var j=i-_186+1;j<i+1;j++){
-sum+=_185[j][1][0];
-_201+=Math.pow(_185[j][1][1],2);
+var _208=0;
+var _209=0;
+for(var j=i-_193+1;j<i+1;j++){
+var y=_192[j][1][0];
+if(!y||isNaN(y)){
+continue;
}
-var _195=Math.sqrt(_201)/_186;
-_187[i]=[_185[i][0],[sum/_186,_188*_195,_188*_195]];
+_209++;
+sum+=_192[j][1][0];
+_208+=Math.pow(_192[j][1][1],2);
}
+if(_209){
+var _202=Math.sqrt(_208)/_209;
+_194[i]=[_192[i][0],[sum/_209,_195*_202,_195*_202]];
+}else{
+_194[i]=[_192[i][0],[null,null,null]];
}
}
}
-return _187;
+}
+}
+return _194;
};
-Dygraph.dateParser=function(_202,self){
-var _203;
+Dygraph.dateParser=function(_210,self){
+var _211;
var d;
-if(_202.length==10&&_202.search("-")!=-1){
-_203=_202.replace("-","/","g");
-while(_203.search("-")!=-1){
-_203=_203.replace("-","/");
+if(_210.length==10&&_210.search("-")!=-1){
+_211=_210.replace("-","/","g");
+while(_211.search("-")!=-1){
+_211=_211.replace("-","/");
}
-d=Date.parse(_203);
+d=Date.parse(_211);
}else{
-if(_202.length==8){
-_203=_202.substr(0,4)+"/"+_202.substr(4,2)+"/"+_202.substr(6,2);
-d=Date.parse(_203);
+if(_210.length==8){
+_211=_210.substr(0,4)+"/"+_210.substr(4,2)+"/"+_210.substr(6,2);
+d=Date.parse(_211);
}else{
-d=Date.parse(_202);
+d=Date.parse(_210);
}
}
if(!d||isNaN(d)){
-self.error("Couldn't parse "+_202+" as a date");
+self.error("Couldn't parse "+_210+" as a date");
}
return d;
};
Dygraph.prototype.detectTypeFromString_=function(str){
-var _205=false;
+var _213=false;
if(str.indexOf("-")>=0||str.indexOf("/")>=0||isNaN(parseFloat(str))){
-_205=true;
+_213=true;
}else{
if(str.length==8&&str>"19700101"&&str<"20371231"){
-_205=true;
+_213=true;
}
}
-if(_205){
+if(_213){
this.attrs_.xValueFormatter=Dygraph.dateString_;
this.attrs_.xValueParser=Dygraph.dateParser;
this.attrs_.xTicker=Dygraph.dateTicker;
};
Dygraph.prototype.parseCSV_=function(data){
var ret=[];
-var _206=data.split("\n");
-var _207=0;
+var _214=data.split("\n");
+var _215=0;
if(this.labelsFromCSV_){
-_207=1;
-this.attrs_.labels=_206[0].split(",");
-}
-var _208;
-var _209=false;
-var _210=this.attr_("labels").length;
-for(var i=_207;i<_206.length;i++){
-var line=_206[i];
+_215=1;
+this.attrs_.labels=_214[0].split(",");
+}
+var _216;
+var _217=false;
+var _218=this.attr_("labels").length;
+for(var i=_215;i<_214.length;i++){
+var line=_214[i];
if(line.length==0){
continue;
}
-var _212=line.split(",");
-if(_212.length<2){
+var _220=line.split(",");
+if(_220.length<2){
continue;
}
-var _213=[];
-if(!_209){
-this.detectTypeFromString_(_212[0]);
-_208=this.attr_("xValueParser");
-_209=true;
+var _221=[];
+if(!_217){
+this.detectTypeFromString_(_220[0]);
+_216=this.attr_("xValueParser");
+_217=true;
}
-_213[0]=_208(_212[0],this);
+_221[0]=_216(_220[0],this);
if(this.fractions_){
-for(var j=1;j<_212.length;j++){
-var vals=_212[j].split("/");
-_213[j]=[parseFloat(vals[0]),parseFloat(vals[1])];
+for(var j=1;j<_220.length;j++){
+var vals=_220[j].split("/");
+_221[j]=[parseFloat(vals[0]),parseFloat(vals[1])];
}
}else{
if(this.attr_("errorBars")){
-for(var j=1;j<_212.length;j+=2){
-_213[(j+1)/2]=[parseFloat(_212[j]),parseFloat(_212[j+1])];
+for(var j=1;j<_220.length;j+=2){
+_221[(j+1)/2]=[parseFloat(_220[j]),parseFloat(_220[j+1])];
}
}else{
if(this.customBars_){
-for(var j=1;j<_212.length;j++){
-var vals=_212[j].split(";");
-_213[j]=[parseFloat(vals[0]),parseFloat(vals[1]),parseFloat(vals[2])];
+for(var j=1;j<_220.length;j++){
+var vals=_220[j].split(";");
+_221[j]=[parseFloat(vals[0]),parseFloat(vals[1]),parseFloat(vals[2])];
}
}else{
-for(var j=1;j<_212.length;j++){
-_213[j]=parseFloat(_212[j]);
+for(var j=1;j<_220.length;j++){
+_221[j]=parseFloat(_220[j]);
}
}
}
}
-ret.push(_213);
-if(_213.length!=_210){
-this.error("Number of columns in line "+i+" ("+_213.length+") does not agree with number of labels ("+_210+") "+line);
+ret.push(_221);
+if(_221.length!=_218){
+this.error("Number of columns in line "+i+" ("+_221.length+") does not agree with number of labels ("+_218+") "+line);
}
}
return ret;
if(MochiKit.Base.isDateLike(data[0][0])){
this.attrs_.xValueFormatter=Dygraph.dateString_;
this.attrs_.xTicker=Dygraph.dateTicker;
-var _214=MochiKit.Base.clone(data);
+var _222=MochiKit.Base.clone(data);
for(var i=0;i<data.length;i++){
-if(_214[i].length==0){
+if(_222[i].length==0){
this.error("Row "<<(1+i)<<" of data is empty");
return null;
}
-if(_214[i][0]==null||typeof (_214[i][0].getTime)!="function"){
+if(_222[i][0]==null||typeof (_222[i][0].getTime)!="function"){
this.error("x value in row "<<(1+i)<<" is not a Date");
return null;
}
-_214[i][0]=_214[i][0].getTime();
+_222[i][0]=_222[i][0].getTime();
}
-return _214;
+return _222;
}else{
this.attrs_.xValueFormatter=function(x){
return x;
Dygraph.prototype.parseDataTable_=function(data){
var cols=data.getNumberOfColumns();
var rows=data.getNumberOfRows();
-var _217=[];
+var _225=[];
for(var i=0;i<cols;i++){
-_217.push(data.getColumnLabel(i));
+_225.push(data.getColumnLabel(i));
}
-this.attrs_.labels=_217;
-var _218=data.getColumnType(0);
-if(_218=="date"){
+this.attrs_.labels=_225;
+var _226=data.getColumnType(0);
+if(_226=="date"){
this.attrs_.xValueFormatter=Dygraph.dateString_;
this.attrs_.xValueParser=Dygraph.dateParser;
this.attrs_.xTicker=Dygraph.dateTicker;
}else{
-if(_218!="number"){
+if(_226=="number"){
this.attrs_.xValueFormatter=function(x){
return x;
};
};
this.attrs_.xTicker=Dygraph.numericTicks;
}else{
-this.error("only 'date' and 'number' types are supported for column 1"+"of DataTable input (Got '"+_218+"')");
+this.error("only 'date' and 'number' types are supported for column 1 "+"of DataTable input (Got '"+_226+"')");
return null;
}
}
var ret=[];
for(var i=0;i<rows;i++){
var row=[];
-if(_218=="date"){
+if(!data.getValue(i,0)){
+continue;
+}
+if(_226=="date"){
row.push(data.getValue(i,0).getTime());
}else{
row.push(data.getValue(i,0));
this.loadedEvent_(this.file_);
}else{
var req=new XMLHttpRequest();
-var _221=this;
+var _229=this;
req.onreadystatechange=function(){
if(req.readyState==4){
if(req.status==200){
-_221.loadedEvent_(req.responseText);
+_229.loadedEvent_(req.responseText);
}
}
};
}
}
};
-Dygraph.prototype.updateOptions=function(_222){
-if(_222.customBars){
-this.customBars_=_222.customBars;
+Dygraph.prototype.updateOptions=function(_230){
+if(_230.customBars){
+this.customBars_=_230.customBars;
}
-if(_222.rollPeriod){
-this.rollPeriod_=_222.rollPeriod;
+if(_230.rollPeriod){
+this.rollPeriod_=_230.rollPeriod;
}
-if(_222.dateWindow){
-this.dateWindow_=_222.dateWindow;
+if(_230.dateWindow){
+this.dateWindow_=_230.dateWindow;
}
-if(_222.valueRange){
-this.valueRange_=_222.valueRange;
+if(_230.valueRange){
+this.valueRange_=_230.valueRange;
}
-MochiKit.Base.update(this.user_attrs_,_222);
+MochiKit.Base.update(this.user_attrs_,_230);
this.labelsFromCSV_=(this.attr_("labels")==null);
this.layout_.updateOptions({"errorBars":this.attr_("errorBars")});
-if(_222["file"]&&_222["file"]!=this.file_){
-this.file_=_222["file"];
+if(_230["file"]&&_230["file"]!=this.file_){
+this.file_=_230["file"];
this.start_();
}else{
this.drawGraph_(this.rawData_);
}
};
-Dygraph.prototype.adjustRoll=function(_223){
-this.rollPeriod_=_223;
+Dygraph.prototype.adjustRoll=function(_231){
+this.rollPeriod_=_231;
this.drawGraph_(this.rawData_);
};
-Dygraph.GVizChart=function(_224){
-this.container=_224;
+Dygraph.GVizChart=function(_232){
+this.container=_232;
};
-Dygraph.GVizChart.prototype.draw=function(data,_225){
+Dygraph.GVizChart.prototype.draw=function(data,_233){
this.container.innerHTML="";
-this.date_graph=new Dygraph(this.container,data,_225);
+this.date_graph=new Dygraph(this.container,data,_233);
};
DateGraph=Dygraph;