{"version":3,"sources":["webpack:///./app/javascript/mastodon/features/account_gallery/components/media_item.js","webpack:///./app/javascript/mastodon/features/account_gallery/index.js"],"names":["MediaItem","ImmutablePureComponent","state","visible","displayMedia","this","props","attachment","getIn","loaded","handleImageLoad","setState","handleMouseEnter","e","hoverToPlay","target","play","handleMouseLeave","pause","currentTime","handleClick","button","ctrlKey","metaKey","preventDefault","onOpenMedia","autoPlayGif","indexOf","get","render","displayWidth","width","Math","floor","height","status","title","thumbnail","label","icon","content","includes","src","alt","onLoad","id","x","y","style","objectPosition","className","role","onMouseEnter","onMouseLeave","autoPlay","playsInline","loop","muted","href","onClick","rel","hash","classNames","dummy","useBlurhash","propTypes","ImmutablePropTypes","map","isRequired","PropTypes","number","func","LoadMoreMedia","handleLoadMore","onLoadMore","maxId","disabled","string","AccountGallery","connect","params","acct","accountId","normalizeForLookup","isAccount","attachments","getAccountGallery","isLoading","hasMore","suspended","blockedBy","handleScrollToBottom","size","last","undefined","handleScroll","scrollTop","scrollHeight","clientHeight","dispatch","expandAccountMediaTimeline","handleLoadOlder","handleOpenMedia","statusId","openModal","media","options","index","findIndex","handleRef","c","offsetWidth","_load","fetchAccount","componentDidMount","lookupAccount","componentDidUpdate","prevProps","multiColumn","emptyMessage","loadOlder","defaultMessage","scrollKey","onScroll","ref","shape","list","bool"],"mappings":"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","file":"js/features/account_gallery-0c8940692fee7ed57f5a.chunk.js","sourcesContent":["import Blurhash from 'mastodon/components/blurhash';\nimport classNames from 'classnames';\nimport Icon from 'mastodon/components/icon';\nimport { autoPlayGif, displayMedia, useBlurhash } from 'mastodon/initial_state';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nexport default class MediaItem extends ImmutablePureComponent {\n\n  static propTypes = {\n    attachment: ImmutablePropTypes.map.isRequired,\n    displayWidth: PropTypes.number.isRequired,\n    onOpenMedia: PropTypes.func.isRequired,\n  };\n\n  state = {\n    visible: displayMedia !== 'hide_all' && !this.props.attachment.getIn(['status', 'sensitive']) || displayMedia === 'show_all',\n    loaded: false,\n  };\n\n  handleImageLoad = () => {\n    this.setState({ loaded: true });\n  };\n\n  handleMouseEnter = e => {\n    if (this.hoverToPlay()) {\n      e.target.play();\n    }\n  };\n\n  handleMouseLeave = e => {\n    if (this.hoverToPlay()) {\n      e.target.pause();\n      e.target.currentTime = 0;\n    }\n  };\n\n  hoverToPlay () {\n    return !autoPlayGif && ['gifv', 'video'].indexOf(this.props.attachment.get('type')) !== -1;\n  }\n\n  handleClick = e => {\n    if (e.button === 0 && !(e.ctrlKey || e.metaKey)) {\n      e.preventDefault();\n\n      if (this.state.visible) {\n        this.props.onOpenMedia(this.props.attachment);\n      } else {\n        this.setState({ visible: true });\n      }\n    }\n  };\n\n  render () {\n    const { attachment, displayWidth } = this.props;\n    const { visible, loaded } = this.state;\n\n    const width  = `${Math.floor((displayWidth - 4) / 3) - 4}px`;\n    const height = width;\n    const status = attachment.get('status');\n    const title  = status.get('spoiler_text') || attachment.get('description');\n\n    let thumbnail, label, icon, content;\n\n    if (!visible) {\n      icon = (\n        <span className='account-gallery__item__icons'>\n          <Icon id='eye-slash' />\n        </span>\n      );\n    } else {\n      if (['audio', 'video'].includes(attachment.get('type'))) {\n        content = (\n          <img\n            src={attachment.get('preview_url') || attachment.getIn(['account', 'avatar_static'])}\n            alt={attachment.get('description')}\n            onLoad={this.handleImageLoad}\n          />\n        );\n\n        if (attachment.get('type') === 'audio') {\n          label = <Icon id='music' />;\n        } else {\n          label = <Icon id='play' />;\n        }\n      } else if (attachment.get('type') === 'image') {\n        const focusX = attachment.getIn(['meta', 'focus', 'x']) || 0;\n        const focusY = attachment.getIn(['meta', 'focus', 'y']) || 0;\n        const x      = ((focusX /  2) + .5) * 100;\n        const y      = ((focusY / -2) + .5) * 100;\n\n        content = (\n          <img\n            src={attachment.get('preview_url')}\n            alt={attachment.get('description')}\n            style={{ objectPosition: `${x}% ${y}%` }}\n            onLoad={this.handleImageLoad}\n          />\n        );\n      } else if (attachment.get('type') === 'gifv') {\n        content = (\n          <video\n            className='media-gallery__item-gifv-thumbnail'\n            aria-label={attachment.get('description')}\n            title={attachment.get('description')}\n            role='application'\n            src={attachment.get('url')}\n            onMouseEnter={this.handleMouseEnter}\n            onMouseLeave={this.handleMouseLeave}\n            autoPlay={autoPlayGif}\n            playsInline\n            loop\n            muted\n          />\n        );\n\n        label = 'GIF';\n      }\n\n      thumbnail = (\n        <div className='media-gallery__gifv'>\n          {content}\n\n          {label && <span className='media-gallery__gifv__label'>{label}</span>}\n        </div>\n      );\n    }\n\n    return (\n      <div className='account-gallery__item' style={{ width, height }}>\n        <a className='media-gallery__item-thumbnail' href={`/@${status.getIn(['account', 'acct'])}\\/${status.get('id')}`} onClick={this.handleClick} title={title} target='_blank' rel='noopener noreferrer'>\n          <Blurhash\n            hash={attachment.get('blurhash')}\n            className={classNames('media-gallery__preview', { 'media-gallery__preview--hidden': visible && loaded })}\n            dummy={!useBlurhash}\n          />\n\n          {visible ? thumbnail : icon}\n        </a>\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 { lookupAccount, fetchAccount } from 'mastodon/actions/accounts';\nimport { expandAccountMediaTimeline } from '../../actions/timelines';\nimport LoadingIndicator from 'mastodon/components/loading_indicator';\nimport Column from '../ui/components/column';\nimport ColumnBackButton from 'mastodon/components/column_back_button';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { getAccountGallery } from 'mastodon/selectors';\nimport MediaItem from './components/media_item';\nimport HeaderContainer from '../account_timeline/containers/header_container';\nimport ScrollContainer from 'mastodon/containers/scroll_container';\nimport LoadMore from 'mastodon/components/load_more';\nimport MissingIndicator from 'mastodon/components/missing_indicator';\nimport { openModal } from 'mastodon/actions/modal';\nimport { FormattedMessage } from 'react-intl';\nimport { normalizeForLookup } from 'mastodon/reducers/accounts_map';\n\nconst mapStateToProps = (state, { params: { acct, id } }) => {\n  const accountId = id || state.getIn(['accounts_map', normalizeForLookup(acct)]);\n\n  if (!accountId) {\n    return {\n      isLoading: true,\n    };\n  }\n\n  return {\n    accountId,\n    isAccount: !!state.getIn(['accounts', accountId]),\n    attachments: getAccountGallery(state, accountId),\n    isLoading: state.getIn(['timelines', `account:${accountId}:media`, 'isLoading']),\n    hasMore: state.getIn(['timelines', `account:${accountId}:media`, 'hasMore']),\n    suspended: state.getIn(['accounts', accountId, 'suspended'], false),\n    blockedBy: state.getIn(['relationships', accountId, 'blocked_by'], false),\n  };\n};\n\nclass LoadMoreMedia extends ImmutablePureComponent {\n\n  static propTypes = {\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        onClick={this.handleLoadMore}\n      />\n    );\n  }\n\n}\n\nexport default @connect(mapStateToProps)\nclass AccountGallery extends ImmutablePureComponent {\n\n  static propTypes = {\n    params: PropTypes.shape({\n      acct: PropTypes.string,\n      id: PropTypes.string,\n    }).isRequired,\n    accountId: PropTypes.string,\n    dispatch: PropTypes.func.isRequired,\n    attachments: ImmutablePropTypes.list.isRequired,\n    isLoading: PropTypes.bool,\n    hasMore: PropTypes.bool,\n    isAccount: PropTypes.bool,\n    blockedBy: PropTypes.bool,\n    suspended: PropTypes.bool,\n    multiColumn: PropTypes.bool,\n  };\n\n  state = {\n    width: 323,\n  };\n\n  _load () {\n    const { accountId, isAccount, dispatch } = this.props;\n\n    if (!isAccount) dispatch(fetchAccount(accountId));\n    dispatch(expandAccountMediaTimeline(accountId));\n  }\n\n  componentDidMount () {\n    const { params: { acct }, accountId, dispatch } = this.props;\n\n    if (accountId) {\n      this._load();\n    } else {\n      dispatch(lookupAccount(acct));\n    }\n  }\n\n  componentDidUpdate (prevProps) {\n    const { params: { acct }, accountId, dispatch } = this.props;\n\n    if (prevProps.accountId !== accountId && accountId) {\n      this._load();\n    } else if (prevProps.params.acct !== acct) {\n      dispatch(lookupAccount(acct));\n    }\n  }\n\n  handleScrollToBottom = () => {\n    if (this.props.hasMore) {\n      this.handleLoadMore(this.props.attachments.size > 0 ? this.props.attachments.last().getIn(['status', 'id']) : undefined);\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.accountId, { maxId }));\n  };\n\n  handleLoadOlder = e => {\n    e.preventDefault();\n    this.handleScrollToBottom();\n  };\n\n  handleOpenMedia = attachment => {\n    const { dispatch } = this.props;\n    const statusId = attachment.getIn(['status', 'id']);\n\n    if (attachment.get('type') === 'video') {\n      dispatch(openModal('VIDEO', { media: attachment, statusId, options: { autoPlay: true } }));\n    } else if (attachment.get('type') === 'audio') {\n      dispatch(openModal('AUDIO', { media: attachment, statusId, options: { autoPlay: true } }));\n    } else {\n      const media = attachment.getIn(['status', 'media_attachments']);\n      const index = media.findIndex(x => x.get('id') === attachment.get('id'));\n\n      dispatch(openModal('MEDIA', { media, index, statusId }));\n    }\n  };\n\n  handleRef = c => {\n    if (c) {\n      this.setState({ width: c.offsetWidth });\n    }\n  };\n\n  render () {\n    const { attachments, isLoading, hasMore, isAccount, multiColumn, blockedBy, suspended } = this.props;\n    const { width } = this.state;\n\n    if (!isAccount) {\n      return (\n        <Column>\n          <MissingIndicator />\n        </Column>\n      );\n    }\n\n    if (!attachments && isLoading) {\n      return (\n        <Column>\n          <LoadingIndicator />\n        </Column>\n      );\n    }\n\n    let loadOlder = null;\n\n    if (hasMore && !(isLoading && attachments.size === 0)) {\n      loadOlder = <LoadMore visible={!isLoading} onClick={this.handleLoadOlder} />;\n    }\n\n    let emptyMessage;\n\n    if (suspended) {\n      emptyMessage = <FormattedMessage id='empty_column.account_suspended' defaultMessage='Account suspended' />;\n    } else if (blockedBy) {\n      emptyMessage = <FormattedMessage id='empty_column.account_unavailable' defaultMessage='Profile unavailable' />;\n    }\n\n    return (\n      <Column>\n        <ColumnBackButton multiColumn={multiColumn} />\n\n        <ScrollContainer scrollKey='account_gallery'>\n          <div className='scrollable scrollable--flex' onScroll={this.handleScroll}>\n            <HeaderContainer accountId={this.props.accountId} />\n\n            {(suspended || blockedBy) ? (\n              <div className='empty-column-indicator'>\n                {emptyMessage}\n              </div>\n            ) : (\n              <div role='feed' className='account-gallery__container' ref={this.handleRef}>\n                {attachments.map((attachment, index) => attachment === null ? (\n                  <LoadMoreMedia key={'more:' + attachments.getIn(index + 1, 'id')} maxId={index > 0 ? attachments.getIn(index - 1, 'id') : null} onLoadMore={this.handleLoadMore} />\n                ) : (\n                  <MediaItem key={attachment.get('id')} attachment={attachment} displayWidth={width} onOpenMedia={this.handleOpenMedia} />\n                ))}\n\n                {loadOlder}\n              </div>\n            )}\n\n            {isLoading && attachments.size === 0 && (\n              <div className='scrollable__append'>\n                <LoadingIndicator />\n              </div>\n            )}\n          </div>\n        </ScrollContainer>\n      </Column>\n    );\n  }\n\n}\n"],"sourceRoot":""}