From 76f153557b32e2ed5ccef3e61554dd4a029092c4 Mon Sep 17 00:00:00 2001 From: Becky Reamy Date: Mon, 26 Apr 2021 13:46:31 -0400 Subject: [PATCH 1/5] Removed special handling for Safari for downloads as this breaks Safari, and it appears that recent versions may not need it --- src/snapshot/filesaver.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/snapshot/filesaver.js b/src/snapshot/filesaver.js index cd4e58b2044..340b8444377 100644 --- a/src/snapshot/filesaver.js +++ b/src/snapshot/filesaver.js @@ -23,13 +23,6 @@ function fileSaver(url, name, format) { var blob; var objectUrl; - // Safari doesn't allow downloading of blob urls - if(Lib.isSafari()) { - var prefix = format === 'svg' ? ',' : ';base64,'; - helpers.octetStream(prefix + encodeURIComponent(url)); - return resolve(name); - } - // IE 10+ (native saveAs) if(Lib.isIE()) { // At this point we are only dealing with a decoded SVG as From a53b71e9d92a3a62050b9d8b4c22c5eba1e93e0a Mon Sep 17 00:00:00 2001 From: archmoj Date: Mon, 19 Jul 2021 17:14:57 -0400 Subject: [PATCH 2/5] add fallback for old safari download and place it after save link block --- src/snapshot/filesaver.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/snapshot/filesaver.js b/src/snapshot/filesaver.js index 340b8444377..180d30b9b39 100644 --- a/src/snapshot/filesaver.js +++ b/src/snapshot/filesaver.js @@ -49,6 +49,13 @@ function fileSaver(url, name, format) { return resolve(name); } + // Older versions of Safari did not allow downloading of blob urls + if(Lib.isSafari()) { + var prefix = format === 'svg' ? ',' : ';base64,'; + helpers.octetStream(prefix + encodeURIComponent(url)); + return resolve(name); + } + reject(new Error('download error')); }); From dfde26c726a834d27ad009fe3e7d18e832d97b49 Mon Sep 17 00:00:00 2001 From: archmoj Date: Mon, 19 Jul 2021 17:20:41 -0400 Subject: [PATCH 3/5] draft log for Safari download PRs --- draftlogs/5838_fix.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 draftlogs/5838_fix.md diff --git a/draftlogs/5838_fix.md b/draftlogs/5838_fix.md new file mode 100644 index 00000000000..3d47b67b8b2 --- /dev/null +++ b/draftlogs/5838_fix.md @@ -0,0 +1,2 @@ + - Fix unknown filename when exporting charts using new versions of Safari [[#5609](https://github.com/plotly/plotly.js/pull/5609), [5838](https://github.com/plotly/plotly.js/pull/5838)], + with thanks to @rlreamy for the contribution! From cbf46a219566412b5043f56dc349a45c92d5d202 Mon Sep 17 00:00:00 2001 From: archmoj Date: Mon, 19 Jul 2021 17:26:16 -0400 Subject: [PATCH 4/5] comment tests related to old Safari --- test/jasmine/tests/download_test.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/test/jasmine/tests/download_test.js b/test/jasmine/tests/download_test.js index ad1303332aa..9abeae7ef92 100644 --- a/test/jasmine/tests/download_test.js +++ b/test/jasmine/tests/download_test.js @@ -1,8 +1,8 @@ var Plotly = require('@lib/index'); var Lib = require('@src/lib'); -var helpers = require('@src/snapshot/helpers'); -var getImageSize = require('@src/traces/image/helpers').getImageSize; +// var helpers = require('@src/snapshot/helpers'); +// var getImageSize = require('@src/traces/image/helpers').getImageSize; var createGraphDiv = require('../assets/create_graph_div'); var destroyGraphDiv = require('../assets/destroy_graph_div'); @@ -137,8 +137,8 @@ describe('Plotly.downloadImage', function() { }) .then(done, done.fail); }, LONG_TIMEOUT_INTERVAL); - - it('should produce right output in Safari', function(done) { +/* + it('should produce right output in Old Safari', function(done) { spyOn(Lib, 'isSafari').and.callFake(function() { return true; }); spyOn(helpers, 'octetStream'); @@ -157,7 +157,7 @@ describe('Plotly.downloadImage', function() { .then(done, done.fail); }); - it('should default width & height for downloadImage to match with the live graph', function(done) { + it('should default width & height for downloadImage to match with the live graph on Old Safari', function(done) { spyOn(Lib, 'isSafari').and.callFake(function() { return true; }); spyOn(helpers, 'octetStream'); @@ -182,6 +182,7 @@ describe('Plotly.downloadImage', function() { }) .then(done, done.fail); }); +*/ }); function downloadTest(gd, format) { From cc9655a1c2fef6f333e6fa6f453610f8afd94a44 Mon Sep 17 00:00:00 2001 From: archmoj Date: Tue, 20 Jul 2021 08:02:26 -0400 Subject: [PATCH 5/5] remove old tests --- test/jasmine/tests/download_test.js | 49 ----------------------------- 1 file changed, 49 deletions(-) diff --git a/test/jasmine/tests/download_test.js b/test/jasmine/tests/download_test.js index 9abeae7ef92..3479d900a98 100644 --- a/test/jasmine/tests/download_test.js +++ b/test/jasmine/tests/download_test.js @@ -1,9 +1,6 @@ var Plotly = require('@lib/index'); var Lib = require('@src/lib'); -// var helpers = require('@src/snapshot/helpers'); -// var getImageSize = require('@src/traces/image/helpers').getImageSize; - var createGraphDiv = require('../assets/create_graph_div'); var destroyGraphDiv = require('../assets/destroy_graph_div'); @@ -137,52 +134,6 @@ describe('Plotly.downloadImage', function() { }) .then(done, done.fail); }, LONG_TIMEOUT_INTERVAL); -/* - it('should produce right output in Old Safari', function(done) { - spyOn(Lib, 'isSafari').and.callFake(function() { return true; }); - spyOn(helpers, 'octetStream'); - - Plotly.newPlot(gd, textchartMock.data, textchartMock.layout) - .then(function() { return Plotly.downloadImage(gd, {format: 'svg'}); }) - .then(function() { return Plotly.downloadImage(gd, {format: 'png'}); }) - .then(function() { return Plotly.downloadImage(gd, {format: 'jpeg'}); }) - .then(function() { return Plotly.downloadImage(gd, {format: 'webp'}); }) - .then(function() { - var args = helpers.octetStream.calls.allArgs(); - expect(args[0][0].slice(0, 15)).toBe(',%3Csvg%20class', 'format:svg'); - expect(args[1][0].slice(0, 8)).toBe(';base64,', 'format:png'); - expect(args[2][0].slice(0, 8)).toBe(';base64,', 'format:jpeg'); - expect(args[3][0].slice(0, 8)).toBe(';base64,', 'format:webp'); - }) - .then(done, done.fail); - }); - - it('should default width & height for downloadImage to match with the live graph on Old Safari', function(done) { - spyOn(Lib, 'isSafari').and.callFake(function() { return true; }); - spyOn(helpers, 'octetStream'); - - var fig = { - data: [{y: [0, 1]}] - }; - - gd.style.width = '500px'; - gd.style.height = '300px'; - - Plotly.newPlot(gd, fig) - .then(function() { return Plotly.downloadImage(gd, {format: 'png'}); }) - .then(function() { - var args = helpers.octetStream.calls.allArgs(); - var blob = args[0][0]; - expect(blob.slice(0, 8)).toBe(';base64,', 'format:png'); - var size = getImageSize('data:image/png' + blob); - expect(size.width).toBe(gd._fullLayout.width, 'fullLayout width'); - expect(size.height).toBe(gd._fullLayout.height, 'fullLayout height'); - expect(size.width).toBe(500, 'div width'); - expect(size.height).toBe(300, 'div height'); - }) - .then(done, done.fail); - }); -*/ }); function downloadTest(gd, format) {