From ed3df20d5915ffc7969e295418367b8d04e34bc2 Mon Sep 17 00:00:00 2001 From: Paul Kaplan Date: Fri, 2 Nov 2018 16:14:42 -0400 Subject: [PATCH] Strip nbsp to fix serializing svg on safari --- src/containers/backpack.jsx | 9 ++++++--- src/lib/backpack/block-to-image.js | 3 +++ src/lib/backpack/jpeg-thumbnail.js | 5 ++++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/containers/backpack.jsx b/src/containers/backpack.jsx index a79b43a02..1a22a185e 100644 --- a/src/containers/backpack.jsx +++ b/src/containers/backpack.jsx @@ -114,8 +114,9 @@ class Backpack extends React.Component { contents: [item].concat(this.state.contents) }); }) - .catch(() => { + .catch(error => { this.setState({error: true, loading: false}); + throw error; }); }); } @@ -133,8 +134,9 @@ class Backpack extends React.Component { contents: this.state.contents.filter(o => o.id !== id) }); }) - .catch(() => { + .catch(error => { this.setState({error: true, loading: false}); + throw error; }); }); } @@ -155,8 +157,9 @@ class Backpack extends React.Component { loading: false }); }) - .catch(() => { + .catch(error => { this.setState({error: true, loading: false}); + throw error; }); }); } diff --git a/src/lib/backpack/block-to-image.js b/src/lib/backpack/block-to-image.js index 8c38d29bc..eac4753b3 100644 --- a/src/lib/backpack/block-to-image.js +++ b/src/lib/backpack/block-to-image.js @@ -15,6 +15,9 @@ export default function (blockId) { // blocking the drag end from finishing promptly. return new Promise(resolve => { setTimeout(() => { + // Strip   entities that cannot be inlined + blockSvg.innerHTML = blockSvg.innerHTML.replace(/ /g, ' '); + // Create an element to put the cloned blockSvg inside const NS = 'http://www.w3.org/2000/svg'; const svg = document.createElementNS(NS, 'svg'); diff --git a/src/lib/backpack/jpeg-thumbnail.js b/src/lib/backpack/jpeg-thumbnail.js index 623daf3be..f0fbd28d2 100644 --- a/src/lib/backpack/jpeg-thumbnail.js +++ b/src/lib/backpack/jpeg-thumbnail.js @@ -1,4 +1,4 @@ -const jpegThumbnail = dataUrl => new Promise(resolve => { +const jpegThumbnail = dataUrl => new Promise((resolve, reject) => { const image = new Image(); image.onload = () => { const canvas = document.createElement('canvas'); @@ -14,6 +14,9 @@ const jpegThumbnail = dataUrl => new Promise(resolve => { // TODO we can play with the `quality` option here to optimize file size resolve(canvas.toDataURL('image/jpeg', 0.92 /* quality */)); // Default quality is 0.92 }; + image.onerror = err => { + reject(err); + }; image.src = dataUrl; });