rgraph-rails 1.0.6 → 1.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/CODE_OF_CONDUCT.md +68 -7
- data/README.md +7 -2
- data/lib/rgraph-rails/version.rb +1 -1
- data/rgraph-rails.gemspec +1 -1
- data/vendor/assets/javascripts/RGraph.bar.js +5 -3
- data/vendor/assets/javascripts/RGraph.bipolar.js +4 -4
- data/vendor/assets/javascripts/RGraph.common.context.js +1 -1
- data/vendor/assets/javascripts/RGraph.common.core.js +10 -8
- data/vendor/assets/javascripts/RGraph.common.dynamic.js +10 -8
- data/vendor/assets/javascripts/RGraph.common.key.js +1 -1
- data/vendor/assets/javascripts/RGraph.drawing.poly.js +2 -3
- data/vendor/assets/javascripts/RGraph.drawing.text.js +5 -3
- data/vendor/assets/javascripts/RGraph.gantt.js +6 -4
- data/vendor/assets/javascripts/RGraph.hbar.js +9 -6
- data/vendor/assets/javascripts/RGraph.line.js +5 -2
- data/vendor/assets/javascripts/RGraph.modaldialog.js +20 -0
- data/vendor/assets/javascripts/RGraph.odo.js +72 -0
- data/vendor/assets/javascripts/RGraph.pie.js +138 -0
- data/vendor/assets/javascripts/RGraph.radar.js +111 -0
- data/vendor/assets/javascripts/RGraph.rose.js +109 -0
- data/vendor/assets/javascripts/RGraph.rscatter.js +81 -0
- data/vendor/assets/javascripts/RGraph.scatter.js +169 -0
- data/vendor/assets/javascripts/RGraph.semicircularprogress.js +61 -0
- data/vendor/assets/javascripts/RGraph.thermometer.js +63 -0
- data/vendor/assets/javascripts/RGraph.thermometer.old.js +68 -0
- data/vendor/assets/javascripts/RGraph.vprogress.js +84 -0
- data/vendor/assets/javascripts/RGraph.waterfall.js +81 -0
- metadata +31 -19
@@ -0,0 +1,81 @@
|
|
1
|
+
|
2
|
+
RGraph=window.RGraph||{isRGraph:true};RGraph.RScatter=RGraph.Rscatter=function(conf)
|
3
|
+
{if(typeof conf==='object'&&typeof conf.data==='object'&&typeof conf.id==='string'){var parseConfObjectForOptions=true;this.data=new Array(conf.data.length);this.data=RGraph.arrayClone(conf.data);if(typeof conf.data==='object'&&typeof conf.data[0]==='object'&&typeof conf.data[0][0]==='number'){var tmp=RGraph.arrayClone(conf.data);conf.data=new Array();conf.data[0]=RGraph.arrayClone(tmp);this.data=RGraph.arrayClone(conf.data);}}else{var conf={id:conf};conf.data=arguments[1];this.data=[];if(arguments[1][0]&&arguments[1][0][0]&&typeof arguments[1][0][0]=='object'){for(var i=0;i<arguments[1].length;++i){this.data[i]=arguments[1][i];}}else{for(var i=1;i<arguments.length;++i){this.data[i-1]=RGraph.arrayClone(arguments[i]);}}}
|
4
|
+
this.id=conf.id
|
5
|
+
this.canvas=document.getElementById(this.id)
|
6
|
+
this.context=this.canvas.getContext?this.canvas.getContext("2d"):null;this.canvas.__object__=this;this.type='rscatter';this.hasTooltips=false;this.isRGraph=true;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.colorsParsed=false;this.coordsText=[];this.original_colors=[];this.firstDraw=true;this.centerx=0;this.centery=0;this.radius=0;this.max=0;for(var i=0;i<this.data.length;++i){for(var j=0;j<this.data[i].length;++j){if(typeof this.data[i][j][0]==='string'){this.data[i][j][0]=parseFloat(this.data[i][j][0]);}
|
7
|
+
if(typeof this.data[i][j][1]==='string'){this.data[i][j][1]=parseFloat(this.data[i][j][1]);}}}
|
8
|
+
this.properties={'chart.background.color':'transparent','chart.background.grid':true,'chart.background.grid.diagonals':true,'chart.background.grid.diagonals.count':null,'chart.background.grid.radials':true,'chart.background.grid.radials.count':null,'chart.background.grid.linewidth':1,'chart.background.grid.color':'#ccc','chart.radius':null,'chart.colors':[],'chart.colors.default':'black','chart.gutter.left':25,'chart.gutter.right':25,'chart.gutter.top':25,'chart.gutter.bottom':25,'chart.title':'','chart.title.background':null,'chart.title.hpos':null,'chart.title.vpos':null,'chart.title.bold':true,'chart.title.font':null,'chart.title.x':null,'chart.title.y':null,'chart.title.halign':null,'chart.title.valign':null,'chart.labels':null,'chart.labels.color':null,'chart.labels.axes':'nsew','chart.labels.axes.background':'rgba(255,255,255,0.8)','chart.labels.count':5,'chart.text.color':'black','chart.text.font':'Segoe UI, Arial, Verdana, sans-serif','chart.text.size':12,'chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':true,'chart.key':null,'chart.key.background':'white','chart.key.position':'graph','chart.key.halign':'right','chart.key.shadow':false,'chart.key.shadow.color':'#666','chart.key.shadow.blur':3,'chart.key.shadow.offsetx':2,'chart.key.shadow.offsety':2,'chart.key.position.gutter.boxed':false,'chart.key.position.x':null,'chart.key.position.y':null,'chart.key.color.shape':'square','chart.key.rounded':true,'chart.key.linewidth':1,'chart.key.colors':null,'chart.key.interactive':false,'chart.key.interactive.highlight.chart.fill':'rgba(255,0,0,0.9)','chart.key.interactive.highlight.label':'rgba(255,0,0,0.2)','chart.key.text.color':'black','chart.contextmenu':null,'chart.tooltips':null,'chart.tooltips.event':'onmousemove','chart.tooltips.effect':'fade','chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.highlight':true,'chart.tooltips.hotspot':3,'chart.tooltips.coords.page':false,'chart.annotatable':false,'chart.annotate.color':'black','chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.hdir':'right','chart.zoom.vdir':'down','chart.zoom.frames':25,'chart.zoom.delay':16.666,'chart.zoom.shadow':true,'chart.zoom.background':true,'chart.zoom.action':'zoom','chart.resizable':false,'chart.resize.handle.background':null,'chart.ymax':null,'chart.ymin':0,'chart.tickmarks':'cross','chart.ticksize':3,'chart.scale.decimals':null,'chart.scale.point':'.','chart.scale.thousand':',','chart.scale.round':false,'chart.scale.zerostart':true,'chart.units.pre':'','chart.units.post':'','chart.events.mousemove':null,'chart.events.click':null,'chart.highlight.stroke':'transparent','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.highlight.point.radius':3,'chart.axes.color':'black','chart.axes.numticks':null,'chart.axes.caps':true,'chart.segment.highlight':false,'chart.segment.highlight.count':null,'chart.segment.highlight.fill':'rgba(0,255,0,0.5)','chart.segment.highlight.stroke':'rgba(0,0,0,0)','chart.line':false,'chart.line.close':false,'chart.line.linewidth':1,'chart.line.colors':['black'],'chart.line.shadow':false,'chart.line.shadow.color':'black','chart.line.shadow.blur':2,'chart.line.shadow.offsetx':3,'chart.line.shadow.offsety':3,'chart.clearto':'rgba(0,0,0,0)'}
|
9
|
+
for(var i=0,idx=0;i<this.data.length;++i){for(var j=0,len=this.data[i].length;j<len;j+=1,idx+=1){this['$'+idx]={}}}
|
10
|
+
if(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}
|
11
|
+
var RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math
|
12
|
+
if(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}
|
13
|
+
this.set=this.Set=function(name,value)
|
14
|
+
{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}
|
15
|
+
if(name.substr(0,6)!='chart.'){name='chart.'+name;}
|
16
|
+
while(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}
|
17
|
+
if(name==='chart.segments.highlight')name='chart.segment.highlight';if(name==='chart.segments.highlight.count')name='chart.segment.highlight.count';if(name==='chart.segments.highlight.fill')name='chart.segment.highlight.fill';if(name==='chart.segments.highlight.stroke')name='chart.segment.highlight.stroke';prop[name.toLowerCase()]=value;return this;};this.get=this.Get=function(name)
|
18
|
+
{if(name.substr(0,6)!='chart.'){name='chart.'+name;}
|
19
|
+
while(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}
|
20
|
+
return prop[name.toLowerCase()];};this.draw=this.Draw=function()
|
21
|
+
{RG.FireCustomEvent(this,'onbeforedraw');this.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];this.radius=(Math.min(ca.width-this.gutterLeft-this.gutterRight,ca.height-this.gutterTop-this.gutterBottom)/2);this.centerx=((ca.width-this.gutterLeft-this.gutterRight)/2)+this.gutterLeft;this.centery=((ca.height-this.gutterTop-this.gutterBottom)/2)+this.gutterTop;this.coords=[];this.coords2=[];this.coordsText=[];if(typeof(prop['chart.centerx'])=='number')this.centerx=prop['chart.centerx'];if(typeof(prop['chart.centery'])=='number')this.centery=prop['chart.centery'];if(typeof(prop['chart.radius'])=='number')this.radius=prop['chart.radius'];if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}
|
22
|
+
var max=prop['chart.ymax'];var min=prop['chart.ymin'];if(typeof(max)=='number'){this.max=max;this.scale2=RG.getScale2(this,{'max':max,'min':min,'strict':true,'scale.decimals':Number(prop['chart.scale.decimals']),'scale.point':prop['chart.scale.point'],'scale.thousand':prop['chart.scale.thousand'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post'],'ylabels.count':prop['chart.labels.count']});}else{for(var i=0;i<this.data.length;i+=1){for(var j=0,len=this.data[i].length;j<len;j+=1){this.max=Math.max(this.max,this.data[i][j][1]);}}
|
23
|
+
this.min=prop['chart.ymin'];this.scale2=RG.getScale2(this,{'max':this.max,'min':min,'scale.decimals':Number(prop['chart.scale.decimals']),'scale.point':prop['chart.scale.point'],'scale.thousand':prop['chart.scale.thousand'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post'],'ylabels.count':prop['chart.labels.count']});this.max=this.scale2.max;}
|
24
|
+
if(prop['chart.key']&&prop['chart.key'].length>0&&prop['chart.key'].length>=3){this.centerx=this.centerx-prop['chart.gutter.right']+5;}
|
25
|
+
if(typeof(prop['chart.key'])=='object'&&RG.is_array(prop['chart.key'])&&prop['chart.key'][0]){prop['chart.colors']=[];for(var i=0;i<this.data.length;i+=1){for(var j=0,len=this.data[i].length;j<len;j+=1){if(typeof this.data[i][j][2]=='string'){prop['chart.colors'].push(this.data[i][j][2]);}}}}
|
26
|
+
this.Set('chart.tooltips',[]);for(var i=0;i<this.data.length;i+=1){for(var j=0,len=this.data[i].length;j<len;j+=1){if(typeof this.data[i][j][3]=='string'){prop['chart.tooltips'].push(this.data[i][j][3]);}}}
|
27
|
+
co.beginPath();this.DrawBackground();this.DrawRscatter();this.DrawLabels();if(prop['chart.contextmenu']){RG.ShowContext(this);}
|
28
|
+
if(prop['chart.title']){RG.DrawTitle(this,prop['chart.title'],this.centery-this.radius-10,this.centerx,prop['chart.title.size']?prop['chart.title.size']:prop['chart.text.size']+2);}
|
29
|
+
if(prop['chart.resizable']){RG.AllowResizing(this);}
|
30
|
+
RG.InstallEventListeners(this);if(prop['chart.segment.highlight']){RG.allowSegmentHighlight({object:this,count:typeof prop['chart.segment.highlight.count']==='number'?prop['chart.segment.highlight.count']:((prop['chart.background.grid.diagonals.count']?prop['chart.background.grid.diagonals.count']:(prop['chart.labels']?prop['chart.labels'].length:8))),fill:prop['chart.segment.highlight.fill'],stroke:prop['chart.segment.highlight.stroke']});}
|
31
|
+
if(this.firstDraw){RG.fireCustomEvent(this,'onfirstdraw');this.firstDraw=false;this.firstDrawFunc();}
|
32
|
+
RG.FireCustomEvent(this,'ondraw');return this;};this.drawBackground=this.DrawBackground=function()
|
33
|
+
{if(prop['chart.background.color']!='transparent'){pa2(co,['b','a',this.centerx,this.centery,this.radius,0,2*ma.PI,-1,'f',prop['chart.background.color']]);}
|
34
|
+
var gridEnabled=prop['chart.background.grid'];if(gridEnabled){co.lineWidth=prop['chart.background.grid.linewidth'];if(prop['chart.background.grid.radials']){co.strokeStyle=prop['chart.background.grid.color'];if(RG.isNull(prop['chart.background.grid.radials.count'])){prop['chart.background.grid.radials.count']=prop['chart.labels.count'];}
|
35
|
+
var r=this.radius/prop['chart.background.grid.radials.count'];for(var i=0,len=this.radius;i<=len;i+=r){co.arc(this.centerx,this.centery,i,0,RG.TWOPI,0);}
|
36
|
+
co.stroke();}
|
37
|
+
if(prop['chart.background.grid.diagonals']){co.strokeStyle=prop['chart.background.grid.color'];co.beginPath();var inc=360/((prop['chart.background.grid.diagonals.count']?prop['chart.background.grid.diagonals.count']:(prop['chart.labels']?prop['chart.labels'].length:8)));for(var i=inc;i<360;i+=inc){co.arc(this.centerx,this.centery,this.radius,(i/(180/RG.PI))-RG.HALFPI,((i+0.01)/(180/RG.PI))-RG.HALFPI,0);co.lineTo(this.centerx,this.centery);}
|
38
|
+
co.stroke();}}
|
39
|
+
co.lineWidth=1;co.beginPath();co.strokeStyle=prop['chart.axes.color'];co.moveTo(this.centerx-this.radius,Math.round(this.centery));co.lineTo(this.centerx+this.radius,Math.round(this.centery));if(prop['chart.axes.caps']){co.moveTo(ma.round(this.centerx-this.radius),this.centery-5);co.lineTo(ma.round(this.centerx-this.radius),this.centery+5);co.moveTo(ma.round(this.centerx+this.radius),this.centery-5);co.lineTo(ma.round(this.centerx+this.radius),this.centery+5);}
|
40
|
+
if(!RG.isNull(prop['chart.axes.numticks'])){var numticks=prop['chart.axes.numticks']}else{var numticks=prop['chart.labels.count'];}
|
41
|
+
var caps=prop['chart.axes.caps'];if(numticks){for(var i=(this.centerx-this.radius);i<(this.centerx+this.radius);i+=(this.radius/numticks)){co.moveTo(ma.round(i),this.centery-3);co.lineTo(ma.round(i),this.centery+3);}
|
42
|
+
for(var i=(this.centery-this.radius);i<(this.centery+this.radius);i+=(this.radius/numticks)){co.moveTo(this.centerx-3,ma.round(i));co.lineTo(this.centerx+3,ma.round(i));}}
|
43
|
+
co.moveTo(ma.round(this.centerx),this.centery-this.radius);co.lineTo(ma.round(this.centerx),this.centery+this.radius);if(prop['chart.axes.caps']){co.moveTo(this.centerx-5,ma.round(this.centery-this.radius));co.lineTo(this.centerx+5,ma.round(this.centery-this.radius));co.moveTo(this.centerx-5,ma.round(this.centery+this.radius));co.lineTo(this.centerx+5,ma.round(this.centery+this.radius));}
|
44
|
+
co.closePath();co.stroke();};this.drawRscatter=this.DrawRscatter=function()
|
45
|
+
{for(var dataset=0;dataset<this.data.length;dataset+=1){var data=this.data[dataset];this.coords2[dataset]=[];var drawPoints=function(obj)
|
46
|
+
{for(var i=0;i<data.length;++i){var d1=data[i][0],d2=data[i][1],a=d1/(180/RG.PI),r=((d2-prop['chart.ymin'])/(obj.scale2.max-obj.scale2.min))*obj.radius,x=ma.sin(a)*r,y=ma.cos(a)*r,color=data[i][2]?data[i][2]:prop['chart.colors.default'],tooltip=data[i][3]?data[i][3]:null
|
47
|
+
if(tooltip&&String(tooltip).length){obj.hasTooltips=true;}
|
48
|
+
x=x+obj.centerx;y=obj.centery-y;obj.drawTick(x,y,color);obj.coords.push([x,y,color,tooltip]);obj.coords2[dataset].push([x,y,color,tooltip]);}}
|
49
|
+
drawPoints(this);if(prop['chart.line']){this.drawLine(dataset);}}};this.drawLine=function(idx)
|
50
|
+
{var opt={dataset:idx,coords:this.coords2[idx],color:prop['chart.line.colors'][idx],shadow:prop['chart.line.shadow'],shadowColor:prop['chart.line.shadow.color'],shadowOffsetX:prop['chart.line.shadow.offsetx'],shadowOffsetY:prop['chart.line.shadow.offsety'],shadowBlur:prop['chart.line.shadow.blur'],linewidth:prop['chart.line.linewidth']};co.beginPath();co.strokeStyle=this.parseSingleColorForGradient(opt.color);co.lineWidth=typeof prop['chart.line.linewidth']==='object'?prop['chart.line.linewidth'][idx]:prop['chart.line.linewidth'];co.lineCap='round';if(opt.shadow){RG.setShadow(this,opt.shadowColor,opt.shadowOffsetX,opt.shadowOffsetY,opt.shadowBlur);}
|
51
|
+
for(var i=0;i<this.coords2[idx].length;++i){if(i===0){co.moveTo(this.coords2[idx][i][0],this.coords2[idx][i][1]);var startCoords=RG.arrayClone(this.coords2[idx]);}else{co.lineTo(this.coords2[idx][i][0],this.coords2[idx][i][1]);}}
|
52
|
+
if((typeof prop['chart.line.close']==='boolean'&&prop['chart.line.close'])||(typeof prop['chart.line.close']==='object'&&prop['chart.line.close'][idx])){co.lineTo(this.coords2[idx][0][0],this.coords2[idx][0][1]);}
|
53
|
+
co.stroke();RG.noShadow(this);};this.drawLabels=this.DrawLabels=function()
|
54
|
+
{co.lineWidth=1;co.fillStyle='black';co.strokeStyle='black';var key=prop['chart.key'];var r=this.radius;var axesColor=prop['chart.axes.color'];var color=prop['chart.text.color'];var font=prop['chart.text.font'];var size=prop['chart.text.size'];var axes=prop['chart.labels.axes'].toLowerCase();var units_pre=prop['chart.units.pre'];var units_post=prop['chart.units.post'];var decimals=prop['chart.scale.decimals'];var centerx=this.centerx;var centery=this.centery;co.fillStyle=prop['chart.text.color'];if(typeof prop['chart.labels']=='object'&&prop['chart.labels']){this.DrawCircularLabels(co,prop['chart.labels'],font,size,r);}
|
55
|
+
var offset=10;var centered=false;if(axesColor==='rgba(0,0,0,0)'||axesColor==='rgb(0,0,0)'||axesColor==='transparent'){offset=0;centered=true;}
|
56
|
+
for(var i=0,len=this.scale2.labels.length;i<len;++i){if(axes.indexOf('n')>-1)RG.text2(this,{'tag':'scale','font':font,'size':size,'x':centerx-offset,'y':centery-(r*((i+1)/len)),'text':this.scale2.labels[i],'valign':'center','halign':centered?'center':'right',bounding:true,boundingFill:prop['chart.labels.axes.background'],boundingStroke:'rgba(0,0,0,0)'});if(axes.indexOf('s')>-1)RG.text2(this,{'tag':'scale','font':font,'size':size,'x':centerx-offset,'y':centery+(r*((i+1)/len)),'text':this.scale2.labels[i],'valign':'center','halign':centered?'center':'right',bounding:true,boundingFill:prop['chart.labels.axes.background'],boundingStroke:'rgba(0,0,0,0)'});if(axes.indexOf('e')>-1)RG.text2(this,{'tag':'scale','font':font,'size':size,'x':centerx+(r*((i+1)/len)),'y':centery+offset,'text':this.scale2.labels[i],'valign':centered?'center':'top','halign':'center',bounding:true,boundingFill:prop['chart.labels.axes.background'],boundingStroke:'rgba(0,0,0,0)'});if(axes.indexOf('w')>-1)RG.text2(this,{'tag':'scale','font':font,'size':size,'x':centerx-(r*((i+1)/len)),'y':centery+offset,'text':this.scale2.labels[i],'valign':centered?'center':'top','halign':'center',bounding:true,boundingFill:prop['chart.labels.axes.background'],boundingStroke:'rgba(0,0,0,0)'});}
|
57
|
+
if(prop['chart.labels.axes'].length>0&&prop['chart.scale.zerostart']){RG.text2(this,{'font':font,'size':size,'x':centerx,'y':centery,'text':RG.numberFormat(this,Number(this.scale2.min).toFixed(this.scale2.decimals),this.scale2.units_pre,this.scale2.units_post),'valign':'center','halign':'center','bounding':true,'boundingFill':prop['chart.labels.axes.background'],'boundingStroke':'rgba(0,0,0,0)','tag':'scale'});}
|
58
|
+
if(key&&key.length){RG.drawKey(this,key,prop['chart.colors']);}};this.drawCircularLabels=this.DrawCircularLabels=function(context,labels,font_face,font_size,r)
|
59
|
+
{var r=r+10,color=prop['chart.labels.color'];for(var i=0;i<labels.length;++i){var a=(360/labels.length)*(i+1)-(360/(labels.length*2));var a=a-90+(prop['chart.labels.position']=='edge'?((360/labels.length)/2):0);var x=ma.cos(a/(180/RG.PI))*r;var y=ma.sin(a/(180/RG.PI))*r;RG.Text2(this,{'color':color,'font':font_face,'size':font_size,'x':this.centerx+x,'y':this.centery+y,'text':String(labels[i]),'valign':'center','halign':((this.centerx+x)>this.centerx)?'left':'right','tag':'labels'});}};this.drawTick=this.DrawTick=function(x,y,color)
|
60
|
+
{var tickmarks=prop['chart.tickmarks'];var ticksize=prop['chart.ticksize'];co.strokeStyle=color;co.fillStyle=color;var prevLinewidth=co.lineWidth;co.lineWidth=1;if(tickmarks=='cross'){co.beginPath();co.moveTo(x+ticksize,y+ticksize);co.lineTo(x-ticksize,y-ticksize);co.stroke();co.beginPath();co.moveTo(x-ticksize,y+ticksize);co.lineTo(x+ticksize,y-ticksize);co.stroke();}else if(tickmarks=='circle'){co.beginPath();co.arc(x,y,ticksize,0,6.2830,false);co.fill();}else if(tickmarks=='square'){co.beginPath();co.fillRect(x-ticksize,y-ticksize,2*ticksize,2*ticksize);co.fill();}else if(tickmarks=='diamond'){co.beginPath();co.moveTo(x,y-ticksize);co.lineTo(x+ticksize,y);co.lineTo(x,y+ticksize);co.lineTo(x-ticksize,y);co.closePath();co.fill();}else if(tickmarks=='plus'){co.lineWidth=1;co.beginPath();co.moveTo(x,y-ticksize);co.lineTo(x,y+ticksize);co.moveTo(x-ticksize,y);co.lineTo(x+ticksize,y);co.stroke();}
|
61
|
+
co.lineWidth=prevLinewidth;};this.getShape=this.getPoint=function(e)
|
62
|
+
{var mouseXY=RG.getMouseXY(e);var mouseX=mouseXY[0];var mouseY=mouseXY[1];var overHotspot=false;var offset=prop['chart.tooltips.hotspot'];for(var i=0,len=this.coords.length;i<len;++i){var x=this.coords[i][0];var y=this.coords[i][1];var tooltip=this.coords[i][3];if(mouseX<(x+offset)&&mouseX>(x-offset)&&mouseY<(y+offset)&&mouseY>(y-offset)){var tooltip=RG.parseTooltipText(prop['chart.tooltips'],i);return{0:this,1:x,2:y,3:i,'object':this,'x':x,'y':y,'index':i,'tooltip':tooltip};}}};this.allowTooltips=this.AllowTooltips=function()
|
63
|
+
{RG.PreLoadTooltipImages(this);RG.InstallWindowMousedownTooltipListener(this);RG.InstallCanvasMousemoveTooltipListener(this);RG.InstallCanvasMouseupTooltipListener(this);};this.highlight=this.Highlight=function(shape)
|
64
|
+
{if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else{RG.Highlight.Point(this,shape);}};this.getObjectByXY=function(e)
|
65
|
+
{var mouseXY=RG.getMouseXY(e);var mouseX=mouseXY[0];var mouseY=mouseXY[1];var centerx=this.centerx;var centery=this.centery;var radius=this.radius;if(mouseX>(centerx-radius)&&mouseX<(centerx+radius)&&mouseY>(centery-radius)&&mouseY<(centery+radius)){return this;}};this.getRadius=function(value)
|
66
|
+
{var max=this.max;if(value<0||value>max){return null;}
|
67
|
+
var r=(value/max)*this.radius;return r;};this.parseColors=function()
|
68
|
+
{if(this.original_colors.length===0){this.original_colors['data']=RG.array_clone(this.data);this.original_colors['chart.highlight.stroke']=RG.arrayClone(prop['chart.highlight.stroke']);this.original_colors['chart.highlight.fill']=RG.arrayClone(prop['chart.highlight.fill']);this.original_colors['chart.colors.default']=RG.arrayClone(prop['chart.colors.default']);this.original_colors['chart.background.grid.color']=RG.arrayClone(prop['chart.background.grid.color']);this.original_colors['chart.background.color']=RG.arrayClone(prop['chart.background.color']);this.original_colors['chart.segment.highlight.stroke']=RG.arrayClone(prop['chart.segment.highlight.stroke']);this.original_colors['chart.segment.highlight.fill']=RG.arrayClone(prop['chart.segment.highlight.fill']);}
|
69
|
+
for(var i=0;i<this.data.length;i+=1){for(var j=0,len=this.data[i].length;j<len;j+=1){this.data[i][j][2]=this.parseSingleColorForGradient(this.data[i][j][2]);}}
|
70
|
+
prop['chart.highlight.stroke']=this.parseSingleColorForGradient(prop['chart.highlight.stroke']);prop['chart.highlight.fill']=this.parseSingleColorForGradient(prop['chart.highlight.fill']);prop['chart.colors.default']=this.parseSingleColorForGradient(prop['chart.colors.default']);prop['chart.background.grid.color']=this.parseSingleColorForGradient(prop['chart.background.grid.color']);prop['chart.background.color']=this.parseSingleColorForGradient(prop['chart.background.color']);prop['chart.segment.highlight.stroke']=this.parseSingleColorForGradient(prop['chart.segment.highlight.stroke']);prop['chart.segment.highlight.fill']=this.parseSingleColorForGradient(prop['chart.segment.highlight.fill']);};this.reset=function()
|
71
|
+
{};this.parseSingleColorForGradient=function(color)
|
72
|
+
{if(!color||typeof color!='string'){return color;}
|
73
|
+
if(color.match(/^gradient\((.*)\)$/i)){var parts=RegExp.$1.split(':');var grad=co.createRadialGradient(this.centerx,this.centery,0,this.centerx,this.centery,this.radius);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}
|
74
|
+
return grad?grad:color;};this.interactiveKeyHighlight=function(index)
|
75
|
+
{if(this.coords2&&this.coords2[index]&&this.coords2[index].length){this.coords2[index].forEach(function(value,idx,arr)
|
76
|
+
{co.beginPath();co.fillStyle=prop['chart.key.interactive.highlight.chart.fill'];co.arc(value[0],value[1],prop['chart.ticksize']+2,0,RG.TWOPI,false);co.fill();});}};this.on=function(type,func)
|
77
|
+
{if(type.substr(0,2)!=='on'){type='on'+type;}
|
78
|
+
if(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}
|
79
|
+
return this;};this.resetColorsToOriginalValues=function()
|
80
|
+
{for(var i=0,len=this.original_colors['data'].length;i<len;++i){for(var j=0,len2=this.original_colors['data'][i].length;j<len2;++j){this.data[i][j][2]=RG.array_clone(this.original_colors['data'][i][j][2]);}}};this.firstDrawFunc=function()
|
81
|
+
{};RG.att(ca);RG.Register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};
|
@@ -0,0 +1,169 @@
|
|
1
|
+
|
2
|
+
RGraph=window.RGraph||{isRGraph:true};RGraph.Scatter=function(conf)
|
3
|
+
{if(typeof conf==='object'&&typeof conf.data==='object'&&typeof conf.id==='string'){var parseConfObjectForOptions=true;this.data=new Array(conf.data.length);this.data=RGraph.arrayClone(conf.data);if(typeof conf.data==='object'&&typeof conf.data[0]==='object'&&(typeof conf.data[0][0]==='number'||typeof conf.data[0][0]==='string')){var tmp=RGraph.arrayClone(conf.data);conf.data=new Array();conf.data[0]=RGraph.arrayClone(tmp);this.data=RGraph.arrayClone(conf.data);}}else{var conf={id:conf};conf.data=arguments[1];this.data=[];if(arguments[1][0]&&arguments[1][0][0]&&typeof arguments[1][0][0]=='object'){for(var i=0;i<arguments[1].length;++i){this.data[i]=RGraph.arrayClone(arguments[1][i]);}}else{for(var i=1;i<arguments.length;++i){this.data[i-1]=RGraph.arrayClone(arguments[i]);}}}
|
4
|
+
for(var i=0,len=this.data.length;i<len;++i){for(var j=0,len2=this.data[i].length;j<len2;++j){if(typeof this.data[i][j]==='object'&&!RGraph.isNull(this.data[i][j])&&typeof this.data[i][j][0]==='string'){if(this.data[i][j][0].match(/^[.0-9]+$/)){this.data[i][j][0]=parseFloat(this.data[i][j][0]);}else if(this.data[i][j][0]===''){this.data[i][j][0]=0;}}
|
5
|
+
if(typeof this.data[i][j]==='object'&&!RGraph.isNull(this.data[i][j])&&typeof this.data[i][j][1]==='string'){if(this.data[i][j][1].match(/[.0-9]+/)){this.data[i][j][1]=parseFloat(this.data[i][j][1]);}else if(this.data[i][j][1]===''){this.data[i][j][1]=0;}}}}
|
6
|
+
this.id=conf.id;this.canvas=document.getElementById(this.id);this.canvas.__object__=this;this.context=this.canvas.getContext?this.canvas.getContext('2d'):null;this.max=0;this.coords=[];this.type='scatter';this.isRGraph=true;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.colorsParsed=false;this.coordsText=[];this.original_colors=[];this.firstDraw=true;this.properties={'chart.background.barcolor1':'rgba(0,0,0,0)','chart.background.barcolor2':'rgba(0,0,0,0)','chart.background.grid':true,'chart.background.grid.width':1,'chart.background.grid.color':'#ddd','chart.background.grid.hsize':20,'chart.background.grid.vsize':20,'chart.background.hbars':null,'chart.background.vbars':null,'chart.background.grid.vlines':true,'chart.background.grid.hlines':true,'chart.background.grid.border':true,'chart.background.grid.autofit':true,'chart.background.grid.autofit.align':true,'chart.background.grid.autofit.numhlines':5,'chart.background.grid.autofit.numvlines':20,'chart.background.image':null,'chart.background.image.stretch':true,'chart.background.image.x':null,'chart.background.image.y':null,'chart.background.image.w':null,'chart.background.image.h':null,'chart.background.image.align':null,'chart.background.color':null,'chart.text.size':12,'chart.text.angle':0,'chart.text.color':'black','chart.text.font':'Segoe UI, Arial, Verdana, sans-serif','chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':true,'chart.tooltips':[],'chart.tooltips.effect':'fade','chart.tooltips.event':'onmousemove','chart.tooltips.hotspot':3,'chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.highlight':true,'chart.tooltips.coords.page':false,'chart.units.pre':'','chart.units.post':'','chart.numyticks':10,'chart.tickmarks':'cross','chart.tickmarks.image.halign':'center','chart.tickmarks.image.valign':'center','chart.tickmarks.image.offsetx':0,'chart.tickmarks.image.offsety':0,'chart.ticksize':5,'chart.numxticks':true,'chart.xaxis':true,'chart.gutter.left':25,'chart.gutter.right':25,'chart.gutter.top':25,'chart.gutter.bottom':30,'chart.colors.bubble.graduated':true,'chart.xmin':0,'chart.xmax':0,'chart.ymax':null,'chart.ymin':0,'chart.scale.decimals':0,'chart.scale.point':'.','chart.scale.thousand':',','chart.scale.zerostart':true,'chart.title':'','chart.title.background':null,'chart.title.hpos':null,'chart.title.vpos':null,'chart.title.bold':true,'chart.title.font':null,'chart.title.xaxis':'','chart.title.xaxis.bold':true,'chart.title.xaxis.size':null,'chart.title.xaxis.font':null,'chart.title.xaxis.color':null,'chart.title.yaxis':'','chart.title.yaxis.bold':true,'chart.title.yaxis.size':null,'chart.title.yaxis.font':null,'chart.title.yaxis.color':null,'chart.title.xaxis.pos':null,'chart.title.yaxis.pos':null,'chart.title.yaxis.x':null,'chart.title.yaxis.y':null,'chart.title.xaxis.x':null,'chart.title.xaxis.y':null,'chart.title.x':null,'chart.title.y':null,'chart.title.halign':null,'chart.title.valign':null,'chart.labels':[],'chart.labels.bold':false,'chart.labels.color':null,'chart.labels.ingraph':null,'chart.labels.above':false,'chart.labels.above.size':8,'chart.labels.above.decimals':0,'chart.labels.offsetx':0,'chart.labels.offsety':0,'chart.ylabels.offsetx':0,'chart.ylabels.offsety':0,'chart.ylabels':true,'chart.ylabels.count':5,'chart.ylabels.invert':false,'chart.ylabels.specific':null,'chart.ylabels.inside':false,'chart.contextmenu':null,'chart.defaultcolor':'black','chart.xaxispos':'bottom','chart.yaxispos':'left','chart.crosshairs':false,'chart.crosshairs.color':'#333','chart.crosshairs.linewidth':1,'chart.crosshairs.coords':false,'chart.crosshairs.coords.fixed':true,'chart.crosshairs.coords.fadeout':false,'chart.crosshairs.coords.labels.x':'X','chart.crosshairs.coords.labels.y':'Y','chart.crosshairs.hline':true,'chart.crosshairs.vline':true,'chart.annotatable':false,'chart.annotate.color':'black','chart.line':false,'chart.line.linewidth':1,'chart.line.colors':['green','red'],'chart.line.shadow.color':'rgba(0,0,0,0)','chart.line.shadow.blur':2,'chart.line.shadow.offsetx':3,'chart.line.shadow.offsety':3,'chart.line.stepped':false,'chart.line.visible':true,'chart.noaxes':false,'chart.noyaxis':false,'chart.key':null,'chart.key.background':'white','chart.key.position':'graph','chart.key.halign':'right','chart.key.shadow':false,'chart.key.shadow.color':'#666','chart.key.shadow.blur':3,'chart.key.shadow.offsetx':2,'chart.key.shadow.offsety':2,'chart.key.position.gutter.boxed':false,'chart.key.position.x':null,'chart.key.position.y':null,'chart.key.interactive':false,'chart.key.interactive.highlight.chart.fill':'rgba(255,0,0,0.9)','chart.key.interactive.highlight.label':'rgba(255,0,0,0.2)','chart.key.color.shape':'square','chart.key.rounded':true,'chart.key.linewidth':1,'chart.key.colors':null,'chart.key.text.color':'black','chart.axis.color':'black','chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.hdir':'right','chart.zoom.vdir':'down','chart.zoom.frames':25,'chart.zoom.delay':16.666,'chart.zoom.shadow':true,'chart.zoom.background':true,'chart.zoom.action':'zoom','chart.boxplot.width':1,'chart.boxplot.capped':true,'chart.resizable':false,'chart.resize.handle.background':null,'chart.xmin':0,'chart.labels.specific.align':'left','chart.xscale':false,'chart.xscale.units.pre':'','chart.xscale.units.post':'','chart.xscale.numlabels':10,'chart.xscale.formatter':null,'chart.xscale.decimals':0,'chart.xscale.thousand':',','chart.xscale.point':'.','chart.noendxtick':false,'chart.noendytick':true,'chart.events.mousemove':null,'chart.events.click':null,'chart.highlight.stroke':'rgba(0,0,0,0)','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.clearto':'rgba(0,0,0,0)','chart.animation.trace':false,'chart.animation.trace.clip':1}
|
7
|
+
for(var i=0;i<this.data.length;++i){for(var j=0;j<this.data[i].length;++j){if(RGraph.isNull(this.data[i][j])){this.data[i][j]=[];}
|
8
|
+
if(this.data[i][j]&&typeof(this.data[i][j][0])=='string'){this.data[i][j][0]=RGraph.parseDate(this.data[i][j][0]);}}}
|
9
|
+
this.data_arr=[];for(var i=0;i<this.data.length;++i){for(var j=0;j<this.data[i].length;++j){this.data_arr.push(this.data[i][j]);}}
|
10
|
+
for(var i=0;i<this.data_arr.length;++i){this['$'+i]={}}
|
11
|
+
if(!this.canvas){alert('[SCATTER] No canvas support');return;}
|
12
|
+
if(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}
|
13
|
+
var RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math
|
14
|
+
if(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}
|
15
|
+
this.set=this.Set=function(name)
|
16
|
+
{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}
|
17
|
+
if(name.substr(0,6)!='chart.'){name='chart.'+name;}
|
18
|
+
while(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}
|
19
|
+
if(name=='chart.xticks'){name=='chart.numxticks';}
|
20
|
+
if(name=='chart.line.colors'){prop['chart.colors']=value;}
|
21
|
+
if(name=='chart.tooltip.hotspot'){name='chart.tooltips.hotspot';}
|
22
|
+
if(name=='chart.yaxispos'&&value!='left'&&value!='right'){alert("[SCATTER] chart.yaxispos should be left or right. You've set it to: '"+value+"' Changing it to left");value='left';}
|
23
|
+
if(name=='chart.xaxispos'){if(value!='bottom'&&value!='center'){alert('[SCATTER] ('+this.id+') chart.xaxispos should be center or bottom. Tried to set it to: '+value+' Changing it to center');value='center';}}
|
24
|
+
if(name=='chart.noxaxis'){name='chart.xaxis';value=!value;}
|
25
|
+
prop[name.toLowerCase()]=value;return this;};this.get=this.Get=function(name)
|
26
|
+
{if(name.substr(0,6)!='chart.'){name='chart.'+name;}
|
27
|
+
while(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}
|
28
|
+
return prop[name];};this.draw=this.Draw=function()
|
29
|
+
{if(typeof prop['chart.background.image']==='string'){RG.DrawBackgroundImage(this);}
|
30
|
+
RG.fireCustomEvent(this,'onbeforedraw');if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}
|
31
|
+
this.coordsText=[];this.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];this.hasTooltips=false;var overHotspot=false;this.coords=[];if(typeof(prop['chart.xmin'])=='string')prop['chart.xmin']=RG.parseDate(prop['chart.xmin']);if(typeof(prop['chart.xmax'])=='string')prop['chart.xmax']=RG.parseDate(prop['chart.xmax']);if(!RGraph.ISOLD){this.Set('chart.tooltips',[]);for(var i=0,len=this.data.length;i<len;i+=1){for(var j=0,len2=this.data[i].length;j<len2;j+=1){if(this.data[i][j]&&this.data[i][j][3]){prop['chart.tooltips'].push(this.data[i][j][3]);this.hasTooltips=true;}else{prop['chart.tooltips'].push(null);}}}}
|
32
|
+
this.max=0;if(typeof prop['chart.ymax']==='number'){this.max=prop['chart.ymax'];this.min=prop['chart.ymin']?prop['chart.ymin']:0;this.scale2=RG.getScale2(this,{'max':this.max,'min':this.min,'strict':true,'scale.thousand':prop['chart.scale.thousand'],'scale.point':prop['chart.scale.point'],'scale.decimals':prop['chart.scale.decimals'],'ylabels.count':prop['chart.ylabels.count'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post']});this.max=this.scale2.max;this.min=this.scale2.min;var decimals=prop['chart.scale.decimals'];}else{var i=0;var j=0;for(i=0,len=this.data.length;i<len;i+=1){for(j=0,len2=this.data[i].length;j<len2;j+=1){if(!RG.isNull(this.data[i][j])&&this.data[i][j][1]!=null){this.max=Math.max(this.max,typeof(this.data[i][j][1])=='object'?RG.array_max(this.data[i][j][1]):Math.abs(this.data[i][j][1]));}}}
|
33
|
+
this.min=prop['chart.ymin']?prop['chart.ymin']:0;this.scale2=RG.getScale2(this,{'max':this.max,'min':this.min,'scale.thousand':prop['chart.scale.thousand'],'scale.point':prop['chart.scale.point'],'scale.decimals':prop['chart.scale.decimals'],'ylabels.count':prop['chart.ylabels.count'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post']});this.max=this.scale2.max;this.min=this.scale2.min;}
|
34
|
+
this.grapharea=ca.height-this.gutterTop-this.gutterBottom;RG.background.Draw(this);if(prop['chart.background.hbars']&&prop['chart.background.hbars'].length){RG.DrawBars(this);}
|
35
|
+
if(prop['chart.background.vbars']&&prop['chart.background.vbars'].length){this.DrawVBars();}
|
36
|
+
if(!prop['chart.noaxes']){this.DrawAxes();}
|
37
|
+
this.DrawLabels();if(prop['chart.animation.trace']){co.save();co.beginPath();co.rect(0,0,ca.width*prop['chart.animation.trace.clip'],ca.height);co.clip();}
|
38
|
+
for(i=0;i<this.data.length;++i){this.DrawMarks(i);co.shadowColor=prop['chart.line.shadow.color'];co.shadowOffsetX=prop['chart.line.shadow.offsetx'];co.shadowOffsetY=prop['chart.line.shadow.offsety'];co.shadowBlur=prop['chart.line.shadow.blur'];this.DrawLine(i);RG.NoShadow(this);}
|
39
|
+
if(prop['chart.line']){for(var i=0,len=this.data.length;i<len;i+=1){this.DrawMarks(i);}}
|
40
|
+
if(prop['chart.animation.trace']){co.restore();}
|
41
|
+
if(prop['chart.contextmenu']){RG.ShowContext(this);}
|
42
|
+
if(prop['chart.key']&&prop['chart.key'].length){RG.DrawKey(this,prop['chart.key'],prop['chart.line.colors']);}
|
43
|
+
if(prop['chart.labels.above']){this.DrawAboveLabels();}
|
44
|
+
this.DrawInGraphLabels(this);if(prop['chart.resizable']){RG.AllowResizing(this);}
|
45
|
+
RG.InstallEventListeners(this);if(this.firstDraw){RG.fireCustomEvent(this,'onfirstdraw');this.firstDraw=false;this.firstDrawFunc();}
|
46
|
+
RG.FireCustomEvent(this,'ondraw');return this;}
|
47
|
+
this.drawAxes=this.DrawAxes=function()
|
48
|
+
{var graphHeight=ca.height-this.gutterTop-this.gutterBottom;co.beginPath();co.strokeStyle=prop['chart.axis.color'];co.lineWidth=(prop['chart.axis.linewidth']||1)+0.001;if(prop['chart.noyaxis']==false){if(prop['chart.yaxispos']=='left'){co.moveTo(this.gutterLeft,this.gutterTop);co.lineTo(this.gutterLeft,ca.height-this.gutterBottom);}else{co.moveTo(ca.width-this.gutterRight,this.gutterTop);co.lineTo(ca.width-this.gutterRight,ca.height-this.gutterBottom);}}
|
49
|
+
if(prop['chart.xaxis']){if(prop['chart.xaxispos']=='center'){co.moveTo(this.gutterLeft,Math.round(this.gutterTop+((ca.height-this.gutterTop-this.gutterBottom)/2)));co.lineTo(ca.width-this.gutterRight,Math.round(this.gutterTop+((ca.height-this.gutterTop-this.gutterBottom)/2)));}else{co.moveTo(this.gutterLeft,ca.height-this.gutterBottom);co.lineTo(ca.width-this.gutterRight,ca.height-this.gutterBottom);}}
|
50
|
+
if(prop['chart.noyaxis']==false){var numyticks=prop['chart.numyticks'];for(i=0;i<numyticks;++i){var y=((ca.height-this.gutterTop-this.gutterBottom)/numyticks)*i;y=y+this.gutterTop;if(prop['chart.xaxispos']=='center'&&i==(numyticks/2)){continue;}
|
51
|
+
if(prop['chart.yaxispos']=='left'){co.moveTo(this.gutterLeft,Math.round(y));co.lineTo(this.gutterLeft-3,Math.round(y));}else{co.moveTo(ca.width-this.gutterRight+3,Math.round(y));co.lineTo(ca.width-this.gutterRight,Math.round(y));}}
|
52
|
+
if(prop['chart.numyticks']>0){if(prop['chart.xaxispos']=='center'&&prop['chart.yaxispos']=='left'){co.moveTo(this.gutterLeft,Math.round(ca.height-this.gutterBottom));co.lineTo(this.gutterLeft-3,Math.round(ca.height-this.gutterBottom));}else if(prop['chart.xaxispos']=='center'){co.moveTo(ca.width-this.gutterRight+3,Math.round(ca.height-this.gutterBottom));co.lineTo(ca.width-this.gutterRight,Math.round(ca.height-this.gutterBottom));}}
|
53
|
+
if(prop['chart.xaxis']==false&&prop['chart.yaxispos']=='left'){co.moveTo(this.gutterLeft,Math.round(ca.height-this.gutterBottom));co.lineTo(this.gutterLeft-3,Math.round(ca.height-this.gutterBottom));}else if(prop['chart.xaxis']==false&&prop['chart.yaxispos']=='right'){co.moveTo(ca.width-this.gutterRight,Math.round(ca.height-this.gutterBottom));co.lineTo(ca.width-this.gutterRight+3,Math.round(ca.height-this.gutterBottom));}}
|
54
|
+
if(prop['chart.numxticks']>0&&prop['chart.xaxis']){var x=0;var y=(prop['chart.xaxispos']=='center')?this.gutterTop+(this.grapharea/2):(ca.height-this.gutterBottom);this.xTickGap=(prop['chart.labels']&&prop['chart.labels'].length)?((ca.width-this.gutterLeft-this.gutterRight)/prop['chart.labels'].length):(ca.width-this.gutterLeft-this.gutterRight)/10;if(typeof(prop['chart.numxticks'])=='number'){this.xTickGap=(ca.width-this.gutterLeft-this.gutterRight)/prop['chart.numxticks'];}
|
55
|
+
for(x=(this.gutterLeft+(prop['chart.yaxispos']=='left'&&prop['chart.noyaxis']==false?this.xTickGap:0));x<=(ca.width-this.gutterRight-(prop['chart.yaxispos']=='left'||prop['chart.noyaxis']==true?-1:1));x+=this.xTickGap){if(prop['chart.yaxispos']=='left'&&prop['chart.noendxtick']==true&&x==(ca.width-this.gutterRight)){continue;}else if(prop['chart.yaxispos']=='right'&&prop['chart.noendxtick']==true&&x==this.gutterLeft){continue;}
|
56
|
+
co.moveTo(Math.round(x),y-(prop['chart.xaxispos']=='center'?3:0));co.lineTo(Math.round(x),y+3);}}
|
57
|
+
co.stroke();co.lineWidth=1;};this.drawLabels=this.DrawLabels=function()
|
58
|
+
{co.fillStyle=prop['chart.text.color'];var font=prop['chart.text.font'],xMin=prop['chart.xmin'],xMax=prop['chart.xmax'],yMax=this.scale2.max,yMin=prop['chart.ymin']?prop['chart.ymin']:0,text_size=prop['chart.text.size'],units_pre=prop['chart.units.pre'],units_post=prop['chart.units.post'],numYLabels=prop['chart.ylabels.count'],invert=prop['chart.ylabels.invert'],inside=prop['chart.ylabels.inside'],context=co,canvas=ca,boxed=false,offsetx=prop['chart.ylabels.offsetx'],offsety=prop['chart.ylabels.offsety']
|
59
|
+
this.halfTextHeight=text_size/2;this.halfGraphHeight=(ca.height-this.gutterTop-this.gutterBottom)/2;if(prop['chart.ylabels']){var xPos=prop['chart.yaxispos']=='left'?this.gutterLeft-5:ca.width-this.gutterRight+5;var align=prop['chart.yaxispos']=='right'?'left':'right';if(inside){if(prop['chart.yaxispos']=='left'){xPos=prop['chart.gutter.left']+5;align='left';boxed=true;}else{xPos=ca.width-prop['chart.gutter.right']-5;align='right';boxed=true;}}
|
60
|
+
if(prop['chart.xaxispos']=='center'){if(typeof(prop['chart.ylabels.specific'])=='object'&&prop['chart.ylabels.specific']!=null&&prop['chart.ylabels.specific'].length){var labels=prop['chart.ylabels.specific'];if(prop['chart.ymin']>0){labels=[];for(var i=0;i<(prop['chart.ylabels.specific'].length-1);++i){labels.push(prop['chart.ylabels.specific'][i]);}}
|
61
|
+
for(var i=0;i<labels.length;++i){var y=this.gutterTop+(i*(this.grapharea/(labels.length*2)));RG.Text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':y+offsety,'text':labels[i],'valign':'center','halign':align,'bounding':boxed,'tag':'labels.specific'});}
|
62
|
+
var reversed_labels=RG.array_reverse(labels);for(var i=0;i<reversed_labels.length;++i){var y=this.gutterTop+(this.grapharea/2)+((i+1)*(this.grapharea/(labels.length*2)));RG.Text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':y+offsety,'text':reversed_labels[i],'valign':'center','halign':align,'bounding':boxed,'tag':'labels.specific'});}
|
63
|
+
if(prop['chart.ymin']!=0){RG.Text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':(this.grapharea/2)+this.gutterTop+offsety,'text':prop['chart.ylabels.specific'][prop['chart.ylabels.specific'].length-1],'valign':'center','halign':align,'bounding':boxed,'tag':'labels.specific'});}}
|
64
|
+
if(!prop['chart.ylabels.specific']&&typeof numYLabels=='number'){for(var i=0,len=this.scale2.labels.length;i<len;i+=1){if(!invert){RG.Text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':this.gutterTop+this.halfGraphHeight-(((i+1)/numYLabels)*this.halfGraphHeight)+offsety,'valign':'center','halign':align,'bounding':boxed,'boundingFill':'white','text':this.scale2.labels[i],'tag':'scale'});}else{RG.Text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':this.gutterTop+this.halfGraphHeight-((i/numYLabels)*this.halfGraphHeight)+offsety,'valign':'center','halign':align,'bounding':boxed,'boundingFill':'white','text':this.scale2.labels[this.scale2.labels.length-(i+1)],'tag':'scale'});}}
|
65
|
+
for(var i=0,len=this.scale2.labels.length;i<len;i+=1){if(!invert){RG.Text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':this.gutterTop+this.halfGraphHeight+this.halfGraphHeight-((i/numYLabels)*this.halfGraphHeight)+offsety,'valign':'center','halign':align,'bounding':boxed,'boundingFill':'white','text':'-'+this.scale2.labels[len-(i+1)],'tag':'scale'});}else{if(i==(len-1)&&invert){continue;}
|
66
|
+
RG.Text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':this.gutterTop+this.halfGraphHeight+this.halfGraphHeight-(((i+1)/numYLabels)*this.halfGraphHeight)+offsety,'valign':'center','halign':align,'bounding':boxed,'boundingFill':'white','text':'-'+this.scale2.labels[i],'tag':'scale'});}}
|
67
|
+
if(!invert&&(yMin>0||prop['chart.scale.zerostart'])){RG.text2(this,{font:font,size:text_size,x:xPos+offsetx,y:this.gutterTop+this.halfGraphHeight+offsety,valign:'center',halign:align,bounding:boxed,boundingFill:'white',text:RG.numberFormat(this,yMin.toFixed(this.scale2.min===0?0:prop['chart.scale.decimals']),units_pre,units_post),tag:'scale'});}
|
68
|
+
if(invert){RG.text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':this.gutterTop+offsety,'valign':'center','halign':align,'bounding':boxed,'boundingFill':'white','text':RG.number_format(this,yMin.toFixed(this.scale2.min===0?0:prop['chart.scale.decimals']),units_pre,units_post),'tag':'scale'});RG.text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':this.gutterTop+(this.halfGraphHeight*2)+offsety,'valign':'center','halign':align,'bounding':boxed,'boundingFill':'white','text':'-'+RG.numberFormat(this,yMin.toFixed(this.scale2.min===0?0:prop['chart.scale.decimals']),units_pre,units_post),'tag':'scale'});}}}else{var xPos=prop['chart.yaxispos']=='left'?this.gutterLeft-5:ca.width-this.gutterRight+5;var align=prop['chart.yaxispos']=='right'?'left':'right';if(inside){if(prop['chart.yaxispos']=='left'){xPos=prop['chart.gutter.left']+5;align='left';boxed=true;}else{xPos=ca.width-this.gutterRight-5;align='right';boxed=true;}}
|
69
|
+
if(typeof prop['chart.ylabels.specific']=='object'&&prop['chart.ylabels.specific']){var labels=prop['chart.ylabels.specific'];if(prop['chart.ymin']>9999){labels=[];for(var i=0;i<(prop['chart.ylabels.specific'].length-1);++i){labels.push(prop['chart.ylabels.specific'][i]);}}
|
70
|
+
for(var i=0,len=labels.length;i<len;i+=1){var y=this.gutterTop+(i*(this.grapharea/(len-1)));RG.Text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':y+offsety,'text':labels[i],'halign':align,'valign':'center','bounding':boxed,'tag':'scale'});}}else{if(typeof(numYLabels)=='number'){if(invert){for(var i=0;i<numYLabels;++i){var interval=(ca.height-this.gutterTop-this.gutterBottom)/numYLabels;RG.Text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':this.gutterTop+((i+1)*interval)+offsety,'valign':'center','halign':align,'bounding':boxed,'boundingFill':'white','text':this.scale2.labels[i],'tag':'scale'});}
|
71
|
+
if(!prop['chart.xaxis']&&!prop['chart.ymin']){RG.Text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':this.gutterTop+offsety,'valign':'center','halign':align,'bounding':boxed,'boundingFill':'white','text':RG.numberFormat(this,(this.min).toFixed(this.scale2.min===0?0:prop['chart.scale.decimals']),units_pre,units_post),'tag':'scale'});}}else{for(var i=0,len=this.scale2.labels.length;i<len;i+=1){RG.Text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':this.gutterTop+this.grapharea-(((i+1)/this.scale2.labels.length)*this.grapharea)+offsety,'valign':'center','halign':align,'bounding':boxed,'boundingFill':'white','text':this.scale2.labels[i],'tag':'scale'});}
|
72
|
+
if(!prop['chart.xaxis']&&prop['chart.ymin']==0){RG.text2(this,{font:font,size:text_size,x:xPos+offsetx,y:ca.height-this.gutterBottom+offsety,valign:'center',halign:align,boundin:boxed,boundingFill:'white',text:RG.numberFormat(this,(0).toFixed(this.scale2.min===0?0:prop['chart.scale.decimals']),units_pre,units_post),tag:'scale'});}}}
|
73
|
+
if((prop['chart.ymin']||prop['chart.scale.zerostart'])&&!invert){RG.text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':ca.height-this.gutterBottom+offsety,'valign':'center','halign':align,'bounding':boxed,'boundingFill':'white','text':RG.numberFormat(this,prop['chart.ymin'].toFixed(this.scale2.min===0?0:prop['chart.scale.decimals']),units_pre,units_post),'tag':'scale'});}else if(invert){RG.text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':this.gutterTop+offsety,'valign':'center','halign':align,'bounding':boxed,'boundingFill':'white','text':RG.numberFormat(this,prop['chart.ymin'].toFixed(this.scale2.min===0?0:prop['chart.scale.decimals']),units_pre,units_post),'tag':'scale'});}}}}
|
74
|
+
if(prop['chart.xscale']){var numXLabels=prop['chart.xscale.numlabels'],y=ca.height-this.gutterBottom+5+(text_size/2),units_pre_x=prop['chart.xscale.units.pre'],units_post_x=prop['chart.xscale.units.post'],decimals=prop['chart.xscale.decimals'],point=prop['chart.xscale.point'],thousand=prop['chart.xscale.thousand'],color=prop['chart.labels.color'],bold=prop['chart.labels.bold'],offsetx=prop['chart.labels.offsetx'],offsety=prop['chart.labels.offsety']
|
75
|
+
if(!prop['chart.xmax']){var xmax=0;var xmin=prop['chart.xmin'];for(var ds=0,len=this.data.length;ds<len;ds+=1){for(var point=0,len2=this.data[ds].length;point<len2;point+=1){xmax=Math.max(xmax,this.data[ds][point][0]);}}}else{xmax=prop['chart.xmax'];xmin=prop['chart.xmin']}
|
76
|
+
this.xscale2=RG.getScale2(this,{'max':xmax,'min':xmin,'scale.decimals':decimals,'scale.point':point,'scale.thousand':thousand,'units.pre':units_pre_x,'units.post':units_post_x,'ylabels.count':numXLabels,'strict':true});this.Set('chart.xmax',this.xscale2.max);var interval=(ca.width-this.gutterLeft-this.gutterRight)/this.xscale2.labels.length;for(var i=0,len=this.xscale2.labels.length;i<len;i+=1){var num=((prop['chart.xmax']-prop['chart.xmin'])*((i+1)/numXLabels))+(xmin||0),x=this.gutterLeft+((i+1)*interval),text=typeof prop['chart.xscale.formatter']==='function'?String(prop['chart.xscale.formatter'](this,num)):this.xscale2.labels[i];RG.text2(this,{'color':color,'font':font,'size':text_size,'bold':bold,'x':x+offsetx,'y':y+offsety,'valign':'center','halign':'center','text':text,'tag':'xscale'});}
|
77
|
+
var text=typeof prop['chart.xscale.formatter']==='function'?String(prop['chart.xscale.formatter'](this,prop['chart.xmin'])):String(prop['chart.xmin']);RG.text2(this,{'color':color,'font':font,'size':text_size,'bold':bold,'x':this.gutterLeft+offsetx,'y':y+offsety,'valign':'center','halign':'center','text':text,'tag':'xscale'});}else{var graphArea=ca.width-this.gutterLeft-this.gutterRight;var xInterval=graphArea/prop['chart.labels'].length;var xPos=this.gutterLeft;var yPos=(ca.height-this.gutterBottom)+3;var labels=prop['chart.labels'];var color=prop['chart.labels.color'];var bold=prop['chart.labels.bold'];var offsetx=prop['chart.labels.offsetx'];var offsety=prop['chart.labels.offsety'];var angle=0;var valign='top';var halign='center';if(prop['chart.text.angle']>0){angle=-1*prop['chart.text.angle'];valign='center';halign='right';yPos+=10;}
|
78
|
+
for(i=0;i<labels.length;++i){if(typeof(labels[i])=='object'){if(prop['chart.labels.specific.align']=='center'){var rightEdge=0;if(labels[i+1]&&labels[i+1][1]){rightEdge=labels[i+1][1];}else{rightEdge=prop['chart.xmax'];}
|
79
|
+
var offset=(this.getXCoord(rightEdge)-this.getXCoord(labels[i][1]))/2;}else{var offset=5;}
|
80
|
+
RG.text2(this,{'color':color,'font':font,'size':prop['chart.text.size'],'bold':bold,'x':this.getXCoord(labels[i][1])+offset+offsetx,'y':yPos+offsety,'valign':valign,'halign':angle!=0?'right':(prop['chart.labels.specific.align']=='center'?'center':'left'),'text':String(labels[i][0]),'angle':angle,'marker':false,'tag':'labels.specific'});co.beginPath();co.strokeStyle='#bbb';co.moveTo(ma.round(this.gutterLeft+(graphArea*((labels[i][1]-xMin)/(prop['chart.xmax']-xMin)))),ca.height-this.gutterBottom);co.lineTo(ma.round(this.gutterLeft+(graphArea*((labels[i][1]-xMin)/(prop['chart.xmax']-xMin)))),ca.height-this.gutterBottom+20);co.stroke();}else{RG.text2(this,{'color':color,'font':font,'size':prop['chart.text.size'],'bold':bold,'x':xPos+(xInterval/2)+offsetx,'y':yPos+offsety,'valign':valign,'halign':halign,'text':String(labels[i]),'angle':angle,'tag':'labels'});}
|
81
|
+
xPos+=xInterval;}
|
82
|
+
if(typeof(labels[0])=='object'){co.beginPath();co.strokeStyle='#bbb';co.moveTo(this.gutterLeft+graphArea,ca.height-this.gutterBottom);co.lineTo(this.gutterLeft+graphArea,ca.height-this.gutterBottom+20);co.stroke();}}};this.drawMarks=this.DrawMarks=function(i)
|
83
|
+
{this.coords[i]=[];var xmax=prop['chart.xmax'];var default_color=prop['chart.defaultcolor'];for(var j=0,len=this.data[i].length;j<len;j+=1){var data_points=this.data[i];if(RG.isNull(data_points[j])){continue;}
|
84
|
+
var xCoord=data_points[j][0];var yCoord=data_points[j][1];var color=data_points[j][2]?data_points[j][2]:default_color;var tooltip=(data_points[j]&&data_points[j][3])?data_points[j][3]:null;this.DrawMark(i,xCoord,yCoord,xmax,this.scale2.max,color,tooltip,this.coords[i],data_points,j);}};this.drawMark=this.DrawMark=function(data_set_index,x,y,xMax,yMax,color,tooltip,coords,data,data_index)
|
85
|
+
{var tickmarks=prop['chart.tickmarks'];var tickSize=prop['chart.ticksize'];var xMin=prop['chart.xmin'];var x=((x-xMin)/(xMax-xMin))*(ca.width-this.gutterLeft-this.gutterRight);var originalX=x;var originalY=y;if(tickmarks&&typeof(tickmarks)=='object'){tickmarks=tickmarks[data_set_index];}
|
86
|
+
if(typeof(tickSize)=='object'){var tickSize=tickSize[data_set_index];var halfTickSize=tickSize/2;}else{var halfTickSize=tickSize/2;}
|
87
|
+
if(y&&typeof(y)=='object'&&typeof(y[0])=='number'&&typeof(y[1])=='number'&&typeof(y[2])=='number'&&typeof(y[3])=='number'&&typeof(y[4])=='number'){this.Set('chart.boxplot',true);var y0=this.getYCoord(y[0]);var y1=this.getYCoord(y[1]);var y2=this.getYCoord(y[2]);var y3=this.getYCoord(y[3]);var y4=this.getYCoord(y[4]);var col1=y[5];var col2=y[6];var boxWidth=typeof(y[7])=='number'?y[7]:prop['chart.boxplot.width'];}else{var yCoord=this.getYCoord(y);}
|
88
|
+
x+=this.gutterLeft;co.beginPath();co.strokeStyle=color;if(prop['chart.boxplot']){boxWidth=(boxWidth/prop['chart.xmax'])*(ca.width-this.gutterLeft-this.gutterRight);var halfBoxWidth=boxWidth/2;if(prop['chart.line.visible']){co.beginPath();co.strokeRect(x-halfBoxWidth,y1,boxWidth,y3-y1);if(col1){co.fillStyle=col1;co.fillRect(x-halfBoxWidth,y1,boxWidth,y2-y1);}
|
89
|
+
if(col2){co.fillStyle=col2;co.fillRect(x-halfBoxWidth,y2,boxWidth,y3-y2);}
|
90
|
+
co.stroke();co.beginPath();if(prop['chart.boxplot.capped']){co.moveTo(x-halfBoxWidth,Math.round(y0));co.lineTo(x+halfBoxWidth,Math.round(y0));}
|
91
|
+
co.moveTo(Math.round(x),y0);co.lineTo(Math.round(x),y1);if(prop['chart.boxplot.capped']){co.moveTo(x-halfBoxWidth,Math.round(y4));co.lineTo(x+halfBoxWidth,Math.round(y4));}
|
92
|
+
co.moveTo(Math.round(x),y4);co.lineTo(Math.round(x),y3);co.stroke();}}
|
93
|
+
if(prop['chart.line.visible']&&typeof(y)=='number'&&!y0&&!y1&&!y2&&!y3&&!y4){if(tickmarks=='circle'){co.arc(x,yCoord,halfTickSize,0,6.28,0);co.fillStyle=color;co.fill();}else if(tickmarks=='plus'){co.moveTo(x,yCoord-halfTickSize);co.lineTo(x,yCoord+halfTickSize);co.moveTo(x-halfTickSize,yCoord);co.lineTo(x+halfTickSize,yCoord);co.stroke();}else if(tickmarks=='square'){co.strokeStyle=color;co.fillStyle=color;co.fillRect(x-halfTickSize,yCoord-halfTickSize,tickSize,tickSize);}else if(tickmarks=='cross'){co.moveTo(x-halfTickSize,yCoord-halfTickSize);co.lineTo(x+halfTickSize,yCoord+halfTickSize);co.moveTo(x+halfTickSize,yCoord-halfTickSize);co.lineTo(x-halfTickSize,yCoord+halfTickSize);co.stroke();}else if(tickmarks=='diamond'){co.fillStyle=co.strokeStyle;co.moveTo(x,yCoord-halfTickSize);co.lineTo(x+halfTickSize,yCoord);co.lineTo(x,yCoord+halfTickSize);co.lineTo(x-halfTickSize,yCoord);co.lineTo(x,yCoord-halfTickSize);co.fill();co.stroke();}else if(typeof(tickmarks)=='function'){var graphWidth=ca.width-this.gutterLeft-this.gutterRight
|
94
|
+
var graphheight=ca.height-this.gutterTop-this.gutterBottom;var xVal=((x-this.gutterLeft)/graphWidth)*xMax;var yVal=((graphheight-(yCoord-this.gutterTop))/graphheight)*yMax;tickmarks(this,data,x,yCoord,xVal,yVal,xMax,yMax,color,data_set_index,data_index)}else if(typeof tickmarks==='string'&&(tickmarks.substr(0,6)==='image:'||tickmarks.substr(0,5)==='data:'||tickmarks.substr(0,1)==='/'||tickmarks.substr(0,3)==='../'||tickmarks.substr(0,7)==='images/')){var img=new Image();if(tickmarks.substr(0,6)==='image:'){img.src=tickmarks.substr(6);}else{img.src=tickmarks;}
|
95
|
+
img.onload=function()
|
96
|
+
{if(prop['chart.tickmarks.image.halign']==='center')x-=(this.width/2);if(prop['chart.tickmarks.image.halign']==='right')x-=this.width;if(prop['chart.tickmarks.image.valign']==='center')yCoord-=(this.height/2);if(prop['chart.tickmarks.image.valign']==='bottom')yCoord-=this.height;x+=prop['chart.tickmarks.image.offsetx'];yCoord+=prop['chart.tickmarks.image.offsety'];co.drawImage(this,x,yCoord);}}else if(tickmarks===null){}else{alert('[SCATTER] ('+this.id+') Unknown tickmark style: '+tickmarks);}}
|
97
|
+
if(prop['chart.boxplot']&&typeof y0==='number'&&typeof y1==='number'&&typeof y2==='number'&&typeof y3==='number'&&typeof y4==='number'){x=[x-halfBoxWidth,x+halfBoxWidth];yCoord=[y0,y1,y2,y3,y4];}
|
98
|
+
coords.push([x,yCoord,tooltip]);};this.drawLine=this.DrawLine=function(i)
|
99
|
+
{if(typeof(prop['chart.line.visible'])=='boolean'&&prop['chart.line.visible']==false){return;}
|
100
|
+
if(prop['chart.line']&&this.coords[i].length>=2){if(prop['chart.line.dash']&&typeof co.setLineDash==='function'){co.setLineDash(prop['chart.line.dash']);}
|
101
|
+
co.lineCap='round';co.lineJoin='round';co.lineWidth=this.getLineWidth(i);co.strokeStyle=prop['chart.line.colors'][i];co.beginPath();var prevY=null;var currY=null;for(var j=0,len=this.coords[i].length;j<len;j+=1){var xPos=this.coords[i][j][0];var yPos=this.coords[i][j][1];if(j>0)prevY=this.coords[i][j-1][1];currY=yPos;if(j==0||RG.is_null(prevY)||RG.is_null(currY)){co.moveTo(xPos,yPos);}else{var stepped=prop['chart.line.stepped'];if((typeof stepped=='boolean'&&stepped)||(typeof stepped=='object'&&stepped[i])){co.lineTo(this.coords[i][j][0],this.coords[i][j-1][1]);}
|
102
|
+
co.lineTo(xPos,yPos);}}
|
103
|
+
co.stroke();if(prop['chart.line.dash']&&typeof co.setLineDash==='function'){co.setLineDash([1,0]);}}
|
104
|
+
co.lineWidth=1;};this.getLineWidth=this.GetLineWidth=function(i)
|
105
|
+
{var linewidth=prop['chart.line.linewidth'];if(typeof linewidth=='number'){return linewidth;}else if(typeof linewidth=='object'){if(linewidth[i]){return linewidth[i];}else{return linewidth[0];}
|
106
|
+
alert('[SCATTER] Error! chart.linewidth should be a single number or an array of one or more numbers');}};this.drawVBars=this.DrawVBars=function()
|
107
|
+
{var vbars=prop['chart.background.vbars'];var graphWidth=ca.width-this.gutterLeft-this.gutterRight;if(vbars){var xmax=prop['chart.xmax'];var xmin=prop['chart.xmin'];for(var i=0,len=vbars.length;i<len;i+=1){var key=i;var value=vbars[key];if(typeof value[0]=='string')value[0]=RG.parseDate(value[0]);if(typeof value[1]=='string')value[1]=RG.parseDate(value[1])-value[0];var x=(((value[0]-xmin)/(xmax-xmin))*graphWidth)+this.gutterLeft;var width=(value[1]/(xmax-xmin))*graphWidth;co.fillStyle=value[2];co.fillRect(x,this.gutterTop,width,(ca.height-this.gutterTop-this.gutterBottom));}}};this.drawInGraphLabels=this.DrawInGraphLabels=function(obj)
|
108
|
+
{var labels=obj.Get('chart.labels.ingraph');var labels_processed=[];if(!labels){return;}
|
109
|
+
var fgcolor='black';var bgcolor='white';var direction=1;for(var i=0,len=labels.length;i<len;i+=1){if(typeof(labels[i])=='number'){for(var j=0;j<labels[i];++j){labels_processed.push(null);}}else if(typeof(labels[i])=='string'||typeof(labels[i])=='object'){labels_processed.push(labels[i]);}else{labels_processed.push('');}}
|
110
|
+
RG.NoShadow(obj);if(labels_processed&&labels_processed.length>0){var i=0;for(var set=0;set<obj.coords.length;++set){for(var point=0;point<obj.coords[set].length;++point){if(labels_processed[i]){var x=obj.coords[set][point][0];var y=obj.coords[set][point][1];var length=typeof(labels_processed[i][4])=='number'?labels_processed[i][4]:25;var text_x=x;var text_y=y-5-length;co.moveTo(x,y-5);co.lineTo(x,y-5-length);co.stroke();co.beginPath();co.moveTo(x,y-5);co.lineTo(x-3,y-10);co.lineTo(x+3,y-10);co.closePath();co.beginPath();co.fillStyle=(typeof(labels_processed[i])=='object'&&typeof(labels_processed[i][1])=='string')?labels_processed[i][1]:'black';RG.text2(this,{'font':obj.Get('chart.text.font'),'size':obj.Get('chart.text.size'),'x':text_x,'y':text_y,'text':(typeof(labels_processed[i])=='object'&&typeof(labels_processed[i][0])=='string')?labels_processed[i][0]:labels_processed[i],'valign':'bottom','halign':'center','bounding':true,'bounding.fill':(typeof(labels_processed[i])=='object'&&typeof(labels_processed[i][2])=='string')?labels_processed[i][2]:'white','tag':'labels.ingraph'});co.fill();}
|
111
|
+
i++;}}}};this.getShape=this.getPoint=function(e)
|
112
|
+
{var mouseXY=RG.getMouseXY(e);var mouseX=mouseXY[0];var mouseY=mouseXY[1];var overHotspot=false;var offset=prop['chart.tooltips.hotspot'];for(var set=0,len=this.coords.length;set<len;++set){for(var i=0,len2=this.coords[set].length;i<len2;++i){var x=this.coords[set][i][0];var y=this.coords[set][i][1];var tooltip=this.data[set][i][3];if(typeof(y)=='number'){if(mouseX<=(x+offset)&&mouseX>=(x-offset)&&mouseY<=(y+offset)&&mouseY>=(y-offset)){var tooltip=RG.parseTooltipText(this.data[set][i][3],0);var index_adjusted=i;for(var ds=(set-1);ds>=0;--ds){index_adjusted+=this.data[ds].length;}
|
113
|
+
return{0:this,1:x,2:y,3:set,4:i,5:this.data[set][i][3],'object':this,'x':x,'y':y,'dataset':set,'index':i,'tooltip':tooltip,'index_adjusted':index_adjusted};}}else if(RG.is_null(y)){}else{var mark=this.data[set][i];var width=prop['chart.boxplot.width'];if(typeof(mark[1][7])=='number'){width=mark[1][7];}
|
114
|
+
if(typeof(x)=='object'&&mouseX>x[0]&&mouseX<x[1]&&mouseY<y[1]&&mouseY>y[3]){var tooltip=RG.parseTooltipText(this.data[set][i][3],0);return{0:this,1:x[0],2:x[1]-x[0],3:y[1],4:y[3]-y[1],5:set,6:i,7:this.data[set][i][3],'object':this,'x':x[0],'y':y[1],'width':x[1]-x[0],'height':y[3]-y[1],'dataset':set,'index':i,'tooltip':tooltip};}}}}};this.drawAboveLabels=this.DrawAboveLabels=function()
|
115
|
+
{var size=prop['chart.labels.above.size'];var font=prop['chart.text.font'];var units_pre=prop['chart.units.pre'];var units_post=prop['chart.units.post'];for(var set=0,len=this.coords.length;set<len;++set){for(var point=0,len2=this.coords[set].length;point<len2;++point){var x_val=this.data[set][point][0];var y_val=this.data[set][point][1];if(!RG.is_null(y_val)){if(RG.is_array(y_val)){var max=0;for(var i=0;i<y_val;++i){max=Math.max(max,y_val[i]);}
|
116
|
+
y_val=max;}
|
117
|
+
var x_pos=this.coords[set][point][0];var y_pos=this.coords[set][point][1];RG.Text2(this,{'font':font,'size':size,'x':x_pos,'y':y_pos-5-size,'text':x_val.toFixed(prop['chart.labels.above.decimals'])+', '+y_val.toFixed(prop['chart.labels.above.decimals']),'valign':'center','halign':'center','bounding':true,'boundingFill':'rgba(255, 255, 255, 0.7)','tag':'labels.above'});}}}};this.getYValue=this.getValue=function(arg)
|
118
|
+
{if(arg.length==2){var mouseX=arg[0];var mouseY=arg[1];}else{var mouseCoords=RG.getMouseXY(arg);var mouseX=mouseCoords[0];var mouseY=mouseCoords[1];}
|
119
|
+
var obj=this;if(mouseY<this.gutterTop||mouseY>(ca.height-this.gutterBottom)||mouseX<this.gutterLeft||mouseX>(ca.width-this.gutterRight)){return null;}
|
120
|
+
if(prop['chart.xaxispos']=='center'){var value=(((this.grapharea/2)-(mouseY-this.gutterTop))/this.grapharea)*(this.max-this.min)
|
121
|
+
value*=2;if(value>=0){value+=this.min
|
122
|
+
if(prop['chart.ylabels.invert']){value-=this.min;value=this.max-value;}}else{value-=this.min;if(prop['chart.ylabels.invert']){value+=this.min;value=this.max+value;value*=-1;}}}else{var value=((this.grapharea-(mouseY-this.gutterTop))/this.grapharea)*(this.max-this.min)
|
123
|
+
value+=this.min;if(prop['chart.ylabels.invert']){value-=this.min;value=this.max-value;}}
|
124
|
+
return value;};this.getXValue=function(arg)
|
125
|
+
{if(arg.length==2){var mouseX=arg[0];var mouseY=arg[1];}else{var mouseXY=RG.getMouseXY(arg);var mouseX=mouseXY[0];var mouseY=mouseXY[1];}
|
126
|
+
var obj=this;if(mouseY<this.gutterTop||mouseY>(ca.height-this.gutterBottom)||mouseX<this.gutterLeft||mouseX>(ca.width-this.gutterRight)){return null;}
|
127
|
+
var width=(ca.width-this.gutterLeft-this.gutterRight);var value=((mouseX-this.gutterLeft)/width)*(prop['chart.xmax']-prop['chart.xmin'])
|
128
|
+
value+=prop['chart.xmin'];return value;};this.highlight=this.Highlight=function(shape)
|
129
|
+
{if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else{if(shape['height']){RG.Highlight.Rect(this,shape);}else{RG.Highlight.Point(this,shape);}}};this.getObjectByXY=function(e)
|
130
|
+
{var mouseXY=RG.getMouseXY(e);if(mouseXY[0]>(this.gutterLeft-3)&&mouseXY[0]<(ca.width-this.gutterRight+3)&&mouseXY[1]>(this.gutterTop-3)&&mouseXY[1]<((ca.height-this.gutterBottom)+3)){return this;}};this.getXCoord=function(value)
|
131
|
+
{if(typeof value!='number'&&typeof value!='string'){return null;}
|
132
|
+
if(typeof value==='string'){value=RG.parseDate(value);}
|
133
|
+
var xmin=prop['chart.xmin'];var xmax=prop['chart.xmax'];var x;if(value<xmin)return null;if(value>xmax)return null;var gutterRight=this.gutterRight;var gutterLeft=this.gutterLeft;if(prop['chart.yaxispos']=='right'){x=((value-xmin)/(xmax-xmin))*(ca.width-gutterLeft-gutterRight);x=(ca.width-gutterRight-x);}else{x=((value-xmin)/(xmax-xmin))*(ca.width-gutterLeft-gutterRight);x=x+gutterLeft;}
|
134
|
+
return x;};this.getYCoord=this.getYCoordFromValue=function(value)
|
135
|
+
{if(typeof(value)!='number'){return null;}
|
136
|
+
var invert=prop['chart.ylabels.invert'];var xaxispos=prop['chart.xaxispos'];var graphHeight=ca.height-this.gutterTop-this.gutterBottom;var halfGraphHeight=graphHeight/2;var ymax=this.max;var ymin=prop['chart.ymin'];var coord=0;if(value>ymax||(prop['chart.xaxispos']=='bottom'&&value<ymin)||(prop['chart.xaxispos']=='center'&&((value>0&&value<ymin)||(value<0&&value>(-1*ymin))))){return null;}
|
137
|
+
if(xaxispos=='center'){coord=((Math.abs(value)-ymin)/(ymax-ymin))*halfGraphHeight;if(invert){coord=halfGraphHeight-coord;}
|
138
|
+
if(value<0){coord+=this.gutterTop;coord+=halfGraphHeight;}else{coord=halfGraphHeight-coord;coord+=this.gutterTop;}}else{coord=((value-ymin)/(ymax-ymin))*graphHeight;if(invert){coord=graphHeight-coord;}
|
139
|
+
coord=graphHeight-coord;coord=this.gutterTop+coord;}
|
140
|
+
return coord;};RG.Scatter.Bubble=function(scatter,min,max,width,data)
|
141
|
+
{this.scatter=scatter;this.min=min;this.max=max;this.width=width;this.data=data;this.coords=[];this.type='scatter.bubble'
|
142
|
+
this.set=this.Set=function(name,value)
|
143
|
+
{this.scatter.set(name,value);return this;};this.get=this.Get=function(name)
|
144
|
+
{this.scatter.get(name);};this.draw=this.Draw=function()
|
145
|
+
{var bubble_min=this.min,bubble_max=this.max,bubble_data=this.data,bubble_max_width=this.width;var obj_bubble=this,obj_scatter=this.scatter;this.scatter.ondraw=function(obj)
|
146
|
+
{for(var i=0;i<obj.coords[0].length;++i){bubble_data[i]=ma.max(bubble_data[i],bubble_min);bubble_data[i]=ma.min(bubble_data[i],bubble_max);var r=((bubble_data[i]-bubble_min)/(bubble_max-bubble_min))*bubble_max_width,color=obj_scatter.data[0][i][2]?obj_scatter.data[0][i][2]:obj_scatter.properties['chart.defaultcolor'];co.beginPath();co.fillStyle=RG.radialGradient(obj,obj_scatter.coords[0][i][0]+(r/2.5),obj_scatter.coords[0][i][1]-(r/2.5),0,obj_scatter.coords[0][i][0]+(r/2.5),obj_scatter.coords[0][i][1]-(r/2.5),r,prop['chart.colors.bubble.graduated']?'white':color,color);co.arc(obj_scatter.coords[0][i][0],obj_scatter.coords[0][i][1],r,0,RG.TWOPI,false);co.fill();obj_bubble.coords[i]=[obj_scatter.coords[0][i][0],obj_scatter.coords[0][i][1],r,co.fillStyle];}}
|
147
|
+
this.scatter.Draw();return this;};};this.parseColors=function()
|
148
|
+
{if(this.original_colors.length===0){this.original_colors['data']=RG.array_clone(this.data);this.original_colors['chart.background.vbars']=RG.array_clone(prop['chart.background.vbars']);this.original_colors['chart.background.hbars']=RG.array_clone(prop['chart.background.hbars']);this.original_colors['chart.line.colors']=RG.array_clone(prop['chart.line.colors']);this.original_colors['chart.defaultcolor']=RG.array_clone(prop['chart.defaultcolor']);this.original_colors['chart.crosshairs.color']=RG.array_clone(prop['chart.crosshairs.color']);this.original_colors['chart.highlight.stroke']=RG.array_clone(prop['chart.highlight.stroke']);this.original_colors['chart.highlight.fill']=RG.array_clone(prop['chart.highlight.fill']);this.original_colors['chart.background.barcolor1']=RG.array_clone(prop['chart.background.barcolor1']);this.original_colors['chart.background.barcolor2']=RG.array_clone(prop['chart.background.barcolor2']);this.original_colors['chart.background.grid.color']=RG.array_clone(prop['chart.background.grid.color']);this.original_colors['chart.background.color']=RG.array_clone(prop['chart.background.color']);this.original_colors['chart.axis.color']=RG.array_clone(prop['chart.axis.color']);}
|
149
|
+
var data=this.data;if(data){for(var dataset=0;dataset<data.length;++dataset){for(var i=0;i<this.data[dataset].length;++i){if(this.data[dataset][i]&&typeof(this.data[dataset][i][1])=='object'&&this.data[dataset][i][1]){if(typeof(this.data[dataset][i][1][5])=='string')this.data[dataset][i][1][5]=this.parseSingleColorForGradient(this.data[dataset][i][1][5]);if(typeof(this.data[dataset][i][1][6])=='string')this.data[dataset][i][1][6]=this.parseSingleColorForGradient(this.data[dataset][i][1][6]);}
|
150
|
+
if(!RG.isNull(this.data[dataset][i])){this.data[dataset][i][2]=this.parseSingleColorForGradient(this.data[dataset][i][2]);}}}}
|
151
|
+
var hbars=prop['chart.background.hbars'];if(hbars){for(i=0;i<hbars.length;++i){hbars[i][2]=this.parseSingleColorForGradient(hbars[i][2]);}}
|
152
|
+
var vbars=prop['chart.background.vbars'];if(vbars){for(i=0;i<vbars.length;++i){vbars[i][2]=this.parseSingleColorForGradient(vbars[i][2]);}}
|
153
|
+
var colors=prop['chart.line.colors'];if(colors){for(i=0;i<colors.length;++i){colors[i]=this.parseSingleColorForGradient(colors[i]);}}
|
154
|
+
prop['chart.defaultcolor']=this.parseSingleColorForGradient(prop['chart.defaultcolor']);prop['chart.crosshairs.color']=this.parseSingleColorForGradient(prop['chart.crosshairs.color']);prop['chart.highlight.stroke']=this.parseSingleColorForGradient(prop['chart.highlight.stroke']);prop['chart.highlight.fill']=this.parseSingleColorForGradient(prop['chart.highlight.fill']);prop['chart.background.barcolor1']=this.parseSingleColorForGradient(prop['chart.background.barcolor1']);prop['chart.background.barcolor2']=this.parseSingleColorForGradient(prop['chart.background.barcolor2']);prop['chart.background.grid.color']=this.parseSingleColorForGradient(prop['chart.background.grid.color']);prop['chart.background.color']=this.parseSingleColorForGradient(prop['chart.background.color']);prop['chart.axis.color']=this.parseSingleColorForGradient(prop['chart.axis.color']);};this.reset=function()
|
155
|
+
{};this.parseSingleColorForGradient=function(color)
|
156
|
+
{if(!color||typeof(color)!='string'){return color;}
|
157
|
+
if(color.match(/^gradient\((.*)\)$/i)){var parts=RegExp.$1.split(':');var grad=co.createLinearGradient(0,ca.height-prop['chart.gutter.bottom'],0,prop['chart.gutter.top']);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}
|
158
|
+
return grad?grad:color;};this.interactiveKeyHighlight=function(index)
|
159
|
+
{if(this.coords&&this.coords[index]&&this.coords[index].length){this.coords[index].forEach(function(value,idx,arr)
|
160
|
+
{co.beginPath();co.fillStyle=prop['chart.key.interactive.highlight.chart.fill'];co.arc(value[0],value[1],prop['chart.ticksize']+3,0,RG.TWOPI,false);co.fill();});}};this.on=function(type,func)
|
161
|
+
{if(type.substr(0,2)!=='on'){type='on'+type;}
|
162
|
+
if(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}
|
163
|
+
return this;};this.firstDrawFunc=function()
|
164
|
+
{};this.trace=this.trace2=function()
|
165
|
+
{var obj=this,callback=arguments[2],opt=arguments[0]||{},frames=opt.frames||30,frame=0,callback=arguments[1]||function(){}
|
166
|
+
obj.Set('animationTrace',true);obj.Set('animationTraceClip',0);function iterator()
|
167
|
+
{RG.clear(obj.canvas);RG.redrawCanvas(obj.canvas);if(frame++<frames){obj.set('animationTraceClip',frame/frames);RG.Effects.updateCanvas(iterator);}else{callback(obj);}}
|
168
|
+
iterator();return this;};this.resetColorsToOriginalValues=function()
|
169
|
+
{for(var i=0,len=this.original_colors['data'].length;i<len;++i){for(var j=0,len2=this.original_colors['data'][i].length;j<len2;++j){this.data[i][j][2]=RG.array_clone(this.original_colors['data'][i][j][2]);if(typeof this.data[i][j][1]==='object'){this.data[i][j][1][5]=RG.array_clone(this.original_colors['data'][i][j][1][5]);this.data[i][j][1][6]=RG.array_clone(this.original_colors['data'][i][j][1][6]);}}}};RG.att(ca);RG.Register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};
|
@@ -0,0 +1,61 @@
|
|
1
|
+
|
2
|
+
RGraph=window.RGraph||{isRGraph:true};RGraph.SemiCircularProgress=function(conf)
|
3
|
+
{if(typeof conf==='object'&&typeof conf.id==='string'){var parseConfObjectForOptions=true;}else{var conf={id:arguments[0],min:arguments[1],max:arguments[2],value:arguments[3]}}
|
4
|
+
this.id=conf.id;this.canvas=document.getElementById(this.id);this.context=this.canvas.getContext('2d');this.canvas.__object__=this;this.min=RGraph.stringsToNumbers(conf.min);this.max=RGraph.stringsToNumbers(conf.max);this.value=RGraph.stringsToNumbers(conf.value);this.type='semicircularprogress';this.coords=[];this.isRGraph=true;this.currentValue=null;this.uid=RGraph.createUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.colorsParsed=false;this.coordsText=[];this.original_colors=[];this.firstDraw=true;this.properties={'chart.background.color':'rgba(0,0,0,0)','chart.colors':['#0c0'],'chart.linewidth':2,'chart.strokestyle':'#666','chart.gutter.left':25,'chart.gutter.right':25,'chart.gutter.top':25,'chart.gutter.bottom':35,'chart.radius':null,'chart.centerx':null,'chart.centery':null,'chart.width':null,'chart.angles.start':Math.PI,'chart.angles.end':(2*Math.PI),'chart.scale.decimals':0,'chart.scale.point':'.','chart.scale.thousand':',','chart.scale.formatter':null,'chart.scale.round':false,'chart.shadow':false,'chart.shadow.color':'rgba(220,220,220,1)','chart.shadow.blur':2,'chart.shadow.offsetx':2,'chart.shadow.offsety':2,'chart.labels.center':true,'chart.labels.center.font':null,'chart.labels.center.bold':false,'chart.labels.center.italic':false,'chart.labels.center.fade':false,'chart.labels.center.size':40,'chart.labels.center.color':'black','chart.labels.center.valign':'bottom','chart.labels.min.color':null,'chart.labels.min.font':null,'chart.labels.min.bold':false,'chart.labels.min.size':null,'chart.labels.min.italic':false,'chart.labels.min.offset.angle':0,'chart.labels.min.offsetx':0,'chart.labels.min.offsety':0,'chart.labels.max.color':null,'chart.labels.max.font':null,'chart.labels.max.bold':false,'chart.labels.max.size':null,'chart.labels.max.italic':false,'chart.labels.max.offset.angle':0,'chart.labels.max.offsetx':0,'chart.labels.max.offsety':0,'chart.title':'','chart.title.bold':true,'chart.title.italic':false,'chart.title.font':null,'chart.title.size':null,'chart.title.color':'black','chart.text.size':12,'chart.text.color':'black','chart.text.font':'Segoe UI, Arial, Verdana, sans-serif','chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':true,'chart.contextmenu':null,'chart.units.pre':'','chart.units.post':'','chart.tooltips':null,'chart.tooltips.effect':'fade','chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.highlight':true,'chart.tooltips.event':'onclick','chart.tooltips.coords.page':true,'chart.highlight.stroke':'rgba(0,0,0,0)','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.annotatable':false,'chart.annotate.color':'black','chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.hdir':'right','chart.zoom.vdir':'down','chart.zoom.frames':25,'chart.zoom.delay':16.666,'chart.zoom.shadow':true,'chart.zoom.background':true,'chart.zoom.action':'zoom','chart.resizable':false,'chart.resize.handle.adjust':[0,0],'chart.resize.handle.background':null,'chart.adjustable':false,'chart.events.click':null,'chart.events.mousemove':null,'chart.clearto':'rgba(0,0,0,0)'}
|
5
|
+
if(!this.canvas){alert('[SEMICIRCULARPROGRESS] No canvas support');return;}
|
6
|
+
if(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}
|
7
|
+
var RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math
|
8
|
+
if(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}
|
9
|
+
this.set=this.Set=function(name)
|
10
|
+
{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}
|
11
|
+
if(name.substr(0,6)!='chart.'){name='chart.'+name;}
|
12
|
+
while(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}
|
13
|
+
prop[name.toLowerCase()]=value;return this;};this.get=this.Get=function(name)
|
14
|
+
{if(name.substr(0,6)!='chart.'){name='chart.'+name;}
|
15
|
+
while(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}
|
16
|
+
return prop[name.toLowerCase()];};this.draw=this.Draw=function()
|
17
|
+
{RG.fireCustomEvent(this,'onbeforedraw');if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}
|
18
|
+
this.currentValue=this.value;this.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];this.radius=ma.min((ca.width-prop['chart.gutter.left']-prop['chart.gutter.right'])/2,ca.height-prop['chart.gutter.top']-prop['chart.gutter.bottom']);this.centerx=((ca.width-this.gutterLeft-this.gutterRight)/2)+this.gutterLeft;this.centery=ca.height-this.gutterBottom;this.width=this.radius/3;if(typeof prop['chart.radius']==='number')this.radius=prop['chart.radius'];if(typeof prop['chart.centerx']==='number')this.centerx=prop['chart.centerx'];if(typeof prop['chart.centery']==='number')this.centery=prop['chart.centery'];if(typeof prop['chart.width']==='number')this.width=prop['chart.width'];this.coords=[];this.coordsText=[];this.drawMeter();this.drawLabels();if(prop['chart.contextmenu']){RG.showContext(this);}
|
19
|
+
RG.installEventListeners(this);if(prop['chart.resizable']){RG.allowResizing(this);}
|
20
|
+
this.allowAdjusting();if(this.firstDraw){RG.fireCustomEvent(this,'onfirstdraw');this.firstDraw=false;this.firstDrawFunc();}
|
21
|
+
RG.fireCustomEvent(this,'ondraw');return this;};this.drawMeter=this.DrawMeter=function()
|
22
|
+
{var start=prop['chart.angles.start'],end=prop['chart.angles.end'];this.scale2=RG.getScale2(this,{'max':this.max,'strict':prop['chart.scale.round']?false:true,'min':this.min,'scale.thousand':prop['chart.scale.thousand'],'scale.point':prop['chart.scale.point'],'scale.decimals':prop['chart.scale.decimals'],'ylabels.count':5,'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post']});if(prop['chart.background.color']!=='rgba(0,0,0,0)'){pa2(co,'fs % fr % % % %',prop['chart.background.color'],0,0,ca.width,ca.height);}
|
23
|
+
pa2(co,'lw % b a % % % % % false a % % % % % true c s % f % sx % sy % sc % sb % f % sx 0 sy 0 sb 0 sc rgba(0,0,0,0) lw 1',prop['chart.linewidth'],this.centerx,this.centery,this.radius,start,end,this.centerx,this.centery,this.radius-this.width,end,start,prop['chart.strokestyle'],typeof prop['chart.colors'][1]!=='undefined'?prop['chart.colors'][1]:prop['chart.colors'][0],prop['chart.shadow.offsetx'],prop['chart.shadow.offsety'],prop['chart.shadow']?prop['chart.shadow.color']:'rgba(0,0,0,0)',prop['chart.shadow.blur'],typeof prop['chart.colors'][1]!=='undefined'?'rgba(0,0,0,0)':'rgba(255,255,255,0.85)');var angle=start+((end-start)*((this.value-this.scale2.min)/(this.max-this.scale2.min)));pa2(co,'b a % % % % % false a % % % % % true c f %',this.centerx,this.centery,this.radius,start,angle,this.centerx,this.centery,this.radius-this.width,start+((end-start)*((this.value-this.scale2.min)/(this.max-this.scale2.min))),start,prop['chart.colors'][0]);this.coords=[[this.centerx,this.centery,this.radius,start,end,this.width,angle]];};this.drawLabels=this.DrawLabels=function()
|
24
|
+
{var min=RG.numberFormat(this,this.scale2.min)
|
25
|
+
var max=RG.numberFormat(this,this.scale2.max)
|
26
|
+
if(prop['chart.angles.start']===RGraph.PI){var halign='center';var valign='top';}else if(prop['chart.angles.start']<=RGraph.PI){var halign='left';var valign='center';}else if(prop['chart.angles.start']>=RGraph.PI){var halign='right';var valign='center';}
|
27
|
+
var xy=RG.getRadiusEndPoint(this.centerx,this.centery,prop['chart.angles.start']+prop['chart.labels.min.offset.angle'],this.radius-(this.width/2));RG.text2(this,{font:prop['chart.labels.min.font']||prop['chart.text.font'],bold:prop['chart.labels.min.bold']||prop['chart.text.bold'],size:prop['chart.labels.min.size']||prop['chart.text.size'],x:xy[0]+prop['chart.labels.min.offsetx'],y:xy[1]+prop['chart.labels.min.offsety'],valign:valign,halign:halign,text:min,color:prop['chart.labels.min.color']||prop['chart.text.color'],italic:prop['chart.labels.min.italic']});if(prop['chart.angles.end']===RGraph.TWOPI){var halign='center';var valign='top';}else if(prop['chart.angles.end']>=RGraph.TWOPI){var halign='right';var valign='center';}else if(prop['chart.angles.end']<=RGraph.TWOPI){var halign='left';var valign='center';}
|
28
|
+
var xy=RG.getRadiusEndPoint(this.centerx,this.centery,prop['chart.angles.end']+prop['chart.labels.max.offset.angle'],this.radius-(this.width/2));RG.text2(this,{font:prop['chart.labels.max.font']||prop['chart.text.font'],bold:prop['chart.labels.max.bold']||prop['chart.text.bold'],size:prop['chart.labels.max.size']||prop['chart.text.size'],x:xy[0]+prop['chart.labels.max.offsetx'],y:xy[1]+prop['chart.labels.max.offsety'],valign:valign,halign:halign,text:max,color:prop['chart.labels.max.color']||prop['chart.text.color'],italic:prop['chart.labels.max.italic']});if(prop['chart.labels.center']){var ret=RG.text2(this,{font:prop['chart.labels.center.font']||prop['chart.text.font'],size:prop['chart.labels.center.size']||50,bold:prop['chart.labels.center.bold'],italic:prop['chart.labels.center.italic'],x:this.centerx,y:this.centery,valign:prop['chart.labels.center.valign'],halign:'center',text:RG.numberFormat(this,this.value.toFixed(prop['chart.scale.decimals']),prop['chart.units.pre'],prop['chart.units.post']),color:prop['chart.labels.center.color']||prop['chart.text.color']});if(prop['chart.labels.center.fade']&&ret.node){ret.node.style.opacity=0;var delay=25,incr=0.1;for(var i=0;i<10;++i){(function(index)
|
29
|
+
{setTimeout(function()
|
30
|
+
{ret.node.style.opacity=incr*index;},delay*(index+1));})(i);}}}
|
31
|
+
RG.drawTitle(this,prop['chart.title'],this.gutterTop,null,prop['chart.title.size']);};this.getShape=function(e)
|
32
|
+
{var mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1]
|
33
|
+
pa2(co,'b a % % % % % false a % % % % % true',this.coords[0][0],this.coords[0][1],this.coords[0][2],this.coords[0][3],this.coords[0][6],this.coords[0][0],this.coords[0][1],this.coords[0][2]-this.coords[0][5],this.coords[0][6],this.coords[0][3]);if(co.isPointInPath(mouseX,mouseY)){return{object:this,0:this,x:this.coords[0][0],1:this.coords[0][0],y:this.coords[0][1],2:this.coords[0][1],radius:this.coords[0][2],3:this.coords[0][2],width:this.coords[0][5],4:this.coords[0][5],start:this.coords[0][3],5:this.coords[0][3],end:this.coords[0][6],6:this.coords[0][6],index:0,tooltip:!RG.isNull(prop['chart.tooltips'])?prop['chart.tooltips'][0]:null};}};this.getValue=function(e)
|
34
|
+
{var mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1],angle=RG.getAngleByXY(this.centerx,this.centery,mouseX,mouseY);if(angle&&mouseX>=this.centerx&&mouseY>this.centery){angle+=RGraph.TWOPI;}
|
35
|
+
if(angle<prop['chart.angles.start']&&mouseX>this.centerx){angle=prop['chart.angles.end'];}
|
36
|
+
if(angle<prop['chart.angles.start']){angle=prop['chart.angles.start'];}
|
37
|
+
var value=(((angle-prop['chart.angles.start'])/(prop['chart.angles.end']-prop['chart.angles.start']))*(this.max-this.min))+this.min;value=ma.max(value,this.min);value=ma.min(value,this.max);return value;};this.highlight=this.Highlight=function(shape)
|
38
|
+
{if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else{pa2(co,'lw 5 b a % % % % % false a % % % % % true c s % f % lw 1',shape.x,shape.y,shape.radius,shape.start,shape.end,shape.x,shape.y,shape.radius-shape.width,shape.end,shape.start,prop['chart.highlight.stroke'],prop['chart.highlight.fill']);}};this.getObjectByXY=function(e)
|
39
|
+
{var mouseXY=RG.getMouseXY(e);pa2(co,'b a % % % % % false',this.centerx,this.centery,this.radius,prop['chart.angles.start'],prop['chart.angles.end']);pa2(co,'a % % % % % true',this.centerx,this.centery,this.radius-this.width,prop['chart.angles.end'],prop['chart.angles.start']);return co.isPointInPath(mouseXY[0],mouseXY[1])?this:null;};this.allowAdjusting=this.AllowAdjusting=function(){};this.adjusting_mousemove=this.Adjusting_mousemove=function(e)
|
40
|
+
{if(prop['chart.adjustable']&&RG.Registry.Get('chart.adjusting')&&RG.Registry.Get('chart.adjusting').uid==this.uid){var value=this.getValue(e);if(typeof value==='number'){RG.fireCustomEvent(this,'onadjust');this.value=Number(value.toFixed(prop['chart.scale.decimals']));RG.redrawCanvas(this.canvas);}}};this.getAngle=function(value)
|
41
|
+
{if(value>this.max||value<this.min){return null;}
|
42
|
+
var angle=(value/this.max)*(prop['chart.angles.end']-prop['chart.angles.start'])
|
43
|
+
angle+=prop['chart.angles.start'];return angle;};this.overChartArea=function(e)
|
44
|
+
{var mouseXY=RGraph.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1]
|
45
|
+
pa2(co,'b a % % % % % false a % % % % % true',this.coords[0][0],this.coords[0][1],this.coords[0][2],prop['chart.angles.start'],prop['chart.angles.end'],this.coords[0][0],this.coords[0][1],this.coords[0][2]-this.coords[0][5],prop['chart.angles.end'],prop['chart.angles.start']);return co.isPointInPath(mouseX,mouseY);};this.parseColors=function()
|
46
|
+
{if(this.original_colors.length===0){this.original_colors['chart.colors']=RG.arrayClone(prop['chart.colors']);}
|
47
|
+
prop['chart.colors'][0]=this.parseSingleColorForGradient(prop['chart.colors'][0]);prop['chart.colors'][1]=this.parseSingleColorForGradient(prop['chart.colors'][1]);prop['chart.strokestyle']=this.parseSingleColorForGradient(prop['chart.strokestyle']);prop['chart.background.color']=this.parseSingleColorForGradient(prop['chart.background.color']);};this.reset=function()
|
48
|
+
{};this.parseSingleColorForGradient=function(color)
|
49
|
+
{if(!color||typeof color!='string'){return color;}
|
50
|
+
if(color.match(/^gradient\((.*)\)$/i)){var parts=RegExp.$1.split(':');var grad=co.createLinearGradient(prop['chart.gutter.left'],0,ca.width-prop['chart.gutter.right'],0);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1,len=parts.length;j<len;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}
|
51
|
+
return grad?grad:color;}
|
52
|
+
return grad?grad:color;};this.on=function(type,func)
|
53
|
+
{if(type.substr(0,2)!=='on'){type='on'+type;}
|
54
|
+
if(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}
|
55
|
+
return this;};this.exec=function(func)
|
56
|
+
{func(this);return this;};this.firstDrawFunc=function()
|
57
|
+
{};this.grow=function()
|
58
|
+
{var obj=this,initial_value=this.currentValue,opt=arguments[0]||{},numFrames=opt.frames||30,frame=0,callback=arguments[1]||function(){},diff=this.value-Number(this.currentValue),increment=diff/numFrames
|
59
|
+
function iterator()
|
60
|
+
{frame++;if(frame<=numFrames){obj.value=initial_value+(increment*frame);RG.clear(ca);RG.redrawCanvas(ca);RG.Effects.updateCanvas(iterator);}else{callback();}}
|
61
|
+
iterator();return this;};RG.Register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};
|
@@ -0,0 +1,63 @@
|
|
1
|
+
|
2
|
+
RGraph=window.RGraph||{isRGraph:true};RGraph.Thermometer=function(conf)
|
3
|
+
{if(typeof conf==='object'&&typeof conf.id==='string'){var parseConfObjectForOptions=true;}else{var conf={id:arguments[0],min:arguments[1],max:arguments[2],value:arguments[3]}}
|
4
|
+
this.id=conf.id;this.canvas=document.getElementById(this.id);this.context=this.canvas.getContext?this.canvas.getContext('2d'):null;this.canvas.__object__=this;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.colorsParsed=false;this.type='thermometer';this.isRGraph=true;this.min=RGraph.stringsToNumbers(conf.min);this.max=RGraph.stringsToNumbers(conf.max);this.value=RGraph.stringsToNumbers(conf.value);this.coords=[];this.graphArea=[];this.currentValue=null;this.coordsText=[];this.original_colors=[];this.firstDraw=true;this.properties={'chart.linewidth':1,'chart.background.color':'white','chart.strokestyle':'black','chart.colors':['Gradient(#c00:red:#f66:#fcc)'],'chart.gutter.left':25,'chart.gutter.right':25,'chart.gutter.top':25,'chart.gutter.bottom':25,'chart.ticksize':2,'chart.text.color':'black','chart.text.font':'Segoe UI, Arial, Verdana, sans-serif','chart.text.size':12,'chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':true,'chart.numticks':10,'chart.units.pre':'','chart.units.post':'','chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.hdir':'right','chart.zoom.vdir':'down','chart.zoom.frames':25,'chart.zoom.delay':16.666,'chart.zoom.shadow':true,'chart.zoom.background':true,'chart.title':'','chart.title.side':'','chart.title.side.bold':true,'chart.title.side.font':null,'chart.shadow':true,'chart.shadow.offsetx':0,'chart.shadow.offsety':0,'chart.shadow.blur':15,'chart.shadow.color':'#ddd','chart.resizable':false,'chart.contextmenu':null,'chart.adjustable':false,'chart.value.label':true,'chart.value.label.decimals':null,'chart.value.label.thousand':',','chart.value.label.point':'.','chart.labels.count':5,'chart.scale.visible':false,'chart.scale.decimals':0,'chart.annotatable':false,'chart.annotate.color':'black','chart.scale.decimals':0,'chart.scale.point':'.','chart.scale.thousand':',','chart.tooltips':null,'chart.tooltips.highlight':true,'chart.tooltips.effect':'fade','chart.tooltips.event':'onclick','chart.highlight.stroke':'rgba(0,0,0,0)','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.clearto':'rgba(0,0,0,0)','chart.bulb.bottom.radius.adjust':0,'chart.bulb.bottom.radius':null}
|
5
|
+
if(!this.canvas){alert('[THERMOMETER] No canvas support');return;}
|
6
|
+
this.$0={};if(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}
|
7
|
+
var RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math
|
8
|
+
if(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}
|
9
|
+
this.set=this.Set=function(name)
|
10
|
+
{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}
|
11
|
+
if(name.substr(0,6)!='chart.'){name='chart.'+name;}
|
12
|
+
while(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}
|
13
|
+
if(name=='chart.ylabels.count'){name='chart.labels.count';}
|
14
|
+
prop[name.toLowerCase()]=value;return this;};this.get=this.Get=function(name)
|
15
|
+
{if(name.substr(0,6)!='chart.'){name='chart.'+name;}
|
16
|
+
while(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}
|
17
|
+
return prop[name];};this.draw=this.Draw=function()
|
18
|
+
{RG.fireCustomEvent(this,'onbeforedraw');this.value=ma.min(this.max,this.value);this.value=ma.max(this.min,this.value);if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}
|
19
|
+
this.currentValue=this.value;this.coordsText=[];this.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];this.scale2=RG.getScale2(this,{max:this.max,min:this.min,strict:true,'scale.thousand':prop['chart.scale.thousand'],'scale.point':prop['chart.scale.point'],'scale.decimals':prop['chart.scale.decimals'],'ylabels.count':prop['chart.labels.count'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post']});this.x=this.gutterLeft;this.width=ca.width-this.gutterLeft-this.gutterRight;this.y=this.gutterTop+(this.width/2);this.halfWidth=this.width/2;this.bulbTopCenterx=this.gutterLeft+(this.width/2);this.bulbTopCentery=this.gutterTop+(this.width/2);this.bulbTopRadius=this.width/2;this.bulbBottomCenterx=this.gutterLeft+(this.width/2);this.bulbBottomRadius=typeof prop['chart.bulb.bottom.radius']==='number'?prop['chart.bulb.bottom.radius']:this.width*0.75+prop['chart.bulb.bottom.radius.adjust'];this.bulbBottomCentery=ca.height-this.gutterBottom-this.bulbBottomRadius;this.scaleTopY=this.bulbTopCentery;this.scaleBottomY=this.bulbBottomCentery-this.bulbBottomRadius;this.scaleHeight=this.scaleBottomY-this.scaleTopY;this.height=this.getYCoord(this.min)-this.getYCoord(this.value);this.coords[0]=[this.x,this.scaleBottomY-this.height,this.width,this.height];this.drawBackground();this.drawBar();this.drawTickMarks();this.drawLabels();if(prop['chart.title']){this.drawTitle();}
|
20
|
+
if(prop['chart.title.side']){this.drawSideTitle();}
|
21
|
+
if(prop['chart.resizable']){RG.allowResizing(this);}
|
22
|
+
if(prop['chart.contextmenu']){RG.showContext(this);}
|
23
|
+
RG.installEventListeners(this);if(this.firstDraw){RG.fireCustomEvent(this,'onfirstdraw');this.firstDraw=false;this.firstDrawFunc();}
|
24
|
+
RG.fireCustomEvent(this,'ondraw');return this;};this.drawBackground=this.DrawBackground=function()
|
25
|
+
{if(prop['chart.shadow']){RG.setShadow(this,prop['chart.shadow.color'],prop['chart.shadow.offsetx'],prop['chart.shadow.offsety'],prop['chart.shadow.blur']);}
|
26
|
+
this.pathBackground();co.strokeStyle=prop['chart.strokestyle'];co.fillStyle=prop['chart.background.color'];co.lineWidth=1+prop['chart.linewidth'];co.stroke();co.fill();co.lineWidth=1;};this.drawBar=this.DrawBar=function()
|
27
|
+
{this.pathBar();pa2(co,'f %',prop['chart.colors'][0]);};this.pathBar=function()
|
28
|
+
{var barHeight=this.coords[0][3],y=(this.coords[0][1]+this.coords[0][3])-barHeight
|
29
|
+
RG.noShadow(this);pa2(co,'b r % % % % a % % % 0 6.28 false',this.coords[0][0],y,this.coords[0][2],this.bulbBottomCentery-y,this.bulbBottomCenterx,this.bulbBottomCentery,this.bulbBottomRadius);};this.pathBackground=function()
|
30
|
+
{pa2(this.context,'b r % % % % a % % % 0 6.28 false m % % a % % % 0 6.28 false',this.x,this.scaleTopY,this.coords[0][2],this.bulbBottomCentery-this.scaleTopY,this.bulbTopCenterx,this.bulbTopCentery,this.bulbTopRadius,this.bulbBottomCenterx,this.bulbBottomCentery,this.bulbBottomCenterx,this.bulbBottomCentery,this.bulbBottomRadius);};this.drawTickMarks=this.DrawTickMarks=function()
|
31
|
+
{if(prop['chart.numticks']){var ticksize=prop['chart.ticksize'];co.strokeStyle=prop['chart.strokestyle'];co.lineWidth=prop['chart.linewidth']/2;co.beginPath();for(var i=0;i<=prop['chart.numticks'];++i){var y=this.scaleBottomY-((this.scaleHeight/prop['chart.numticks'])*i);co.moveTo(this.gutterLeft,ma.round(y));co.lineTo(this.gutterLeft+ticksize,ma.round(y));co.moveTo(ca.width-this.gutterRight,ma.round(y));co.lineTo(ca.width-this.gutterRight-ticksize,ma.round(y));}
|
32
|
+
co.stroke();co.lineWidth=1;}};this.drawLabels=this.DrawLabels=function()
|
33
|
+
{if(prop['chart.value.label']){co.fillStyle=prop['chart.text.color'];var text=prop['chart.scale.visible']?RG.numberFormat(this,this.value.toFixed(typeof prop['chart.value.label.decimals']=='number'?prop['chart.value.label.decimals']:prop['chart.scale.decimals'])):RG.numberFormat(this,this.value.toFixed(typeof prop['chart.value.label.decimals']=='number'?prop['chart.value.label.decimals']:prop['chart.scale.decimals']),prop['chart.units.pre'],prop['chart.units.post']);RG.text2(this,{font:prop['chart.text.font'],size:prop['chart.text.size'],x:this.coords[0][0]+(this.coords[0][2]/2),y:this.coords[0][1]+7,text:text,valign:'top',halign:'center',bounding:true,boundingFill:'white',tag:'value.label'});}
|
34
|
+
if(prop['chart.scale.visible']){this.drawScale();}};this.drawTitle=this.DrawTitle=function()
|
35
|
+
{co.fillStyle=prop['chart.text.color'];RG.text2(this,{font:prop['chart.text.font'],size:prop['chart.text.size']+2,x:this.gutterLeft+(this.width/2),y:this.gutterTop-3,text:String(prop['chart.title']),valign:'bottom',halign:'center',bold:true,tag:'title'});};this.drawSideTitle=this.DrawSideTitle=function()
|
36
|
+
{var font=prop['chart.title.side.font']?prop['chart.title.side.font']:prop['chart.text.font'];var size=prop['chart.title.side.size']?prop['chart.title.side.size']:prop['chart.text.size']+2;co.fillStyle=prop['chart.text.color'];RG.text2(this,{font:font,size:size+2,x:this.gutterLeft-3,y:(this.scaleHeight/2)+this.gutterTop+this.bulbTopRadius,text:String(prop['chart.title.side']),valign:'bottom',halign:'center',angle:270,bold:prop['chart.title.side.bold'],tag:'title.side',accessible:false});};this.drawScale=this.DrawScale=function()
|
37
|
+
{co.fillStyle=prop['chart.text.color'];var font=prop['chart.text.font'],size=prop['chart.text.size'],units_pre=prop['chart.units.pre'],units_post=prop['chart.units.post'],decimals=prop['chart.scale.decimals'],numLabels=prop['chart.labels.count'],step=(this.max-this.min)/numLabels;for(var i=1;i<=numLabels;++i){var x=ca.width-this.gutterRight+(prop['chart.linewidth']/2),y=ca.height-this.gutterBottom-(2*this.bulbBottomRadius)-((this.scaleHeight/numLabels)*i),text=RG.numberFormat(this,String((this.min+(i*step)).toFixed(decimals)),units_pre,units_post);RG.text2(this,{font:font,size:size,x:x+6,y:y,text:text,valign:'center',tag:'scale'});}
|
38
|
+
RG.text2(this,{font:font,size:size,x:x+6,y:this.bulbBottomCentery-this.bulbBottomRadius,text:RG.numberFormat(this,this.min.toFixed(decimals),units_pre,units_post),valign:'center',tag:'scale'});};this.getShape=this.getBar=function(e)
|
39
|
+
{var mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1];for(var i=0;i<this.coords.length;i++){var coords=this.coords[i],left=coords[0],top=coords[1],width=coords[2],height=coords[3];this.pathBar();if(co.isPointInPath(mouseX,mouseY)){var tooltip=RG.parseTooltipText?RG.parseTooltipText(prop['chart.tooltips'],i):'';return{0:this,object:this,1:left,x:left,2:top,y:top,3:width,width:width,4:height,height:height,5:i,index:i,tooltip:tooltip};}}
|
40
|
+
return null;};this.getValue=function(arg)
|
41
|
+
{if(arg.length===2){var mouseX=arg[0],mouseY=arg[1];}else{var mouseXY=RG.getMouseXY(arg),mouseX=mouseXY[0],mouseY=mouseXY[1];}
|
42
|
+
var value=(this.scaleHeight-(mouseY-this.scaleTopY))/this.scaleHeight;value*=(this.max-this.min);value+=this.min;value=ma.max(value,this.min);value=ma.min(value,this.max);return value;};this.highlight=this.Highlight=function(shape)
|
43
|
+
{if(prop['chart.tooltips.highlight']){if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);return;}
|
44
|
+
this.pathBar();pa2(co,'s % f %',prop['chart.highlight.stroke'],prop['chart.highlight.fill']);}};this.getObjectByXY=function(e)
|
45
|
+
{var mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1]
|
46
|
+
this.pathBackground();if(co.isPointInPath(mouseX,mouseY)){return this;}};this.adjusting_mousemove=this.Adjusting_mousemove=function(e)
|
47
|
+
{if(prop['chart.adjustable']&&RG.Registry.get('chart.adjusting')&&RG.Registry.Get('chart.adjusting').uid==this.uid){var mouseXY=RG.getMouseXY(e),value=this.getValue(e);if(typeof(value)=='number'){RG.fireCustomEvent(this,'onadjust');this.value=Number(value.toFixed(prop['chart.scale.decimals']));RG.redrawCanvas(ca);}}};this.getYCoord=function(value)
|
48
|
+
{if(value>this.max||value<this.min){return null;}
|
49
|
+
var coord=(this.scaleBottomY-this.scaleTopY)/(this.max-this.min);coord*=value;coord=this.scaleBottomY-coord;return coord;};this.overChartArea=function(e)
|
50
|
+
{var mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1];this.pathBackground();return co.isPointInPath(mouseX,mouseY);};this.parseColors=function()
|
51
|
+
{if(this.original_colors.length===0){this.original_colors['chart.colors']=RG.arrayClone(prop['chart.colors']);}
|
52
|
+
var colors=prop['chart.colors'];for(var i=0;i<colors.length;++i){colors[i]=this.parseSingleColorForGradient(colors[i]);}};this.reset=function()
|
53
|
+
{};this.parseSingleColorForGradient=function(color)
|
54
|
+
{if(!color){return color;}
|
55
|
+
if(typeof color==='string'&&color.match(/^gradient\((.*)\)$/i)){var parts=RegExp.$1.split(':');var grad=co.createLinearGradient(prop['chart.gutter.left'],0,ca.width-prop['chart.gutter.right'],0);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}
|
56
|
+
return grad?grad:color;};this.on=function(type,func)
|
57
|
+
{if(type.substr(0,2)!=='on'){type='on'+type;}
|
58
|
+
if(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}
|
59
|
+
return this;};this.firstDrawFunc=function()
|
60
|
+
{};this.grow=function()
|
61
|
+
{var obj=this,callback=arguments[1]||function(){},opt=arguments[0]||{},frames=opt.frames?opt.frames:30,origValue=Number(obj.currentValue),newValue=obj.value;newValue=ma.min(newValue,this.max);newValue=ma.max(newValue,this.min);var diff=newValue-origValue,step=(diff/frames),frame=0;function iterate()
|
62
|
+
{obj.value=(step*frame)+origValue;RG.clear(obj.canvas);RG.redrawCanvas(obj.canvas);if(frame<frames){frame++;RG.Effects.updateCanvas(iterate);}else{callback(obj);}}
|
63
|
+
iterate();return this;};RG.register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};
|
@@ -0,0 +1,68 @@
|
|
1
|
+
|
2
|
+
RGraph=window.RGraph||{isRGraph:true};RGraph.Thermometer=function(conf)
|
3
|
+
{if(typeof conf==='object'&&typeof conf.id==='string'){var parseConfObjectForOptions=true;}else{var conf={id:arguments[0],min:arguments[1],max:arguments[2],value:arguments[3]}}
|
4
|
+
this.id=conf.id;this.canvas=document.getElementById(this.id);this.context=this.canvas.getContext?this.canvas.getContext('2d'):null;this.canvas.__object__=this;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.colorsParsed=false;this.type='thermometer';this.isRGraph=true;this.min=RGraph.stringsToNumbers(conf.min);this.max=RGraph.stringsToNumbers(conf.max);this.value=RGraph.stringsToNumbers(conf.value);this.coords=[];this.graphArea=[];this.currentValue=null;this.bulbRadius=0;this.bulbTopRadius=0;this.bulbTopCenterX=0
|
5
|
+
this.bulbTopCenterY=0;this.coordsText=[];this.original_colors=[];this.firstDraw=true;this.properties={'chart.background.color':'white','chart.strokestyle':'black','chart.colors':['Gradient(#c00:red:#f66:#fcc)'],'chart.gutter.left':15,'chart.gutter.right':15,'chart.gutter.top':15,'chart.gutter.bottom':15,'chart.ticksize':3,'chart.text.color':'black','chart.text.font':'Segoe UI, Arial, Verdana, sans-serif','chart.text.size':12,'chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':true,'chart.units.pre':'','chart.units.post':'','chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.hdir':'right','chart.zoom.vdir':'down','chart.zoom.frames':25,'chart.zoom.delay':16.666,'chart.zoom.shadow':true,'chart.zoom.background':true,'chart.title':'','chart.title.side':'','chart.title.side.bold':true,'chart.title.side.font':null,'chart.shadow':true,'chart.shadow.offsetx':0,'chart.shadow.offsety':0,'chart.shadow.blur':15,'chart.shadow.color':'gray','chart.resizable':false,'chart.contextmenu':null,'chart.adjustable':false,'chart.value.label':true,'chart.value.label.decimals':null,'chart.value.label.thousand':',','chart.value.label.point':'.','chart.labels.count':5,'chart.scale.visible':false,'chart.scale.decimals':0,'chart.annotatable':false,'chart.annotate.color':'black','chart.scale.decimals':0,'chart.scale.point':'.','chart.scale.thousand':',','chart.tooltips':null,'chart.tooltips.highlight':true,'chart.tooltips.effect':'fade','chart.tooltips.event':'onclick','chart.highlight.stroke':'rgba(0,0,0,0)','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.clearto':'rgba(0,0,0,0)'}
|
6
|
+
if(!this.canvas){alert('[THERMOMETER] No canvas support');return;}
|
7
|
+
this.$0={}
|
8
|
+
if(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}
|
9
|
+
var RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math
|
10
|
+
if(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}
|
11
|
+
this.set=this.Set=function(name)
|
12
|
+
{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}
|
13
|
+
if(name.substr(0,6)!='chart.'){name='chart.'+name;}
|
14
|
+
while(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}
|
15
|
+
if(name=='chart.ylabels.count'){name='chart.labels.count';}
|
16
|
+
prop[name.toLowerCase()]=value;return this;};this.get=this.Get=function(name)
|
17
|
+
{if(name.substr(0,6)!='chart.'){name='chart.'+name;}
|
18
|
+
while(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}
|
19
|
+
return prop[name];};this.draw=this.Draw=function()
|
20
|
+
{RG.fireCustomEvent(this,'onbeforedraw');if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}
|
21
|
+
this.currentValue=this.value;this.coordsText=[];this.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];this.scale2=RG.getScale2(this,{'max':this.max,'min':this.min,'strict':true,'scale.thousand':prop['chart.scale.thousand'],'scale.point':prop['chart.scale.point'],'scale.decimals':prop['chart.scale.decimals'],'ylabels.count':prop['chart.labels.count'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post']});this.drawBackground();this.drawBar();this.drawTickMarks();this.DrawLabels();if(prop['chart.title']){this.DrawTitle();}
|
22
|
+
if(prop['chart.title.side']){this.DrawSideTitle();}
|
23
|
+
if(prop['chart.resizable']){RG.AllowResizing(this);}
|
24
|
+
if(prop['chart.contextmenu']){RG.ShowContext(this);}
|
25
|
+
RG.InstallEventListeners(this);if(this.firstDraw){RG.fireCustomEvent(this,'onfirstdraw');this.firstDraw=false;this.firstDrawFunc();}
|
26
|
+
RG.FireCustomEvent(this,'ondraw');return this;};this.drawBackground=this.DrawBackground=function()
|
27
|
+
{var bulbRadius=(ca.width-this.gutterLeft-this.gutterRight)/2;this.bulbTopRadius=(ca.width-this.gutterLeft-this.gutterRight-24)/2
|
28
|
+
this.bulbTopCenterX=this.gutterLeft+bulbRadius;this.bulbTopCenterY=this.gutterTop+bulbRadius;this.bulbBottomRadius=bulbRadius;this.bulbBottomCenterX=this.gutterLeft+bulbRadius;this.bulbBottomCenterY=ca.height-this.gutterBottom-bulbRadius;this.bulbRadius=bulbRadius;co.beginPath();co.fillStyle=prop['chart.strokestyle'];if(prop['chart.shadow']){RG.setShadow(this,prop['chart.shadow.color'],prop['chart.shadow.offsetx'],prop['chart.shadow.offsety'],prop['chart.shadow.blur']);}
|
29
|
+
co.fillRect(this.gutterLeft+12,this.gutterTop+bulbRadius,ca.width-this.gutterLeft-this.gutterRight-24,ca.height-this.gutterTop-this.gutterBottom-bulbRadius-bulbRadius);co.arc(this.bulbBottomCenterX,this.bulbBottomCenterY,bulbRadius,0,RG.TWOPI,0);co.arc(this.bulbTopCenterX,this.bulbTopCenterY,this.bulbTopRadius,0,RG.TWOPI,0);co.fill();RG.NoShadow(this);co.beginPath();co.fillStyle=prop['chart.background.color'];co.fillRect(this.gutterLeft+12+1,this.gutterTop+bulbRadius,ca.width-this.gutterLeft-this.gutterRight-24-2,ca.height-this.gutterTop-this.gutterBottom-bulbRadius-bulbRadius);co.arc(this.gutterLeft+bulbRadius,ca.height-this.gutterBottom-bulbRadius,bulbRadius-10,0,RG.TWOPI,0);co.arc(this.gutterLeft+bulbRadius,this.gutterTop+bulbRadius,((ca.width-this.gutterLeft-this.gutterRight-24)/2)-1,0,RG.TWOPI,0);co.fill();co.beginPath();co.fillStyle=prop['chart.colors'][0];co.arc(this.gutterLeft+bulbRadius,ca.height-this.gutterBottom-bulbRadius,bulbRadius-1,0,RG.TWOPI,0);co.rect(this.gutterLeft+12+1,ca.height-this.gutterBottom-bulbRadius-bulbRadius,ca.width-this.gutterLeft-this.gutterRight-24-2,bulbRadius);co.fill();this.graphArea[0]=this.gutterLeft+12+1;this.graphArea[1]=this.gutterTop+bulbRadius;this.graphArea[2]=ca.width-this.gutterLeft-this.gutterRight-24-2;this.graphArea[3]=(ca.height-this.gutterBottom-bulbRadius-bulbRadius)-(this.graphArea[1]);};this.drawBar=this.DrawBar=function()
|
30
|
+
{var barHeight=((this.value-this.min)/(this.max-this.min))*this.graphArea[3];co.beginPath();co.fillStyle=prop['chart.colors'][0];if(RGraph.ISOLD){co.arc(this.bulbBottomCenterX,this.bulbBottomCenterY,this.bulbBottomRadius-1,0,RG.TWOPI,false)}
|
31
|
+
co.rect(this.graphArea[0],this.graphArea[1]+this.graphArea[3]-barHeight,this.graphArea[2],barHeight+2);co.fill();this.coords[0]=[this.graphArea[0],this.graphArea[1]+this.graphArea[3]-barHeight,this.graphArea[2],barHeight];};this.drawTickMarks=this.DrawTickMarks=function()
|
32
|
+
{co.strokeStyle=prop['chart.strokestyle']
|
33
|
+
var ticksize=prop['chart.ticksize'];co.beginPath();for(var i=this.graphArea[1];i<=(this.graphArea[1]+this.graphArea[3]);i+=(this.graphArea[3]/10)){co.moveTo(this.gutterLeft+12,Math.round(i));co.lineTo(this.gutterLeft+12+ticksize,Math.round(i));}
|
34
|
+
co.stroke();co.beginPath();for(var i=this.graphArea[1];i<=(this.graphArea[1]+this.graphArea[3]);i+=(this.graphArea[3]/10)){co.moveTo(ca.width-(this.gutterRight+12),Math.round(i));co.lineTo(ca.width-(this.gutterRight+12+ticksize),Math.round(i));}
|
35
|
+
co.stroke();};this.drawLabels=this.DrawLabels=function()
|
36
|
+
{if(prop['chart.value.label']){co.fillStyle=prop['chart.text.color'];var text=prop['chart.scale.visible']?RG.number_format(this,this.value.toFixed(typeof prop['chart.value.label.decimals']=='number'?prop['chart.value.label.decimals']:prop['chart.scale.decimals'])):RG.number_format(this,this.value.toFixed(typeof prop['chart.value.label.decimals']=='number'?prop['chart.value.label.decimals']:prop['chart.scale.decimals']),prop['chart.units.pre'],prop['chart.units.post']);RG.Text2(this,{'font':prop['chart.text.font'],'size':prop['chart.text.size'],'x':this.gutterLeft+this.bulbRadius,'y':this.coords[0][1]+7,'text':text,'valign':'top','halign':'center','bounding':true,'boundingFill':'white','tag':'value.label'});}
|
37
|
+
if(prop['chart.scale.visible']){this.DrawScale();}};this.drawTitle=this.DrawTitle=function()
|
38
|
+
{co.fillStyle=prop['chart.text.color'];RG.Text2(this,{'font':prop['chart.text.font'],'size':prop['chart.text.size']+2,'x':this.gutterLeft+((ca.width-this.gutterLeft-this.gutterRight)/2),'y':this.gutterTop,'text':String(prop['chart.title']),'valign':'center','halign':'center','bold':true,'tag':'title'});};this.drawSideTitle=this.DrawSideTitle=function()
|
39
|
+
{var font=prop['chart.title.side.font']?prop['chart.title.side.font']:prop['chart.text.font'];var size=prop['chart.title.side.size']?prop['chart.title.side.size']:prop['chart.text.size']+2;co.fillStyle=prop['chart.text.color'];RG.Text2(this,{'font':font,'size':size+2,'x':this.gutterLeft-3,'y':((ca.height-this.gutterTop-this.gutterBottom)/2)+this.gutterTop,'text':String(prop['chart.title.side']),'valign':'center','halign':'center','angle':270,'bold':prop['chart.title.side.bold'],'tag':'title.side'});};this.drawScale=this.DrawScale=function()
|
40
|
+
{var numLabels=prop['chart.labels.count'];var step=(this.max-this.min)/numLabels;co.fillStyle=prop['chart.text.color'];var font=prop['chart.text.font'];var size=prop['chart.text.size'];var units_pre=prop['chart.units.pre'];var units_post=prop['chart.units.post'];var decimals=prop['chart.scale.decimals'];for(var i=1;i<=numLabels;++i){var x=ca.width-this.gutterRight;var y=ca.height-this.gutterBottom-(2*this.bulbRadius)-((this.graphArea[3]/numLabels)*i);var text=RG.number_format(this,String((this.min+(i*step)).toFixed(decimals)),units_pre,units_post);RG.Text2(this,{'font':font,'size':size,'x':x-6,'y':y,'text':text,'valign':'center','tag':'scale'});}
|
41
|
+
RG.Text2(this,{'font':font,'size':size,'x':x-6,'y':ca.height-this.gutterBottom-(2*this.bulbRadius),'text':RG.number_format(this,(this.min).toFixed(decimals),units_pre,units_post),'valign':'center','tag':'scale'});};this.getShape=this.getBar=function(e)
|
42
|
+
{for(var i=0;i<this.coords.length;i++){var mouseCoords=RGraph.getMouseXY(e);var mouseX=mouseCoords[0];var mouseY=mouseCoords[1];var left=this.coords[i][0];var top=this.coords[i][1];var width=this.coords[i][2];var height=this.coords[i][3];if((mouseX>=left&&mouseX<=(left+width)&&mouseY>=top&&mouseY<=(top+height+this.bulbBottomRadius))||RG.getHypLength(this.bulbBottomCenterX,this.bulbBottomCenterY,mouseX,mouseY)<=this.bulbBottomRadius){var tooltip=RG.parseTooltipText?RG.parseTooltipText(prop['chart.tooltips'],i):'';return{0:this,'object':this,1:left,'x':left,2:top,'y':top,3:width,'width':width,4:height,'height':height,5:i,'index':i,'tooltip':tooltip};}}
|
43
|
+
return null;};this.getValue=function(arg)
|
44
|
+
{if(arg.length==2){var mouseX=arg[0];var mouseY=arg[1];}else{var mouseCoords=RGraph.getMouseXY(arg);var mouseX=mouseCoords[0];var mouseY=mouseCoords[1];}
|
45
|
+
var value=this.graphArea[3]-(mouseY-this.graphArea[1]);value=(value/this.graphArea[3])*(this.max-this.min);value=value+this.min;value=Math.max(value,this.min);value=Math.min(value,this.max);return value;};this.highlight=this.Highlight=function(shape)
|
46
|
+
{if(prop['chart.tooltips.highlight']){if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);return;}
|
47
|
+
pa2(co,'b r % % % % a % % % % % false s % f %',shape['x'],shape['y'],shape['width'],shape['height']+this.bulbBottomRadius,this.bulbBottomCenterX,this.bulbBottomCenterY,this.bulbBottomRadius-1,0,RG.TWOPI,prop['chart.highlight.stroke'],prop['chart.highlight.fill']);}};this.getObjectByXY=function(e)
|
48
|
+
{var mouseXY=RGraph.getMouseXY(e);if(mouseXY[0]>this.gutterLeft&&mouseXY[0]<(ca.width-this.gutterRight)&&mouseXY[1]>=this.gutterTop&&mouseXY[1]<=(ca.height-this.gutterBottom)){return this;}};this.adjusting_mousemove=this.Adjusting_mousemove=function(e)
|
49
|
+
{if(prop['chart.adjustable']&&RG.Registry.Get('chart.adjusting')&&RG.Registry.Get('chart.adjusting').uid==this.uid){var mouseXY=RGraph.getMouseXY(e);var value=this.getValue(e);if(typeof(value)=='number'){RG.FireCustomEvent(this,'onadjust');this.value=Number(value.toFixed(prop['chart.scale.decimals']));RG.redrawCanvas(ca);}}};this.getYCoord=function(value)
|
50
|
+
{if(value>this.max||value<this.min){return null;}
|
51
|
+
var y=(this.graphArea[1]+this.graphArea[3])-(((value-this.min)/(this.max-this.min))*this.graphArea[3]);return y;};this.overChartArea=function(e)
|
52
|
+
{var mouseXY=RG.getMouseXY(e);var mouseX=mouseXY[0];var mouseY=mouseXY[1];if(mouseX>=this.graphArea[0]&&mouseX<=(this.graphArea[0]+this.graphArea[2])&&mouseY>=this.graphArea[1]&&mouseY<=(this.graphArea[1]+this.graphArea[3]+this.bulbRadius)){return true;}
|
53
|
+
if(RG.getHypLength(this.bulbBottomCenterX,this.bulbBottomCenterY,mouseX,mouseY)<=this.bulbRadius){return true;}
|
54
|
+
if(RG.getHypLength(this.bulbTopCenterX,this.bulbTopCenterY,mouseX,mouseY)<=this.bulbTopRadius){return true;}
|
55
|
+
return false;};this.parseColors=function()
|
56
|
+
{if(this.original_colors.length===0){this.original_colors['chart.colors']=RG.array_clone(prop['chart.colors']);}
|
57
|
+
var colors=prop['chart.colors'];for(var i=0;i<colors.length;++i){colors[i]=this.parseSingleColorForGradient(colors[i]);}};this.reset=function()
|
58
|
+
{};this.parseSingleColorForGradient=function(color)
|
59
|
+
{if(!color){return color;}
|
60
|
+
if(typeof color==='string'&&color.match(/^gradient\((.*)\)$/i)){var parts=RegExp.$1.split(':');var grad=co.createLinearGradient(prop['chart.gutter.left'],0,ca.width-prop['chart.gutter.right'],0);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}
|
61
|
+
return grad?grad:color;};this.on=function(type,func)
|
62
|
+
{if(type.substr(0,2)!=='on'){type='on'+type;}
|
63
|
+
if(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}
|
64
|
+
return this;};this.firstDrawFunc=function()
|
65
|
+
{};this.grow=function()
|
66
|
+
{var obj=this;var callback=arguments[1]||function(){};var opt=arguments[0]||{};var frames=opt.frames?opt.frames:30;var origValue=Number(obj.currentValue);var newValue=obj.value;newValue=ma.min(newValue,this.max);newValue=ma.max(newValue,this.min);var diff=newValue-origValue;var step=(diff/frames);var frame=0;function iterate()
|
67
|
+
{obj.value=(step*frame)+origValue;RGraph.clear(obj.canvas);RGraph.redrawCanvas(obj.canvas);if(frame<frames){frame++;RGraph.Effects.updateCanvas(iterate);}else{callback(obj);}}
|
68
|
+
iterate();return this;};RG.att(ca);RG.Register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};
|
@@ -0,0 +1,84 @@
|
|
1
|
+
|
2
|
+
RGraph=window.RGraph||{isRGraph:true};RGraph.VProgress=function(conf)
|
3
|
+
{if(typeof conf==='object'&&typeof conf.id==='string'){var parseConfObjectForOptions=true;}else{var conf={id:arguments[0],min:arguments[1],max:arguments[2],value:arguments[3]}}
|
4
|
+
this.id=conf.id;this.canvas=document.getElementById(this.id);this.context=this.canvas.getContext('2d');this.canvas.__object__=this;this.min=RGraph.stringsToNumbers(conf.min);this.max=RGraph.stringsToNumbers(conf.max);this.value=RGraph.stringsToNumbers(conf.value);this.type='vprogress';this.coords=[];this.isRGraph=true;this.currentValue=null;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.colorsParsed=false;this.coordsText=[];this.original_colors=[];this.firstDraw=true;this.properties={'chart.colors':['Gradient(white:#0c0)','Gradient(white:red)','Gradient(white:green)','yellow','pink','cyan','black','white','gray'],'chart.strokestyle.inner':'#999','chart.strokestyle.outer':'#999','chart.tickmarks':true,'chart.tickmarks.zerostart':true,'chart.tickmarks.color':'#999','chart.tickmarks.inner':false,'chart.gutter.left':25,'chart.gutter.right':25,'chart.gutter.top':25,'chart.gutter.bottom':25,'chart.numticks':10,'chart.numticks.inner':50,'chart.background.color':'Gradient(#ccc:#eee:#efefef)','chart.shadow':false,'chart.shadow.color':'rgba(0,0,0,0.5)','chart.shadow.blur':3,'chart.shadow.offsetx':3,'chart.shadow.offsety':3,'chart.title':'','chart.title.bold':true,'chart.title.font':null,'chart.title.size':null,'chart.title.color':'black','chart.title.side':null,'chart.title.side.font':'Segoe UI, Arial, Verdana, sans-serif','chart.title.side.size':12,'chart.title.side.color':'black','chart.title.side.bold':true,'chart.text.size':12,'chart.text.color':'black','chart.text.font':'Segoe UI, Arial, Verdana, sans-serif','chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':true,'chart.contextmenu':null,'chart.units.pre':'','chart.units.post':'','chart.tooltips':null,'chart.tooltips.effect':'fade','chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.highlight':true,'chart.tooltips.event':'onclick','chart.highlight.stroke':'rgba(0,0,0,0)','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.annotatable':false,'chart.annotate.color':'black','chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.hdir':'right','chart.zoom.vdir':'down','chart.zoom.frames':25,'chart.zoom.delay':16.666,'chart.zoom.shadow':true,'chart.zoom.background':true,'chart.zoom.action':'zoom','chart.arrows':false,'chart.margin':0,'chart.resizable':false,'chart.resize.handle.adjust':[0,0],'chart.resize.handle.background':null,'chart.label.inner':false,'chart.labels.count':10,'chart.labels.position':'right','chart.labels.offsetx':0,'chart.labels.offsety':0,'chart.adjustable':false,'chart.scale.decimals':0,'chart.scale.thousand':',','chart.scale.point':'.','chart.key':null,'chart.key.background':'white','chart.key.position':'graph','chart.key.halign':'right','chart.key.shadow':false,'chart.key.shadow.color':'#666','chart.key.shadow.blur':3,'chart.key.shadow.offsetx':2,'chart.key.shadow.offsety':2,'chart.key.position.gutter.boxed':false,'chart.key.position.x':null,'chart.key.position.y':null,'chart.key.color.shape':'square','chart.key.rounded':true,'chart.key.linewidth':1,'chart.key.colors':null,'chart.key.interactive':false,'chart.key.interactive.highlight.chart.stroke':'#000','chart.key.interactive.highlight.chart.fill':'rgba(255,255,255,0.7)','chart.key.interactive.highlight.label':'rgba(255,0,0,0.2)','chart.key.text.color':'black','chart.events.click':null,'chart.events.mousemove':null,'chart.border.inner':true,'chart.clearto':'rgba(0,0,0,0)'}
|
5
|
+
if(!this.canvas){alert('[PROGRESS] No canvas support');return;}
|
6
|
+
var linear_data=RGraph.arrayLinearize(this.value);for(var i=0;i<linear_data.length;++i){this['$'+i]={};}
|
7
|
+
if(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}
|
8
|
+
var RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math
|
9
|
+
if(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}
|
10
|
+
this.set=this.Set=function(name)
|
11
|
+
{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}
|
12
|
+
if(name.substr(0,6)!='chart.'){name='chart.'+name;}
|
13
|
+
if(name=='chart.strokestyle'){prop['chart.strokestyle.inner']=value;prop['chart.strokestyle.outer']=value;return;}
|
14
|
+
while(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}
|
15
|
+
prop[name.toLowerCase()]=value;return this;};this.get=this.Get=function(name)
|
16
|
+
{if(name.substr(0,6)!='chart.'){name='chart.'+name;}
|
17
|
+
while(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}
|
18
|
+
return prop[name.toLowerCase()];};this.draw=this.Draw=function()
|
19
|
+
{RG.FireCustomEvent(this,'onbeforedraw');if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}
|
20
|
+
this.currentValue=this.value;this.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];this.width=ca.width-this.gutterLeft-this.gutterRight;this.height=ca.height-this.gutterTop-this.gutterBottom;this.coords=[];this.coordsText=[];this.Drawbar();this.DrawTickMarks();this.DrawLabels();this.DrawTitles();if(prop['chart.bevel']){this.DrawBevel();}
|
21
|
+
if(prop['chart.contextmenu']){RG.ShowContext(this);}
|
22
|
+
RG.InstallEventListeners(this);if(prop['chart.key']&&prop['chart.key'].length){RG.DrawKey(this,prop['chart.key'],prop['chart.colors']);}
|
23
|
+
if(prop['chart.resizable']){RG.AllowResizing(this);}
|
24
|
+
this.AllowAdjusting();if(this.firstDraw){RG.fireCustomEvent(this,'onfirstdraw');this.firstDraw=false;this.firstDrawFunc();}
|
25
|
+
RG.FireCustomEvent(this,'ondraw');return this;};this.drawbar=this.Drawbar=function()
|
26
|
+
{this.scale2=RG.getScale2(this,{'max':this.max,'min':this.min,'strict':true,'scale.thousand':prop['chart.scale.thousand'],'scale.point':prop['chart.scale.point'],'scale.decimals':prop['chart.scale.decimals'],'ylabels.count':prop['chart.labels.count'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post']});if(prop['chart.shadow']){RG.setShadow(this,prop['chart.shadow.color'],prop['chart.shadow.offsetx'],prop['chart.shadow.offsety'],prop['chart.shadow.blur']);}
|
27
|
+
co.fillStyle=prop['chart.background.color'];co.strokeStyle=prop['chart.strokestyle.outer'];co.strokeRect(this.gutterLeft,this.gutterTop,this.width,this.height);co.fillRect(this.gutterLeft,this.gutterTop,this.width,this.height);RG.noShadow(this);co.strokeStyle=prop['chart.strokestyle.outer'];co.fillStyle=prop['chart.colors'][0];var margin=prop['chart.margin'];var barHeight=(ca.height-this.gutterTop-this.gutterBottom)*((RG.arraySum(this.value)-this.min)/(this.max-this.min));if(typeof this.value==='number'){co.lineWidth=1;co.strokeStyle=prop['chart.strokestyle.inner'];if(prop['chart.border.inner']){this.drawCurvedBar({x:this.gutterLeft+margin,y:this.gutterTop+(this.height-barHeight),width:this.width-margin-margin,height:barHeight,stroke:prop['chart.strokestyle.inner']});}
|
28
|
+
this.drawCurvedBar({x:this.gutterLeft+margin,y:this.gutterTop+(this.height-barHeight),width:this.width-margin-margin,height:barHeight,fill:prop['chart.colors'][0]});}else if(typeof this.value=='object'){co.beginPath();co.strokeStyle=prop['chart.strokestyle.inner'];var startPoint=ca.height-this.gutterBottom;for(var i=0,len=this.value.length;i<len;++i){var segmentHeight=((this.value[i]-this.min)/(this.max-this.min))*(ca.height-this.gutterBottom-this.gutterTop);co.fillStyle=prop['chart.colors'][i];co.beginPath();if(prop['chart.border.inner']){this.drawCurvedBar({x:this.gutterLeft+margin,y:startPoint-segmentHeight,width:this.width-margin-margin,height:segmentHeight,stroke:co.strokeStyle});}
|
29
|
+
this.drawCurvedBar({x:this.gutterLeft+margin,y:startPoint-segmentHeight,width:this.width-margin-margin,height:segmentHeight,fill:co.fillStyle});this.coords.push([this.gutterLeft+margin,startPoint-segmentHeight,this.width-margin-margin,segmentHeight]);startPoint-=segmentHeight;}
|
30
|
+
co.fill();}
|
31
|
+
if(prop['chart.tickmarks.inner']){var spacing=(ca.height-this.gutterTop-this.gutterBottom)/prop['chart.numticks.inner'];co.lineWidth=1;co.strokeStyle=prop['chart.strokestyle.outer'];co.beginPath();for(var y=this.gutterTop;y<ca.height-this.gutterBottom;y+=spacing){co.moveTo(this.gutterLeft,Math.round(y));co.lineTo(this.gutterLeft+3,Math.round(y));co.moveTo(ca.width-this.gutterRight,Math.round(y));co.lineTo(ca.width-this.gutterRight-3,Math.round(y));}
|
32
|
+
co.stroke();}
|
33
|
+
co.beginPath();co.strokeStyle=prop['chart.strokestyle.inner'];if(typeof this.value=='number'){if(prop['chart.border.inner']){this.drawCurvedBar({x:this.gutterLeft+margin,y:this.gutterTop+this.height-barHeight,width:this.width-margin-margin,height:barHeight});}
|
34
|
+
this.drawCurvedBar({x:this.gutterLeft+margin,y:this.gutterTop+this.height-barHeight,width:this.width-margin-margin,height:barHeight});this.coords.push([this.gutterLeft+margin,this.gutterTop+this.height-barHeight,this.width-margin-margin,barHeight]);}
|
35
|
+
if(prop['chart.arrows']){var x=this.gutterLeft-4;var y=ca.height-this.gutterBottom-barHeight;co.lineWidth=1;co.fillStyle='black';co.strokeStyle='black';co.beginPath();co.moveTo(x,y);co.lineTo(x-4,y-2);co.lineTo(x-4,y+2);co.closePath();co.stroke();co.fill();x+=this.width+8;co.beginPath();co.moveTo(x,y);co.lineTo(x+4,y-2);co.lineTo(x+4,y+2);co.closePath();co.stroke();co.fill();pa2(co,'b');}
|
36
|
+
if(prop['chart.label.inner']){co.fillStyle='black';RG.text2(this,{'font':prop['chart.text.font'],'size':prop['chart.text.size'],'x':((ca.width-this.gutterLeft-this.gutterRight)/2)+this.gutterLeft,'y':this.coords[this.coords.length-1][1]-5,'text':RGraph.number_format(this,(typeof(this.value)=='number'?this.value:RG.array_sum(this.value)).toFixed(prop['chart.scale.decimals'])),'valign':'bottom','halign':'center','bounding':true,'boundingFill':'white','tag':'label.inner'});}};this.drawTickMarks=this.DrawTickMarks=function()
|
37
|
+
{co.strokeStyle=prop['chart.tickmarks.color'];if(prop['chart.tickmarks']){co.beginPath();for(var i=0;prop['chart.tickmarks.zerostart']?i<=prop['chart.numticks']:i<prop['chart.numticks'];i++){var startX=prop['chart.labels.position']=='left'?this.gutterLeft:ca.width-prop['chart.gutter.right'];var endX=prop['chart.labels.position']=='left'?startX-4:startX+4;var yPos=(this.height*(i/prop['chart.numticks']))+this.gutterTop
|
38
|
+
co.moveTo(startX,ma.round(yPos));co.lineTo(endX,ma.round(yPos));}
|
39
|
+
co.stroke();}};this.drawLabels=this.DrawLabels=function()
|
40
|
+
{if(!RG.is_null(prop['chart.labels.specific'])){return this.DrawSpecificLabels();}
|
41
|
+
co.fillStyle=prop['chart.text.color'];var position=prop['chart.labels.position'].toLowerCase();var xAlignment=position=='left'?'right':'left';var yAlignment='center';var count=prop['chart.labels.count'];var units_pre=prop['chart.units.pre'];var units_post=prop['chart.units.post'];var text_size=prop['chart.text.size'];var text_font=prop['chart.text.font'];var decimals=prop['chart.scale.decimals'];var offsetx=prop['chart.labels.offsetx'];var offsety=prop['chart.labels.offsety'];if(prop['chart.tickmarks']){for(var i=0;i<count;++i){RG.text2(this,{font:text_font,size:text_size,x:position=='left'?(this.gutterLeft-7+offsetx):(ca.width-this.gutterRight+7)+offsetx,y:(((ca.height-this.gutterTop-this.gutterBottom)/count)*i)+this.gutterTop+offsety,text:this.scale2.labels[this.scale2.labels.length-(i+1)],valign:yAlignment,halign:xAlignment,tag:'scale'});}
|
42
|
+
if(prop['chart.tickmarks.zerostart']&&this.min==0){RG.text2(this,{font:text_font,size:text_size,x:position=='left'?(this.gutterLeft-5+offsetx):(ca.width-this.gutterRight+5+offsetx),y:ca.height-this.gutterBottom+offsety,'text':RG.numberFormat(this,this.min.toFixed(this.min===0?0:decimals),units_pre,units_post),valign:yAlignment,halign:xAlignment,tag:'scale'});}
|
43
|
+
if(this.min!=0){RG.text2(this,{font:text_font,size:text_size,x:position=='left'?(this.gutterLeft-5+offsetx):(ca.width-this.gutterRight+5+offsetx),y:ca.height-this.gutterBottom+offsety,text:RG.number_format(this,this.min.toFixed(decimals),units_pre,units_post),valign:yAlignment,halign:xAlignment,tag:'scale'});}}};this.drawTitles=this.DrawTitles=function()
|
44
|
+
{var text_size=prop['chart.text.size'];var text_font=prop['chart.text.font'];var title_size=prop['chart.title.size']?prop['chart.title.size']:text_size+2;if(prop['chart.title'].length>0){co.fillStyle=prop['chart.title.color'];RG.text2(this,{'font':prop['chart.title.font']?prop['chart.title.font']:text_font,'size':title_size,'x':this.gutterLeft+((ca.width-this.gutterLeft-this.gutterRight)/2),'y':this.gutterTop-5,'text':prop['chart.title'],'valign':'bottom','halign':'center','bold':prop['chart.title.bold'],'tag':'title'});}
|
45
|
+
if(typeof(prop['chart.title.side'])=='string'){co.fillStyle=prop['chart.title.side.color'];RG.Text2(this,{'font':prop['chart.title.side.font'],'size':prop['chart.title.side.size'],'x':prop['chart.labels.position']=='right'?this.gutterLeft-10:(ca.width-this.gutterRight)+10,'y':this.gutterTop+(this.height/2),'text':prop['chart.title.side'],'valign':'bottom','halign':'center','angle':prop['chart.labels.position']=='right'?270:90,'bold':prop['chart.title.side.bold'],'tag':'title.side'});}};this.getShape=this.getBar=function(e)
|
46
|
+
{var mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1]
|
47
|
+
for(var i=0,len=this.coords.length;i<len;i++){var x=this.coords[i][0],y=this.coords[i][1],w=this.coords[i][2],h=this.coords[i][3],idx=i;co.beginPath();this.drawCurvedBar({x:x,y:y,width:w,height:h});if(co.isPointInPath(mouseX,mouseY)){var tooltip=RG.parseTooltipText(prop['chart.tooltips'],i);return{0:this,'object':this,1:x,'x':x,2:y,'y':y,3:w,'width':w,4:h,'height':h,5:i,'index':i,'tooltip':tooltip};}}};this.getValue=function(e)
|
48
|
+
{var mouseCoords=RG.getMouseXY(e);var mouseX=mouseCoords[0];var mouseY=mouseCoords[1];var value=(this.height-(mouseY-this.gutterTop))/this.height;value*=this.max-this.min;value+=this.min;if(value>this.max)value=this.max;if(value<this.min)value=this.min;return value;};this.highlight=this.Highlight=function(shape)
|
49
|
+
{if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else{var last=shape.index===this.coords.length-1;this.drawCurvedBar({x:shape.x,y:shape.y,width:shape.width,height:shape.height,stroke:prop['chart.highlight.stroke'],fill:prop['chart.highlight.fill']});}};this.getObjectByXY=function(e)
|
50
|
+
{var mouseXY=RG.getMouseXY(e);if(mouseXY[0]>this.gutterLeft&&mouseXY[0]<(ca.width-this.gutterRight)&&mouseXY[1]>=this.gutterTop&&mouseXY[1]<=(ca.height-this.gutterBottom)){return this;}};this.allowAdjusting=this.AllowAdjusting=function(){return;};this.adjusting_mousemove=this.Adjusting_mousemove=function(e)
|
51
|
+
{if(prop['chart.adjustable']&&RG.Registry.Get('chart.adjusting')&&RG.Registry.Get('chart.adjusting').uid==this.uid){var mouseXY=RG.getMouseXY(e);var value=this.getValue(e);if(typeof value==='number'){RG.FireCustomEvent(this,'onadjust');this.value=Number(value.toFixed(prop['chart.scale.decimals']));RG.RedrawCanvas(this.canvas);}}};this.drawSpecificLabels=this.DrawSpecificLabels=function()
|
52
|
+
{var labels=prop['chart.labels.specific'];if(labels){var font=prop['chart.text.font'];var size=prop['chart.text.size'];var halign=prop['chart.labels.position']=='right'?'left':'right';var step=this.height/(labels.length-1);co.beginPath();co.fillStyle=prop['chart.text.color'];for(var i=0;i<labels.length;++i){RG.Text2(this,{'font':font,'size':size,'x':prop['chart.labels.position']=='right'?ca.width-this.gutterRight+7:this.gutterLeft-7,'y':(this.height+this.gutterTop)-(step*i),'text':labels[i],'valign':'center','halign':halign,'tag':'labels.specific'});}
|
53
|
+
co.fill();}};this.getYCoord=function(value)
|
54
|
+
{if(value>this.max||value<this.min){return null;}
|
55
|
+
var barHeight=ca.height-prop['chart.gutter.top']-prop['chart.gutter.bottom'];var coord=((value-this.min)/(this.max-this.min))*barHeight;coord=ca.height-coord-prop['chart.gutter.bottom'];return coord;};this.overChartArea=function(e)
|
56
|
+
{var mouseXY=RGraph.getMouseXY(e);var mouseX=mouseXY[0];var mouseY=mouseXY[1];if(mouseX>=this.gutterLeft&&mouseX<=(ca.width-this.gutterRight)&&mouseY>=this.gutterTop&&mouseY<=(ca.height-this.gutterBottom)){return true;}
|
57
|
+
return false;};this.parseColors=function()
|
58
|
+
{if(this.original_colors.length===0){this.original_colors['chart.colors']=RG.array_clone(prop['chart.colors']);this.original_colors['chart.tickmarks.color']=RG.array_clone(prop['chart.tickmarks.color']);this.original_colors['chart.strokestyle.inner']=RG.array_clone(prop['chart.strokestyle.inner']);this.original_colors['chart.strokestyle.outer']=RG.array_clone(prop['chart.strokestyle.outer']);this.original_colors['chart.highlight.fill']=RG.array_clone(prop['chart.highlight.fill']);this.original_colors['chart.highlight.stroke']=RG.array_clone(prop['chart.highlight.stroke']);this.original_colors['chart.highlight.color']=RG.array_clone(prop['chart.highlight.color']);}
|
59
|
+
var colors=prop['chart.colors'];for(var i=0,len=colors.length;i<len;++i){colors[i]=this.parseSingleColorForGradient(colors[i]);}
|
60
|
+
prop['chart.tickmarks.color']=this.parseSingleColorForGradient(prop['chart.tickmarks.color']);prop['chart.strokestyle.inner']=this.parseSingleColorForGradient(prop['chart.strokestyle.inner']);prop['chart.strokestyle.outer']=this.parseSingleColorForGradient(prop['chart.strokestyle.outer']);prop['chart.highlight.fill']=this.parseSingleColorForGradient(prop['chart.highlight.fill']);prop['chart.highlight.stroke']=this.parseSingleColorForGradient(prop['chart.highlight.stroke']);prop['chart.background.color']=this.parseSingleColorForGradient(prop['chart.background.color']);};this.reset=function()
|
61
|
+
{};this.parseSingleColorForGradient=function(color)
|
62
|
+
{if(!color||typeof color!='string'){return color;}
|
63
|
+
if(color.match(/^gradient\((.*)\)$/i)){var parts=RegExp.$1.split(':');var grad=co.createLinearGradient(0,ca.height-prop['chart.gutter.bottom'],0,prop['chart.gutter.top']);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1,len=parts.length;j<len;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}
|
64
|
+
return grad?grad:color;}
|
65
|
+
return grad?grad:color;};this.drawBevel=this.DrawBevel=function()
|
66
|
+
{for(var i=0,height=0;i<this.coords.length;++i){height+=this.coords[i][3];}
|
67
|
+
co.save();co.beginPath();co.rect(this.coords[0][0],this.coords[this.coords.length-1][1]-1,this.coords[0][2],height);co.clip();co.save();co.beginPath();this.drawCurvedBar({x:this.coords[0][0],y:this.coords[this.coords.length-1][1]-1,width:this.coords[0][2],height:height});co.clip();co.beginPath();co.shadowColor='black';co.shadowOffsetX=0;co.shadowOffsetY=0;co.shadowBlur=15;co.lineWidth=2;this.drawCurvedBar({x:this.coords[0][0]-1,y:this.coords[this.coords.length-1][1]-1,width:this.coords[0][2]+2,height:height+2+100});co.stroke();co.restore();co.restore();};this.interactiveKeyHighlight=function(index)
|
68
|
+
{var coords=this.coords[index];co.beginPath();co.strokeStyle=prop['chart.key.interactive.highlight.chart.stroke'];co.lineWidth=2;co.fillStyle=prop['chart.key.interactive.highlight.chart.fill'];co.rect(coords[0],coords[1],coords[2],coords[3]);co.fill();co.stroke();co.lineWidth=1;};this.on=function(type,func)
|
69
|
+
{if(type.substr(0,2)!=='on'){type='on'+type;}
|
70
|
+
if(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}
|
71
|
+
return this;};this.drawCurvedBar=function(opt)
|
72
|
+
{pa2(co,'b r % % % %',opt.x,opt.y,opt.width,opt.height);if(opt.stroke){co.strokeStyle=opt.stroke;co.stroke();}
|
73
|
+
if(opt.fill){co.fillStyle=opt.fill;co.fill();}}
|
74
|
+
this.firstDrawFunc=function()
|
75
|
+
{};this.exec=function(func)
|
76
|
+
{func(this);return this;};this.grow=function()
|
77
|
+
{var obj=this;var canvas=obj.canvas;var context=obj.context;var initial_value=obj.currentValue;var opt=arguments[0]||{};var numFrames=opt.frames||30;var frame=0
|
78
|
+
var callback=arguments[1]||function(){};if(typeof obj.value==='object'){if(RGraph.is_null(obj.currentValue)){obj.currentValue=[];for(var i=0;i<obj.value.length;++i){obj.currentValue[i]=0;}}
|
79
|
+
var diff=[];var increment=[];for(var i=0;i<obj.value.length;++i){diff[i]=obj.value[i]-Number(obj.currentValue[i]);increment[i]=diff[i]/numFrames;}
|
80
|
+
if(initial_value==null){initial_value=[];for(var i=0;i<obj.value.length;++i){initial_value[i]=0;}}}else{var diff=obj.value-Number(obj.currentValue);var increment=diff/numFrames;}
|
81
|
+
function iterator()
|
82
|
+
{frame++;if(frame<=numFrames){if(typeof obj.value=='object'){obj.value=[];for(var i=0;i<initial_value.length;++i){obj.value[i]=initial_value[i]+(increment[i]*frame);}}else{obj.value=initial_value+(increment*frame);}
|
83
|
+
RGraph.clear(obj.canvas);RGraph.redrawCanvas(obj.canvas);RGraph.Effects.updateCanvas(iterator);}else{callback();}}
|
84
|
+
iterator();return this;};RG.att(ca);RG.Register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};
|