From 5f1fe572064b71d58d94214a9c4576ed0f14e23f Mon Sep 17 00:00:00 2001 From: chrisgarrity <chrisg@media.mit.edu> Date: Mon, 26 Feb 2018 18:45:55 -0500 Subject: [PATCH] Nicer crash message format MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fixes #1205. It doesn’t translate any of the text to avoid a case where translation is causing the error, and fails in the error boundary as well. --- .../crash-message/crash-message.css | 28 +++++++++++++ .../crash-message/crash-message.jsx | 38 ++++++++++++++++++ src/components/crash-message/reload.svg | Bin 0 -> 1509 bytes src/containers/error-boundary.jsx | 16 +++----- 4 files changed, 72 insertions(+), 10 deletions(-) create mode 100644 src/components/crash-message/crash-message.css create mode 100644 src/components/crash-message/crash-message.jsx create mode 100644 src/components/crash-message/reload.svg diff --git a/src/components/crash-message/crash-message.css b/src/components/crash-message/crash-message.css new file mode 100644 index 000000000..605f7fdab --- /dev/null +++ b/src/components/crash-message/crash-message.css @@ -0,0 +1,28 @@ +@import "../../css/colors.css"; +@import "../../css/units.css"; +@import "../../css/typography.css"; + +.crash-wrapper { + background-color: $motion-primary; + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; +} +.body { + width: 35%; + color: white; + text-align: center; +} + +.reloadButton { + border: 1px solid $motion-primary; + border-radius: 0.25rem; + padding: 0.5rem 2rem; + background: white; + color: $motion-primary; + font-weight: bold; + font-size: 0.875rem; + cursor: pointer; +} diff --git a/src/components/crash-message/crash-message.jsx b/src/components/crash-message/crash-message.jsx new file mode 100644 index 000000000..d5fc45d16 --- /dev/null +++ b/src/components/crash-message/crash-message.jsx @@ -0,0 +1,38 @@ +import PropTypes from 'prop-types'; +import React from 'react'; +import Box from '../box/box.jsx'; + +import styles from './crash-message.css'; +import reloadIcon from './reload.svg'; + +const CrashMessage = props => ( + <div className={styles.crashWrapper}> + <Box className={styles.body}> + <img + className={styles.reloadIcon} + src={reloadIcon} + /> + <h2> + Oops! Something went wrong. + </h2> + <p> + We are so sorry, but it looks like Scratch has crashed. This bug has been + automatically reported to the Scratch Team. Please refresh your page to try + again. + + </p> + <button + className={styles.reloadButton} + onClick={props.onReload} + > + Reload + </button> + </Box> + </div> +); + +CrashMessage.propTypes = { + onReload: PropTypes.func.isRequired +}; + +export default CrashMessage; diff --git a/src/components/crash-message/reload.svg b/src/components/crash-message/reload.svg new file mode 100644 index 0000000000000000000000000000000000000000..b74601fac9d4aaaaf53b50a26411b86949c2e5f3 GIT binary patch literal 1509 zcmZ`(%Wm5`5Z(7HSa#C_BE=cL1KR}}pm)=vK%Z+jVr(IbWJs!=&%Z;-iDjTA4488? zJac$B<m&y?W5bTAAL_1MbC8O&)ZTSf-R{=>$M=sS@b{ZntKqm~r@9*VYi`uxiL-sG zcl(hdpQB@)P9M6bHCIeALqAX0g%miWGVQSD`*A$nl;!Dkk|!;@epjMWswDbz%FR<# zw-0|ygcxHvedU{1jK=D<5bVFyrhYqi{SEu}kjA?`GeIJIYrIDPjtRD?_`BPu$9j9- zp1kWG%VAz4#F=ue$0lvQrl#9gt8$L!VpSUMHn)A+j;SIm#{IdTT$R(O=dAl-lM(ux zksYh6HUEi1h*@hRzI2CyvtjJJhqUHx*QV!4oINJP?(3#`{+Q>Y|I<)*I;OU(D$d4! z+Ya|#|G4JUv>{<{g+n^RX%tK#nse~(Y}sVntmp{hS8B+EBtCc5wh_-I-+Y|LV#Q+B zk9PQTICMRk@DB+F!;1oh_!j}0E|1k=OD>W*pHb^VgACCb7l7U7*r1Hsg`gvw_MwAA zQ`npp&?(IjG?9akxI}MJfsD~3UcnHr7<0HRm}7FzV6;IQmN`IcZEOK3shqQcWB^DV zf}c^P5CJv&w1B-d!8#wTr#)P<t+ZgkTW=@PRufxcq}G7ms0><(s2s+^N~4_9aUw=1 zqxaEHDxz1)WN*k{OL_qdG9YRnTy$j71$7df!UzOj2t0v0I*VEGOF3!~7r`Q!ELh7~ z8d~WcS?`GVvJ1+!bQ-~2Ie{o0pa~Q2#h)NGfFerbRkV;y15@O7h|wWhMz>j_M>_F> zh=W(&ki`r1`gmTFb(AJr50)B0kz1N1L1C<PXo)RM4xig%fs$=XT1Uo^^NVD1$fH-< z6-(j;y6nmYtRyuaH7ltg=K+I_uArHx^HP)bQHB7<z!Ig#21#e5&@SPr{TGZ^w}DUZ f$NVC3dRp?OnV**V7STN_cNgF#m?o?IvTptdt7L0$ literal 0 HcmV?d00001 diff --git a/src/containers/error-boundary.jsx b/src/containers/error-boundary.jsx index 210520bf5..76802763c 100644 --- a/src/containers/error-boundary.jsx +++ b/src/containers/error-boundary.jsx @@ -2,6 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import platform from 'platform'; import BrowserModalComponent from '../components/browser-modal/browser-modal.jsx'; +import CrashMessageComponent from '../components/crash-message/crash-message.jsx'; import log from '../lib/log.js'; import analytics from '../lib/analytics'; @@ -28,21 +29,16 @@ class ErrorBoundary extends React.Component { window.history.back(); } + handleReload () { + window.location.reload(); + } + render () { if (this.state.hasError) { if (platform.name === 'IE') { return <BrowserModalComponent onBack={this.handleBack} />; } - return ( - <div style={{margin: '2rem'}}> - <h1>Oops! Something went wrong.</h1> - <p> - We are so sorry, but it looks like Scratch has crashed. This bug has been - automatically reported to the Scratch Team. Please refresh your page to try - again. - </p> - </div> - ); + return <CrashMessageComponent onReload={this.handleReload} />; } return this.props.children; } -- GitLab