From e4c6c5c5ab093adee91a398058319d637412fe83 Mon Sep 17 00:00:00 2001 From: Nicolas Kruchten Date: Wed, 2 May 2018 23:25:08 -0400 Subject: [PATCH 1/3] override toImage modebar button opts via config --- src/components/modebar/buttons.js | 18 ++++++++++++++---- src/plot_api/plot_config.js | 4 ++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/components/modebar/buttons.js b/src/components/modebar/buttons.js index 97496258eaa..40f7b8c9a1b 100644 --- a/src/components/modebar/buttons.js +++ b/src/components/modebar/buttons.js @@ -47,19 +47,29 @@ var modeBarButtons = module.exports = {}; modeBarButtons.toImage = { name: 'toImage', - title: function(gd) { return _(gd, 'Download plot as a png'); }, + title: function(gd) { return _(gd, 'Download plot'); }, icon: Icons.camera, click: function(gd) { - var format = 'png'; + var toImageButtonDefaults = gd._context.toImageButtonDefaults; + var opts = {format: toImageButtonDefaults.format || 'png'}; Lib.notifier(_(gd, 'Taking snapshot - this may take a few seconds'), 'long'); if(Lib.isIE()) { Lib.notifier(_(gd, 'IE only supports svg. Changing format to svg.'), 'long'); - format = 'svg'; + opts.format = 'svg'; } - Registry.call('downloadImage', gd, {'format': format}) + if(toImageButtonDefaults.width) { + opts.width = toImageButtonDefaults.width; + } + if(toImageButtonDefaults.height) { + opts.height = toImageButtonDefaults.height; + } + if(toImageButtonDefaults.filename) { + opts.filename = toImageButtonDefaults.filename; + } + Registry.call('downloadImage', gd, opts) .then(function(filename) { Lib.notifier(_(gd, 'Snapshot succeeded') + ' - ' + filename, 'long'); }) diff --git a/src/plot_api/plot_config.js b/src/plot_api/plot_config.js index 46db3bc0c1d..51fbe99dbdc 100644 --- a/src/plot_api/plot_config.js +++ b/src/plot_api/plot_config.js @@ -115,6 +115,10 @@ module.exports = { */ modeBarButtons: false, + // statically override options for toImage modebar button + // allowed keys are format, filename, width, height + toImageButtonDefaults: {}, + // add the plotly logo on the end of the mode bar displaylogo: true, From 56c5cca59b65547f39d5073c8baa035292d2c4d9 Mon Sep 17 00:00:00 2001 From: Nicolas Kruchten Date: Thu, 3 May 2018 11:38:14 -0400 Subject: [PATCH 2/3] PR feedback --- src/components/modebar/buttons.js | 15 +++++------- src/plot_api/plot_config.js | 3 ++- test/jasmine/tests/modebar_test.js | 37 ++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 10 deletions(-) diff --git a/src/components/modebar/buttons.js b/src/components/modebar/buttons.js index 40f7b8c9a1b..67c7acadd45 100644 --- a/src/components/modebar/buttons.js +++ b/src/components/modebar/buttons.js @@ -60,15 +60,12 @@ modeBarButtons.toImage = { opts.format = 'svg'; } - if(toImageButtonDefaults.width) { - opts.width = toImageButtonDefaults.width; - } - if(toImageButtonDefaults.height) { - opts.height = toImageButtonDefaults.height; - } - if(toImageButtonDefaults.filename) { - opts.filename = toImageButtonDefaults.filename; - } + ['filename', 'width', 'height', 'scale'].forEach(function(key) { + if(toImageButtonDefaults[key]) { + opts[key] = toImageButtonDefaults[key]; + } + }); + Registry.call('downloadImage', gd, opts) .then(function(filename) { Lib.notifier(_(gd, 'Snapshot succeeded') + ' - ' + filename, 'long'); diff --git a/src/plot_api/plot_config.js b/src/plot_api/plot_config.js index 51fbe99dbdc..be6bd5474d0 100644 --- a/src/plot_api/plot_config.js +++ b/src/plot_api/plot_config.js @@ -116,7 +116,8 @@ module.exports = { modeBarButtons: false, // statically override options for toImage modebar button - // allowed keys are format, filename, width, height + // allowed keys are format, filename, width, height, scale + // see ./components/modebar/buttons.js toImageButtonDefaults: {}, // add the plotly logo on the end of the mode bar diff --git a/test/jasmine/tests/modebar_test.js b/test/jasmine/tests/modebar_test.js index 718a4aefc14..74d6e13c2c1 100644 --- a/test/jasmine/tests/modebar_test.js +++ b/test/jasmine/tests/modebar_test.js @@ -5,6 +5,7 @@ var manageModeBar = require('@src/components/modebar/manage'); var Plotly = require('@lib/index'); var Plots = require('@src/plots/plots'); +var Registry = require('@src/registry'); var createGraphDiv = require('../assets/create_graph_div'); var destroyGraphDiv = require('../assets/destroy_graph_div'); var selectButton = require('../assets/modebar_button'); @@ -767,6 +768,42 @@ describe('ModeBar', function() { } } + describe('toImage handlers', function() { + beforeEach(function() { + spyOn(Registry, 'call').and.callFake(function() { + return Promise.resolve(); + }); + gd = createGraphDiv(); + }); + + it('should use defaults', function(done) { + Plotly.plot(gd, {data: [], layout: {}}) + .then(function() { + selectButton(gd._fullLayout._modeBar, 'toImage').click(); + expect(Registry.call).toHaveBeenCalledWith('downloadImage', gd, + {format: 'png'}); + done(); + }); + }); + + it('should accept overriding defaults', function(done) { + Plotly.plot(gd, {data: [], layout: {}, config: { + toImageButtonDefaults: { + format: 'svg', + filename: 'x', + unsupported: 'should not pass' + } + } }) + .then(function() { + selectButton(gd._fullLayout._modeBar, 'toImage').click(); + expect(Registry.call).toHaveBeenCalledWith('downloadImage', gd, + {format: 'svg', filename: 'x'}); + done(); + }); + }); + + }); + describe('cartesian handlers', function() { beforeEach(function(done) { From e7ef7ae765693c079ff33605a6174599e1994f44 Mon Sep 17 00:00:00 2001 From: Nicolas Kruchten Date: Thu, 3 May 2018 13:38:54 -0400 Subject: [PATCH 3/3] PR feedback --- src/components/modebar/buttons.js | 18 ++++++++++++------ src/plot_api/plot_config.js | 2 +- test/jasmine/tests/modebar_test.js | 2 +- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/components/modebar/buttons.js b/src/components/modebar/buttons.js index 67c7acadd45..22875894d53 100644 --- a/src/components/modebar/buttons.js +++ b/src/components/modebar/buttons.js @@ -47,22 +47,28 @@ var modeBarButtons = module.exports = {}; modeBarButtons.toImage = { name: 'toImage', - title: function(gd) { return _(gd, 'Download plot'); }, + title: function(gd) { + var opts = gd._context.toImageButtonOptions || {}; + var format = opts.format || 'png'; + return format === 'png' ? + _(gd, 'Download plot as a png') : // legacy text + _(gd, 'Download plot'); // generic non-PNG text + }, icon: Icons.camera, click: function(gd) { - var toImageButtonDefaults = gd._context.toImageButtonDefaults; - var opts = {format: toImageButtonDefaults.format || 'png'}; + var toImageButtonOptions = gd._context.toImageButtonOptions; + var opts = {format: toImageButtonOptions.format || 'png'}; Lib.notifier(_(gd, 'Taking snapshot - this may take a few seconds'), 'long'); - if(Lib.isIE()) { + if(opts.format !== 'svg' && Lib.isIE()) { Lib.notifier(_(gd, 'IE only supports svg. Changing format to svg.'), 'long'); opts.format = 'svg'; } ['filename', 'width', 'height', 'scale'].forEach(function(key) { - if(toImageButtonDefaults[key]) { - opts[key] = toImageButtonDefaults[key]; + if(toImageButtonOptions[key]) { + opts[key] = toImageButtonOptions[key]; } }); diff --git a/src/plot_api/plot_config.js b/src/plot_api/plot_config.js index be6bd5474d0..7971cd2ef8d 100644 --- a/src/plot_api/plot_config.js +++ b/src/plot_api/plot_config.js @@ -118,7 +118,7 @@ module.exports = { // statically override options for toImage modebar button // allowed keys are format, filename, width, height, scale // see ./components/modebar/buttons.js - toImageButtonDefaults: {}, + toImageButtonOptions: {}, // add the plotly logo on the end of the mode bar displaylogo: true, diff --git a/test/jasmine/tests/modebar_test.js b/test/jasmine/tests/modebar_test.js index 74d6e13c2c1..8912205fe11 100644 --- a/test/jasmine/tests/modebar_test.js +++ b/test/jasmine/tests/modebar_test.js @@ -788,7 +788,7 @@ describe('ModeBar', function() { it('should accept overriding defaults', function(done) { Plotly.plot(gd, {data: [], layout: {}, config: { - toImageButtonDefaults: { + toImageButtonOptions: { format: 'svg', filename: 'x', unsupported: 'should not pass'