Skip to content

Commit 278c86c

Browse files
author
Gabriel Gilini
committed
Added a bunch of new options to Line and an example
1 parent ce581d1 commit 278c86c

File tree

3 files changed

+99
-64
lines changed

3 files changed

+99
-64
lines changed

Chart.js

Lines changed: 43 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -290,14 +290,17 @@ window.Chart = function(context){
290290
scaleSteps : null,
291291
scaleStepWidth : null,
292292
scaleStartValue : null,
293+
scaleShowStartValue : false,
293294
scaleLineColor : "rgba(0,0,0,.1)",
294295
scaleLineWidth : 1,
295296
scaleShowLabels : true,
296297
scaleLabel : "<%=value%>",
298+
scaleLabelPosition : 'left',
297299
scaleFontFamily : "'Arial'",
298300
scaleFontSize : 12,
299301
scaleFontStyle : "normal",
300302
scaleFontColor : "#666",
303+
labelsFontColor : "#666",
301304
scaleShowGridLines : true,
302305
scaleGridLineColor : "rgba(0,0,0,.05)",
303306
scaleGridLineWidth : 1,
@@ -313,9 +316,9 @@ window.Chart = function(context){
313316
animationEasing : "easeOutQuart",
314317
onAnimationComplete : null
315318
};
316-
var config = (options) ? mergeChartConfig(chart.Line.defaults,options) : chart.Line.defaults;
319+
var config = (options) ? mergeChartConfig(chart.Line.defaults, options) : chart.Line.defaults;
317320

318-
return new Line(data,config,context);
321+
return new Line(data, config, context);
319322
}
320323

