/* Javascript plotting library for jQuery, version 0.8.3.Copyright (c) 2007-2014 IOLA and Ole Laursen.Licensed under the MIT license.*/(function($){varoptions={canvas:true};varrender,getTextInfo,addText;varhasOwnProperty=Object.prototype.hasOwnProperty;functioninit(plot,classes){varCanvas=classes.Canvas;if(render==null){getTextInfo=Canvas.prototype.getTextInfo,addText=Canvas.prototype.addText,render=Canvas.prototype.render}Canvas.prototype.render=function(){if(!plot.getOptions().canvas){returnrender.call(this)}varcontext=this.context,cache=this._textCache;context.save();context.textBaseline="middle";for(varlayerKeyincache){if(hasOwnProperty.call(cache,layerKey)){varlayerCache=cache[layerKey];for(varstyleKeyinlayerCache){if(hasOwnProperty.call(layerCache,styleKey)){varstyleCache=layerCache[styleKey],updateStyles=true;for(varkeyinstyleCache){if(hasOwnProperty.call(styleCache,key)){varinfo=styleCache[key],positions=info.positions,lines=info.lines;if(updateStyles){context.fillStyle=info.font.color;context.font=info.font.definition;updateStyles=false}for(vari=0,position;position=positions[i];i++){if(position.active){for(varj=0,line;line=position.lines[j];j++){context.fillText(lines[j].text,line[0],line[1])}}else{positions.splice(i--,1)}}if(positions.length==0){deletestyleCache[key]}}}}}}}context.restore()};Canvas.prototype.getTextInfo=function(layer,text,font,angle,width){if(!plot.getOptions().canvas){returngetTextInfo.call(this,layer,text,font,angle,width)}vartextStyle,layerCache,styleCache,info;text=""+text;if(typeoffont==="object"){textStyle=font.style+" "+font.variant+" "+font.weight+" "+font.size+"px "+font.family}else{textStyle=font}layerCache=this._textCache[layer];if(layerCache==null){layerCache=this._textCache[layer]={}}styleCache=layerCache[textStyle];if(styleCache==null){styleCache=layerCache[textStyle]={}}info=styleCache[text];if(info==null){varcontext=this.context;if(typeoffont!=="object"){varelement=$("<div> </div>").css("position","absolute").addClass(typeoffont==="string"?font:null).appendTo(this.getTextLayer(layer));font={lineHeight:element.height(),style:element.css("font-style"),variant:element.css("font-variant"),weight:element.css("font-weight"),family:element.css("font-family"),color:element.css("color")};font.size=element.css("line-height",1).height();element.remove()}textStyle=font.style+" "+font.variant+" "+font.weight+" "+font.size+"px "+font.family;info=styleCache[text]={width:0,height:0,positions:[],lines:[],font:{definition:textStyle,color:font.color}};context.save();context.font=textStyle;varlines=(text+"").replace(/<br ?\/?>|\r\n|\r/g,"\n").split("\n");for(vari=0;i<lines.length;++i){varlineText=lines[i],measured=context.measureText(lineText);info.width=Math.max(measured.width,info.width);info.height+=font.lineHeight;info.lines.push({text:lineText,width:measured.width,height:font.lineHeight})}context.restore()}returninfo};Canvas.prototype.addText=function(layer,x,y,text,font,angle,width,halign,valign){if(!plot.getOptions().canvas){returnaddText.call(this,layer,x,y,text,font,angle,width,halign,valign)}varinfo=this.getTextInfo(layer,text,font,angle,width),positions=info.positions,lines=info.lines;y+=info.height/lines.length/2;if(valign=="middle"){y=Math.round(y-info.height/2)}elseif(valign=="bottom"){y=Math.round(y-info.height)}else{y=Math.round(y)}if(!!(window.opera&&window.opera.version().split(".")[0]<12)){y-=2}for(vari=0,position;position=positions[i];i++){if(position.x==x&&position.y==y){position.active=true;return}}position={active:true,lines:[],x:x,y:y};positions.push(position);for(vari=0,line;line=lines[i];i++){if(halign=="center"){position.lines.push([Math.round(x-line.width/2),y])}elseif(halign=="right"){position.lines.push([Math.round(x-line.width),y])}else{position.lines.push([Math.round(x),y])}y+=line.height}}}$.plot.plugins.push({init:init,options:options,name:"canvas",version:"1.0"})})(jQuery);