chartnew.js
Version:
Simple HTML5 Charts using the canvas element
777 lines (729 loc) • 43.9 kB
JavaScript
// JavaScript Document
// element Default;
var defaultNextLineBaseline="center";
var defaultNextLineAlign="left";
var defaultCRSpace=5;
var defaultMaxLegendCols=999;
var defaultLegendValues = {
element : "shapeText", // "shapeText" ou "CR"
textHPos : 4, // 0 : text at the left of the shape, 1 : text in the shape and left aligned, 2 : text in the shape and centered,
// 3 : text in the shape and right aligned, 4 : text at the right of the shape,
textVPos : 2, // 0 : text under the shape, 1 : text in the shape and bottom aligned, 2 : text in the shape and centered,
// 3 : text in the shape and top aligned, 4 : text over the shape,
// HspaceBetweenShapeAndText : config.legendSpaceBetweenBoxAndText,
VspaceBetweenShapeAndText : 5,
spaceBefore : 5,
spaceAfter : 5,
elementWidth : "maxwidth", // a string or an integer
elementHeight : "maxheight", // a string or an integer
shape : "", // "line", "rectangle", "ellipse" ou "none"
// shapeHeight : config.legendFontSize, // a string or an integer
// shapeWidth : config.legendBlockSize, // a string or an integer
markerShape : "",
markerCount : 1, // number of marker to draw
// markerRadius : config.pointDotRadius,
// markerStrokeStyle : config.pointDotStrokeStyle,
// markerFillColor : config.defaultStrokeColor,
// markerLineWidth : config.pointDotStrokeWidth,
shapeBorders : true,
shapePaddingX : 0,
shapePaddingY : 0,
shapeBordersRadius : 0,
shapeBordersSelection : 15,
// shapeBordersWidth : config.datasetStrokeWidth,
// shapeBordersStyle : config.datasetStrokeStyle,
// shapeBordersColor : config.legendBordersColors,
// shapeFillColor : config.defaultFillColor,
// textDefault :
text : "",
textPaddingX : 0,
textPaddingY : 0,
//// textAlign : "left", // not implemented - put text at a logic position;
//// textBaseline : "bottom" // not implemented - put text at a logic position;
// fontFamily: config.legendFontFamily,
// fontSize: config.legendFontSize,
// fontStyle: config.legendFontStyle,
// fontColor: config.legendFontColor
};
function drawLegend(legendMsr,data,config,ctx,typegraph,cntiter) {
if(config.legendPosY==0 || config.legendPosY==4 || config.legendPosX==0 || config.legendPosX==4){
if(cntiter!=-1) return;
}
else {
if(cntiter==-1)return;
else if (config.animation==true) {
if(typeof config.legendWhenToDraw=="number") {
if (cntiter !=config.legendWhenToDraw)return;
} else if (cntiter !=1 && config.legendWhenToDraw=="first")return;
else if (cntiter != config.animationSteps && config.legendWhenToDraw=="last")return;
}
}
ctx.save();
if (config.legendFillColor != "rgba(0,0,0,0)") {
// fill color;
ctx.setLineDash([]);
ctx.lineWidth=0;
ctx.fillStyle = config.legendFillColor;
ctx.drawRectangle({x:legendMsr.xLegendPos+legendMsr.legendBackgroundColorXPos,y:legendMsr.yLegendPos+legendMsr.legendBackgroundColorYPos,width:legendMsr.legendBackgroundColorWidth,height:legendMsr.legendBackgroundColorHeight,borders:config.legendBorders,bordersWidth:Math.ceil(ctx.chartLineScale*config.legendBordersWidth),borderSelection:config.legendBordersSelection,borderRadius:config.legendBordersRadius,fill:true,stroke:false});
}
if(config.legendBorders) {
ctx.fillStyle = config.legendFillColor;
ctx.setLineDash(lineStyleFn(config.legendBordersStyle));
ctx.lineWidth = Math.ceil(ctx.chartLineScale*config.legendBordersWidth);
ctx.strokeStyle = config.legendBordersColors;
ctx.drawRectangle({x:legendMsr.xLegendPos+legendMsr.legendBorderXPos,y:legendMsr.yLegendPos+legendMsr.legendBorderYPos,width:legendMsr.legendBorderWidth,height:legendMsr.legendBorderHeight,borders:true,bordersWidth:Math.ceil(ctx.chartLineScale*config.legendBordersWidth),borderSelection:config.legendBordersSelection,borderRadius:config.legendBordersRadius,fill:false,stroke:true});
}
ctx.setLineDash([]);
ctx.restore();
var xpos,ypos,i,j;
for(i=0;i<legendMsr.elementMsr.length;i++) {
if(legendMsr.elementMsr[i].element.element=="shapeText") {
// draw Shape;
xpos=legendMsr.xLegendPos+legendMsr.legendFirstTextXPos+legendMsr.elementMsr[i].eltPosX+legendMsr.elementMsr[i].shapePosX;
ypos=legendMsr.yLegendPos+legendMsr.legendFirstTextYPos+legendMsr.elementMsr[i].eltPosY+legendMsr.elementMsr[i].shapePosY;
if(legendMsr.elementMsr[i].shapeHeight>0 && legendMsr.elementMsr[i].shapeWidth>0) {
ctx.save();
ctx.beginPath();
switch (legendMsr.elementMsr[i].element.shape) {
case "ellipse":
ctx.beginPath();
var height=legendMsr.elementMsr[i].shapeHeight;
var width= legendMsr.elementMsr[i].shapeWidth;
var el_xpos =legendMsr.elementMsr[i].element.shapePaddingX+xpos+(width/2);
var el_ypos =legendMsr.elementMsr[i].element.shapePaddingY+ypos-(height/2);
ctx.moveTo(el_xpos, el_ypos - height/2); // A1
ctx.bezierCurveTo(
el_xpos + width/2, el_ypos - height/2, // C1
el_xpos + width/2, el_ypos + height/2, // C2
el_xpos, el_ypos + height/2); // A2
ctx.bezierCurveTo(
el_xpos - width/2, el_ypos + height/2, // C3
el_xpos - width/2, el_ypos - height/2, // C4
el_xpos, el_ypos - height/2); // A1
ctx.closePath();
ctx.fillStyle=legendMsr.elementMsr[i].element.shapeFillColor;
ctx.fill();
ctx.lineWidth = Math.ceil(ctx.chartLineScale*legendMsr.elementMsr[i].element.shapeBordersWidth);
ctx.strokeStyle=legendMsr.elementMsr[i].element.shapeBordersColor;
ctx.setLineDash(lineStyleFn(legendMsr.elementMsr[i].element.shapeBordersStyle));
ctx.stroke();
ctx.setLineDash([]);
break;
case "line":
ctx.save();
ctx.lineWidth = Math.ceil(ctx.chartLineScale*legendMsr.elementMsr[i].element.shapeBordersWidth);
ctx.strokeStyle=legendMsr.elementMsr[i].element.shapeBordersColor;
ctx.setLineDash(lineStyleFn(legendMsr.elementMsr[i].element.shapeBordersStyle));
ctx.moveTo(legendMsr.elementMsr[i].element.shapePaddingX+xpos , legendMsr.elementMsr[i].element.shapePaddingY+ypos - (Math.ceil(ctx.chartTextScale*legendMsr.elementMsr[i].shapeHeight) / 2));
ctx.lineTo(legendMsr.elementMsr[i].element.shapePaddingX+xpos + legendMsr.elementMsr[i].shapeWidth, legendMsr.elementMsr[i].element.shapePaddingY+ypos - ((Math.ceil(ctx.chartTextScale*legendMsr.elementMsr[i].shapeHeight)) / 2));
ctx.stroke();
ctx.restore();
ctx.fill();
if((config.pointDot==1 || legendMsr.elementMsr[i].element.drawMarker==true) && legendMsr.elementMsr[i].element.markerCount>0 && legendMsr.elementMsr[i].element.markerShape!="") {
var markerDispl=legendMsr.elementMsr[i].shapeWidth/(legendMsr.elementMsr[i].element.markerCount+1);
for(j=0;j<legendMsr.elementMsr[i].element.markerCount;j++) {
ctx.beginPath();
ctx.fillStyle=legendMsr.elementMsr[i].element.markerFillColor;
ctx.strokeStyle=legendMsr.elementMsr[i].element.markerStrokeStyle;
ctx.lineWidth=legendMsr.elementMsr[i].element.markerLineWidth;
var markerShape=legendMsr.elementMsr[i].element.markerShape;
var markerRadius=legendMsr.elementMsr[i].element.markerRadius;
var markerStrokeStyle=legendMsr.elementMsr[i].element.markerStrokeStyle;
drawMarker(ctx,legendMsr.elementMsr[i].element.shapePaddingX+xpos+(j+1)*markerDispl,legendMsr.elementMsr[i].element.shapePaddingY+ypos - (Math.ceil(ctx.chartTextScale*legendMsr.elementMsr[i].shapeHeight) / 2),markerShape,markerRadius,markerStrokeStyle);
}
}
ctx.fill();
break;
case "rectangle":
default:
ctx.beginPath();
if (legendMsr.elementMsr[i].element.shapeFillColor != "rgba(0,0,0,0)") {
ctx.save();
ctx.lineWidth = 0;
ctx.strokeStyle= "rgba(0,0,0,0)";
ctx.fillStyle=legendMsr.elementMsr[i].element.shapeFillColor;
ctx.drawRectangle({x:legendMsr.elementMsr[i].element.shapePaddingX+xpos+legendMsr.elementMsr[i].element.shapeBorders*isBorder(legendMsr.elementMsr[i].element.shapeBordersSelection,"LEFT")*legendMsr.elementMsr[i].element.shapeBordersWidth,y:legendMsr.elementMsr[i].element.shapePaddingY+ypos-legendMsr.elementMsr[i].element.shapeBorders*isBorder(legendMsr.elementMsr[i].element.shapeBordersSelection,"BOTTOM")*legendMsr.elementMsr[i].element.shapeBordersWidth,width:legendMsr.elementMsr[i].shapeWidth-legendMsr.elementMsr[i].element.shapeBorders*(isBorder(legendMsr.elementMsr[i].element.shapeBordersSelection,"LEFT")+isBorder(legendMsr.elementMsr[i].element.shapeBordersSelection,"RIGHT"))*legendMsr.elementMsr[i].element.shapeBordersWidth,height:-legendMsr.elementMsr[i].shapeHeight+legendMsr.elementMsr[i].element.shapeBorders*(isBorder(legendMsr.elementMsr[i].element.shapeBordersSelection,"BOTTOM")+isBorder(legendMsr.elementMsr[i].element.shapeBordersSelection,"TOP"))*legendMsr.elementMsr[i].element.shapeBordersWidth,borders:legendMsr.elementMsr[i].element.shapeBorders,bordersWidth:legendMsr.elementMsr[i].element.shapeBordersWidth,borderSelection:legendMsr.elementMsr[i].element.shapeBordersSelection,borderRadius:legendMsr.elementMsr[i].element.shapeBordersRadius,fill:true,stroke:false})
ctx.restore();
}
if (legendMsr.elementMsr[i].element.shapeBorders) {
ctx.save();
ctx.lineWidth = Math.ceil(ctx.chartLineScale*legendMsr.elementMsr[i].element.shapeBordersWidth);
if(legendMsr.elementMsr[i].element.shapeFillColor!="none")ctx.fillStyle=legendMsr.elementMsr[i].element.shapeFillColor;
else ctx.fillStyle= "rgba(0,0,0,0)";
ctx.strokeStyle=legendMsr.elementMsr[i].element.shapeBordersColor;
ctx.setLineDash(lineStyleFn(legendMsr.elementMsr[i].element.shapeBordersStyle));
ctx.drawRectangle({x:legendMsr.elementMsr[i].element.shapePaddingX+xpos+isBorder(legendMsr.elementMsr[i].element.shapeBordersSelection,"LEFT")*legendMsr.elementMsr[i].element.shapeBordersWidth/2,y:legendMsr.elementMsr[i].element.shapePaddingY+ypos-isBorder(legendMsr.elementMsr[i].element.shapeBordersSelection,"BOTTOM")*legendMsr.elementMsr[i].element.shapeBordersWidth/2,width:legendMsr.elementMsr[i].shapeWidth-(isBorder(legendMsr.elementMsr[i].element.shapeBordersSelection,"RIGHT")+isBorder(legendMsr.elementMsr[i].element.shapeBordersSelection,"LEFT"))*legendMsr.elementMsr[i].element.shapeBordersWidth/2,height:-legendMsr.elementMsr[i].shapeHeight+(isBorder(legendMsr.elementMsr[i].element.shapeBordersSelection,"TOP")+isBorder(legendMsr.elementMsr[i].element.shapeBordersSelection,"BOTTOM"))*legendMsr.elementMsr[i].element.shapeBordersWidth/2,borders:legendMsr.elementMsr[i].element.shapeBorders,bordersWidth:legendMsr.elementMsr[i].element.shapeBordersWidth,borderSelection:legendMsr.elementMsr[i].element.shapeBordersSelection,borderRadius:legendMsr.elementMsr[i].element.shapeBordersRadius,fill:false,stroke:true})
ctx.setLineDash([]);
ctx.restore();
}
break;
}
}
// draw Text;
if(legendMsr.elementMsr[i].textHeight>0 && legendMsr.elementMsr[i].textWidth>0) {
ctx.save();
ctx.beginPath();
ctx.font = legendMsr.elementMsr[i].element.fontStyle + " " + (Math.ceil(ctx.chartTextScale*legendMsr.elementMsr[i].element.fontSize)).toString() + "px " + legendMsr.elementMsr[i].element.fontFamily;
ctx.fillStyle = legendMsr.elementMsr[i].element.fontColor;
ctx.textAlign = "left";
ctx.textBaseline = "bottom";
xpos=legendMsr.xLegendPos+legendMsr.legendFirstTextXPos+legendMsr.elementMsr[i].eltPosX+legendMsr.elementMsr[i].textPosX;
ypos=legendMsr.yLegendPos+legendMsr.legendFirstTextYPos+legendMsr.elementMsr[i].eltPosY+legendMsr.elementMsr[i].textPosY;
ctx.translate(xpos, ypos);
ctx.fillTextMultiLine(legendMsr.elementMsr[i].element.text, 0, 0, ctx.textBaseline, Math.ceil(ctx.chartTextScale*legendMsr.elementMsr[i].element.fontSize), true,config.detectMouseOnText,ctx,"LEGEND_TEXTMOUSE",0,xpos , ypos,i,-1);
ctx.restore();
}
}
}
};
function measureLegend(data,ctx,config,widestLegend,highestLegend,nbLegendLines,nbLegendCols,availableLegendWidth) {
var elementMsr =[];
var i;
var cntLegend;
var element;
var textLength;
var mxtextwidth,curmxtextwidth,mxtextheight,curmxtextheight;
var legendDefaultValuesFromConfig = legendDefaultValuesFromConfigInit(config);
mxtextheight=0;
mxtextwidth=0;
if(typeof data.legend == "object") {
cntLegend=data.legend.length;
for(i=0;i<data.legend.length;i++) {
elementMsr[i]={};
elementMsr[i].element=setLegendElementValue(data,i,config,legendDefaultValuesFromConfig);
}
} else {
cntLegend=data.datasets.length;
for (i = 0;i<data.datasets.length ; i++) {
if(ctx.tpchart=="Line")j=data.datasets.length-1-i;
else j=i;
elementMsr[i]={};
elementMsr[i].element={};
elementMsr[i].element.text="";
if (typeof(data.datasets[j].title) == "string") {
if (data.datasets[j].title.trim() != "") {
elementMsr[i].element.text=data.datasets[j].title.trim();
}
}
if((ctx.tpchart=="Radar" || ctx.tpchart=="Line" || ctx.tpchart=="Bar" || ctx.tpchart=="StackedBar") && ((ctx.tpchart=="Radar" || ctx.tpchart=="Line" || data.datasets[j].type=="Line") && (!config.datasetFill || setOptionValue(true,false,1,"LINKTYPE",ctx,data,undefined,data.datasets[j].linkType,config.linkType,"linkType",i,-1,{nullvalue : null} )==1))) {
elementMsr[i].element.shape="line";
elementMsr[i].element.shapeBordersWidth = setOptionValue(true,false,1,"LINEWIDTH",ctx,data,undefined,data.datasets[j].datasetStrokeWidth,config.datasetStrokeWidth,"datasetStrokeWidth",i,-1,{nullvalue : null} );
elementMsr[i].element.shapeBordersColor=setOptionValue(true,false,1,"LEGENDSTROKECOLOR",ctx,data,undefined,data.datasets[j].strokeColor,config.defaultFillColor,"strokeColor",i,-1,{animationValue: 1, xPosLeft : 0, yPosBottom : 0, xPosRight : 0 + Math.ceil(ctx.chartTextScale*config.legendBlockSize), yPosTop : 0 - (Math.ceil(ctx.chartTextScale*config.legendFontSize))} );
elementMsr[i].element.shapeBordersStyle=setOptionValue(true,false,1,"LEGENDLINEDASH",ctx,data,undefined,data.datasets[j].datasetStrokeStyle,config.datasetStrokeStyle,"datasetStrokeStyle",i,-1,{animationValue: 1, xPosLeft : 0, yPosBottom : 0, xPosRight : 0 + Math.ceil(ctx.chartTextScale*config.legendBlockSize), yPosTop : 0 - (Math.ceil(ctx.chartTextScale*config.legendFontSize))} );
if(config.pointDot || typeof data.datasets[j].pointColor=="string") {
elementMsr[i].element.drawMarker=true;
elementMsr[i].element.markerFillColor=setOptionValue(true,false,1,"LEGENDMARKERFILLCOLOR",ctx,data,undefined,data.datasets[j].pointColor,config.defaultStrokeColor,"pointColor",i,-1,{nullvalue: true} );
elementMsr[i].element.markerStrokeStyle=setOptionValue(true,false,1,"LEGENDMARKERSTROKESTYLE",ctx,data,undefined,data.datasets[j].pointStrokeColor,config.defaultStrokeColor,"pointStrokeColor",i,-1,{nullvalue: true} );
elementMsr[i].element.markerLineWidth=setOptionValue(true,false,ctx.chartLineScale,"LEGENDMARKERLINEWIDTH",ctx,data,undefined,data.datasets[j].pointDotStrokeWidth,config.pointDotStrokeWidth,"pointDotStrokeWidth",i,-1,{nullvalue: true} );
elementMsr[i].element.markerShape=setOptionValue(true,false,1,"LEGENDMARKERSHAPE",ctx,data,undefined,data.datasets[j].markerShape,config.markerShape,"markerShape",i,-1,{nullvalue: true} );
elementMsr[i].element.markerRadius=setOptionValue(true,false,ctx.chartSpaceScale,"LEGENDMARKERRADIUS",ctx,data,undefined,data.datasets[j].pointDotRadius,config.pointDotRadius,"pointDotRadius",i,-1,{nullvalue: true} );
}
} else {
elementMsr[i].element.shape="rectangle";
elementMsr[i].element.shapeBordersWidth = Math.ceil(ctx.chartLineScale*setOptionValue(true,true ,1,"BARSTROKEWIDTH",ctx,data,undefined,data.datasets[j].barStrokeWidth, config.barStrokeWidth ,"barStrokeWidth",i,-1,{nullvalue : null} ));
elementMsr[i].element.shapeBordersColor=setOptionValue(true,false,1,"LEGENDSTROKECOLOR",ctx,data,undefined,data.datasets[j].strokeColor,config.defaultFillColor,"strokeColor",i,-1,{animationValue: 1, xPosLeft : 0, yPosBottom : 0, xPosRight : 0 + Math.ceil(ctx.chartTextScale*config.legendBlockSize), yPosTop : 0 - (Math.ceil(ctx.chartTextScale*config.legendFontSize))} );
elementMsr[i].element.shapeBordersStyle=setOptionValue(true,false,1,"LEGENDLINEDASH",ctx,data,undefined,data.datasets[j].datasetStrokeStyle,config.datasetStrokeStyle,"datasetStrokeStyle",i,-1,{animationValue: 1, xPosLeft : 0, yPosBottom : 0, xPosRight : 0 + Math.ceil(ctx.chartTextScale*config.legendBlockSize), yPosTop : 0 - (Math.ceil(ctx.chartTextScale*config.legendFontSize))} );
elementMsr[i].element.shapeFillColor=setOptionValue(true,false,1,"LEGENDFILLCOLOR",ctx,data,undefined,data.datasets[j].fillColor,config.defaultFillColor,"fillColor",i,-1,{animationValue: 1, xPosLeft : 0, yPosBottom : 0, xPosRight : 0 + Math.ceil(ctx.chartTextScale*config.legendBlockSize), yPosTop : 0 - (Math.ceil(ctx.chartTextScale*config.legendFontSize))} );
}
elementMsr[i].element=setLegendElementValueBis(elementMsr[i].element,config,legendDefaultValuesFromConfig);
}
}
// compute width and height of each Element;
for(i=0;i<cntLegend;i++)
{
// text size;
if(elementMsr[i].element.text !="" && elementMsr[i].element.element=="shapeText") {
ctx.font = elementMsr[i].element.fontStyle + " " + (Math.ceil(ctx.chartTextScale*elementMsr[i].element.fontSize)).toString() + "px " + elementMsr[i].element.fontFamily;
textLength = ctx.measureTextMultiLine(elementMsr[i].element.text,Math.ceil(ctx.chartTextScale*elementMsr[i].element.fontSize));
elementMsr[i].textWidth=textLength.textWidth;
elementMsr[i].textHeight=textLength.textHeight;
} else {
elementMsr[i].textWidth=0;
elementMsr[i].textHeight=0;
}
// Shape size;
elementMsr[i].shapeWidth=0;
elementMsr[i].shapeHeight=0;
elementMsr[i].shapePosX=0;
elementMsr[i].shapePosY=0;
if((elementMsr[i].element.shape =="rectangle" || elementMsr[i].element.shape =="ellipse" || elementMsr[i].element.shape =="line") && elementMsr[i].element.element=="shapeText") {
if(elementMsr[i].textWidth>0 && elementMsr[i].textHeight>0 && elementMsr[i].element.textHPos>0 && elementMsr[i].element.textHPos<4 && elementMsr[i].element.textVPos>0 && elementMsr[i].element.textVPos<4){
elementMsr[i].shapeWidth=elementMsr[i].textWidth+2*elementMsr[i].element.HspaceBetweenShapeAndText;
elementMsr[i].shapeHeight=elementMsr[i].textHeight+2*elementMsr[i].element.VspaceBetweenShapeAndText;
if(typeof elementMsr[i].element.shapeWidth=="number")elementMsr[i].shapeWidth=Math.max(elementMsr[i].shapeWidth,elementMsr[i].element.shapeWidth);
if(typeof elementMsr[i].element.shapeHeight=="number")elementMsr[i].shapeHeight=Math.max(elementMsr[i].shapeHeight,elementMsr[i].element.shapeHeight);
} else {
if(typeof elementMsr[i].element.shapeWidth=="number")elementMsr[i].shapeWidth=elementMsr[i].element.shapeWidth;
else elementMsr[i].shapeWidth=config.legendBlockSize;
if(typeof elementMsr[i].element.shapeHeight=="number")elementMsr[i].shapeHeight=elementMsr[i].element.shapeHeight;
else elementMsr[i].shapeHeight=config.legendFontSize;
}
}
if(elementMsr[i].shapeWidth==0 || elementMsr[i].shapeHeight==0){
elementMsr[i].shapeWidth=0;
elementMsr[i].shapeHeight=0;
}
computeWidthHeight();
if(elementMsr[i].height==0 || elementMsr[i].width==0) {
elementMsr[i].width=0;
elementMsr[i].height=0;
elementMsr[i].textWidth=0;
elementMsr[i].textHeight=0;
elementMsr[i].shapeWidth=0;
elementMsr[i].shapeHeight=0;
}
}
// correct shape height/width;
for(i=0;i<cntLegend;i++)
{
if(elementMsr[i].element.element=="shapeText") {
if(elementMsr[i].width>0 && elementMsr[i].shapeWidth>0 && typeof elementMsr[i].element.shapeWidth=="string") {
for(j=i+1;j<cntLegend;j++) {
if(elementMsr[j].width>0 && elementMsr[j].shapeWidth>=0 && typeof elementMsr[j].element.shapeWidth=="string" && elementMsr[i].element.shapeWidth==elementMsr[j].element.shapeWidth) {
elementMsr[i].shapeWidth=Math.max(elementMsr[i].shapeWidth,elementMsr[j].shapeWidth);
elementMsr[j].shapeWidth=elementMsr[i].shapeWidth;
}
}
}
if(elementMsr[i].height >0 && elementMsr[i].shapeHeight>0 && typeof elementMsr[i].element.shapeHeight=="string") {
for(j=i+1;j<cntLegend;j++) {
if(elementMsr[j].height >0 && elementMsr[j].shapeHeight>=0 && typeof elementMsr[j].element.shapeHeight=="string" && elementMsr[i].element.shapeHeight==elementMsr[j].element.shapeHeight) {
elementMsr[i].shapeHeight=Math.max(elementMsr[i].shapeHeight,elementMsr[j].shapeHeight);
elementMsr[j].shapeHeight=elementMsr[i].shapeHeight;
}
}
}
// recompute elt width/height;
computeWidthHeight();
}
}
// recompute element height/width ...;
var eltMaxWidth=0;
var eltMaxHeight=0;
var nextLineAlign=defaultNextLineAlign;
var nextLineBaseline=defaultNextLineBaseline;
var decalelt;
// store align / baseline for all elt;
for(i=0;i<cntLegend;i++)
{
if(elementMsr[i].element.element=="shapeText") {
elementMsr[i].align=nextLineAlign;
elementMsr[i].baseline=nextLineBaseline;
} else if (elementMsr[i].element.element=="CR") {
if(typeof elementMsr[i].element.nextLineAlign!="undefined")nextLineAlign=elementMsr[i].element.nextLineAlign;
if(typeof elementMsr[i].element.nextLineBaseline!="undefined")nextLineBaseline=elementMsr[i].element.nextLineBaseline;
}
}
// correct element height/width according parameters elementWidth/elementHeight;
for(i=0;i<cntLegend;i++)
{
if(elementMsr[i].element.element=="shapeText") {
if(typeof elementMsr[i].element.elementWidth=="number" && elementMsr[i].width>0)
{
if(elementMsr[i].width < elementMsr[i].element.elementWidth) {
decalelt=elementMsr[i].element.elementWidth-elementMsr[i].width;
adjustAlign(i,decalelt);
elementMsr[i].width=elementMsr[i].element.elementWidth;
}
} else if(elementMsr[i].width > 0 && typeof elementMsr[i].element.elementWidth=="string") {
for(j=i+1;j<cntLegend;j++) {
if(elementMsr[j].width>0 && typeof elementMsr[j].element.elementWidth=="string" && elementMsr[i].element.elementWidth==elementMsr[j].element.elementWidth) {
if(elementMsr[j].width>elementMsr[i].width) {
decalelt=elementMsr[j].width-elementMsr[i].width;
adjustAlign(i,decalelt);
elementMsr[i].width=elementMsr[j].width;
} else {
decalelt=elementMsr[i].width-elementMsr[j].width;
adjustAlign(j,decalelt);
elementMsr[j].width=elementMsr[i].width;
}
}
}
}
if(typeof elementMsr[i].element.elementHeight=="number" && elementMsr[i].height>0)
{
if(elementMsr[i].height < elementMsr[i].element.elementHeight) {
decalelt=elementMsr[i].element.elementHeight-elementMsr[i].height;
adjustBaseline(i,decalelt);
elementMsr[i].height=elementMsr[i].element.elementHeight;
}
} else if(elementMsr[i].height > 0 && typeof elementMsr[i].element.elementHeight=="string") {
for(j=i+1;j<cntLegend;j++) {
if(elementMsr[j].height>0 && typeof elementMsr[j].element.elementHeight=="string" && elementMsr[i].element.elementHeight==elementMsr[j].element.elementHeight) {
if(elementMsr[j].height>elementMsr[i].height) {
decalelt=elementMsr[j].height-elementMsr[i].height;
adjustBaseline(i,decalelt);
elementMsr[i].height=elementMsr[j].height;
} else {
decalelt=elementMsr[i].height-elementMsr[j].height;
adjustBaseline(j,decalelt);
elementMsr[j].height=elementMsr[i].height;
}
}
}
}
}
}
// compute line of each element;
var curline=0;
var cureltinline=0;
var curlinewidth=0;
var maxlinewidth=0;
var legendHeight=0;
var curlineheight=0;
var legendHeight=0;
var nextLineSpace=config.legendSpaceBetweenTextVertical;
maxLegendCols=config.maxLegendCols;
var shapetextfound=0;
for(i=0;i<cntLegend;i++)
{
if(elementMsr[i].element.element=="shapeText") {
shapetextfound=1;
elementMsr[i].line=curline;
curlinewidth+=elementMsr[i].width+(cureltinline!=0)*elementMsr[i].element.spaceBefore;
cureltinline++;
curlineheight=Math.max(curlineheight,elementMsr[i].height);
if (cureltinline>=maxLegendCols || curlinewidth+elementMsr[i].element.spaceBefore+elementMsr[i].width+elementMsr[i].element.spaceAfter>availableLegendWidth) {
curline++;
cureltinline=0;
legendHeight+=curlineheight+nextLineSpace;
// legendHeight+=nextLineSpace;
curlineheight=0;
maxlinewidth=Math.max(maxlinewidth,curlinewidth);
curlinewidth=0;
}
} else if(elementMsr[i].element.element=="CR") {
legendHeight+=curlineheight;
curline++;
cureltinline=0;
curlinewidth=0;
// if(typeof elementMsr[i].element.CRSpace!="undefined")legendHeight+=curlineheight+elementMsr[i].element.CRSpace;
if(typeof elementMsr[i].element.CRSpace!="undefined")nextLineSpace=elementMsr[i].element.CRSpace;
if(typeof elementMsr[i].element.maxLegendCols=="number")maxLegendCols=elementMsr[i].element.maxLegendCols;
if(shapetextfound==1)legendHeight+=nextLineSpace;
curlineheight=0;
}
maxlinewidth=Math.max(maxlinewidth,curlinewidth);
}
// maxlinewidth=Math.max(maxlinewidth,curlinewidth);
legendHeight+=curlineheight;
// Compute position of each element
nextLineAlign=defaultNextLineAlign;
nextLineBaseline=defaultNextLineBaseline;
nextLineSpace=defaultCRSpace;
var toElt=0;
var Vpos=0;
while(toElt < cntLegend && elementMsr[toElt].element.element!="shapeText"){
if(elementMsr[toElt].element.element=="CR") {
if(typeof elementMsr[toElt].element.CRSpace!="undefined")nextLineSpace=elementMsr[toElt].element.CRSpace;
// Vpos+=nextLineSpace;
if(typeof elementMsr[toElt].element.nextLineAlign!="undefined")nextLineAlign=elementMsr[toElt].element.nextLineAlign;
if(typeof elementMsr[toElt].element.nextLineBaseline!="undefined")nextLineBaseline=elementMsr[toElt].element.nextLineBaseline;
}
toElt=toElt+1;
}
if(toElt<cntLegend)curline=elementMsr[toElt].line;
var lineWidth, lineHeight;
var doneCR;
var eltPosX;
while(toElt<cntLegend ) {
fromElt=toElt;
curline=elementMsr[fromElt].line;
lineWidth=0;
lineHeight=0;
while(toElt<cntLegend && elementMsr[toElt].element.element=="shapeText" && elementMsr[toElt].line==curline ) {
lineWidth+=elementMsr[toElt].width+(toElt!=fromElt)*elementMsr[toElt].element.spaceBefore;
lineHeight=Math.max(lineHeight,elementMsr[toElt].height);
toElt++;
}
if(nextLineAlign=="center") {
eltPosX=(maxlinewidth-lineWidth)/2;
} else if (nextLineAlign=="right") {
eltPosX=(maxlinewidth-lineWidth);
} else {
eltPosX=0;
}
for(i=fromElt;i<toElt;i++) {
eltPosX+=(i!=fromElt)*elementMsr[i].element.spaceBefore;
elementMsr[i].eltPosX=eltPosX;
eltPosX+=elementMsr[i].width;
if(nextLineBaseline=="bottom") {
elementMsr[i].eltPosY=Vpos+lineHeight;
} else if(nextLineBaseline=="top") {
elementMsr[i].eltPosY=Vpos+elementMsr[i].height;
} else {
elementMsr[i].eltPosY=Vpos+elementMsr[i].height+(lineHeight-elementMsr[i].height)/2;
}
};
Vpos+=lineHeight;
doneCR=0;
// compute width and height;
while(toElt < cntLegend && elementMsr[toElt].element.element!="shapeText"){
if (elementMsr[toElt].element.element=="CR") {
if(typeof elementMsr[toElt].element.CRSpace!="undefined")nextLineSpace=elementMsr[toElt].element.CRSpace;
if(typeof elementMsr[toElt].element.nextLineAlign!="undefined")nextLineAlign=elementMsr[toElt].element.nextLineAlign;
if(typeof elementMsr[toElt].element.nextLineBaseline!="undefined")nextLineBaseline=elementMsr[toElt].element.nextLineBaseline;
doneCR=1;
Vpos+=nextLineSpace;
}
toElt++;
}
if(!doneCR)Vpos+=nextLineSpace;
}
var legendWidth=0;
var legendBackgroundColorWidth=0;
var legendBackgroundColorHeight=0;
var legendBorderWidth=0;
var legendBorderHeight=0;
var legendFirstTextXPos=0;
var legendFirstTextYPos=0;
var legendBackgroundColorXPos=0;
var legendBackgroundColorYPos=0;
var legendBorderXPos=0;
var legendBorderYPos=0;
legendBackgroundColorHeight = legendHeight+ Math.ceil(ctx.chartSpaceScale*Math.ceil(ctx.chartSpaceScale*config.legendSpaceBeforeText)) + Math.ceil(ctx.chartSpaceScale*config.legendSpaceAfterText);
legendBackgroundColorWidth = maxlinewidth+ Math.ceil(ctx.chartSpaceScale*Math.ceil(ctx.chartSpaceScale*config.legendSpaceLeftText)) + Math.ceil(ctx.chartSpaceScale*config.legendSpaceRightText);
legendHeight=legendHeight+ Math.ceil(ctx.chartSpaceScale*Math.ceil(ctx.chartSpaceScale*config.legendSpaceBeforeText)) + Math.ceil(ctx.chartSpaceScale*config.legendSpaceAfterText);
legendWidth=maxlinewidth + Math.ceil(ctx.chartSpaceScale*Math.ceil(ctx.chartSpaceScale*config.legendSpaceLeftText)) + Math.ceil(ctx.chartSpaceScale*config.legendSpaceRightText);
legendFirstTextXPos=Math.ceil(ctx.chartSpaceScale*config.legendSpaceLeftText);
legendFirstTextYPos=Math.ceil(ctx.chartSpaceScale*config.legendSpaceBeforeText);
if (config.legendBorders == true) {
legendBorderWidth=legendWidth;
legendBorderHeight=legendHeight;
if(isBorder(config.legendBordersSelection,"LEFT")){
legendBorderWidth +=Math.ceil(ctx.chartLineScale*config.legendBordersWidth)/2;
legendWidth +=Math.ceil(ctx.chartLineScale*config.legendBordersWidth)+Math.ceil(ctx.chartSpaceScale*config.legendBordersSpaceLeft);
legendFirstTextXPos+=Math.ceil(ctx.chartLineScale*config.legendBordersWidth)+Math.ceil(ctx.chartSpaceScale*config.legendBordersSpaceLeft);
legendBorderXPos+=Math.ceil(ctx.chartSpaceScale*config.legendBordersSpaceLeft)+Math.ceil(ctx.chartLineScale*config.legendBordersWidth)/2;
legendBackgroundColorXPos+=Math.ceil(ctx.chartLineScale*config.legendBordersWidth)+Math.ceil(ctx.chartSpaceScale*config.legendBordersSpaceLeft);
} else if(config.legendFillColor != "rgba(0,0,0,0)") {
legendWidth +=Math.ceil(ctx.chartSpaceScale*config.legendBordersSpaceLeft);
legendFirstTextXPos+=Math.ceil(ctx.chartSpaceScale*config.legendBordersSpaceLeft);
legendBackgroundColorXPos+=Math.ceil(ctx.chartSpaceScale*config.legendBordersSpaceLeft);
legendBorderXPos+=Math.ceil(ctx.chartSpaceScale*config.legendBordersSpaceLeft);
}
if(isBorder(config.legendBordersSelection,"RIGHT")){
legendBorderWidth+= Math.ceil(ctx.chartLineScale*config.legendBordersWidth)/2;
legendWidth += Math.ceil(ctx.chartLineScale*config.legendBordersWidth)+Math.ceil(ctx.chartSpaceScale*config.legendBordersSpaceRight);
} else if(config.legendFillColor != "rgba(0,0,0,0)") {
legendWidth +=Math.ceil(ctx.chartSpaceScale*config.legendBordersSpaceRight);
}
if(isBorder(config.legendBordersSelection,"TOP")){
legendBorderHeight +=Math.ceil(ctx.chartLineScale*config.legendBordersWidth)/2;
legendHeight +=Math.ceil(ctx.chartLineScale*config.legendBordersWidth)+Math.ceil(ctx.chartSpaceScale*config.legendBordersSpaceBefore);
legendFirstTextYPos+=Math.ceil(ctx.chartLineScale*config.legendBordersWidth)+Math.ceil(ctx.chartSpaceScale*config.legendBordersSpaceBefore);
legendBackgroundColorYPos+=Math.ceil(ctx.chartLineScale*config.legendBordersWidth)+Math.ceil(ctx.chartSpaceScale*config.legendBordersSpaceBefore);
legendBorderYPos+=Math.ceil(ctx.chartSpaceScale*config.legendBordersSpaceBefore)+Math.ceil(ctx.chartLineScale*config.legendBordersWidth)/2;
} else if(config.legendFillColor != "rgba(0,0,0,0)") {
legendHeight +=Math.ceil(ctx.chartSpaceScale*config.legendBordersSpaceBefore);
legendFirstTextYPos+=Math.ceil(ctx.chartSpaceScale*config.legendBordersSpaceBefore);
legendBackgroundColorYPos+=Math.ceil(ctx.chartSpaceScale*config.legendBordersSpaceBefore);
legendBorderYPos+=Math.ceil(ctx.chartSpaceScale*config.legendBordersSpaceBefore);
}
if(isBorder(config.legendBordersSelection,"BOTTOM")){
legendBorderHeight+=Math.ceil(ctx.chartLineScale*config.legendBordersWidth)/2;
legendHeight +=Math.ceil(ctx.chartLineScale*config.legendBordersWidth)+Math.ceil(ctx.chartSpaceScale*config.legendBordersSpaceAfter);
} else if(config.legendFillColor != "rgba(0,0,0,0)") {
legendHeight +=Math.ceil(ctx.chartSpaceScale*config.legendBordersSpaceAfter);
}
} else if (config.legendFillColor != "rgba(0,0,0,0)") {
legendWidth += Math.ceil(ctx.chartSpaceScale*(config.legendBordersSpaceRight+config.legendBordersSpaceLeft));
legendHeight+= Math.ceil(ctx.chartSpaceScale*(config.legendBordersSpaceBefore+config.legendBordersSpaceAfter));
legendBackgroundColorXPos+=Math.ceil(ctx.chartSpaceScale*config.legendBordersSpaceLeft);
legendBackgroundColorYPos+=Math.ceil(ctx.chartSpaceScale*config.legendBordersSpaceBefore);
legendFirstTextXPos +=Math.ceil(ctx.chartSpaceScale*config.legendBordersSpaceLeft);
legendFirstTextYPos +=Math.ceil(ctx.chartSpaceScale*config.legendBordersSpaceBefore);
}
return {
legendWidth: legendWidth,
legendHeight: legendHeight,
legendBackgroundColorWidth:legendBackgroundColorWidth,
legendBackgroundColorHeight:legendBackgroundColorHeight,
legendBorderWidth:legendBorderWidth,
legendBorderHeight:legendBorderHeight,
legendFirstTextXPos:legendFirstTextXPos,
legendFirstTextYPos:legendFirstTextYPos,
legendBackgroundColorXPos:legendBackgroundColorXPos,
legendBackgroundColorYPos:legendBackgroundColorYPos,
legendBorderXPos:legendBorderXPos,
legendBorderYPos:legendBorderYPos,
elementMsr : elementMsr
};
function adjustAlign(i,decalelt) {
if(elementMsr[i].element.textHPos==2){
elementMsr[i].textPosX+=decalelt/2;
elementMsr[i].shapePosX+=decalelt/2;
} else if(elementMsr[i].element.textHPos<2) {
elementMsr[i].textPosX+=decalelt;
elementMsr[i].shapePosX+=decalelt;
} else {
// nothing to change;
}
};
function adjustBaseline(i,decalelt) {
if(elementMsr[i].element.textVPos==2){
elementMsr[i].textPosY-=decalelt/2;
elementMsr[i].shapePosY-=decalelt/2;
} else if(elementMsr[i].element.textVPos<2) {
elementMsr[i].textPosY-=decalelt;
elementMsr[i].shapePosY-=decalelt;
} else {
// nothing to change;
}
};
function computeWidthHeight() {
var textPadding;
if(elementMsr[i].element.element=="shapeText") {
var textLeft=0;
var textRight=0;
if(elementMsr[i].shapeWidth==0 && elementMsr[i].textWidth==0)elementMsr[i].width=0;
else if(elementMsr[i].shapeWidth>0 && elementMsr[i].textWidth==0)elementMsr[i].width=elementMsr[i].shapeWidth;
else if(elementMsr[i].shapeWidth==0 && elementMsr[i].textWidth>0) {
elementMsr[i].width=elementMsr[i].textWidth;
elementMsr[i].textPosX=0;
} else {
if(elementMsr[i].element.textHPos==0) {
textPadding=-elementMsr[i].element.HspaceBetweenShapeAndText+elementMsr[i].element.textPaddingX;
if(textPadding<0)textLeft=elementMsr[i].textWidth-textPadding;
else {
if(textPadding>elementMsr[i].shapeWidth)textRight=Math.max(0,textPadding-elementMsr[i].shapeWidth);
if(textRight>0) textLeft=Math.max(0,elementMsr[i].textWidth-textRight-elementMsr[i].shapeWidth);
else textLeft=Math.max(0,elementMsr[i].textWidth-textPadding);
}
} else if(elementMsr[i].element.textHPos==4) {
textPadding=elementMsr[i].element.HspaceBetweenShapeAndText+elementMsr[i].element.textPaddingX;
if(textPadding>0)textRight=elementMsr[i].textWidth+textPadding;
else {
if(-textPadding>elementMsr[i].shapeWidth)textLeft=-textPadding-elementMsr[i].shapeWidth;
if(textLeft>0) textRight=Math.max(0,elementMsr[i].textWidth-textLeft-elementMsr[i].shapeWidth);
else textRight=Math.max(0,elementMsr[i].textWidth+textPadding);
}
} else if(elementMsr[i].element.textHPos==1){
textPadding=elementMsr[i].element.textPaddingX+elementMsr[i].element.HspaceBetweenShapeAndText;
if(textPadding<0)textLeft=-textPadding;
textRight=Math.max(0,(elementMsr[i].textWidth+textPadding)-elementMsr[i].shapeWidth);
} else if(elementMsr[i].element.textHPos==3){
textPadding=elementMsr[i].element.textPaddingX-elementMsr[i].element.HspaceBetweenShapeAndText;
if(textPadding>0)textRight=textPadding;
textLeft=Math.max(0,(elementMsr[i].textWidth-textPadding)-elementMsr[i].shapeWidth);
}
else if(elementMsr[i].element.textHPos==2){
textPadding=0;
textRight=Math.max(0,elementMsr[i].textWidth+2*elementMsr[i].element.HspaceBetweenShapeAndText-elementMsr[i].shapeWidth)/2;
textLeft=textRight;
}
elementMsr[i].width=elementMsr[i].shapeWidth+textLeft+textRight;
if(textLeft>0) {
elementMsr[i].textPosX=0;
elementMsr[i].shapePosX=textLeft;
} else if (textRight>0) {
elementMsr[i].textPosX=elementMsr[i].shapeWidth+textRight-elementMsr[i].textWidth;
elementMsr[i].shapePosX=0;
} else {
elementMsr[i].shapePosX=0;
if(elementMsr[i].element.textHPos==2)elementMsr[i].textPosX= (elementMsr[i].shapeWidth-elementMsr[i].textWidth)/2;
else if(elementMsr[i].element.textHPos==1)elementMsr[i].textPosX= textPadding;
else if(elementMsr[i].element.textHPos==3)elementMsr[i].textPosX= elementMsr[i].shapeWidth-elementMsr[i].textWidth+textPadding;
else if(elementMsr[i].element.textHPos==0)elementMsr[i].textPosX= elementMsr[i].textWidth-textPadding;
else if(elementMsr[i].element.textHPos==4)elementMsr[i].textPosX= elementMsr[i].shapeWidth+textPadding;
}
}
} else if (elementMsr[i].element.element=="CR") {
elementMsr[i].width=0;
} else {
elementMsr[i].width=0;
}
// element Height :
if(elementMsr[i].element.element=="shapeText") {
var textBottom=0;
var textTop=0;
if(elementMsr[i].shapeHeight==0 && elementMsr[i].textHeight==0)elementMsr[i].height=0;
else if(elementMsr[i].shapeHeight>0 && elementMsr[i].textHeight==0)elementMsr[i].height=elementMsr[i].shapeHeight;
else if(elementMsr[i].shapeHeight==0 && elementMsr[i].textHeight>0){
elementMsr[i].height=elementMsr[i].textHeight;
elementMsr[i].textPosY=0;
} else {
if(elementMsr[i].element.textVPos==0) {
textPadding=elementMsr[i].element.textPaddingY + elementMsr[i].element.VspaceBetweenShapeAndText;
if(textPadding>0)textBottom=elementMsr[i].textHeight+textPadding;
else {
if(-textPadding>elementMsr[i].shapeHeight)textTop=Math.max(0,-textPadding-elementMsr[i].shapeHeight);
if(textTop>0) textBottom=Math.max(0,elementMsr[i].textHeight-textTop-elementMsr[i].shapeHeight);
else textBottom=Math.max(0,elementMsr[i].textHeight+textPadding);
}
} else if(elementMsr[i].element.textVPos==4) {
textPadding=elementMsr[i].element.textPaddingY - elementMsr[i].element.VspaceBetweenShapeAndText;
if(textPadding<0)textTop=elementMsr[i].textHeight-textPadding;
else {
if(textPadding>elementMsr[i].shapeHeight)textBottom=textPadding-elementMsr[i].shapeHeight;
if(textBottom>0) textTop=Math.max(0,elementMsr[i].textHeight-textBottom-elementMsr[i].shapeHeight);
else textTop=Math.max(0,(elementMsr[i].textHeight-textPadding));
}
} else if(elementMsr[i].element.textVPos==1){
textPadding=elementMsr[i].element.textPaddingY - elementMsr[i].element.VspaceBetweenShapeAndText;
if(textPadding>0)textBottom=textPadding;
textTop=Math.max(0,(elementMsr[i].textHeight-textPadding)-elementMsr[i].shapeHeight);
} else if(elementMsr[i].element.textVPos==3){
textPadding=elementMsr[i].element.textPaddingY + elementMsr[i].element.VspaceBetweenShapeAndText;
if(textPadding<0)textTop=-textPadding;
textBottom=Math.max(0,(elementMsr[i].textHeight+textPadding)-elementMsr[i].shapeHeight);
}
else if(elementMsr[i].element.textVPos==2){
textPadding=0;
textTop=Math.max(0,elementMsr[i].textHeight-elementMsr[i].shapeHeight)/2;
textBottom=textTop;
}
elementMsr[i].height=elementMsr[i].shapeHeight+textTop+textBottom;
if(textTop>0) {
elementMsr[i].textPosY=-textBottom-elementMsr[i].shapeHeight-textTop+elementMsr[i].textHeight;
elementMsr[i].shapePosY=-textBottom;
} else if (textBottom>0) {
elementMsr[i].textPosY=0;
elementMsr[i].shapePosY=-textBottom;
} else {
elementMsr[i].shapePosY=0;
if(elementMsr[i].element.textVPos==2)elementMsr[i].textPosY= -elementMsr[i].shapeHeight/2 + elementMsr[i].textHeight/2;
else if(elementMsr[i].element.textVPos==1)elementMsr[i].textPosY= textPadding;
else if(elementMsr[i].element.textVPos==3)elementMsr[i].textPosY= -elementMsr[i].shapeHeight+elementMsr[i].textHeight+textPadding;
else if(elementMsr[i].element.textVPos==0)elementMsr[i].textPosY= textPadding+elementMsr[i].textHeight;
else if(elementMsr[i].element.textVPos==4)elementMsr[i].textPosY= -elementMsr[i].shapeHeight+textPadding;
}
}
} else if (elementMsr[i].element.element=="CR") {
if(typeof elementMsr[i].element.CRSpace!="undefined")elementMsr[i].height=elementMsr[i].element.CRSpace;
} else {
elementMsr[i].height=0;
}
}
};
function setLegendElementValue(data,legend,config,legendDefaultValuesFromConfig) {
var returnObj = {};
returnObj=mergeChartConfig(legendDefaultValuesFromConfig,data.legend[legend]);
returnObj=mergeChartConfig(defaultLegendValues,returnObj);
return returnObj;
};
function setLegendElementValueBis(element,config,legendDefaultValuesFromConfig) {
var returnObj = element;
returnObj=mergeChartConfig(legendDefaultValuesFromConfig,returnObj);
returnObj=mergeChartConfig(defaultLegendValues,returnObj);
return returnObj;
};
function legendDefaultValuesFromConfigInit(config) {
return {
HspaceBetweenShapeAndText : (typeof config.legendSpaceBetweenBoxAndText!="undefined" ? config.legendSpaceBetweenBoxAndText :5 ),
shapeHeight : (typeof config.legendFontSize!="undefined" ? config.legendFontSize : 12),
shapeWidth : (typeof config.legendBlockSize!="undefined" ? config.legendBlockSize : 15),
markerRadius : (typeof config.pointDotRadius!="undefined" ? config.pointDotRadius : 4),
markerStrokeStyle : (typeof config.pointDotStrokeStyle!="undefined" ? config.pointDotStrokeStyle : "solid" ),
markerFillColor : (typeof config.defaultStrokeColor!="undefined" ? config.defaultStrokeColor : "rgba(220,220,220,1)"),
markerLineWidth : (typeof config.pointDotStrokeWidth!="undefined" ? config.pointDotStrokeWidth : 2),
shapeBordersWidth : (typeof config.datasetStrokeWidth !="undefined" ? config.datasetStrokeWidth : 2),
shapeBordersStyle : (typeof config.datasetStrokeStyle!="undefined" ? config.datasetStrokeStyle : "solid"),
shapeBordersColor : (typeof config.legendBordersColors!="undefined" ? config.legendBordersColors : "#666"),
shapeFillColor : (typeof config.defaultFillColor!="undefined" ? config.defaultFillColor : "rgba(220,220,220,0.5)" ),
fontFamily: (typeof config.legendFontFamily!="undefined" ? config.legendFontFamily : "'Arial'"),
fontSize: (typeof config.legendFontSize!="undefined" ? config.legendFontSize : 12),
fontStyle: (typeof config.legendFontStyle!="undefined" ? config.legendFontStyle : "normal"),
fontColor: (typeof config.legendFontColor!="undefined" ? config.legendFontColor : "#666")
};
};