diff options
author | Yamagishi Kazutoshi <ykzts@desire.sh> | 2018-05-09 23:22:52 +0900 |
---|---|---|
committer | Eugen Rochko <eugen@zeonfederated.com> | 2018-05-09 16:22:52 +0200 |
commit | 16fee0335f2b10b0ce54f71965d2f2acc0e24942 (patch) | |
tree | 9a29c227620fc320841feb073077dbb00b0b4a66 /app/javascript/mastodon/containers | |
parent | dc010cc77a1e34a1f65b9a522b299bac6aa44329 (diff) |
Show card modal on public pages (#7428)
Diffstat (limited to 'app/javascript/mastodon/containers')
-rw-r--r-- | app/javascript/mastodon/containers/card_container.js | 18 | ||||
-rw-r--r-- | app/javascript/mastodon/containers/cards_container.js | 59 |
2 files changed, 59 insertions, 18 deletions
diff --git a/app/javascript/mastodon/containers/card_container.js b/app/javascript/mastodon/containers/card_container.js deleted file mode 100644 index 11b9f88d4..000000000 --- a/app/javascript/mastodon/containers/card_container.js +++ /dev/null @@ -1,18 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import Card from '../features/status/components/card'; -import { fromJS } from 'immutable'; - -export default class CardContainer extends React.PureComponent { - - static propTypes = { - locale: PropTypes.string, - card: PropTypes.array.isRequired, - }; - - render () { - const { card, ...props } = this.props; - return <Card card={fromJS(card)} {...props} />; - } - -} diff --git a/app/javascript/mastodon/containers/cards_container.js b/app/javascript/mastodon/containers/cards_container.js new file mode 100644 index 000000000..894bf4ef9 --- /dev/null +++ b/app/javascript/mastodon/containers/cards_container.js @@ -0,0 +1,59 @@ +import React, { Fragment } from 'react'; +import ReactDOM from 'react-dom'; +import PropTypes from 'prop-types'; +import { IntlProvider, addLocaleData } from 'react-intl'; +import { getLocale } from '../locales'; +import Card from '../features/status/components/card'; +import ModalRoot from '../components/modal_root'; +import MediaModal from '../features/ui/components/media_modal'; +import { fromJS } from 'immutable'; + +const { localeData, messages } = getLocale(); +addLocaleData(localeData); + +export default class CardsContainer extends React.PureComponent { + + static propTypes = { + locale: PropTypes.string, + cards: PropTypes.object.isRequired, + }; + + state = { + media: null, + }; + + handleOpenCard = (media) => { + document.body.classList.add('card-standalone__body'); + this.setState({ media }); + } + + handleCloseCard = () => { + document.body.classList.remove('card-standalone__body'); + this.setState({ media: null }); + } + + render () { + const { locale, cards } = this.props; + + return ( + <IntlProvider locale={locale} messages={messages}> + <Fragment> + {[].map.call(cards, container => { + const { card, ...props } = JSON.parse(container.getAttribute('data-props')); + + return ReactDOM.createPortal( + <Card card={fromJS(card)} onOpenMedia={this.handleOpenCard} {...props} />, + container, + ); + })} + <ModalRoot onClose={this.handleCloseCard}> + {this.state.media && ( + <MediaModal media={this.state.media} index={0} onClose={this.handleCloseCard} /> + )} + </ModalRoot> + </Fragment> + </IntlProvider> + ); + } + +} |