]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Fix shorthand `legend: false` and `title: false`
authorSimon Brunel <simonbrunel@users.noreply.github.com>
Sat, 4 Mar 2017 11:21:51 +0000 (12:21 +0100)
committerEvert Timberg <evert.timberg+github@gmail.com>
Sat, 4 Mar 2017 14:13:42 +0000 (09:13 -0500)
Prevent attempt to remove the legend or title layout items if they haven't been created but also check if the item to remove is registered with the layout manager to avoid removing the wrong box `splice(-1, 1)`. Add ids to the legend and title plugins to allow to fully disable them (`options: {plugins: {legend: false, title: false}}`).

src/core/core.layoutService.js
src/core/core.legend.js
src/core/core.title.js

index 9d40a2e407fa0a0737fadc06b7e8d52c409902e9..045a7490129afb0f2966a69e5e15bf1dbe38581b 100644 (file)
@@ -74,10 +74,10 @@ module.exports = function(Chart) {
                 * @param {Object} layoutItem - the item to remove from the layout
                 */
                removeBox: function(chart, layoutItem) {
-                       if (!chart.boxes) {
-                               return;
+                       var index = chart.boxes? chart.boxes.indexOf(layoutItem) : -1;
+                       if (index !== -1) {
+                               chart.boxes.splice(index, 1);
                        }
-                       chart.boxes.splice(chart.boxes.indexOf(layoutItem), 1);
                },
 
                /**
index aace498bfe1f538e4a3aab7c63724180f3ba7fb7..b68f1de1a9c6843c750089e30dc49a4aed1c8fc0 100644 (file)
@@ -509,6 +509,8 @@ module.exports = function(Chart) {
 
        // Register the legend plugin
        Chart.plugins.register({
+               id: 'legend',
+
                beforeInit: function(chart) {
                        var legendOpts = chart.options.legend;
 
@@ -518,17 +520,18 @@ module.exports = function(Chart) {
                },
                beforeUpdate: function(chart) {
                        var legendOpts = chart.options.legend;
+                       var legend = chart.legend;
 
                        if (legendOpts) {
                                legendOpts = helpers.configMerge(Chart.defaults.global.legend, legendOpts);
 
-                               if (chart.legend) {
-                                       chart.legend.options = legendOpts;
+                               if (legend) {
+                                       legend.options = legendOpts;
                                } else {
                                        createNewLegendAndAttach(chart, legendOpts);
                                }
-                       } else {
-                               Chart.layoutService.removeBox(chart, chart.legend);
+                       } else if (legend) {
+                               Chart.layoutService.removeBox(chart, legend);
                                delete chart.legend;
                        }
                },
index fe7674d4ae19e7f10a6ab307cb778a59682f701c..eb060082433e1372d01825c43885b4bf79dc662c 100644 (file)
@@ -18,7 +18,6 @@ module.exports = function(Chart) {
 
        var noop = helpers.noop;
        Chart.Title = Chart.Element.extend({
-
                initialize: function(config) {
                        var me = this;
                        helpers.extend(me, config);
@@ -198,6 +197,8 @@ module.exports = function(Chart) {
 
        // Register the title plugin
        Chart.plugins.register({
+               id: 'title',
+
                beforeInit: function(chart) {
                        var titleOpts = chart.options.title;
 
@@ -207,17 +208,18 @@ module.exports = function(Chart) {
                },
                beforeUpdate: function(chart) {
                        var titleOpts = chart.options.title;
+                       var titleBlock = chart.titleBlock;
 
                        if (titleOpts) {
                                titleOpts = helpers.configMerge(Chart.defaults.global.title, titleOpts);
 
-                               if (chart.titleBlock) {
-                                       chart.titleBlock.options = titleOpts;
+                               if (titleBlock) {
+                                       titleBlock.options = titleOpts;
                                } else {
                                        createNewTitleBlockAndAttach(chart, titleOpts);
                                }
-                       } else {
-                               Chart.layoutService.removeBox(chart, chart.titleBlock);
+                       } else if (titleBlock) {
+                               Chart.layoutService.removeBox(chart, titleBlock);
                                delete chart.titleBlock;
                        }
                }