Spaces:
Runtime error
Runtime error
import PropTypes from 'prop-types'; | |
import React from 'react'; | |
import Box from '../box/box.jsx'; | |
import {defineMessages, injectIntl, intlShape, FormattedMessage} from 'react-intl'; | |
import Modal from '../../containers/windowed-modal.jsx'; | |
import { | |
isRendererSupported, | |
isNewFunctionSupported, | |
findIncompatibleUserscripts | |
} from '../../lib/tw-environment-support-prober.js'; | |
import unhappyBrowser from './unsupported-browser.svg'; | |
const messages = defineMessages({ | |
label: { | |
id: 'gui.unsupportedBrowser.label', | |
defaultMessage: 'Browser is not supported', | |
description: '' | |
} | |
}); | |
const BrowserModal = ({intl, ...props}) => { | |
const label = messages.label; | |
const incompatibleUserscripts = findIncompatibleUserscripts(); | |
return ( | |
<Modal | |
id="browser-modal" | |
contentLabel={intl.formatMessage({...messages.label})} | |
onRequestClose={() => {}} // Prevent closing this critical modal | |
className="browser-modal" | |
> | |
<div dir={props.isRtl ? 'rtl' : 'ltr'} > | |
<Box className={styles.illustration}> | |
<img | |
src={unhappyBrowser} | |
draggable={false} | |
/> | |
</Box> | |
<Box className={styles.body}> | |
<h2> | |
<FormattedMessage {...label} /> | |
</h2> | |
{/* eslint-disable max-len */} | |
{isNewFunctionSupported() ? null : ( | |
// This message should only be seen by website operators, so we don't need to translate it | |
<p> | |
{'Unable to compile JavaScript with new Function(). This is most likely caused by an overly-strict Content-Security-Policy. The CSP must include \'unsafe-eval\'.'} | |
</p> | |
)} | |
{incompatibleUserscripts.length > 0 && ( | |
<React.Fragment> | |
{incompatibleUserscripts.map((message, index) => ( | |
<p key={index}> | |
{message} | |
</p> | |
))} | |
</React.Fragment> | |
)} | |
{!isRendererSupported() && ( | |
<React.Fragment> | |
<p> | |
<FormattedMessage | |
defaultMessage="Your browser {webGlLink} which is needed for this site to run. Try updating your browser and graphics drivers or restarting your computer." | |
description="WebGL missing message. {webGLLink} is a link with the text 'does not support WebGL' from Scratch's translations" | |
id="tw.webglModal.description" | |
values={{ | |
webGlLink: ( | |
<a href="https://get.webgl.org/"> | |
<FormattedMessage | |
defaultMessage="does not support WebGL" | |
description="link part of your browser does not support WebGL message" | |
id="gui.webglModal.webgllink" | |
/> | |
</a> | |
) | |
}} | |
/> | |
</p> | |
<p> | |
<FormattedMessage | |
defaultMessage="Make sure you're using a recent version of Google Chrome, Mozilla Firefox, Microsoft Edge, or Apple Safari." | |
description="A message that appears in the browser not supported modal" | |
id="tw.browserModal.desc" | |
/> | |
</p> | |
<p> | |
<FormattedMessage | |
defaultMessage="On Apple devices, you must disable {lockdownMode}." | |
description="Part of the browser not supported message. Lockdown Mode refers to https://support.apple.com/en-us/HT212650" | |
id="tw.lockdownMode" | |
values={{ | |
lockdownMode: ( | |
<a href="https://support.apple.com/en-us/HT212650"> | |
<FormattedMessage | |
defaultMessage="Lockdown Mode" | |
description="Links to an Apple support page about Lockdown Mode: https://support.apple.com/en-us/HT212650 Try to translate this the same as Apple." | |
id="tw.lockdownMode2" | |
/> | |
</a> | |
) | |
}} | |
/> | |
</p> | |
</React.Fragment> | |
)} | |
</Box> | |
</div> | |
</Modal> | |
); | |
}; | |
BrowserModal.propTypes = { | |
intl: intlShape.isRequired, | |
isRtl: PropTypes.bool | |
}; | |
const WrappedBrowserModal = injectIntl(BrowserModal); | |
export default WrappedBrowserModal; | |