diff --git a/draftlogs/6177_fix.md b/draftlogs/6177_fix.md new file mode 100644 index 00000000000..8f22a15adb7 --- /dev/null +++ b/draftlogs/6177_fix.md @@ -0,0 +1 @@ + - Fix custom modebar buttons mutate the input [[#6177](https://github.com/plotly/plotly.js/pull/6177)] \ No newline at end of file diff --git a/src/components/modebar/manage.js b/src/components/modebar/manage.js index e75c1c34409..a6e89f9cf2a 100644 --- a/src/components/modebar/manage.js +++ b/src/components/modebar/manage.js @@ -8,6 +8,7 @@ var isUnifiedHover = require('../fx/helpers').isUnifiedHover; var createModeBar = require('./modebar'); var modeBarButtons = require('./buttons'); var DRAW_MODES = require('./constants').DRAW_MODES; +var extendDeep = require('../../lib').extendDeep; /** * ModeBar wrapper around 'create' and 'update', @@ -330,7 +331,9 @@ function appendButtonsToGroups(groups, buttons) { } // fill in custom buttons referring to default mode bar buttons -function fillCustomButton(customButtons) { +function fillCustomButton(originalModeBarButtons) { + var customButtons = extendDeep([], originalModeBarButtons); + for(var i = 0; i < customButtons.length; i++) { var buttonGroup = customButtons[i]; diff --git a/test/jasmine/tests/modebar_test.js b/test/jasmine/tests/modebar_test.js index d4f60d1147c..05e310cca48 100644 --- a/test/jasmine/tests/modebar_test.js +++ b/test/jasmine/tests/modebar_test.js @@ -996,6 +996,15 @@ describe('ModeBar', function() { expect(countButtons(gd._fullLayout._modeBar)) .toEqual(initialButtonCount + 6); }); + + it('sets up buttons without changing the input', function() { + var config = [['toImage']]; + var gd = setupGraphInfo(); + gd._context.modeBarButtons = config; + manageModeBar(gd); + expect(config).toEqual([['toImage']]); + expect(countButtons(gd._fullLayout._modeBar)).toEqual(2); + }); }); describe('modebar on clicks', function() {