/** * Copyright (c) 2009 - 2010 Chris Leonello * jqPlot is currently available for use in all personal or commercial projects * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can * choose the license that best suits your project and use it accordingly. * * Although not required, the author would appreciate an email letting him * know of any substantial use of jqPlot. You can reach the author at: * chris at jqplot or see http://www.jqplot.com/info.php . * * If you are feeling kind and generous, consider supporting the project by * making a donation at: http://www.jqplot.com/donate.php . * * jqPlot includes date instance methods and printf/sprintf functions by other authors: * * Date instance methods contained in jqplot.dateMethods.js: * * author Ken Snyder (ken d snyder at gmail dot com) * date 2008-09-10 * version 2.0.2 (http://kendsnyder.com/sandbox/date/) * license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) * * JavaScript printf/sprintf functions contained in jqplot.sprintf.js: * * version 2007.04.27 * author Ash Searle * http://hexmen.com/blog/2007/03/printf-sprintf/ * http://hexmen.com/js/sprintf.js * The author (Ash Searle) has placed this code in the public domain: * "This code is unrestricted: you are free to use it however you like." * */ (function(c){c.jqplot.MeterGaugeRenderer=function(){c.jqplot.LineRenderer.call(this)};c.jqplot.MeterGaugeRenderer.prototype=new c.jqplot.LineRenderer();c.jqplot.MeterGaugeRenderer.prototype.constructor=c.jqplot.MeterGaugeRenderer;c.jqplot.MeterGaugeRenderer.prototype.init=function(e){this.diameter=null;this.padding=null;this.shadowOffset=2;this.shadowAlpha=0.07;this.shadowDepth=4;this.background="#efefef";this.ringColor="#BBC6D0";this.needleColor="#C3D3E5";this.tickColor="989898";this.ringWidth=null;this.min;this.max;this.ticks=[];this.showTicks=true;this.showTickLabels=true;this.label=null;this.labelHeightAdjust=0;this.labelPosition="inside";this.intervals=[];this.intervalColors=["#4bb2c5","#EAA228","#c5b47f","#579575","#839557","#958c12","#953579","#4b5de4","#d8b83f","#ff5800","#0085cc","#c747a3","#cddf54","#FBD178","#26B4E3","#bd70c7"];this.intervalInnerRadius=null;this.intervalOuterRadius=null;this.tickRenderer=c.jqplot.MeterGaugeTickRenderer;this.tickPositions=[1,2,2.5,5,10];this.tickSpacing=30;this.numberMinorTicks=null;this.hubRadius=null;this.tickPadding=null;this.needleThickness=null;this.needlePad=6;this.pegNeedle=true;c.extend(true,this,e);this.type=null;this.numberTicks=null;this.tickInterval=null;this.span=180;if(this.type=="circular"){this.semiCircular=false}else{if(this.type!="circular"){this.semiCircular=true}else{this.semiCircular=(this.span<=180)?true:false}}this._tickPoints=[];this._labelElm=null;this.startAngle=(90+(360-this.span)/2)*Math.PI/180;this.endAngle=(90-(360-this.span)/2)*Math.PI/180;this.setmin=!!(this.min==null);this.setmax=!!(this.max==null);if(this.intervals.length){if(this.intervals[0].length==null||this.intervals.length==1){for(var f=0;f=this.data[0][1]){this.max=this.intervals[this.intervals.length-1][0];this.setmax=false}}else{this.setmax=false}}else{this.min=(this.min==null)?0:this.min;this.setmin=false;if(this.max==null){this.max=this.data[0][1]*1.25;this.setmax=true}else{this.setmax=false}}}};c.jqplot.MeterGaugeRenderer.prototype.setGridData=function(j){var f=[];var k=[];var e=this.startAngle;for(var h=0;h0){f[h]+=f[h-1]}}var g=Math.PI*2/f[f.length-1];for(var h=0;h0){f[h]+=f[h-1]}}var g=Math.PI*2/f[f.length-1];for(var h=0;h=0;i--){e=f/(h[i]*Math.pow(10,g));if(e==4||e==5){return e-1}}return null}c.jqplot.MeterGaugeRenderer.prototype.draw=function(W,aA,an){var Z;var aK=(an!=undefined)?an:{};var ah=0;var ag=0;var aq=1;if(an.legendInfo&&an.legendInfo.placement=="inside"){var aG=an.legendInfo;switch(aG.location){case"nw":ah=aG.width+aG.xoffset;break;case"w":ah=aG.width+aG.xoffset;break;case"sw":ah=aG.width+aG.xoffset;break;case"ne":ah=aG.width+aG.xoffset;aq=-1;break;case"e":ah=aG.width+aG.xoffset;aq=-1;break;case"se":ah=aG.width+aG.xoffset;aq=-1;break;case"n":ag=aG.height+aG.yoffset;break;case"s":ag=aG.height+aG.yoffset;aq=-1;break;default:break}}if(this.label){this._labelElem=c('
'+this.label+"
");this.canvas._elem.after(this._labelElem)}var k=(aK.shadow!=undefined)?aK.shadow:this.shadow;var M=(aK.showLine!=undefined)?aK.showLine:this.showLine;var H=(aK.fill!=undefined)?aK.fill:this.fill;var J=W.canvas.width;var R=W.canvas.height;if(this.padding==null){this.padding=Math.round(Math.min(J,R)/30)}var P=J-ah-2*this.padding;var aa=R-ag-2*this.padding;if(this.labelPosition=="bottom"&&this.label){aa-=this._labelElem.outerHeight(true)}var K=Math.min(P,aa);var ac=K;if(!this.diameter){if(this.semiCircular){if(P>=2*aa){if(!this.ringWidth){this.ringWidth=2*aa/35}this.needleThickness=this.needleThickness||2+Math.pow(this.ringWidth,0.8);this.innerPad=this.ringWidth/2+this.needleThickness/2+this.needlePad;this.diameter=2*(aa-2*this.innerPad)}else{if(!this.ringWidth){this.ringWidth=P/35}this.needleThickness=this.needleThickness||2+Math.pow(this.ringWidth,0.8);this.innerPad=this.ringWidth/2+this.needleThickness/2+this.needlePad;this.diameter=P-2*this.innerPad}this._center=[(J-aq*ah)/2+aq*ah,(R+aq*ag-this.padding-this.ringWidth-this.innerPad)]}else{if(!this.ringWidth){this.ringWidth=ac/35}this.needleThickness=this.needleThickness||2+Math.pow(this.ringWidth,0.8);this.innerPad=0;this.diameter=ac-this.ringWidth;this._center=[(J-aq*ah)/2+aq*ah,(R-aq*ag)/2+aq*ag]}}if(this._labelElem&&this.labelPosition=="bottom"){this._center[1]-=this._labelElem.outerHeight(true)}this._radius=this.diameter/2;this.tickSpacing=6000/this.diameter;if(!this.hubRadius){this.hubRadius=this.diameter/18}this.shadowOffset=0.5+this.ringWidth/9;this.shadowWidth=this.ringWidth*1;this.tickPadding=3+Math.pow(this.diameter/20,0.7);this.tickOuterRadius=this._radius-this.ringWidth/2-this.tickPadding;this.tickLength=(this.showTicks)?this._radius/13:0;if(this.ticks.length==0){var z=this.max,aJ=this.min,p=this.setmax,aE=this.setmin,ar=(z-aJ)*this.tickSpacing/this.span;var au=Math.floor(parseFloat((Math.log(ar)/Math.log(10)).toFixed(11)));var am=(ar/Math.pow(10,au));(am>2&&am<=2.5)?am=2.5:am=Math.ceil(am);var S=this.tickPositions;var ay,aj;for(Z=0;Z0)?aJ-aJ%ar:aJ-aJ%ar-ar;if(!this.forceZero){var C=Math.min(aJ-aN,0.8*ar);var n=Math.floor(C/S[ay]);if(n>1){aN=aN+S[ay]*(n-1);if(parseInt(aN,10)!=aN&&parseInt(aN-S[ay],10)==aN-S[ay]){aN=aN-S[ay]}}}if(aJ==aN){aJ-=ar}else{if(aJ-aN>0.23*ar){aJ=aN}else{aJ=aN-ar;aj+=1}}aj+=1;var D=aJ+(aj-1)*ar;if(z>=D){D+=ar;aj+=1}if(D-z<0.23*ar){D+=ar;aj+=1}this.max=z=D;this.min=aJ;this.tickInterval=ar;this.numberTicks=aj;var N;for(Z=0;Z=D){z=D+ar;aj+=1}else{z=D}this.tickInterval=this.tickInterval||ar;this.numberTicks=this.numberTicks||aj;var N;for(Z=0;Z1){var aH=String(O);if(aH.search(/\./)==-1){var aD=aH.search(/0+$/);at=(aD>0)?aH.length-aD-1:0}}L=O/Math.pow(10,at);for(Z=0;Z'+this.ticks[Z][1]+"");this.canvas._elem.after(I);aM=I.outerWidth(true);eh=I.outerHeight(true);V=this._tickPoints[Z][0]-aM*(this._tickPoints[Z][2]-Math.PI)/Math.PI-am*Math.cos(this._tickPoints[Z][2]);S=this._tickPoints[Z][1]-eh/2+eh/2*Math.pow(Math.abs((Math.sin(this._tickPoints[Z][2]))),0.5)+am/3*Math.pow(Math.abs((Math.sin(this._tickPoints[Z][2]))),0.5);I.css({left:V,top:S});F=aM*Math.cos(this._tickPoints[Z][2])+eh*Math.sin(Math.PI/2+this._tickPoints[Z][2]/2);m=(F>m)?F:m}}if(this.label&&this.labelPosition=="inside"){var V=this._center[0]+this.canvas._offsets.left;var am=this.tickPadding*(1-1/(this.diameter/80+1));var S=0.5*(this._center[1]+this.canvas._offsets.top-this.hubRadius)+0.5*(this._center[1]+this.canvas._offsets.top-this.tickOuterRadius+this.tickLength+am)+this.labelHeightAdjust;V-=this._labelElem.outerWidth(true)/2;S-=this._labelElem.outerHeight(true)/2;this._labelElem.css({left:V,top:S})}else{if(this.label&&this.labelPosition=="bottom"){var V=this._center[0]+this.canvas._offsets.left-this._labelElem.outerWidth(true)/2;var S=this._center[1]+this.canvas._offsets.top+this.innerPad+ +this.ringWidth+this.padding+this.labelHeightAdjust;this._labelElem.css({left:V,top:S})}}W.save();var av=this.intervalInnerRadius||this.hubRadius*1.5;if(this.intervalOuterRadius==null){if(this.showTickLabels){var af=(this.tickOuterRadius-this.tickLength-this.tickPadding-this.diameter/8)}else{var af=(this.tickOuterRadius-this.tickLength-this.diameter/16)}}else{var af=this.intervalOuterRadius}var O=this.max-this.min;var aB=this.intervals[this.intervals.length-1]-this.min;var y,Y,s=this.span*Math.PI/180;for(Z=0;Zthis.max+Q*3/this.span){aw=this.max+Q*3/this.span}if(this.data[0][1]');var x=false,o=false,e,m;var q=p[0];if(q.show){var y=q.data;if(this.numberRows){e=this.numberRows;if(!this.numberColumns){m=Math.ceil(y.length/e)}else{m=this.numberColumns}}else{if(this.numberColumns){m=this.numberColumns;e=Math.ceil(y.length/this.numberColumns)}else{e=y.length;m=1}}var w,v,f,k,h,l,n,u;var r=0;for(w=0;w').prependTo(this._elem)}else{f=c('').appendTo(this._elem)}for(v=0;v0){x=true}else{x=false}}else{if(w==e-1){x=false}else{x=true}}n=(x)?this.rowSpacing:"0";k=c('
');h=c('');if(this.escapeHtml){h.text(l)}else{h.html(l)}if(o){h.prependTo(f);k.prependTo(f)}else{k.appendTo(f);h.appendTo(f)}x=true}r++}}}}return this._elem};function a(j,h,f){f=f||{};f.axesDefaults=f.axesDefaults||{};f.legend=f.legend||{};f.seriesDefaults=f.seriesDefaults||{};f.grid=f.grid||{};f.gridPadding=f.gridPadding||{};var e=false;if(f.seriesDefaults.renderer==c.jqplot.MeterGaugeRenderer){e=true}else{if(f.series){for(var g=0;g