From e35819dde0bb08368e217bb99d8275d49e2c2905 Mon Sep 17 00:00:00 2001 From: MarioIannotta Date: Wed, 13 Sep 2017 10:48:50 +0200 Subject: [PATCH 01/10] Add custom angles option for polar area graph --- src/controllers/controller.polarArea.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/controllers/controller.polarArea.js b/src/controllers/controller.polarArea.js index e59aedfb98a..8ae1ee6199e 100644 --- a/src/controllers/controller.polarArea.js +++ b/src/controllers/controller.polarArea.js @@ -146,16 +146,19 @@ module.exports = function(Chart) { var animationOpts = opts.animation; var scale = chart.scale; var labels = chart.data.labels; + var customAngles = opts.customAngles; - var circumference = me.calculateCircumference(dataset.data[index]); + var circumference = me.calculateCircumference(dataset.data[index], index); var centerX = scale.xCenter; var centerY = scale.yCenter; // If there is NaN data before us, we need to calculate the starting angle correctly. // We could be way more efficient here, but its unlikely that the polar area chart will have a lot of data + var previousAngle = 0 var visibleCount = 0; var meta = me.getMeta(); for (var i = 0; i < index; ++i) { + previousAngle += customAngles[visibleCount] if (!isNaN(dataset.data[i]) && !meta.data[i].hidden) { ++visibleCount; } @@ -164,7 +167,7 @@ module.exports = function(Chart) { // var negHalfPI = -0.5 * Math.PI; var datasetStartAngle = opts.startAngle; var distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]); - var startAngle = datasetStartAngle + (circumference * visibleCount); + var startAngle = datasetStartAngle + previousAngle var endAngle = startAngle + (arc.hidden ? 0 : circumference); var resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]); @@ -211,12 +214,14 @@ module.exports = function(Chart) { return count; }, - calculateCircumference: function(value) { + calculateCircumference: function (value, index) { + var me = this; + var chart = me.chart; + var opts = chart.options; + var customAngles = opts.customAngles; var count = this.getMeta().count; if (count > 0 && !isNaN(value)) { - return (2 * Math.PI) / count; + return count == 1 ? 2 * Math.PI : customAngles[index]; } - return 0; - } }); }; From 49c66e867e992468bcb75547d4e57a893873e11f Mon Sep 17 00:00:00 2001 From: MarioIannotta Date: Wed, 13 Sep 2017 11:01:25 +0200 Subject: [PATCH 02/10] fix 4751 --- src/controllers/controller.polarArea.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/controllers/controller.polarArea.js b/src/controllers/controller.polarArea.js index 8ae1ee6199e..82d02ffe847 100644 --- a/src/controllers/controller.polarArea.js +++ b/src/controllers/controller.polarArea.js @@ -223,5 +223,6 @@ module.exports = function(Chart) { if (count > 0 && !isNaN(value)) { return count == 1 ? 2 * Math.PI : customAngles[index]; } + } }); }; From 4b890056713f239731f257e31505b0a0e7556f4b Mon Sep 17 00:00:00 2001 From: MarioIannotta Date: Wed, 13 Sep 2017 11:02:25 +0200 Subject: [PATCH 03/10] Fix fallback --- src/controllers/controller.polarArea.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/controllers/controller.polarArea.js b/src/controllers/controller.polarArea.js index 82d02ffe847..5f628cdff74 100644 --- a/src/controllers/controller.polarArea.js +++ b/src/controllers/controller.polarArea.js @@ -223,6 +223,7 @@ module.exports = function(Chart) { if (count > 0 && !isNaN(value)) { return count == 1 ? 2 * Math.PI : customAngles[index]; } + return 0; } }); }; From 24fcd3a167cf6050cf0a4a685836a4e0209ab940 Mon Sep 17 00:00:00 2001 From: MarioIannotta Date: Wed, 13 Sep 2017 11:36:40 +0200 Subject: [PATCH 04/10] Fix codeclimate issues --- src/controllers/controller.polarArea.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/controllers/controller.polarArea.js b/src/controllers/controller.polarArea.js index 5f628cdff74..ec880a9b498 100644 --- a/src/controllers/controller.polarArea.js +++ b/src/controllers/controller.polarArea.js @@ -154,11 +154,11 @@ module.exports = function(Chart) { // If there is NaN data before us, we need to calculate the starting angle correctly. // We could be way more efficient here, but its unlikely that the polar area chart will have a lot of data - var previousAngle = 0 + var previousAngle = 0; var visibleCount = 0; var meta = me.getMeta(); for (var i = 0; i < index; ++i) { - previousAngle += customAngles[visibleCount] + previousAngle += customAngles[visibleCount]; if (!isNaN(dataset.data[i]) && !meta.data[i].hidden) { ++visibleCount; } @@ -167,7 +167,7 @@ module.exports = function(Chart) { // var negHalfPI = -0.5 * Math.PI; var datasetStartAngle = opts.startAngle; var distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]); - var startAngle = datasetStartAngle + previousAngle + var startAngle = datasetStartAngle + previousAngle; var endAngle = startAngle + (arc.hidden ? 0 : circumference); var resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]); @@ -214,14 +214,14 @@ module.exports = function(Chart) { return count; }, - calculateCircumference: function (value, index) { + calculateCircumference: function(value, index) { var me = this; var chart = me.chart; var opts = chart.options; var customAngles = opts.customAngles; var count = this.getMeta().count; if (count > 0 && !isNaN(value)) { - return count == 1 ? 2 * Math.PI : customAngles[index]; + return count === 1 ? 2 * Math.PI : customAngles[index]; } return 0; } From 75dc938c525d4ea8d8dff4fb92c29bd5a22eccd9 Mon Sep 17 00:00:00 2001 From: MarioIannotta Date: Wed, 13 Sep 2017 11:59:19 +0200 Subject: [PATCH 05/10] Restored default behavior if customAngles is not provided --- src/controllers/controller.polarArea.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/controllers/controller.polarArea.js b/src/controllers/controller.polarArea.js index ec880a9b498..9cd4c772260 100644 --- a/src/controllers/controller.polarArea.js +++ b/src/controllers/controller.polarArea.js @@ -158,7 +158,9 @@ module.exports = function(Chart) { var visibleCount = 0; var meta = me.getMeta(); for (var i = 0; i < index; ++i) { - previousAngle += customAngles[visibleCount]; + if (customAngles !== undefined) { + previousAngle += customAngles[visibleCount]; + } if (!isNaN(dataset.data[i]) && !meta.data[i].hidden) { ++visibleCount; } @@ -167,7 +169,7 @@ module.exports = function(Chart) { // var negHalfPI = -0.5 * Math.PI; var datasetStartAngle = opts.startAngle; var distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]); - var startAngle = datasetStartAngle + previousAngle; + var startAngle = customAngles === undefined ? datasetStartAngle + (circumference * visibleCount) : datasetStartAngle + previousAngle var endAngle = startAngle + (arc.hidden ? 0 : circumference); var resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]); @@ -221,6 +223,9 @@ module.exports = function(Chart) { var customAngles = opts.customAngles; var count = this.getMeta().count; if (count > 0 && !isNaN(value)) { + if (customAngles === undefined) { + return (2 * Math.PI) / count; + } return count === 1 ? 2 * Math.PI : customAngles[index]; } return 0; From 64d253f26e5f245cad58afb68434767588ee7e2f Mon Sep 17 00:00:00 2001 From: MarioIannotta Date: Wed, 13 Sep 2017 12:10:17 +0200 Subject: [PATCH 06/10] Improve readability --- src/controllers/controller.polarArea.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/controllers/controller.polarArea.js b/src/controllers/controller.polarArea.js index 9cd4c772260..30542c65dfb 100644 --- a/src/controllers/controller.polarArea.js +++ b/src/controllers/controller.polarArea.js @@ -169,7 +169,12 @@ module.exports = function(Chart) { // var negHalfPI = -0.5 * Math.PI; var datasetStartAngle = opts.startAngle; var distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]); - var startAngle = customAngles === undefined ? datasetStartAngle + (circumference * visibleCount) : datasetStartAngle + previousAngle + var startAngle = 0; + if (customAngles === undefined) { + startAngle = datasetStartAngle + (circumference * visibleCount); + } else { + datasetStartAngle + previousAngle + } var endAngle = startAngle + (arc.hidden ? 0 : circumference); var resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]); From 8198227f545bd15fd5af6f43720d9afacfcdbb70 Mon Sep 17 00:00:00 2001 From: MarioIannotta Date: Wed, 13 Sep 2017 12:13:57 +0200 Subject: [PATCH 07/10] Fix typo. --- src/controllers/controller.polarArea.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/controller.polarArea.js b/src/controllers/controller.polarArea.js index 30542c65dfb..cd197bcd4a6 100644 --- a/src/controllers/controller.polarArea.js +++ b/src/controllers/controller.polarArea.js @@ -173,7 +173,7 @@ module.exports = function(Chart) { if (customAngles === undefined) { startAngle = datasetStartAngle + (circumference * visibleCount); } else { - datasetStartAngle + previousAngle + startAngle = datasetStartAngle + previousAngle; } var endAngle = startAngle + (arc.hidden ? 0 : circumference); From cd6a1886bb983b11e2a28124b7546250ee07ca6c Mon Sep 17 00:00:00 2001 From: MarioIannotta Date: Wed, 13 Sep 2017 12:21:23 +0200 Subject: [PATCH 08/10] Reduce cyclomatic complexity --- src/controllers/controller.polarArea.js | 45 ++++++++++++++----------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/src/controllers/controller.polarArea.js b/src/controllers/controller.polarArea.js index cd197bcd4a6..c7821c1c8f0 100644 --- a/src/controllers/controller.polarArea.js +++ b/src/controllers/controller.polarArea.js @@ -138,43 +138,50 @@ module.exports = function(Chart) { }); }, - updateElement: function(arc, index, reset) { - var me = this; - var chart = me.chart; - var dataset = me.getDataset(); - var opts = chart.options; - var animationOpts = opts.animation; - var scale = chart.scale; - var labels = chart.data.labels; - var customAngles = opts.customAngles; - - var circumference = me.calculateCircumference(dataset.data[index], index); - var centerX = scale.xCenter; - var centerY = scale.yCenter; + getStartAngle: function (customAngles, dataSetData, metaData, datasetStartAngle, index) { // If there is NaN data before us, we need to calculate the starting angle correctly. // We could be way more efficient here, but its unlikely that the polar area chart will have a lot of data + var previousAngle = 0; var visibleCount = 0; - var meta = me.getMeta(); + for (var i = 0; i < index; ++i) { if (customAngles !== undefined) { previousAngle += customAngles[visibleCount]; } - if (!isNaN(dataset.data[i]) && !meta.data[i].hidden) { + if (!isNaN(dataSetData[i]) && !metaData[i].hidden) { ++visibleCount; } } - - // var negHalfPI = -0.5 * Math.PI; - var datasetStartAngle = opts.startAngle; - var distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]); var startAngle = 0; if (customAngles === undefined) { startAngle = datasetStartAngle + (circumference * visibleCount); } else { startAngle = datasetStartAngle + previousAngle; } + + return startAngle + }, + updateElement: function(arc, index, reset) { + var me = this; + var chart = me.chart; + var dataset = me.getDataset(); + var opts = chart.options; + var animationOpts = opts.animation; + var scale = chart.scale; + var labels = chart.data.labels; + var customAngles = opts.customAngles; + + var circumference = me.calculateCircumference(dataset.data[index], index); + var centerX = scale.xCenter; + var centerY = scale.yCenter; + + // var negHalfPI = -0.5 * Math.PI; + var datasetStartAngle = opts.startAngle; + var distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]); + + var startAngle = getStartAngle(customAngles, dataset.data, meta.data, datasetStartAngle, index); var endAngle = startAngle + (arc.hidden ? 0 : circumference); var resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]); From 5eb9c62491022d000d3333da84089212cb640048 Mon Sep 17 00:00:00 2001 From: MarioIannotta Date: Wed, 13 Sep 2017 12:23:53 +0200 Subject: [PATCH 09/10] Fix --- src/controllers/controller.polarArea.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/controllers/controller.polarArea.js b/src/controllers/controller.polarArea.js index c7821c1c8f0..c4075333f56 100644 --- a/src/controllers/controller.polarArea.js +++ b/src/controllers/controller.polarArea.js @@ -138,11 +138,11 @@ module.exports = function(Chart) { }); }, - getStartAngle: function (customAngles, dataSetData, metaData, datasetStartAngle, index) { + getStartAngle: function(customAngles, dataSetData, metaData, datasetStartAngle, circumference, index) { // If there is NaN data before us, we need to calculate the starting angle correctly. // We could be way more efficient here, but its unlikely that the polar area chart will have a lot of data - + var previousAngle = 0; var visibleCount = 0; @@ -161,7 +161,7 @@ module.exports = function(Chart) { startAngle = datasetStartAngle + previousAngle; } - return startAngle + return startAngle; }, updateElement: function(arc, index, reset) { var me = this; @@ -172,6 +172,7 @@ module.exports = function(Chart) { var scale = chart.scale; var labels = chart.data.labels; var customAngles = opts.customAngles; + var meta = me.getMeta(); var circumference = me.calculateCircumference(dataset.data[index], index); var centerX = scale.xCenter; @@ -180,8 +181,8 @@ module.exports = function(Chart) { // var negHalfPI = -0.5 * Math.PI; var datasetStartAngle = opts.startAngle; var distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]); - - var startAngle = getStartAngle(customAngles, dataset.data, meta.data, datasetStartAngle, index); + + var startAngle = me.getStartAngle(customAngles, dataset.data, meta.data, datasetStartAngle, circumference, index); var endAngle = startAngle + (arc.hidden ? 0 : circumference); var resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]); From c003d04bff1077ebb2bc3b053ff9dd6efab5d528 Mon Sep 17 00:00:00 2001 From: Mario Iannotta Date: Tue, 19 Sep 2017 11:58:20 +0200 Subject: [PATCH 10/10] Update controller.polarArea.js Move "i" and "startAngle" at the beginning of the function. --- src/controllers/controller.polarArea.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/controllers/controller.polarArea.js b/src/controllers/controller.polarArea.js index c4075333f56..48bbd8287e8 100644 --- a/src/controllers/controller.polarArea.js +++ b/src/controllers/controller.polarArea.js @@ -145,8 +145,10 @@ module.exports = function(Chart) { var previousAngle = 0; var visibleCount = 0; + var startAngle = 0; + var i = 0; - for (var i = 0; i < index; ++i) { + for (i = 0; i < index; ++i) { if (customAngles !== undefined) { previousAngle += customAngles[visibleCount]; } @@ -154,7 +156,6 @@ module.exports = function(Chart) { ++visibleCount; } } - var startAngle = 0; if (customAngles === undefined) { startAngle = datasetStartAngle + (circumference * visibleCount); } else {