1 line
10 KiB
Plaintext
1 line
10 KiB
Plaintext
{"version":3,"sources":["webpack:///./app/javascript/mastodon/features/account_gallery/components/media_item.js","webpack:///./app/javascript/mastodon/features/account_gallery/index.js"],"names":["media_item_MediaItem","state","visible","_this","props","media","getIn","initial_state","handleClick","setState","render","this","status","get","x","y","style","label","icon","jsx_default","className","backgroundImage","backgroundPosition","permalink","to","href","onInterceptClick","react_immutable_pure_component_es","propTypes","ImmutablePropTypes_default","a","map","isRequired","account_gallery_LoadMoreMedia","handleLoadMore","onLoadMore","maxId","load_more","disabled","shouldUpdateScroll","prop_types_default","func","string","account_gallery_AccountGallery","Object","es","medias","selectors","params","accountId","isLoading","hasMore","handleScrollToBottom","_this2","last","handleScroll","e","_e$target","target","scrollTop","scrollHeight","clientHeight","dispatch","timelines","handleLoadOlder","preventDefault","componentDidMount","accounts","componentWillReceiveProps","nextProps","_props","loadOlder","column","loading_indicator","size","onClick","column_back_button","react_router_scroll_4_es","scrollKey","onScroll","header_container","index","object","list","bool"],"mappings":"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","file":"features/account_gallery.js","sourcesContent":["import React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport Permalink from '../../../components/permalink';\nimport { displaySensitiveMedia } from '../../../initial_state';\n\nexport default class MediaItem extends ImmutablePureComponent {\n\n static propTypes = {\n media: ImmutablePropTypes.map.isRequired,\n };\n\n state = {\n visible: !this.props.media.getIn(['status', 'sensitive']) || displaySensitiveMedia,\n };\n\n handleClick = () => {\n if (!this.state.visible) {\n this.setState({ visible: true });\n return true;\n }\n\n return false;\n }\n\n render () {\n const { media } = this.props;\n const { visible } = this.state;\n const status = media.get('status');\n const focusX = media.getIn(['meta', 'focus', 'x']);\n const focusY = media.getIn(['meta', 'focus', 'y']);\n const x = ((focusX / 2) + .5) * 100;\n const y = ((focusY / -2) + .5) * 100;\n const style = {};\n\n let label, icon;\n\n if (media.get('type') === 'gifv') {\n label = <span className='media-gallery__gifv__label'>GIF</span>;\n }\n\n if (visible) {\n style.backgroundImage = `url(${media.get('preview_url')})`;\n style.backgroundPosition = `${x}% ${y}%`;\n } else {\n icon = (\n <span className='account-gallery__item__icons'>\n <i className='fa fa-eye-slash' />\n </span>\n );\n }\n\n return (\n <div className='account-gallery__item'>\n <Permalink to={`/statuses/${status.get('id')}`} href={status.get('url')} style={style} onInterceptClick={this.handleClick}>\n {icon}\n {label}\n </Permalink>\n </div>\n );\n }\n\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport { fetchAccount } from '../../actions/accounts';\nimport { expandAccountMediaTimeline } from '../../actions/timelines';\nimport LoadingIndicator from '../../components/loading_indicator';\nimport Column from '../ui/components/column';\nimport ColumnBackButton from '../../components/column_back_button';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { getAccountGallery } from '../../selectors';\nimport MediaItem from './components/media_item';\nimport HeaderContainer from '../account_timeline/containers/header_container';\nimport { ScrollContainer } from 'react-router-scroll-4';\nimport LoadMore from '../../components/load_more';\n\nconst mapStateToProps = (state, props) => ({\n medias: getAccountGallery(state, props.params.accountId),\n isLoading: state.getIn(['timelines', `account:${props.params.accountId}:media`, 'isLoading']),\n hasMore: state.getIn(['timelines', `account:${props.params.accountId}:media`, 'hasMore']),\n});\n\nclass LoadMoreMedia extends ImmutablePureComponent {\n\n static propTypes = {\n shouldUpdateScroll: PropTypes.func,\n maxId: PropTypes.string,\n onLoadMore: PropTypes.func.isRequired,\n };\n\n handleLoadMore = () => {\n this.props.onLoadMore(this.props.maxId);\n }\n\n render () {\n return (\n <LoadMore\n disabled={this.props.disabled}\n onLoadMore={this.handleLoadMore}\n />\n );\n }\n\n}\n\n@connect(mapStateToProps)\nexport default class AccountGallery extends ImmutablePureComponent {\n\n static propTypes = {\n params: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n medias: ImmutablePropTypes.list.isRequired,\n isLoading: PropTypes.bool,\n hasMore: PropTypes.bool,\n };\n\n componentDidMount () {\n this.props.dispatch(fetchAccount(this.props.params.accountId));\n this.props.dispatch(expandAccountMediaTimeline(this.props.params.accountId));\n }\n\n componentWillReceiveProps (nextProps) {\n if (nextProps.params.accountId !== this.props.params.accountId && nextProps.params.accountId) {\n this.props.dispatch(fetchAccount(nextProps.params.accountId));\n this.props.dispatch(expandAccountMediaTimeline(this.props.params.accountId));\n }\n }\n\n handleScrollToBottom = () => {\n if (this.props.hasMore) {\n this.handleLoadMore(this.props.medias.last().getIn(['status', 'id']));\n }\n }\n\n handleScroll = (e) => {\n const { scrollTop, scrollHeight, clientHeight } = e.target;\n const offset = scrollHeight - scrollTop - clientHeight;\n\n if (150 > offset && !this.props.isLoading) {\n this.handleScrollToBottom();\n }\n }\n\n handleLoadMore = maxId => {\n this.props.dispatch(expandAccountMediaTimeline(this.props.params.accountId, { maxId }));\n };\n\n handleLoadOlder = (e) => {\n e.preventDefault();\n this.handleScrollToBottom();\n }\n\n render () {\n const { medias, shouldUpdateScroll, isLoading, hasMore } = this.props;\n\n let loadOlder = null;\n\n if (!medias && isLoading) {\n return (\n <Column>\n <LoadingIndicator />\n </Column>\n );\n }\n\n if (!isLoading && medias.size > 0 && hasMore) {\n loadOlder = <LoadMore onClick={this.handleLoadOlder} />;\n }\n\n return (\n <Column>\n <ColumnBackButton />\n\n <ScrollContainer scrollKey='account_gallery' shouldUpdateScroll={shouldUpdateScroll}>\n <div className='scrollable' onScroll={this.handleScroll}>\n <HeaderContainer accountId={this.props.params.accountId} />\n\n <div className='account-gallery__container'>\n {medias.map((media, index) => media === null ? (\n <LoadMoreMedia\n key={'more:' + medias.getIn(index + 1, 'id')}\n maxId={index > 0 ? medias.getIn(index - 1, 'id') : null}\n />\n ) : (\n <MediaItem\n key={media.get('id')}\n media={media}\n />\n ))}\n {loadOlder}\n </div>\n </div>\n </ScrollContainer>\n </Column>\n );\n }\n\n}\n"],"sourceRoot":""} |