321324
this.Bar = function(data,options){
@@ -789,8 +792,8 @@ window.Chart = function(context){
789792

790793
}
791794

792-
var Line = function(data,config,ctx){
793-
var maxSize, scaleHop, calculatedScale, labelHeight, scaleHeight, valueBounds, labelTemplateString, valueHop,widestXLabel, xAxisLength,yAxisPosX,xAxisPosY, rotateLabels = 0;
795+
var Line = function(data, config, ctx){
796+
var maxSize, scaleHop, calculatedScale, labelHeight, scaleHeight, valueBounds, labelTemplateString, valueHop,widestXLabel, widestYLabel, xAxisLength,yAxisPosX,xAxisPosY, rotateLabels = 0;
794797

795798
calculateDrawingSizes();
796799

@@ -808,7 +811,7 @@ window.Chart = function(context){
808811
graphMin : config.scaleStartValue,
809812
labels : []
810813
}
811-
populateLabels(labelTemplateString, calculatedScale.labels,calculatedScale.steps,config.scaleStartValue,config.scaleStepWidth);
814+
populateLabels(labelTemplateString, calculatedScale.labels,calculatedScale.steps,config.scaleStartValue,config.scaleStepWidth, config.scaleShowStartValue);
812815
}
813816

814817
scaleHop = Math.floor(scaleHeight/calculatedScale.steps);
@@ -879,7 +882,7 @@ window.Chart = function(context){
879882
else{
880883
ctx.textAlign = "center";
881884
}
882-
ctx.fillStyle = config.scaleFontColor;
885+
ctx.fillStyle = config.labelsFontColor;
883886
for (var i=0; i<data.labels.length; i++){
884887
ctx.save();
885888
if (rotateLabels > 0){
@@ -897,7 +900,7 @@ window.Chart = function(context){
897900
ctx.moveTo(yAxisPosX + i * valueHop, xAxisPosY+3);
898901

899902
//Check i isnt 0, so we dont go over the Y axis twice.
900-
if(config.scaleShowGridLines && i>0){
903+
if((config.scaleShowGridLines == 'vertical' || config.scaleShowGridLines === true) && i > 0){
901904
ctx.lineWidth = config.scaleGridLineWidth;
902905
ctx.strokeStyle = config.scaleGridLineColor;
903906
ctx.lineTo(yAxisPosX + i * valueHop, 5);
@@ -911,29 +914,38 @@ window.Chart = function(context){
911914
//Y axis
912915
ctx.lineWidth = config.scaleLineWidth;
913916
ctx.strokeStyle = config.scaleLineColor;
917+
ctx.fillStyle = config.scaleFontColor;
914918
ctx.beginPath();
915919
ctx.moveTo(yAxisPosX,xAxisPosY+5);
916920
ctx.lineTo(yAxisPosX,5);
917921
ctx.stroke();
918922

919-
ctx.textAlign = "right";
923+
ctx.textAlign = config.scaleLabelPosition == "right" ? 'left' : 'right';
920924
ctx.textBaseline = "middle";
921-
for (var j=0; j<calculatedScale.steps; j++){
925+
926+
var k = calculatedScale.steps;
927+
if (config.scaleShowStartValue) {
928+
++k;
929+
}
930+
for (var j = +!config.scaleShowStartValue; j < k; j++){
922931
ctx.beginPath();
923-
ctx.moveTo(yAxisPosX-3,xAxisPosY - ((j+1) * scaleHop));
924-
if (config.scaleShowGridLines){
932+
ctx.moveTo(yAxisPosX - 3, xAxisPosY - (j * scaleHop));
933+
if (config.scaleShowGridLines == 'horizontal' || config.scaleShowGridLines === true){
925934
ctx.lineWidth = config.scaleGridLineWidth;
926935
ctx.strokeStyle = config.scaleGridLineColor;
927-
ctx.lineTo(yAxisPosX + xAxisLength + 5,xAxisPosY - ((j+1) * scaleHop));
928-
}
929-
else{
930-
ctx.lineTo(yAxisPosX-0.5,xAxisPosY - ((j+1) * scaleHop));
936+
ctx.lineTo(yAxisPosX + xAxisLength + 5, xAxisPosY - (j * scaleHop));
937+
} else {
938+
ctx.lineTo(yAxisPosX - 0.5, xAxisPosY - (j * scaleHop));
931939
}
932940

933941
ctx.stroke();
934942

935-
if (config.scaleShowLabels){
936-
ctx.fillText(calculatedScale.labels[j],yAxisPosX-8,xAxisPosY - ((j+1) * scaleHop));
943+
if (config.scaleShowLabels) {
944+
ctx.fillText(
945+
calculatedScale.labels[j],
946+
yAxisPosX - 8 + (config.scaleLabelPosition == 'right' ? xAxisLength + 20 : 0),
947+
xAxisPosY - (j * scaleHop)
948+
);
937949
}
938950
}
939951

@@ -951,10 +963,11 @@ window.Chart = function(context){
951963
//Add a little extra padding from the y axis
952964
longestText +=10;
953965
}
966+
widestYLabel = longestText;
954967
xAxisLength = width - longestText - widestXLabel;
955968
valueHop = Math.floor(xAxisLength/(data.labels.length-1));
956969

957-
yAxisPosX = width-widestXLabel/2-xAxisLength;
970+
yAxisPosX = width - widestXLabel / 2 - xAxisLength - (config.scaleLabelPosition == "right" ? longestText : 0);
958971
xAxisPosY = scaleHeight + config.scaleFontSize/2;
959972
}
960973
function calculateDrawingSizes(){
@@ -1332,11 +1345,19 @@ window.Chart = function(context){
13321345
}
13331346

13341347
//Populate an array of all the labels by interpolating the string.
1335-
function populateLabels(labelTemplateString, labels, numberOfSteps, graphMin, stepValue) {
1336-
if (labelTemplateString) {
1348+
function populateLabels(labelTemplate, labels, numberOfSteps, graphMin, stepValue, showStartValue) {
1349+
if (labelTemplate) {
1350+
var labelFn = (
1351+
typeof labelTemplate == 'function'
1352+
? function (labelTemplate, options) {
1353+
return labelTemplate(options.value);
1354+
}
1355+
: tmpl
1356+
);
1357+
13371358
//Fix floating point errors by setting to fixed the on the same decimal as the stepValue.
1338-
for (var i = 1; i < numberOfSteps + 1; i++) {
1339-
labels.push(tmpl(labelTemplateString, {value: (graphMin + (stepValue * i)).toFixed(getDecimalPlaces(stepValue))}));
1359+
for (var i = +!showStartValue; i < numberOfSteps + 1; i++) {
1360+
labels.push(labelFn(labelTemplate, {value: (graphMin + (stepValue * i)).toFixed(getDecimalPlaces(stepValue))}));
13401361
}
13411362
}
13421363
}

0 commit comments

Comments
 (0)