Spaces:
Running
Running
import PropTypes from 'prop-types'; | |
import React from 'react'; | |
import ReactModal from 'react-modal'; | |
import Box from '../box/box.jsx'; | |
import {defineMessages, injectIntl, intlShape, FormattedMessage} from 'react-intl'; | |
import {isRendererSupported, isNewFunctionSupported} from '../../lib/tw-environment-support-prober.js'; | |
import styles from './browser-modal.css'; | |
import unhappyBrowser from './unsupported-browser.svg'; | |
const messages = defineMessages({ | |
label: { | |
id: 'gui.unsupportedBrowser.label', | |
defaultMessage: 'Browser is not supported', | |
description: '' | |
} | |
}); | |
const noop = () => {}; | |
const BrowserModal = ({intl, ...props}) => { | |
const label = messages.label; | |
return ( | |
<ReactModal | |
isOpen | |
className={styles.modalContent} | |
contentLabel={intl.formatMessage({...messages.label})} | |
overlayClassName={styles.modalOverlay} | |
onRequestClose={noop} | |
> | |
<div dir={props.isRtl ? 'rtl' : 'ltr'} > | |
<Box className={styles.illustration}> | |
<img src={unhappyBrowser} /> | |
</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> | |
)} | |
{!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" | |
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> | |
</ReactModal> | |
); | |
}; | |
BrowserModal.propTypes = { | |
intl: intlShape.isRequired, | |
isRtl: PropTypes.bool | |
}; | |
const WrappedBrowserModal = injectIntl(BrowserModal); | |
WrappedBrowserModal.setAppElement = ReactModal.setAppElement; | |
export default WrappedBrowserModal; | |