Merge branch 'features/glitch-soc-frontend' into 'develop'
[akkoma] / priv / static / packs / features / status.js.map
index 030c84c42ac4fb93543f04b5f801791ae4f9c8de..31705670db819ad2957538b968a5f602026ff244 100644 (file)
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///./app/javascript/mastodon/features/status/containers/card_container.js","webpack:///./app/javascript/mastodon/features/status/components/detailed_status.js","webpack:///./app/javascript/mastodon/features/status/components/action_bar.js","webpack:///./app/javascript/mastodon/features/status/index.js"],"names":["card_container","Object","es","state","_ref","statusId","card","getIn","detailed_status_DetailedStatus","handleAccountClick","e","button","ctrlKey","metaKey","preventDefault","_this","context","router","history","push","props","status","stopPropagation","handleOpenVideo","media","startTime","onOpenVideo","handleExpandedToggle","onToggleHidden","render","this","get","applicationLink","reblogLink","reblogIcon","size","some","item","jsx_default","attachment_list","video","features_video","preview","src","alt","width","height","inline","sensitive","media_gallery","standalone","onOpenMedia","length","className","href","target","rel","Link","to","index_es","value","onClick","avatar","account","display_name","status_content","expanded","onExpandedToggle","Date","hour12","year","month","day","hour","minute","react_immutable_pure_component_es","contextTypes","prop_types_default","a","object","propTypes","ImmutablePropTypes_default","map","isRequired","func","messages","delete","id","defaultMessage","redraft","direct","mention","reply","reblog","reblog_private","cancel_reblog_private","cannot_reblog","favourite","mute","muteConversation","unmuteConversation","block","report","share","pin","unpin","embed","action_bar_ActionBar","handleReplyClick","onReply","handleReblogClick","onReblog","handleFavouriteClick","onFavourite","handleDeleteClick","onDelete","handleRedraftClick","handleDirectClick","onDirect","handleMentionClick","onMention","handleMuteClick","onMute","handleConversationMuteClick","onMuteConversation","handleBlockClick","onBlock","handleReport","onReport","handlePinClick","onPin","handleShare","navigator","text","url","handleEmbed","onEmbed","_props","intl","publicStatus","includes","mutingConversation","menu","formatMessage","action","initial_state","name","shareButton","icon_button","title","icon","reblog_disabled","disabled","active","animate","dropdown_menu_container","items","direction","react_default","PureComponent","status_messages","deleteConfirm","deleteMessage","redraftConfirm","redraftMessage","blockConfirm","revealAll","hideAll","detailedStatus","status_Status","getStatus","selectors","params","ancestorsIds","immutable_default","List","descendantsIds","withMutations","mutable","unshift","ids","shift","replies","reverse","forEach","fullscreen","dispatch","interactions","handlePin","compose","handleModalReblog","shiftKey","modal","withRedraft","arguments","undefined","_this$props","message","confirm","onConfirm","statuses","handleOpenMedia","index","time","mutes","handleToggleHidden","handleToggleAll","_this$props2","statusIds","concat","toJS","_this$props3","values","accounts","reports","handleHotkeyMoveUp","handleMoveUp","handleHotkeyMoveDown","handleMoveDown","handleHotkeyReply","handleHotkeyFavourite","handleHotkeyBoost","handleHotkeyMention","handleHotkeyOpenProfile","handleHotkeyToggleHidden","_this$props4","_selectChild","indexOf","_this$props5","setRef","c","node","onFullScreenChange","setState","util_fullscreen","componentWillMount","componentDidMount","componentWillReceiveProps","nextProps","_scrolledIntoView","element","querySelectorAll","focus","renderChildren","list","_this2","status_container","onMoveUp","onMoveDown","contextType","componentDidUpdate","window","requestAnimationFrame","scrollIntoView","componentWillUnmount","ancestors","descendants","_props2","shouldUpdateScroll","column","column_back_button","missing_indicator","handlers","moveUp","moveDown","boost","openProfile","toggleHidden","label","column_header","showBackButton","extraButton","aria-label","aria-pressed","react_router_scroll_4_es","scrollKey","createElement","classnames_default","ref","lib","tabIndex","components_status"],"mappings":"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","file":"features/status.js","sourcesContent":["import { connect } from 'react-redux';\nimport Card from '../components/card';\n\nconst mapStateToProps = (state, { statusId }) => ({\n  card: state.getIn(['cards', statusId], null),\n});\n\nexport default connect(mapStateToProps)(Card);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Avatar from '../../../components/avatar';\nimport DisplayName from '../../../components/display_name';\nimport StatusContent from '../../../components/status_content';\nimport MediaGallery from '../../../components/media_gallery';\nimport AttachmentList from '../../../components/attachment_list';\nimport { Link } from 'react-router-dom';\nimport { FormattedDate, FormattedNumber } from 'react-intl';\nimport CardContainer from '../containers/card_container';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport Video from '../../video';\n\nexport default class DetailedStatus extends ImmutablePureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object,\n  };\n\n  static propTypes = {\n    status: ImmutablePropTypes.map.isRequired,\n    onOpenMedia: PropTypes.func.isRequired,\n    onOpenVideo: PropTypes.func.isRequired,\n    onToggleHidden: PropTypes.func.isRequired,\n  };\n\n  handleAccountClick = (e) => {\n    if (e.button === 0 && !(e.ctrlKey || e.metaKey)) {\n      e.preventDefault();\n      this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`);\n    }\n\n    e.stopPropagation();\n  }\n\n  handleOpenVideo = (media, startTime) => {\n    this.props.onOpenVideo(media, startTime);\n  }\n\n  handleExpandedToggle = () => {\n    this.props.onToggleHidden(this.props.status);\n  }\n\n  render () {\n    const status = this.props.status.get('reblog') ? this.props.status.get('reblog') : this.props.status;\n\n    let media           = '';\n    let applicationLink = '';\n    let reblogLink = '';\n    let reblogIcon = 'retweet';\n\n    if (status.get('media_attachments').size > 0) {\n      if (status.get('media_attachments').some(item => item.get('type') === 'unknown')) {\n        media = <AttachmentList media={status.get('media_attachments')} />;\n      } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n        const video = status.getIn(['media_attachments', 0]);\n\n        media = (\n          <Video\n            preview={video.get('preview_url')}\n            src={video.get('url')}\n            alt={video.get('description')}\n            width={300}\n            height={150}\n            inline\n            onOpenVideo={this.handleOpenVideo}\n            sensitive={status.get('sensitive')}\n          />\n        );\n      } else {\n        media = (\n          <MediaGallery\n            standalone\n            sensitive={status.get('sensitive')}\n            media={status.get('media_attachments')}\n            height={300}\n            onOpenMedia={this.props.onOpenMedia}\n          />\n        );\n      }\n    } else if (status.get('spoiler_text').length === 0) {\n      media = <CardContainer onOpenMedia={this.props.onOpenMedia} statusId={status.get('id')} />;\n    }\n\n    if (status.get('application')) {\n      applicationLink = <span> · <a className='detailed-status__application' href={status.getIn(['application', 'website'])} target='_blank' rel='noopener'>{status.getIn(['application', 'name'])}</a></span>;\n    }\n\n    if (status.get('visibility') === 'direct') {\n      reblogIcon = 'envelope';\n    } else if (status.get('visibility') === 'private') {\n      reblogIcon = 'lock';\n    }\n\n    if (status.get('visibility') === 'private') {\n      reblogLink = <i className={`fa fa-${reblogIcon}`} />;\n    } else {\n      reblogLink = (<Link to={`/statuses/${status.get('id')}/reblogs`} className='detailed-status__link'>\n        <i className={`fa fa-${reblogIcon}`} />\n        <span className='detailed-status__reblogs'>\n          <FormattedNumber value={status.get('reblogs_count')} />\n        </span>\n      </Link>);\n    }\n\n    return (\n      <div className='detailed-status'>\n        <a href={status.getIn(['account', 'url'])} onClick={this.handleAccountClick} className='detailed-status__display-name'>\n          <div className='detailed-status__display-avatar'><Avatar account={status.get('account')} size={48} /></div>\n          <DisplayName account={status.get('account')} />\n        </a>\n\n        <StatusContent status={status} expanded={!status.get('hidden')} onExpandedToggle={this.handleExpandedToggle} />\n\n        {media}\n\n        <div className='detailed-status__meta'>\n          <a className='detailed-status__datetime' href={status.get('url')} target='_blank' rel='noopener'>\n            <FormattedDate value={new Date(status.get('created_at'))} hour12={false} year='numeric' month='short' day='2-digit' hour='2-digit' minute='2-digit' />\n          </a>{applicationLink} · {reblogLink} · <Link to={`/statuses/${status.get('id')}/favourites`} className='detailed-status__link'>\n            <i className='fa fa-star' />\n            <span className='detailed-status__favorites'>\n              <FormattedNumber value={status.get('favourites_count')} />\n            </span>\n          </Link>\n        </div>\n      </div>\n    );\n  }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport IconButton from '../../../components/icon_button';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport DropdownMenuContainer from '../../../containers/dropdown_menu_container';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { me } from '../../../initial_state';\n\nconst messages = defineMessages({\n  delete: { id: 'status.delete', defaultMessage: 'Delete' },\n  redraft: { id: 'status.redraft', defaultMessage: 'Delete & re-draft' },\n  direct: { id: 'status.direct', defaultMessage: 'Direct message @{name}' },\n  mention: { id: 'status.mention', defaultMessage: 'Mention @{name}' },\n  reply: { id: 'status.reply', defaultMessage: 'Reply' },\n  reblog: { id: 'status.reblog', defaultMessage: 'Boost' },\n  reblog_private: { id: 'status.reblog_private', defaultMessage: 'Boost to original audience' },\n  cancel_reblog_private: { id: 'status.cancel_reblog_private', defaultMessage: 'Unboost' },\n  cannot_reblog: { id: 'status.cannot_reblog', defaultMessage: 'This post cannot be boosted' },\n  favourite: { id: 'status.favourite', defaultMessage: 'Favourite' },\n  mute: { id: 'status.mute', defaultMessage: 'Mute @{name}' },\n  muteConversation: { id: 'status.mute_conversation', defaultMessage: 'Mute conversation' },\n  unmuteConversation: { id: 'status.unmute_conversation', defaultMessage: 'Unmute conversation' },\n  block: { id: 'status.block', defaultMessage: 'Block @{name}' },\n  report: { id: 'status.report', defaultMessage: 'Report @{name}' },\n  share: { id: 'status.share', defaultMessage: 'Share' },\n  pin: { id: 'status.pin', defaultMessage: 'Pin on profile' },\n  unpin: { id: 'status.unpin', defaultMessage: 'Unpin from profile' },\n  embed: { id: 'status.embed', defaultMessage: 'Embed' },\n});\n\n@injectIntl\nexport default class ActionBar extends React.PureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object,\n  };\n\n  static propTypes = {\n    status: ImmutablePropTypes.map.isRequired,\n    onReply: PropTypes.func.isRequired,\n    onReblog: PropTypes.func.isRequired,\n    onFavourite: PropTypes.func.isRequired,\n    onDelete: PropTypes.func.isRequired,\n    onDirect: PropTypes.func.isRequired,\n    onMention: PropTypes.func.isRequired,\n    onMute: PropTypes.func,\n    onMuteConversation: PropTypes.func,\n    onBlock: PropTypes.func,\n    onReport: PropTypes.func,\n    onPin: PropTypes.func,\n    onEmbed: PropTypes.func,\n    intl: PropTypes.object.isRequired,\n  };\n\n  handleReplyClick = () => {\n    this.props.onReply(this.props.status);\n  }\n\n  handleReblogClick = (e) => {\n    this.props.onReblog(this.props.status, e);\n  }\n\n  handleFavouriteClick = () => {\n    this.props.onFavourite(this.props.status);\n  }\n\n  handleDeleteClick = () => {\n    this.props.onDelete(this.props.status, this.context.router.history);\n  }\n\n  handleRedraftClick = () => {\n    this.props.onDelete(this.props.status, this.context.router.history, true);\n  }\n\n  handleDirectClick = () => {\n    this.props.onDirect(this.props.status.get('account'), this.context.router.history);\n  }\n\n  handleMentionClick = () => {\n    this.props.onMention(this.props.status.get('account'), this.context.router.history);\n  }\n\n  handleMuteClick = () => {\n    this.props.onMute(this.props.status.get('account'));\n  }\n\n  handleConversationMuteClick = () => {\n    this.props.onMuteConversation(this.props.status);\n  }\n\n  handleBlockClick = () => {\n    this.props.onBlock(this.props.status.get('account'));\n  }\n\n  handleReport = () => {\n    this.props.onReport(this.props.status);\n  }\n\n  handlePinClick = () => {\n    this.props.onPin(this.props.status);\n  }\n\n  handleShare = () => {\n    navigator.share({\n      text: this.props.status.get('search_index'),\n      url: this.props.status.get('url'),\n    });\n  }\n\n  handleEmbed = () => {\n    this.props.onEmbed(this.props.status);\n  }\n\n  render () {\n    const { status, intl } = this.props;\n\n    const publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));\n    const mutingConversation = status.get('muted');\n\n    let menu = [];\n\n    if (publicStatus) {\n      menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed });\n      menu.push(null);\n    }\n\n    if (me === status.getIn(['account', 'id'])) {\n      if (publicStatus) {\n        menu.push({ text: intl.formatMessage(status.get('pinned') ? messages.unpin : messages.pin), action: this.handlePinClick });\n      } else {\n        if (status.get('visibility') === 'private') {\n          menu.push({ text: intl.formatMessage(status.get('reblogged') ? messages.cancel_reblog_private : messages.reblog_private), action: this.handleReblogClick });\n        }\n      }\n\n      menu.push(null);\n      menu.push({ text: intl.formatMessage(mutingConversation ? messages.unmuteConversation : messages.muteConversation), action: this.handleConversationMuteClick });\n      menu.push(null);\n      menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDeleteClick });\n      menu.push({ text: intl.formatMessage(messages.redraft), action: this.handleRedraftClick });\n    } else {\n      menu.push({ text: intl.formatMessage(messages.mention, { name: status.getIn(['account', 'username']) }), action: this.handleMentionClick });\n      menu.push({ text: intl.formatMessage(messages.direct, { name: status.getIn(['account', 'username']) }), action: this.handleDirectClick });\n      menu.push(null);\n      menu.push({ text: intl.formatMessage(messages.mute, { name: status.getIn(['account', 'username']) }), action: this.handleMuteClick });\n      menu.push({ text: intl.formatMessage(messages.block, { name: status.getIn(['account', 'username']) }), action: this.handleBlockClick });\n      menu.push({ text: intl.formatMessage(messages.report, { name: status.getIn(['account', 'username']) }), action: this.handleReport });\n    }\n\n    const shareButton = ('share' in navigator) && status.get('visibility') === 'public' && (\n      <div className='detailed-status__button'><IconButton title={intl.formatMessage(messages.share)} icon='share-alt' onClick={this.handleShare} /></div>\n    );\n\n    let reblogIcon = 'retweet';\n    if (status.get('visibility') === 'direct') reblogIcon = 'envelope';\n    else if (status.get('visibility') === 'private') reblogIcon = 'lock';\n\n    let reblog_disabled = (status.get('visibility') === 'direct' || status.get('visibility') === 'private');\n\n    return (\n      <div className='detailed-status__action-bar'>\n        <div className='detailed-status__button'><IconButton title={intl.formatMessage(messages.reply)} icon={status.get('in_reply_to_id', null) === null ? 'reply' : 'reply-all'} onClick={this.handleReplyClick} /></div>\n        <div className='detailed-status__button'><IconButton disabled={reblog_disabled} active={status.get('reblogged')} title={reblog_disabled ? intl.formatMessage(messages.cannot_reblog) : intl.formatMessage(messages.reblog)} icon={reblogIcon} onClick={this.handleReblogClick} /></div>\n        <div className='detailed-status__button'><IconButton className='star-icon' animate active={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} /></div>\n        {shareButton}\n\n        <div className='detailed-status__action-bar-dropdown'>\n          <DropdownMenuContainer size={18} icon='ellipsis-h' items={menu} direction='left' title='More' />\n        </div>\n      </div>\n    );\n  }\n\n}\n","import Immutable from 'immutable';\nimport React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { fetchStatus } from '../../actions/statuses';\nimport MissingIndicator from '../../components/missing_indicator';\nimport DetailedStatus from './components/detailed_status';\nimport ActionBar from './components/action_bar';\nimport Column from '../ui/components/column';\nimport {\n  favourite,\n  unfavourite,\n  reblog,\n  unreblog,\n  pin,\n  unpin,\n} from '../../actions/interactions';\nimport {\n  replyCompose,\n  mentionCompose,\n  directCompose,\n} from '../../actions/compose';\nimport { blockAccount } from '../../actions/accounts';\nimport {\n  muteStatus,\n  unmuteStatus,\n  deleteStatus,\n  hideStatus,\n  revealStatus,\n} from '../../actions/statuses';\nimport { initMuteModal } from '../../actions/mutes';\nimport { initReport } from '../../actions/reports';\nimport { makeGetStatus } from '../../selectors';\nimport { ScrollContainer } from 'react-router-scroll-4';\nimport ColumnBackButton from '../../components/column_back_button';\nimport ColumnHeader from '../../components/column_header';\nimport StatusContainer from '../../containers/status_container';\nimport { openModal } from '../../actions/modal';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { HotKeys } from 'react-hotkeys';\nimport { boostModal, deleteModal } from '../../initial_state';\nimport { attachFullscreenListener, detachFullscreenListener, isFullscreen } from '../ui/util/fullscreen';\nimport { textForScreenReader } from '../../components/status';\n\nconst messages = defineMessages({\n  deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' },\n  deleteMessage: { id: 'confirmations.delete.message', defaultMessage: 'Are you sure you want to delete this status?' },\n  redraftConfirm: { id: 'confirmations.redraft.confirm', defaultMessage: 'Delete & redraft' },\n  redraftMessage: { id: 'confirmations.redraft.message', defaultMessage: 'Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.' },\n  blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' },\n  revealAll: { id: 'status.show_more_all', defaultMessage: 'Show more for all' },\n  hideAll: { id: 'status.show_less_all', defaultMessage: 'Show less for all' },\n  detailedStatus: { id: 'status.detailed_status', defaultMessage: 'Detailed conversation view' },\n});\n\nconst makeMapStateToProps = () => {\n  const getStatus = makeGetStatus();\n\n  const mapStateToProps = (state, props) => {\n    const status = getStatus(state, { id: props.params.statusId });\n    let ancestorsIds = Immutable.List();\n    let descendantsIds = Immutable.List();\n\n    if (status) {\n      ancestorsIds = ancestorsIds.withMutations(mutable => {\n        let id = status.get('in_reply_to_id');\n\n        while (id) {\n          mutable.unshift(id);\n          id = state.getIn(['contexts', 'inReplyTos', id]);\n        }\n      });\n\n      descendantsIds = descendantsIds.withMutations(mutable => {\n        const ids = [status.get('id')];\n\n        while (ids.length > 0) {\n          let id        = ids.shift();\n          const replies = state.getIn(['contexts', 'replies', id]);\n\n          if (status.get('id') !== id) {\n            mutable.push(id);\n          }\n\n          if (replies) {\n            replies.reverse().forEach(reply => {\n              ids.unshift(reply);\n            });\n          }\n        }\n      });\n    }\n\n    return {\n      status,\n      ancestorsIds,\n      descendantsIds,\n    };\n  };\n\n  return mapStateToProps;\n};\n\n@injectIntl\n@connect(makeMapStateToProps)\nexport default class Status extends ImmutablePureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object,\n  };\n\n  static propTypes = {\n    params: PropTypes.object.isRequired,\n    dispatch: PropTypes.func.isRequired,\n    status: ImmutablePropTypes.map,\n    ancestorsIds: ImmutablePropTypes.list,\n    descendantsIds: ImmutablePropTypes.list,\n    intl: PropTypes.object.isRequired,\n  };\n\n  state = {\n    fullscreen: false,\n  };\n\n  componentWillMount () {\n    this.props.dispatch(fetchStatus(this.props.params.statusId));\n  }\n\n  componentDidMount () {\n    attachFullscreenListener(this.onFullScreenChange);\n  }\n\n  componentWillReceiveProps (nextProps) {\n    if (nextProps.params.statusId !== this.props.params.statusId && nextProps.params.statusId) {\n      this._scrolledIntoView = false;\n      this.props.dispatch(fetchStatus(nextProps.params.statusId));\n    }\n  }\n\n  handleFavouriteClick = (status) => {\n    if (status.get('favourited')) {\n      this.props.dispatch(unfavourite(status));\n    } else {\n      this.props.dispatch(favourite(status));\n    }\n  }\n\n  handlePin = (status) => {\n    if (status.get('pinned')) {\n      this.props.dispatch(unpin(status));\n    } else {\n      this.props.dispatch(pin(status));\n    }\n  }\n\n  handleReplyClick = (status) => {\n    this.props.dispatch(replyCompose(status, this.context.router.history));\n  }\n\n  handleModalReblog = (status) => {\n    this.props.dispatch(reblog(status));\n  }\n\n  handleReblogClick = (status, e) => {\n    if (status.get('reblogged')) {\n      this.props.dispatch(unreblog(status));\n    } else {\n      if (e.shiftKey || !boostModal) {\n        this.handleModalReblog(status);\n      } else {\n        this.props.dispatch(openModal('BOOST', { status, onReblog: this.handleModalReblog }));\n      }\n    }\n  }\n\n  handleDeleteClick = (status, history, withRedraft = false) => {\n    const { dispatch, intl } = this.props;\n\n    if (!deleteModal) {\n      dispatch(deleteStatus(status.get('id'), history, withRedraft));\n    } else {\n      dispatch(openModal('CONFIRM', {\n        message: intl.formatMessage(withRedraft ? messages.redraftMessage : messages.deleteMessage),\n        confirm: intl.formatMessage(withRedraft ? messages.redraftConfirm : messages.deleteConfirm),\n        onConfirm: () => dispatch(deleteStatus(status.get('id'), history, withRedraft)),\n      }));\n    }\n  }\n\n  handleDirectClick = (account, router) => {\n    this.props.dispatch(directCompose(account, router));\n  }\n\n  handleMentionClick = (account, router) => {\n    this.props.dispatch(mentionCompose(account, router));\n  }\n\n  handleOpenMedia = (media, index) => {\n    this.props.dispatch(openModal('MEDIA', { media, index }));\n  }\n\n  handleOpenVideo = (media, time) => {\n    this.props.dispatch(openModal('VIDEO', { media, time }));\n  }\n\n  handleMuteClick = (account) => {\n    this.props.dispatch(initMuteModal(account));\n  }\n\n  handleConversationMuteClick = (status) => {\n    if (status.get('muted')) {\n      this.props.dispatch(unmuteStatus(status.get('id')));\n    } else {\n      this.props.dispatch(muteStatus(status.get('id')));\n    }\n  }\n\n  handleToggleHidden = (status) => {\n    if (status.get('hidden')) {\n      this.props.dispatch(revealStatus(status.get('id')));\n    } else {\n      this.props.dispatch(hideStatus(status.get('id')));\n    }\n  }\n\n  handleToggleAll = () => {\n    const { status, ancestorsIds, descendantsIds } = this.props;\n    const statusIds = [status.get('id')].concat(ancestorsIds.toJS(), descendantsIds.toJS());\n\n    if (status.get('hidden')) {\n      this.props.dispatch(revealStatus(statusIds));\n    } else {\n      this.props.dispatch(hideStatus(statusIds));\n    }\n  }\n\n  handleBlockClick = (account) => {\n    const { dispatch, intl } = this.props;\n\n    dispatch(openModal('CONFIRM', {\n      message: <FormattedMessage id='confirmations.block.message' defaultMessage='Are you sure you want to block {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />,\n      confirm: intl.formatMessage(messages.blockConfirm),\n      onConfirm: () => dispatch(blockAccount(account.get('id'))),\n    }));\n  }\n\n  handleReport = (status) => {\n    this.props.dispatch(initReport(status.get('account'), status));\n  }\n\n  handleEmbed = (status) => {\n    this.props.dispatch(openModal('EMBED', { url: status.get('url') }));\n  }\n\n  handleHotkeyMoveUp = () => {\n    this.handleMoveUp(this.props.status.get('id'));\n  }\n\n  handleHotkeyMoveDown = () => {\n    this.handleMoveDown(this.props.status.get('id'));\n  }\n\n  handleHotkeyReply = e => {\n    e.preventDefault();\n    this.handleReplyClick(this.props.status);\n  }\n\n  handleHotkeyFavourite = () => {\n    this.handleFavouriteClick(this.props.status);\n  }\n\n  handleHotkeyBoost = () => {\n    this.handleReblogClick(this.props.status);\n  }\n\n  handleHotkeyMention = e => {\n    e.preventDefault();\n    this.handleMentionClick(this.props.status.get('account'));\n  }\n\n  handleHotkeyOpenProfile = () => {\n    this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`);\n  }\n\n  handleHotkeyToggleHidden = () => {\n    this.handleToggleHidden(this.props.status);\n  }\n\n  handleMoveUp = id => {\n    const { status, ancestorsIds, descendantsIds } = this.props;\n\n    if (id === status.get('id')) {\n      this._selectChild(ancestorsIds.size - 1);\n    } else {\n      let index = ancestorsIds.indexOf(id);\n\n      if (index === -1) {\n        index = descendantsIds.indexOf(id);\n        this._selectChild(ancestorsIds.size + index);\n      } else {\n        this._selectChild(index - 1);\n      }\n    }\n  }\n\n  handleMoveDown = id => {\n    const { status, ancestorsIds, descendantsIds } = this.props;\n\n    if (id === status.get('id')) {\n      this._selectChild(ancestorsIds.size + 1);\n    } else {\n      let index = ancestorsIds.indexOf(id);\n\n      if (index === -1) {\n        index = descendantsIds.indexOf(id);\n        this._selectChild(ancestorsIds.size + index + 2);\n      } else {\n        this._selectChild(index + 1);\n      }\n    }\n  }\n\n  _selectChild (index) {\n    const element = this.node.querySelectorAll('.focusable')[index];\n\n    if (element) {\n      element.focus();\n    }\n  }\n\n  renderChildren (list) {\n    return list.map(id => (\n      <StatusContainer\n        key={id}\n        id={id}\n        onMoveUp={this.handleMoveUp}\n        onMoveDown={this.handleMoveDown}\n        contextType='thread'\n      />\n    ));\n  }\n\n  setRef = c => {\n    this.node = c;\n  }\n\n  componentDidUpdate () {\n    if (this._scrolledIntoView) {\n      return;\n    }\n\n    const { status, ancestorsIds } = this.props;\n\n    if (status && ancestorsIds && ancestorsIds.size > 0) {\n      const element = this.node.querySelectorAll('.focusable')[ancestorsIds.size - 1];\n\n      window.requestAnimationFrame(() => {\n        element.scrollIntoView(true);\n      });\n      this._scrolledIntoView = true;\n    }\n  }\n\n  componentWillUnmount () {\n    detachFullscreenListener(this.onFullScreenChange);\n  }\n\n  onFullScreenChange = () => {\n    this.setState({ fullscreen: isFullscreen() });\n  }\n\n  render () {\n    let ancestors, descendants;\n    const { shouldUpdateScroll, status, ancestorsIds, descendantsIds, intl } = this.props;\n    const { fullscreen } = this.state;\n\n    if (status === null) {\n      return (\n        <Column>\n          <ColumnBackButton />\n          <MissingIndicator />\n        </Column>\n      );\n    }\n\n    if (ancestorsIds && ancestorsIds.size > 0) {\n      ancestors = <div>{this.renderChildren(ancestorsIds)}</div>;\n    }\n\n    if (descendantsIds && descendantsIds.size > 0) {\n      descendants = <div>{this.renderChildren(descendantsIds)}</div>;\n    }\n\n    const handlers = {\n      moveUp: this.handleHotkeyMoveUp,\n      moveDown: this.handleHotkeyMoveDown,\n      reply: this.handleHotkeyReply,\n      favourite: this.handleHotkeyFavourite,\n      boost: this.handleHotkeyBoost,\n      mention: this.handleHotkeyMention,\n      openProfile: this.handleHotkeyOpenProfile,\n      toggleHidden: this.handleHotkeyToggleHidden,\n    };\n\n    return (\n      <Column label={intl.formatMessage(messages.detailedStatus)}>\n        <ColumnHeader\n          showBackButton\n          extraButton={(\n            <button className='column-header__button' title={intl.formatMessage(status.get('hidden') ? messages.revealAll : messages.hideAll)} aria-label={intl.formatMessage(status.get('hidden') ? messages.revealAll : messages.hideAll)} onClick={this.handleToggleAll} aria-pressed={status.get('hidden') ? 'false' : 'true'}><i className={`fa fa-${status.get('hidden') ? 'eye-slash' : 'eye'}`} /></button>\n          )}\n        />\n\n        <ScrollContainer scrollKey='thread' shouldUpdateScroll={shouldUpdateScroll}>\n          <div className={classNames('scrollable', 'detailed-status__wrapper', { fullscreen })} ref={this.setRef}>\n            {ancestors}\n\n            <HotKeys handlers={handlers}>\n              <div className='focusable' tabIndex='0' aria-label={textForScreenReader(intl, status, false, !status.get('hidden'))}>\n                <DetailedStatus\n                  status={status}\n                  onOpenVideo={this.handleOpenVideo}\n                  onOpenMedia={this.handleOpenMedia}\n                  onToggleHidden={this.handleToggleHidden}\n                />\n\n                <ActionBar\n                  status={status}\n                  onReply={this.handleReplyClick}\n                  onFavourite={this.handleFavouriteClick}\n                  onReblog={this.handleReblogClick}\n                  onDelete={this.handleDeleteClick}\n                  onDirect={this.handleDirectClick}\n                  onMention={this.handleMentionClick}\n                  onMute={this.handleMuteClick}\n                  onMuteConversation={this.handleConversationMuteClick}\n                  onBlock={this.handleBlockClick}\n                  onReport={this.handleReport}\n                  onPin={this.handlePin}\n                  onEmbed={this.handleEmbed}\n                />\n              </div>\n            </HotKeys>\n\n            {descendants}\n          </div>\n        </ScrollContainer>\n      </Column>\n    );\n  }\n\n}\n"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/seagate/sources/git/hacktivis.me/git/mastofe/app/javascript/mastodon/features/status/components/detailed_status.js","webpack:///app/javascript/seagate/sources/git/hacktivis.me/git/mastofe/app/javascript/mastodon/features/status/components/action_bar.js","webpack:///app/javascript/seagate/sources/git/hacktivis.me/git/mastofe/app/javascript/mastodon/features/status/index.js"],"names":["DetailedStatus","height","e","button","ctrlKey","metaKey","_this","context","router","preventDefault","history","push","props","status","getIn","stopPropagation","media","startTime","onOpenVideo","onToggleHidden","c","node","_measureHeight","href","target","nodeName","parentNode","window","open","heightJustChanged","_this2","this","measureHeight","scheduleIdleTask","setState","Math","ceil","scrollHeight","onHeightChange","componentDidUpdate","prevProps","prevState","state","render","get","outerStyle","boxSizing","compact","applicationLink","reblogLink","reblogIcon","favouriteLink","size","some","item","Object","_babel_runtime_helpers_esm_jsx__WEBPACK_IMPORTED_MODULE_0__","_components_attachment_list__WEBPACK_IMPORTED_MODULE_11__","video","_video__WEBPACK_IMPORTED_MODULE_16__","preview","src","alt","width","inline","handleOpenVideo","sensitive","_components_media_gallery__WEBPACK_IMPORTED_MODULE_10__","standalone","onOpenMedia","length","_card__WEBPACK_IMPORTED_MODULE_14__","card","className","rel","react_router_dom__WEBPACK_IMPORTED_MODULE_12__","to","react_intl__WEBPACK_IMPORTED_MODULE_13__","value","onClick","handleModalLink","style","react__WEBPACK_IMPORTED_MODULE_4___default","a","createElement","ref","setRef","classNames","handleAccountClick","_components_avatar__WEBPACK_IMPORTED_MODULE_7__","account","_components_display_name__WEBPACK_IMPORTED_MODULE_8__","localDomain","domain","_components_status_content__WEBPACK_IMPORTED_MODULE_9__","expanded","onExpandedToggle","handleExpandedToggle","Date","hour12","year","month","day","hour","minute","ImmutablePureComponent","PropTypes","object","ImmutablePropTypes","map","isRequired","func","bool","string","messages","defineMessages","delete","id","defaultMessage","redraft","direct","mention","reply","reblog","reblog_private","cancel_reblog_private","cannot_reblog","favourite","mute","muteConversation","unmuteConversation","block","report","share","pin","unpin","embed","admin_account","admin_status","ActionBar","injectIntl","onReply","onReblog","onFavourite","onDelete","onDirect","onMention","onMute","onMuteConversation","onBlock","onReport","onPin","navigator","text","url","onEmbed","_this$props","intl","publicStatus","includes","mutingConversation","menu","formatMessage","action","handleEmbed","me","handlePinClick","handleReblogClick","handleConversationMuteClick","handleDeleteClick","handleRedraftClick","name","handleMentionClick","handleDirectClick","handleMuteClick","handleBlockClick","handleReport","isStaff","replyIcon","shareButton","jsx","icon_button","title","icon","handleShare","reblog_disabled","handleReplyClick","disabled","active","animate","handleFavouriteClick","dropdown_menu_container","items","direction","React","PureComponent","deleteConfirm","deleteMessage","redraftConfirm","redraftMessage","blockConfirm","revealAll","hideAll","detailedStatus","replyConfirm","replyMessage","Status","connect","getStatus","makeGetStatus","params","statusId","ancestorsIds","Immutable","List","descendantsIds","withMutations","mutable","unshift","ids","shift","replies","reverse","forEach","askReplyConfirmation","trim","fullscreen","dispatch","unfavourite","openModal","message","confirm","onConfirm","replyCompose","unreblog","shiftKey","boostModal","handleModalReblog","withRedraft","_this$props2","deleteModal","deleteStatus","directCompose","mentionCompose","index","time","initMuteModal","unmuteStatus","muteStatus","revealStatus","hideStatus","_this$props3","statusIds","concat","toJS","_this$props4","index_es","values","blockAccount","initReport","handleMoveUp","handleMoveDown","handleToggleHidden","_this$props5","_selectChild","indexOf","_this$props6","isFullscreen","componentWillMount","fetchStatus","componentDidMount","attachFullscreenListener","onFullScreenChange","componentWillReceiveProps","nextProps","_scrolledIntoView","element","querySelectorAll","focus","renderChildren","list","status_container","onMoveUp","onMoveDown","contextType","_this$props7","requestAnimationFrame","scrollIntoView","componentWillUnmount","detachFullscreenListener","ancestors","descendants","_this$props8","shouldUpdateScroll","column","column_back_button","missing_indicator","handlers","moveUp","handleHotkeyMoveUp","moveDown","handleHotkeyMoveDown","handleHotkeyReply","handleHotkeyFavourite","boost","handleHotkeyBoost","handleHotkeyMention","openProfile","handleHotkeyOpenProfile","toggleHidden","handleHotkeyToggleHidden","label","column_header","showBackButton","extraButton","aria-label","handleToggleAll","aria-pressed","react_router_scroll_4_es","scrollKey","react_default","react_hotkeys_index_es","tabIndex","textForScreenReader","detailed_status","handleOpenMedia","action_bar_ActionBar","handlePin"],"mappings":"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","file":"features/status.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Avatar from '../../../components/avatar';\nimport DisplayName from '../../../components/display_name';\nimport StatusContent from '../../../components/status_content';\nimport MediaGallery from '../../../components/media_gallery';\nimport AttachmentList from '../../../components/attachment_list';\nimport { Link } from 'react-router-dom';\nimport { FormattedDate, FormattedNumber } from 'react-intl';\nimport Card from './card';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport Video from '../../video';\nimport scheduleIdleTask from '../../ui/util/schedule_idle_task';\nimport classNames from 'classnames';\n\nexport default class DetailedStatus extends ImmutablePureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object,\n  };\n\n  static propTypes = {\n    status: ImmutablePropTypes.map.isRequired,\n    onOpenMedia: PropTypes.func.isRequired,\n    onOpenVideo: PropTypes.func.isRequired,\n    onToggleHidden: PropTypes.func.isRequired,\n    measureHeight: PropTypes.bool,\n    onHeightChange: PropTypes.func,\n    domain: PropTypes.string.isRequired,\n    compact: PropTypes.bool,\n  };\n\n  state = {\n    height: null,\n  };\n\n  handleAccountClick = (e) => {\n    if (e.button === 0 && !(e.ctrlKey || e.metaKey) && this.context.router) {\n      e.preventDefault();\n      this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`);\n    }\n\n    e.stopPropagation();\n  }\n\n  handleOpenVideo = (media, startTime) => {\n    this.props.onOpenVideo(media, startTime);\n  }\n\n  handleExpandedToggle = () => {\n    this.props.onToggleHidden(this.props.status);\n  }\n\n  _measureHeight (heightJustChanged) {\n    if (this.props.measureHeight && this.node) {\n      scheduleIdleTask(() => this.node && this.setState({ height: Math.ceil(this.node.scrollHeight) + 1 }));\n\n      if (this.props.onHeightChange && heightJustChanged) {\n        this.props.onHeightChange();\n      }\n    }\n  }\n\n  setRef = c => {\n    this.node = c;\n    this._measureHeight();\n  }\n\n  componentDidUpdate (prevProps, prevState) {\n    this._measureHeight(prevState.height !== this.state.height);\n  }\n\n  handleModalLink = e => {\n    e.preventDefault();\n\n    let href;\n\n    if (e.target.nodeName !== 'A') {\n      href = e.target.parentNode.href;\n    } else {\n      href = e.target.href;\n    }\n\n    window.open(href, 'mastodon-intent', 'width=445,height=600,resizable=no,menubar=no,status=no,scrollbars=yes');\n  }\n\n  render () {\n    const status = this.props.status.get('reblog') ? this.props.status.get('reblog') : this.props.status;\n    const outerStyle = { boxSizing: 'border-box' };\n    const { compact } = this.props;\n\n    if (!status) {\n      return null;\n    }\n\n    let media           = '';\n    let applicationLink = '';\n    let reblogLink = '';\n    let reblogIcon = 'retweet';\n    let favouriteLink = '';\n\n    if (this.props.measureHeight) {\n      outerStyle.height = `${this.state.height}px`;\n    }\n\n    if (status.get('media_attachments').size > 0) {\n      if (status.get('media_attachments').some(item => item.get('type') === 'unknown')) {\n        media = <AttachmentList media={status.get('media_attachments')} />;\n      } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n        const video = status.getIn(['media_attachments', 0]);\n\n        media = (\n          <Video\n            preview={video.get('preview_url')}\n            src={video.get('url')}\n            alt={video.get('description')}\n            width={300}\n            height={150}\n            inline\n            onOpenVideo={this.handleOpenVideo}\n            sensitive={status.get('sensitive')}\n          />\n        );\n      } else {\n        media = (\n          <MediaGallery\n            standalone\n            sensitive={status.get('sensitive')}\n            media={status.get('media_attachments')}\n            height={300}\n            onOpenMedia={this.props.onOpenMedia}\n          />\n        );\n      }\n    } else if (status.get('spoiler_text').length === 0) {\n      media = <Card onOpenMedia={this.props.onOpenMedia} card={status.get('card', null)} />;\n    }\n\n    if (status.get('application')) {\n      applicationLink = <span> · <a className='detailed-status__application' href={status.getIn(['application', 'website'])} target='_blank' rel='noopener'>{status.getIn(['application', 'name'])}</a></span>;\n    }\n\n    if (status.get('visibility') === 'direct') {\n      reblogIcon = 'envelope';\n    } else if (status.get('visibility') === 'private') {\n      reblogIcon = 'lock';\n    }\n\n    if (status.get('visibility') === 'private') {\n      reblogLink = <i className={`fa fa-${reblogIcon}`} />;\n    } else if (this.context.router) {\n      reblogLink = (\n        <Link to={`/statuses/${status.get('id')}/reblogs`} className='detailed-status__link'>\n          <i className={`fa fa-${reblogIcon}`} />\n          <span className='detailed-status__reblogs'>\n            <FormattedNumber value={status.get('reblogs_count')} />\n          </span>\n        </Link>\n      );\n    } else {\n      reblogLink = (\n        <a href={`/interact/${status.get('id')}?type=reblog`} className='detailed-status__link' onClick={this.handleModalLink}>\n          <i className={`fa fa-${reblogIcon}`} />\n          <span className='detailed-status__reblogs'>\n            <FormattedNumber value={status.get('reblogs_count')} />\n          </span>\n        </a>\n      );\n    }\n\n    if (this.context.router) {\n      favouriteLink = (\n        <Link to={`/statuses/${status.get('id')}/favourites`} className='detailed-status__link'>\n          <i className='fa fa-star' />\n          <span className='detailed-status__favorites'>\n            <FormattedNumber value={status.get('favourites_count')} />\n          </span>\n        </Link>\n      );\n    } else {\n      favouriteLink = (\n        <a href={`/interact/${status.get('id')}?type=favourite`} className='detailed-status__link' onClick={this.handleModalLink}>\n          <i className='fa fa-star' />\n          <span className='detailed-status__favorites'>\n            <FormattedNumber value={status.get('favourites_count')} />\n          </span>\n        </a>\n      );\n    }\n\n    return (\n      <div style={outerStyle}>\n        <div ref={this.setRef} className={classNames('detailed-status', { compact })}>\n          <a href={status.getIn(['account', 'url'])} onClick={this.handleAccountClick} className='detailed-status__display-name'>\n            <div className='detailed-status__display-avatar'><Avatar account={status.get('account')} size={48} /></div>\n            <DisplayName account={status.get('account')} localDomain={this.props.domain} />\n          </a>\n\n          <StatusContent status={status} expanded={!status.get('hidden')} onExpandedToggle={this.handleExpandedToggle} />\n\n          {media}\n\n          <div className='detailed-status__meta'>\n            <a className='detailed-status__datetime' href={status.get('url')} target='_blank' rel='noopener'>\n              <FormattedDate value={new Date(status.get('created_at'))} hour12={false} year='numeric' month='short' day='2-digit' hour='2-digit' minute='2-digit' />\n            </a>{applicationLink} · {reblogLink} · {favouriteLink}\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport IconButton from '../../../components/icon_button';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport DropdownMenuContainer from '../../../containers/dropdown_menu_container';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { me, isStaff } from '../../../initial_state';\n\nconst messages = defineMessages({\n  delete: { id: 'status.delete', defaultMessage: 'Delete' },\n  redraft: { id: 'status.redraft', defaultMessage: 'Delete & re-draft' },\n  direct: { id: 'status.direct', defaultMessage: 'Direct message @{name}' },\n  mention: { id: 'status.mention', defaultMessage: 'Mention @{name}' },\n  reply: { id: 'status.reply', defaultMessage: 'Reply' },\n  reblog: { id: 'status.reblog', defaultMessage: 'Boost' },\n  reblog_private: { id: 'status.reblog_private', defaultMessage: 'Boost to original audience' },\n  cancel_reblog_private: { id: 'status.cancel_reblog_private', defaultMessage: 'Unboost' },\n  cannot_reblog: { id: 'status.cannot_reblog', defaultMessage: 'This post cannot be boosted' },\n  favourite: { id: 'status.favourite', defaultMessage: 'Favourite' },\n  mute: { id: 'status.mute', defaultMessage: 'Mute @{name}' },\n  muteConversation: { id: 'status.mute_conversation', defaultMessage: 'Mute conversation' },\n  unmuteConversation: { id: 'status.unmute_conversation', defaultMessage: 'Unmute conversation' },\n  block: { id: 'status.block', defaultMessage: 'Block @{name}' },\n  report: { id: 'status.report', defaultMessage: 'Report @{name}' },\n  share: { id: 'status.share', defaultMessage: 'Share' },\n  pin: { id: 'status.pin', defaultMessage: 'Pin on profile' },\n  unpin: { id: 'status.unpin', defaultMessage: 'Unpin from profile' },\n  embed: { id: 'status.embed', defaultMessage: 'Embed' },\n  admin_account: { id: 'status.admin_account', defaultMessage: 'Open moderation interface for @{name}' },\n  admin_status: { id: 'status.admin_status', defaultMessage: 'Open this status in the moderation interface' },\n});\n\nexport default @injectIntl\nclass ActionBar extends React.PureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object,\n  };\n\n  static propTypes = {\n    status: ImmutablePropTypes.map.isRequired,\n    onReply: PropTypes.func.isRequired,\n    onReblog: PropTypes.func.isRequired,\n    onFavourite: PropTypes.func.isRequired,\n    onDelete: PropTypes.func.isRequired,\n    onDirect: PropTypes.func.isRequired,\n    onMention: PropTypes.func.isRequired,\n    onMute: PropTypes.func,\n    onMuteConversation: PropTypes.func,\n    onBlock: PropTypes.func,\n    onReport: PropTypes.func,\n    onPin: PropTypes.func,\n    onEmbed: PropTypes.func,\n    intl: PropTypes.object.isRequired,\n  };\n\n  handleReplyClick = () => {\n    this.props.onReply(this.props.status);\n  }\n\n  handleReblogClick = (e) => {\n    this.props.onReblog(this.props.status, e);\n  }\n\n  handleFavouriteClick = () => {\n    this.props.onFavourite(this.props.status);\n  }\n\n  handleDeleteClick = () => {\n    this.props.onDelete(this.props.status, this.context.router.history);\n  }\n\n  handleRedraftClick = () => {\n    this.props.onDelete(this.props.status, this.context.router.history, true);\n  }\n\n  handleDirectClick = () => {\n    this.props.onDirect(this.props.status.get('account'), this.context.router.history);\n  }\n\n  handleMentionClick = () => {\n    this.props.onMention(this.props.status.get('account'), this.context.router.history);\n  }\n\n  handleMuteClick = () => {\n    this.props.onMute(this.props.status.get('account'));\n  }\n\n  handleConversationMuteClick = () => {\n    this.props.onMuteConversation(this.props.status);\n  }\n\n  handleBlockClick = () => {\n    this.props.onBlock(this.props.status.get('account'));\n  }\n\n  handleReport = () => {\n    this.props.onReport(this.props.status);\n  }\n\n  handlePinClick = () => {\n    this.props.onPin(this.props.status);\n  }\n\n  handleShare = () => {\n    navigator.share({\n      text: this.props.status.get('search_index'),\n      url: this.props.status.get('url'),\n    });\n  }\n\n  handleEmbed = () => {\n    this.props.onEmbed(this.props.status);\n  }\n\n  render () {\n    const { status, intl } = this.props;\n\n    const publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));\n    const mutingConversation = status.get('muted');\n\n    let menu = [];\n\n    if (publicStatus) {\n      menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed });\n      menu.push(null);\n    }\n\n    if (me === status.getIn(['account', 'id'])) {\n      if (publicStatus) {\n        menu.push({ text: intl.formatMessage(status.get('pinned') ? messages.unpin : messages.pin), action: this.handlePinClick });\n      } else {\n        if (status.get('visibility') === 'private') {\n          menu.push({ text: intl.formatMessage(status.get('reblogged') ? messages.cancel_reblog_private : messages.reblog_private), action: this.handleReblogClick });\n        }\n      }\n\n      menu.push(null);\n      menu.push({ text: intl.formatMessage(mutingConversation ? messages.unmuteConversation : messages.muteConversation), action: this.handleConversationMuteClick });\n      menu.push(null);\n      menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDeleteClick });\n      menu.push({ text: intl.formatMessage(messages.redraft), action: this.handleRedraftClick });\n    } else {\n      menu.push({ text: intl.formatMessage(messages.mention, { name: status.getIn(['account', 'username']) }), action: this.handleMentionClick });\n      menu.push({ text: intl.formatMessage(messages.direct, { name: status.getIn(['account', 'username']) }), action: this.handleDirectClick });\n      menu.push(null);\n      menu.push({ text: intl.formatMessage(messages.mute, { name: status.getIn(['account', 'username']) }), action: this.handleMuteClick });\n      menu.push({ text: intl.formatMessage(messages.block, { name: status.getIn(['account', 'username']) }), action: this.handleBlockClick });\n      menu.push({ text: intl.formatMessage(messages.report, { name: status.getIn(['account', 'username']) }), action: this.handleReport });\n      if (isStaff) {\n        menu.push(null);\n        menu.push({ text: intl.formatMessage(messages.admin_account, { name: status.getIn(['account', 'username']) }), href: `/admin/accounts/${status.getIn(['account', 'id'])}` });\n        menu.push({ text: intl.formatMessage(messages.admin_status), href: `/admin/accounts/${status.getIn(['account', 'id'])}/statuses/${status.get('id')}` });\n      }\n    }\n\n    const shareButton = ('share' in navigator) && status.get('visibility') === 'public' && (\n      <div className='detailed-status__button'><IconButton title={intl.formatMessage(messages.share)} icon='share-alt' onClick={this.handleShare} /></div>\n    );\n\n    let replyIcon;\n    if (status.get('in_reply_to_id', null) === null) {\n      replyIcon = 'reply';\n    } else {\n      replyIcon = 'reply-all';\n    }\n\n    let reblogIcon = 'retweet';\n    if (status.get('visibility') === 'direct') reblogIcon = 'envelope';\n    else if (status.get('visibility') === 'private') reblogIcon = 'lock';\n\n    let reblog_disabled = (status.get('visibility') === 'direct' || status.get('visibility') === 'private');\n\n    return (\n      <div className='detailed-status__action-bar'>\n        <div className='detailed-status__button'><IconButton title={intl.formatMessage(messages.reply)} icon={status.get('in_reply_to_account_id') === status.getIn(['account', 'id']) ? 'reply' : replyIcon} onClick={this.handleReplyClick} /></div>\n        <div className='detailed-status__button'><IconButton disabled={reblog_disabled} active={status.get('reblogged')} title={reblog_disabled ? intl.formatMessage(messages.cannot_reblog) : intl.formatMessage(messages.reblog)} icon={reblogIcon} onClick={this.handleReblogClick} /></div>\n        <div className='detailed-status__button'><IconButton className='star-icon' animate active={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} /></div>\n        {shareButton}\n\n        <div className='detailed-status__action-bar-dropdown'>\n          <DropdownMenuContainer size={18} icon='ellipsis-h' items={menu} direction='left' title='More' />\n        </div>\n      </div>\n    );\n  }\n\n}\n","import Immutable from 'immutable';\nimport React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { fetchStatus } from '../../actions/statuses';\nimport MissingIndicator from '../../components/missing_indicator';\nimport DetailedStatus from './components/detailed_status';\nimport ActionBar from './components/action_bar';\nimport Column from '../ui/components/column';\nimport {\n  favourite,\n  unfavourite,\n  reblog,\n  unreblog,\n  pin,\n  unpin,\n} from '../../actions/interactions';\nimport {\n  replyCompose,\n  mentionCompose,\n  directCompose,\n} from '../../actions/compose';\nimport { blockAccount } from '../../actions/accounts';\nimport {\n  muteStatus,\n  unmuteStatus,\n  deleteStatus,\n  hideStatus,\n  revealStatus,\n} from '../../actions/statuses';\nimport { initMuteModal } from '../../actions/mutes';\nimport { initReport } from '../../actions/reports';\nimport { makeGetStatus } from '../../selectors';\nimport { ScrollContainer } from 'react-router-scroll-4';\nimport ColumnBackButton from '../../components/column_back_button';\nimport ColumnHeader from '../../components/column_header';\nimport StatusContainer from '../../containers/status_container';\nimport { openModal } from '../../actions/modal';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { HotKeys } from 'react-hotkeys';\nimport { boostModal, deleteModal } from '../../initial_state';\nimport { attachFullscreenListener, detachFullscreenListener, isFullscreen } from '../ui/util/fullscreen';\nimport { textForScreenReader } from '../../components/status';\n\nconst messages = defineMessages({\n  deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' },\n  deleteMessage: { id: 'confirmations.delete.message', defaultMessage: 'Are you sure you want to delete this status?' },\n  redraftConfirm: { id: 'confirmations.redraft.confirm', defaultMessage: 'Delete & redraft' },\n  redraftMessage: { id: 'confirmations.redraft.message', defaultMessage: 'Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.' },\n  blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' },\n  revealAll: { id: 'status.show_more_all', defaultMessage: 'Show more for all' },\n  hideAll: { id: 'status.show_less_all', defaultMessage: 'Show less for all' },\n  detailedStatus: { id: 'status.detailed_status', defaultMessage: 'Detailed conversation view' },\n  replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' },\n  replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' },\n});\n\nconst makeMapStateToProps = () => {\n  const getStatus = makeGetStatus();\n\n  const mapStateToProps = (state, props) => {\n    const status = getStatus(state, { id: props.params.statusId });\n    let ancestorsIds = Immutable.List();\n    let descendantsIds = Immutable.List();\n\n    if (status) {\n      ancestorsIds = ancestorsIds.withMutations(mutable => {\n        let id = status.get('in_reply_to_id');\n\n        while (id) {\n          mutable.unshift(id);\n          id = state.getIn(['contexts', 'inReplyTos', id]);\n        }\n      });\n\n      descendantsIds = descendantsIds.withMutations(mutable => {\n        const ids = [status.get('id')];\n\n        while (ids.length > 0) {\n          let id        = ids.shift();\n          const replies = state.getIn(['contexts', 'replies', id]);\n\n          if (status.get('id') !== id) {\n            mutable.push(id);\n          }\n\n          if (replies) {\n            replies.reverse().forEach(reply => {\n              ids.unshift(reply);\n            });\n          }\n        }\n      });\n    }\n\n    return {\n      status,\n      ancestorsIds,\n      descendantsIds,\n      askReplyConfirmation: state.getIn(['compose', 'text']).trim().length !== 0,\n      domain: state.getIn(['meta', 'domain']),\n    };\n  };\n\n  return mapStateToProps;\n};\n\nexport default @injectIntl\n@connect(makeMapStateToProps)\nclass Status extends ImmutablePureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object,\n  };\n\n  static propTypes = {\n    params: PropTypes.object.isRequired,\n    dispatch: PropTypes.func.isRequired,\n    status: ImmutablePropTypes.map,\n    ancestorsIds: ImmutablePropTypes.list,\n    descendantsIds: ImmutablePropTypes.list,\n    intl: PropTypes.object.isRequired,\n    askReplyConfirmation: PropTypes.bool,\n    domain: PropTypes.string.isRequired,\n  };\n\n  state = {\n    fullscreen: false,\n  };\n\n  componentWillMount () {\n    this.props.dispatch(fetchStatus(this.props.params.statusId));\n  }\n\n  componentDidMount () {\n    attachFullscreenListener(this.onFullScreenChange);\n  }\n\n  componentWillReceiveProps (nextProps) {\n    if (nextProps.params.statusId !== this.props.params.statusId && nextProps.params.statusId) {\n      this._scrolledIntoView = false;\n      this.props.dispatch(fetchStatus(nextProps.params.statusId));\n    }\n  }\n\n  handleFavouriteClick = (status) => {\n    if (status.get('favourited')) {\n      this.props.dispatch(unfavourite(status));\n    } else {\n      this.props.dispatch(favourite(status));\n    }\n  }\n\n  handlePin = (status) => {\n    if (status.get('pinned')) {\n      this.props.dispatch(unpin(status));\n    } else {\n      this.props.dispatch(pin(status));\n    }\n  }\n\n  handleReplyClick = (status) => {\n    let { askReplyConfirmation, dispatch, intl } = this.props;\n    if (askReplyConfirmation) {\n      dispatch(openModal('CONFIRM', {\n        message: intl.formatMessage(messages.replyMessage),\n        confirm: intl.formatMessage(messages.replyConfirm),\n        onConfirm: () => dispatch(replyCompose(status, this.context.router.history)),\n      }));\n    } else {\n      dispatch(replyCompose(status, this.context.router.history));\n    }\n  }\n\n  handleModalReblog = (status) => {\n    this.props.dispatch(reblog(status));\n  }\n\n  handleReblogClick = (status, e) => {\n    if (status.get('reblogged')) {\n      this.props.dispatch(unreblog(status));\n    } else {\n      if ((e && e.shiftKey) || !boostModal) {\n        this.handleModalReblog(status);\n      } else {\n        this.props.dispatch(openModal('BOOST', { status, onReblog: this.handleModalReblog }));\n      }\n    }\n  }\n\n  handleDeleteClick = (status, history, withRedraft = false) => {\n    const { dispatch, intl } = this.props;\n\n    if (!deleteModal) {\n      dispatch(deleteStatus(status.get('id'), history, withRedraft));\n    } else {\n      dispatch(openModal('CONFIRM', {\n        message: intl.formatMessage(withRedraft ? messages.redraftMessage : messages.deleteMessage),\n        confirm: intl.formatMessage(withRedraft ? messages.redraftConfirm : messages.deleteConfirm),\n        onConfirm: () => dispatch(deleteStatus(status.get('id'), history, withRedraft)),\n      }));\n    }\n  }\n\n  handleDirectClick = (account, router) => {\n    this.props.dispatch(directCompose(account, router));\n  }\n\n  handleMentionClick = (account, router) => {\n    this.props.dispatch(mentionCompose(account, router));\n  }\n\n  handleOpenMedia = (media, index) => {\n    this.props.dispatch(openModal('MEDIA', { media, index }));\n  }\n\n  handleOpenVideo = (media, time) => {\n    this.props.dispatch(openModal('VIDEO', { media, time }));\n  }\n\n  handleMuteClick = (account) => {\n    this.props.dispatch(initMuteModal(account));\n  }\n\n  handleConversationMuteClick = (status) => {\n    if (status.get('muted')) {\n      this.props.dispatch(unmuteStatus(status.get('id')));\n    } else {\n      this.props.dispatch(muteStatus(status.get('id')));\n    }\n  }\n\n  handleToggleHidden = (status) => {\n    if (status.get('hidden')) {\n      this.props.dispatch(revealStatus(status.get('id')));\n    } else {\n      this.props.dispatch(hideStatus(status.get('id')));\n    }\n  }\n\n  handleToggleAll = () => {\n    const { status, ancestorsIds, descendantsIds } = this.props;\n    const statusIds = [status.get('id')].concat(ancestorsIds.toJS(), descendantsIds.toJS());\n\n    if (status.get('hidden')) {\n      this.props.dispatch(revealStatus(statusIds));\n    } else {\n      this.props.dispatch(hideStatus(statusIds));\n    }\n  }\n\n  handleBlockClick = (account) => {\n    const { dispatch, intl } = this.props;\n\n    dispatch(openModal('CONFIRM', {\n      message: <FormattedMessage id='confirmations.block.message' defaultMessage='Are you sure you want to block {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />,\n      confirm: intl.formatMessage(messages.blockConfirm),\n      onConfirm: () => dispatch(blockAccount(account.get('id'))),\n    }));\n  }\n\n  handleReport = (status) => {\n    this.props.dispatch(initReport(status.get('account'), status));\n  }\n\n  handleEmbed = (status) => {\n    this.props.dispatch(openModal('EMBED', { url: status.get('url') }));\n  }\n\n  handleHotkeyMoveUp = () => {\n    this.handleMoveUp(this.props.status.get('id'));\n  }\n\n  handleHotkeyMoveDown = () => {\n    this.handleMoveDown(this.props.status.get('id'));\n  }\n\n  handleHotkeyReply = e => {\n    e.preventDefault();\n    this.handleReplyClick(this.props.status);\n  }\n\n  handleHotkeyFavourite = () => {\n    this.handleFavouriteClick(this.props.status);\n  }\n\n  handleHotkeyBoost = () => {\n    this.handleReblogClick(this.props.status);\n  }\n\n  handleHotkeyMention = e => {\n    e.preventDefault();\n    this.handleMentionClick(this.props.status.get('account'));\n  }\n\n  handleHotkeyOpenProfile = () => {\n    this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`);\n  }\n\n  handleHotkeyToggleHidden = () => {\n    this.handleToggleHidden(this.props.status);\n  }\n\n  handleMoveUp = id => {\n    const { status, ancestorsIds, descendantsIds } = this.props;\n\n    if (id === status.get('id')) {\n      this._selectChild(ancestorsIds.size - 1);\n    } else {\n      let index = ancestorsIds.indexOf(id);\n\n      if (index === -1) {\n        index = descendantsIds.indexOf(id);\n        this._selectChild(ancestorsIds.size + index);\n      } else {\n        this._selectChild(index - 1);\n      }\n    }\n  }\n\n  handleMoveDown = id => {\n    const { status, ancestorsIds, descendantsIds } = this.props;\n\n    if (id === status.get('id')) {\n      this._selectChild(ancestorsIds.size + 1);\n    } else {\n      let index = ancestorsIds.indexOf(id);\n\n      if (index === -1) {\n        index = descendantsIds.indexOf(id);\n        this._selectChild(ancestorsIds.size + index + 2);\n      } else {\n        this._selectChild(index + 1);\n      }\n    }\n  }\n\n  _selectChild (index) {\n    const element = this.node.querySelectorAll('.focusable')[index];\n\n    if (element) {\n      element.focus();\n    }\n  }\n\n  renderChildren (list) {\n    return list.map(id => (\n      <StatusContainer\n        key={id}\n        id={id}\n        onMoveUp={this.handleMoveUp}\n        onMoveDown={this.handleMoveDown}\n        contextType='thread'\n      />\n    ));\n  }\n\n  setRef = c => {\n    this.node = c;\n  }\n\n  componentDidUpdate () {\n    if (this._scrolledIntoView) {\n      return;\n    }\n\n    const { status, ancestorsIds } = this.props;\n\n    if (status && ancestorsIds && ancestorsIds.size > 0) {\n      const element = this.node.querySelectorAll('.focusable')[ancestorsIds.size - 1];\n\n      window.requestAnimationFrame(() => {\n        element.scrollIntoView(true);\n      });\n      this._scrolledIntoView = true;\n    }\n  }\n\n  componentWillUnmount () {\n    detachFullscreenListener(this.onFullScreenChange);\n  }\n\n  onFullScreenChange = () => {\n    this.setState({ fullscreen: isFullscreen() });\n  }\n\n  render () {\n    let ancestors, descendants;\n    const { shouldUpdateScroll, status, ancestorsIds, descendantsIds, intl, domain } = this.props;\n    const { fullscreen } = this.state;\n\n    if (status === null) {\n      return (\n        <Column>\n          <ColumnBackButton />\n          <MissingIndicator />\n        </Column>\n      );\n    }\n\n    if (ancestorsIds && ancestorsIds.size > 0) {\n      ancestors = <div>{this.renderChildren(ancestorsIds)}</div>;\n    }\n\n    if (descendantsIds && descendantsIds.size > 0) {\n      descendants = <div>{this.renderChildren(descendantsIds)}</div>;\n    }\n\n    const handlers = {\n      moveUp: this.handleHotkeyMoveUp,\n      moveDown: this.handleHotkeyMoveDown,\n      reply: this.handleHotkeyReply,\n      favourite: this.handleHotkeyFavourite,\n      boost: this.handleHotkeyBoost,\n      mention: this.handleHotkeyMention,\n      openProfile: this.handleHotkeyOpenProfile,\n      toggleHidden: this.handleHotkeyToggleHidden,\n    };\n\n    return (\n      <Column label={intl.formatMessage(messages.detailedStatus)}>\n        <ColumnHeader\n          showBackButton\n          extraButton={(\n            <button className='column-header__button' title={intl.formatMessage(status.get('hidden') ? messages.revealAll : messages.hideAll)} aria-label={intl.formatMessage(status.get('hidden') ? messages.revealAll : messages.hideAll)} onClick={this.handleToggleAll} aria-pressed={status.get('hidden') ? 'false' : 'true'}><i className={`fa fa-${status.get('hidden') ? 'eye-slash' : 'eye'}`} /></button>\n          )}\n        />\n\n        <ScrollContainer scrollKey='thread' shouldUpdateScroll={shouldUpdateScroll}>\n          <div className={classNames('scrollable', { fullscreen })} ref={this.setRef}>\n            {ancestors}\n\n            <HotKeys handlers={handlers}>\n              <div className={classNames('focusable', 'detailed-status__wrapper')} tabIndex='0' aria-label={textForScreenReader(intl, status, false, !status.get('hidden'))}>\n                <DetailedStatus\n                  status={status}\n                  onOpenVideo={this.handleOpenVideo}\n                  onOpenMedia={this.handleOpenMedia}\n                  onToggleHidden={this.handleToggleHidden}\n                  domain={domain}\n                />\n\n                <ActionBar\n                  status={status}\n                  onReply={this.handleReplyClick}\n                  onFavourite={this.handleFavouriteClick}\n                  onReblog={this.handleReblogClick}\n                  onDelete={this.handleDeleteClick}\n                  onDirect={this.handleDirectClick}\n                  onMention={this.handleMentionClick}\n                  onMute={this.handleMuteClick}\n                  onMuteConversation={this.handleConversationMuteClick}\n                  onBlock={this.handleBlockClick}\n                  onReport={this.handleReport}\n                  onPin={this.handlePin}\n                  onEmbed={this.handleEmbed}\n                />\n              </div>\n            </HotKeys>\n\n            {descendants}\n          </div>\n        </ScrollContainer>\n      </Column>\n    );\n  }\n\n}\n"],"sourceRoot":""}
\ No newline at end of file