{"version":3,"sources":["webpack:///app/javascript/opt/mastodon/app/javascript/flavours/glitch/components/edited_timestamp/containers/dropdown_menu_container.js","webpack:///app/javascript/opt/mastodon/app/javascript/flavours/glitch/components/edited_timestamp/index.js","webpack:///app/javascript/opt/mastodon/app/javascript/flavours/glitch/features/status/components/detailed_status.js","webpack:///app/javascript/opt/mastodon/app/javascript/flavours/glitch/features/status/components/action_bar.js","webpack:///app/javascript/opt/mastodon/app/javascript/flavours/glitch/features/status/index.js"],"names":["connect","state","statusId","dropdownPlacement","getIn","openDropdownId","openedViaKeyboard","items","loading","dispatch","onOpen","id","onItemClick","keyboard","fetchHistory","openDropdownMenu","onClose","closeDropdownMenu","DropdownMenu","EditedTimestamp","index","openModal","injectIntl","React","PureComponent","handleItemClick","item","i","this","props","renderHeader","defaultMessage","values","count","size","renderItem","onClick","onKeyPress","formattedDate","timestamp","get","short","formattedName","accountId","label","name","date","className","render","intl","scrollable","formatDate","hour12","month","day","hour","minute","DetailedStatus","ImmutablePureComponent","height","handleAccountClick","e","button","ctrlKey","altKey","metaKey","context","router","preventDefault","history","location","mastodonBackSteps","push","status","stopPropagation","parseClick","destination","handleOpenVideo","options","onOpenVideo","setRef","c","node","_measureHeight","handleChildUpdate","handleModalLink","href","target","nodeName","parentNode","window","open","handleTranslate","onTranslate","heightJustChanged","measureHeight","scheduleIdleTask","setState","Math","ceil","scrollHeight","onHeightChange","componentDidUpdate","prevProps","prevState","expanded","onToggleHidden","settings","usingPiP","outerStyle","boxSizing","compact","applicationLink","reblogLink","reblogIcon","favouriteLink","edited","contentMedia","contentMediaIcons","extraMedia","extraMediaIcons","media","mediaIcons","some","attachment","src","alt","duration","poster","backgroundColor","foregroundColor","accentColor","sensitive","visible","showMedia","blurhash","onToggleVisibility","onToggleMediaVisibility","preview","frameRate","inline","letterbox","fullwidth","preventPlayback","autoplay","standalone","hidden","onOpenMedia","card","pollId","Fragment","rel","visibilityLink","visibility","includes","Link","to","value","style","ref","classNames","account","localDomain","domain","collapsed","onExpandedToggle","onUpdate","tagLinks","rewriteMentions","disabled","Date","year","contextTypes","PropTypes","object","propTypes","ImmutablePropTypes","map","isRequired","func","bool","string","messages","defineMessages","delete","redraft","edit","direct","mention","reply","reblog","reblog_private","cancel_reblog_private","cannot_reblog","favourite","bookmark","more","mute","muteConversation","unmuteConversation","block","report","share","pin","unpin","embed","admin_account","admin_status","copy","openOriginalPage","ActionBar","handleReplyClick","onReply","handleReblogClick","onReblog","handleFavouriteClick","onFavourite","handleBookmarkClick","onBookmark","handleDeleteClick","onDelete","handleRedraftClick","handleEditClick","onEdit","handleDirectClick","onDirect","handleMentionClick","onMention","handleMuteClick","onMute","handleConversationMuteClick","onMuteConversation","handleBlockClick","onBlock","handleReport","onReport","handlePinClick","onPin","handleShare","navigator","text","url","handleEmbed","onEmbed","handleCopy","clipboard","writeText","signedIn","permissions","identity","publicStatus","pinnableStatus","mutingConversation","writtenByMe","me","isRemote","menu","formatMessage","action","PERMISSION_MANAGE_USERS","accountAdminLink","statusAdminLink","undefined","shareButton","title","icon","reblogPrivate","reblogTitle","active","animate","direction","deleteConfirm","deleteMessage","redraftConfirm","redraftMessage","revealAll","hideAll","detailedStatus","replyConfirm","replyMessage","tootHeading","Status","getStatus","makeGetStatus","getAncestorsIds","createSelector","_","inReplyTos","ancestorsIds","Immutable","List","withMutations","mutable","unshift","getDescendantsIds","contextReplies","statuses","descendantsIds","ids","length","pop","replies","reverse","forEach","insertAt","findIndex","idx","splice","params","isLoading","askReplyConfirmation","trim","fullscreen","isExpanded","threadExpanded","loadedStatusId","revealBehindCW","handleToggleHidden","revealStatus","hideStatus","setExpansion","handleToggleMediaVisibility","handleModalFavourite","unfavourite","shiftKey","favouriteModal","type","handlePin","message","confirm","onDoNotAsk","changeLocalSetting","onConfirm","replyCompose","handleModalReblog","privacy","unreblog","initBoostModal","missingMediaDescription","boostModal","unbookmark","withRedraft","deleteModal","deleteStatus","editStatus","directCompose","mentionCompose","handleOpenMedia","handleHotkeyOpenMedia","startTime","initMuteModal","unmuteStatus","muteStatus","handleToggleAll","statusIds","concat","toJS","undoStatusTranslation","translateStatus","initBlockModal","initReport","handleHotkeyToggleSensitive","handleHotkeyMoveUp","handleMoveUp","handleHotkeyMoveDown","handleMoveDown","handleHotkeyReply","handleHotkeyFavourite","handleHotkeyBoost","handleHotkeyBookmark","handleHotkeyMention","handleHotkeyOpenProfile","_selectChild","indexOf","handleHeaderClick","column","scrollTop","setColumnRef","onFullScreenChange","isFullscreen","componentDidMount","attachFullscreenListener","fetchStatus","element","querySelectorAll","requestAnimationFrame","scrollIntoView","static","update","updated","defaultMediaVisibility","autoUnfoldCW","align_top","container","offsetTop","clientHeight","offsetHeight","focus","renderChildren","list","onMoveUp","onMoveDown","contextType","componentWillUnmount","detachFullscreenListener","ancestors","descendants","multiColumn","isLocal","isIndexable","handlers","moveUp","moveDown","boost","openProfile","toggleSpoiler","toggleSensitive","openMedia","bindToDocument","showBackButton","extraButton","scrollKey","tabIndex","textForScreenReader","Helmet","displayName","username","prefix","str","num","slice","titleFromStatus","content"],"mappings":"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","file":"js/flavours/glitch/async/status-22f7529542d8aa64ffb9.chunk.js","sourcesContent":["import { connect } from 'react-redux';\nimport { openDropdownMenu, closeDropdownMenu } from 'flavours/glitch/actions/dropdown_menu';\nimport { fetchHistory } from 'flavours/glitch/actions/history';\nimport DropdownMenu from 'flavours/glitch/components/dropdown_menu';\n\nconst mapStateToProps = (state, { statusId }) => ({\n  dropdownPlacement: state.getIn(['dropdown_menu', 'placement']),\n  openDropdownId: state.getIn(['dropdown_menu', 'openId']),\n  openedViaKeyboard: state.getIn(['dropdown_menu', 'keyboard']),\n  items: state.getIn(['history', statusId, 'items']),\n  loading: state.getIn(['history', statusId, 'loading']),\n});\n\nconst mapDispatchToProps = (dispatch, { statusId }) => ({\n\n  onOpen (id, onItemClick, dropdownPlacement, keyboard) {\n    dispatch(fetchHistory(statusId));\n    dispatch(openDropdownMenu(id, dropdownPlacement, keyboard));\n  },\n\n  onClose (id) {\n    dispatch(closeDropdownMenu(id));\n  },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(DropdownMenu);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { FormattedMessage, injectIntl } from 'react-intl';\nimport Icon from 'flavours/glitch/components/icon';\nimport DropdownMenu from './containers/dropdown_menu_container';\nimport { connect } from 'react-redux';\nimport { openModal } from 'flavours/glitch/actions/modal';\nimport RelativeTimestamp from 'flavours/glitch/components/relative_timestamp';\nimport InlineAccount from 'flavours/glitch/components/inline_account';\n\nconst mapDispatchToProps = (dispatch, { statusId }) => ({\n\n  onItemClick (index) {\n    dispatch(openModal('COMPARE_HISTORY', { index, statusId }));\n  },\n\n});\n\nexport default @connect(null, mapDispatchToProps)\n@injectIntl\nclass EditedTimestamp extends React.PureComponent {\n\n  static propTypes = {\n    statusId: PropTypes.string.isRequired,\n    timestamp: PropTypes.string.isRequired,\n    intl: PropTypes.object.isRequired,\n    onItemClick: PropTypes.func.isRequired,\n  };\n\n  handleItemClick = (item, i) => {\n    const { onItemClick } = this.props;\n    onItemClick(i);\n  };\n\n  renderHeader = items => {\n    return (\n      <FormattedMessage id='status.edited_x_times' defaultMessage='Edited {count, plural, one {{count} time} other {{count} times}}' values={{ count: items.size - 1 }} />\n    );\n  }\n\n  renderItem = (item, index, { onClick, onKeyPress }) => {\n    const formattedDate = <RelativeTimestamp timestamp={item.get('created_at')} short={false} />;\n    const formattedName = <InlineAccount accountId={item.get('account')} />;\n\n    const label = item.get('original') ? (\n      <FormattedMessage id='status.history.created' defaultMessage='{name} created {date}' values={{ name: formattedName, date: formattedDate }} />\n    ) : (\n      <FormattedMessage id='status.history.edited' defaultMessage='{name} edited {date}' values={{ name: formattedName, date: formattedDate }} />\n    );\n\n    return (\n      <li className='dropdown-menu__item edited-timestamp__history__item' key={item.get('created_at')}>\n        <button data-index={index} onClick={onClick} onKeyPress={onKeyPress}>{label}</button>\n      </li>\n    );\n  }\n\n  render () {\n    const { timestamp, intl, statusId } = this.props;\n\n    return (\n      <DropdownMenu statusId={statusId} renderItem={this.renderItem} scrollable renderHeader={this.renderHeader} onItemClick={this.handleItemClick}>\n        <button className='dropdown-menu__text-button'>\n          <FormattedMessage id='status.edited' defaultMessage='Edited {date}' values={{ date: intl.formatDate(timestamp, { hour12: false, month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }) }} /> <Icon id='caret-down' />\n        </button>\n      </DropdownMenu>\n    );\n  }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport Avatar from 'flavours/glitch/components/avatar';\nimport DisplayName from 'flavours/glitch/components/display_name';\nimport StatusContent from 'flavours/glitch/components/status_content';\nimport MediaGallery from 'flavours/glitch/components/media_gallery';\nimport AttachmentList from 'flavours/glitch/components/attachment_list';\nimport { Link } from 'react-router-dom';\nimport { injectIntl, FormattedDate } from 'react-intl';\nimport Card from './card';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport Video from 'flavours/glitch/features/video';\nimport Audio from 'flavours/glitch/features/audio';\nimport VisibilityIcon from 'flavours/glitch/components/status_visibility_icon';\nimport scheduleIdleTask from '../../ui/util/schedule_idle_task';\nimport classNames from 'classnames';\nimport PollContainer from 'flavours/glitch/containers/poll_container';\nimport Icon from 'flavours/glitch/components/icon';\nimport AnimatedNumber from 'flavours/glitch/components/animated_number';\nimport PictureInPicturePlaceholder from 'flavours/glitch/components/picture_in_picture_placeholder';\nimport EditedTimestamp from 'flavours/glitch/components/edited_timestamp';\n\nexport default @injectIntl\nclass DetailedStatus extends ImmutablePureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object,\n  };\n\n  static propTypes = {\n    status: ImmutablePropTypes.map,\n    settings: ImmutablePropTypes.map.isRequired,\n    onOpenMedia: PropTypes.func.isRequired,\n    onOpenVideo: PropTypes.func.isRequired,\n    onToggleHidden: PropTypes.func,\n    onTranslate: PropTypes.func.isRequired,\n    expanded: PropTypes.bool,\n    measureHeight: PropTypes.bool,\n    onHeightChange: PropTypes.func,\n    domain: PropTypes.string.isRequired,\n    compact: PropTypes.bool,\n    showMedia: PropTypes.bool,\n    usingPiP: PropTypes.bool,\n    onToggleMediaVisibility: PropTypes.func,\n    intl: PropTypes.object.isRequired,\n  };\n\n  state = {\n    height: null,\n  };\n\n  handleAccountClick = (e) => {\n    if (e.button === 0 && !(e.ctrlKey || e.altKey || e.metaKey) && this.context.router) {\n      e.preventDefault();\n      let state = {...this.context.router.history.location.state};\n      state.mastodonBackSteps = (state.mastodonBackSteps || 0) + 1;\n      this.context.router.history.push(`/@${this.props.status.getIn(['account', 'acct'])}`, state);\n    }\n\n    e.stopPropagation();\n  }\n\n  parseClick = (e, destination) => {\n    if (e.button === 0 && !(e.ctrlKey || e.altKey || e.metaKey) && this.context.router) {\n      e.preventDefault();\n      let state = {...this.context.router.history.location.state};\n      state.mastodonBackSteps = (state.mastodonBackSteps || 0) + 1;\n      this.context.router.history.push(destination, state);\n    }\n\n    e.stopPropagation();\n  }\n\n  handleOpenVideo = (options) => {\n    this.props.onOpenVideo(this.props.status.getIn(['media_attachments', 0]), options);\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  handleChildUpdate = () => {\n    this._measureHeight();\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  handleTranslate = () => {\n    const { onTranslate, status } = this.props;\n    onTranslate(status);\n  }\n\n  render () {\n    const status = (this.props.status && this.props.status.get('reblog')) ? this.props.status.get('reblog') : this.props.status;\n    const { expanded, onToggleHidden, settings, usingPiP, intl } = this.props;\n    const outerStyle = { boxSizing: 'border-box' };\n    const { compact } = this.props;\n\n    if (!status) {\n      return null;\n    }\n\n    let applicationLink = '';\n    let reblogLink = '';\n    let reblogIcon = 'retweet';\n    let favouriteLink = '';\n    let edited = '';\n\n    //  Depending on user settings, some media are considered as parts of the\n    //  contents (affected by CW) while other will be displayed outside of the\n    //  CW.\n    let contentMedia = [];\n    let contentMediaIcons = [];\n    let extraMedia = [];\n    let extraMediaIcons = [];\n    let media = contentMedia;\n    let mediaIcons = contentMediaIcons;\n\n    if (settings.getIn(['content_warnings', 'media_outside'])) {\n      media = extraMedia;\n      mediaIcons = extraMediaIcons;\n    }\n\n    if (this.props.measureHeight) {\n      outerStyle.height = `${this.state.height}px`;\n    }\n\n    if (usingPiP) {\n      media.push(<PictureInPicturePlaceholder />);\n      mediaIcons.push('video-camera');\n    } else if (status.get('media_attachments').size > 0) {\n      if (status.get('media_attachments').some(item => item.get('type') === 'unknown')) {\n        media.push(<AttachmentList media={status.get('media_attachments')} />);\n      } else if (status.getIn(['media_attachments', 0, 'type']) === 'audio') {\n        const attachment = status.getIn(['media_attachments', 0]);\n\n        media.push(\n          <Audio\n            src={attachment.get('url')}\n            alt={attachment.get('description')}\n            duration={attachment.getIn(['meta', 'original', 'duration'], 0)}\n            poster={attachment.get('preview_url') || status.getIn(['account', 'avatar_static'])}\n            backgroundColor={attachment.getIn(['meta', 'colors', 'background'])}\n            foregroundColor={attachment.getIn(['meta', 'colors', 'foreground'])}\n            accentColor={attachment.getIn(['meta', 'colors', 'accent'])}\n            sensitive={status.get('sensitive')}\n            visible={this.props.showMedia}\n            blurhash={attachment.get('blurhash')}\n            height={150}\n            onToggleVisibility={this.props.onToggleMediaVisibility}\n          />,\n        );\n        mediaIcons.push('music');\n      } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n        const attachment = status.getIn(['media_attachments', 0]);\n        media.push(\n          <Video\n            preview={attachment.get('preview_url')}\n            frameRate={attachment.getIn(['meta', 'original', 'frame_rate'])}\n            blurhash={attachment.get('blurhash')}\n            src={attachment.get('url')}\n            alt={attachment.get('description')}\n            inline\n            sensitive={status.get('sensitive')}\n            letterbox={settings.getIn(['media', 'letterbox'])}\n            fullwidth={settings.getIn(['media', 'fullwidth'])}\n            preventPlayback={!expanded}\n            onOpenVideo={this.handleOpenVideo}\n            autoplay\n            visible={this.props.showMedia}\n            onToggleVisibility={this.props.onToggleMediaVisibility}\n          />,\n        );\n        mediaIcons.push('video-camera');\n      } else {\n        media.push(\n          <MediaGallery\n            standalone\n            sensitive={status.get('sensitive')}\n            media={status.get('media_attachments')}\n            letterbox={settings.getIn(['media', 'letterbox'])}\n            fullwidth={settings.getIn(['media', 'fullwidth'])}\n            hidden={!expanded}\n            onOpenMedia={this.props.onOpenMedia}\n            visible={this.props.showMedia}\n            onToggleVisibility={this.props.onToggleMediaVisibility}\n          />,\n        );\n        mediaIcons.push('picture-o');\n      }\n    } else if (status.get('card')) {\n      media.push(<Card sensitive={status.get('sensitive')} onOpenMedia={this.props.onOpenMedia} card={status.get('card')} />);\n      mediaIcons.push('link');\n    }\n\n    if (status.get('poll')) {\n      contentMedia.push(<PollContainer pollId={status.get('poll')} />);\n      contentMediaIcons.push('tasks');\n    }\n\n    if (status.get('application')) {\n      applicationLink = <React.Fragment> · <a className='detailed-status__application' href={status.getIn(['application', 'website'])} target='_blank' rel='noopener noreferrer'>{status.getIn(['application', 'name'])}</a></React.Fragment>;\n    }\n\n    const visibilityLink = <React.Fragment> · <VisibilityIcon visibility={status.get('visibility')} /></React.Fragment>;\n\n    if (status.get('visibility') === 'direct') {\n      reblogIcon = 'envelope';\n    } else if (status.get('visibility') === 'private') {\n      reblogIcon = 'lock';\n    }\n\n    if (!['unlisted', 'public'].includes(status.get('visibility'))) {\n      reblogLink = null;\n    } else if (this.context.router) {\n      reblogLink = (\n        <React.Fragment>\n          <React.Fragment> · </React.Fragment>\n          <Link to={`/@${status.getIn(['account', 'acct'])}/${status.get('id')}/reblogs`} className='detailed-status__link'>\n            <Icon id={reblogIcon} />\n            <span className='detailed-status__reblogs'>\n              <AnimatedNumber value={status.get('reblogs_count')} />\n            </span>\n          </Link>\n        </React.Fragment>\n      );\n    } else {\n      reblogLink = (\n        <React.Fragment>\n          <React.Fragment> · </React.Fragment>\n          <a href={`/interact/${status.get('id')}?type=reblog`} className='detailed-status__link' onClick={this.handleModalLink}>\n            <Icon id={reblogIcon} />\n            <span className='detailed-status__reblogs'>\n              <AnimatedNumber value={status.get('reblogs_count')} />\n            </span>\n          </a>\n        </React.Fragment>\n      );\n    }\n\n    if (this.context.router) {\n      favouriteLink = (\n        <Link to={`/@${status.getIn(['account', 'acct'])}/${status.get('id')}/favourites`} className='detailed-status__link'>\n          <Icon id='star' />\n          <span className='detailed-status__favorites'>\n            <AnimatedNumber 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          <Icon id='star' />\n          <span className='detailed-status__favorites'>\n            <AnimatedNumber value={status.get('favourites_count')} />\n          </span>\n        </a>\n      );\n    }\n\n    if (status.get('edited_at')) {\n      edited = (\n        <React.Fragment>\n          <React.Fragment> · </React.Fragment>\n          <EditedTimestamp statusId={status.get('id')} timestamp={status.get('edited_at')} />\n        </React.Fragment>\n      );\n    }\n\n    return (\n      <div style={outerStyle}>\n        <div ref={this.setRef} className={classNames('detailed-status', `detailed-status-${status.get('visibility')}`, { compact })} data-status-by={status.getIn(['account', 'acct'])}>\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\n            status={status}\n            media={contentMedia}\n            extraMedia={extraMedia}\n            mediaIcons={contentMediaIcons}\n            expanded={expanded}\n            collapsed={false}\n            onExpandedToggle={onToggleHidden}\n            onTranslate={this.handleTranslate}\n            parseClick={this.parseClick}\n            onUpdate={this.handleChildUpdate}\n            tagLinks={settings.get('tag_misleading_links')}\n            rewriteMentions={settings.get('rewrite_mentions')}\n            disabled\n          />\n\n          <div className='detailed-status__meta'>\n            <a className='detailed-status__datetime' href={status.get('url')} target='_blank' rel='noopener noreferrer'>\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>{edited}{visibilityLink}{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 'flavours/glitch/components/icon_button';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport DropdownMenuContainer from 'flavours/glitch/containers/dropdown_menu_container';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { me } from 'flavours/glitch/initial_state';\nimport { accountAdminLink, statusAdminLink } from 'flavours/glitch/utils/backend_links';\nimport classNames from 'classnames';\nimport { PERMISSION_MANAGE_USERS } from 'flavours/glitch/permissions';\n\nconst messages = defineMessages({\n  delete: { id: 'status.delete', defaultMessage: 'Delete' },\n  redraft: { id: 'status.redraft', defaultMessage: 'Delete & re-draft' },\n  edit: { id: 'status.edit', defaultMessage: 'Edit' },\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 with original visibility' },\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  bookmark: { id: 'status.bookmark', defaultMessage: 'Bookmark' },\n  more: { id: 'status.more', defaultMessage: 'More' },\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  copy: { id: 'status.copy', defaultMessage: 'Copy link to status' },\n  openOriginalPage: { id: 'account.open_original_page', defaultMessage: 'Open original page' },\n});\n\nexport default @injectIntl\nclass ActionBar extends React.PureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object,\n    identity: 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    onBookmark: PropTypes.func.isRequired,\n    onMute: PropTypes.func,\n    onMuteConversation: PropTypes.func,\n    onBlock: PropTypes.func,\n    onDelete: PropTypes.func.isRequired,\n    onEdit: PropTypes.func.isRequired,\n    onDirect: PropTypes.func.isRequired,\n    onMention: PropTypes.func.isRequired,\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 = (e) => {\n    this.props.onFavourite(this.props.status, e);\n  }\n\n  handleBookmarkClick = (e) => {\n    this.props.onBookmark(this.props.status, e);\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  handleEditClick = () => {\n    this.props.onEdit(this.props.status, this.context.router.history);\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);\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  handleCopy = () => {\n    const url = this.props.status.get('url');\n    navigator.clipboard.writeText(url);\n  }\n\n  render () {\n    const { status, intl } = this.props;\n    const { signedIn, permissions } = this.context.identity;\n\n    const publicStatus       = ['public', 'unlisted'].includes(status.get('visibility'));\n    const pinnableStatus     = ['public', 'unlisted', 'private'].includes(status.get('visibility'));\n    const mutingConversation = status.get('muted');\n    const writtenByMe        = status.getIn(['account', 'id']) === me;\n    const isRemote           = status.getIn(['account', 'username']) !== status.getIn(['account', 'acct']);\n\n    let menu = [];\n\n    if (publicStatus) {\n      if (isRemote) {\n        menu.push({ text: intl.formatMessage(messages.openOriginalPage), href: status.get('url') });\n      }\n\n      menu.push({ text: intl.formatMessage(messages.copy), action: this.handleCopy });\n      menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed });\n      menu.push(null);\n    }\n\n    if (writtenByMe) {\n      if (pinnableStatus) {\n        menu.push({ text: intl.formatMessage(status.get('pinned') ? messages.unpin : messages.pin), action: this.handlePinClick });\n        menu.push(null);\n      }\n\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.edit), action: this.handleEditClick });\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 ((permissions & PERMISSION_MANAGE_USERS) === PERMISSION_MANAGE_USERS && (accountAdminLink || statusAdminLink)) {\n        menu.push(null);\n        if (accountAdminLink !== undefined) {\n          menu.push({\n            text: intl.formatMessage(messages.admin_account, { name: status.getIn(['account', 'username']) }),\n            href: accountAdminLink(status.getIn(['account', 'id'])),\n          });\n        }\n        if (statusAdminLink !== undefined) {\n          menu.push({\n            text: intl.formatMessage(messages.admin_status),\n            href: statusAdminLink(status.getIn(['account', 'id']), status.get('id')),\n          });\n        }\n      }\n    }\n\n    const shareButton = ('share' in navigator) && publicStatus && (\n      <div className='detailed-status__button'><IconButton title={intl.formatMessage(messages.share)} icon='share-alt' onClick={this.handleShare} /></div>\n    );\n\n    const reblogPrivate = status.getIn(['account', 'id']) === me && status.get('visibility') === 'private';\n\n    let reblogTitle;\n    if (status.get('reblogged')) {\n      reblogTitle = intl.formatMessage(messages.cancel_reblog_private);\n    } else if (publicStatus) {\n      reblogTitle = intl.formatMessage(messages.reblog);\n    } else if (reblogPrivate) {\n      reblogTitle = intl.formatMessage(messages.reblog_private);\n    } else {\n      reblogTitle = intl.formatMessage(messages.cannot_reblog);\n    }\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 className={classNames({ reblogPrivate })} disabled={!publicStatus && !reblogPrivate} active={status.get('reblogged')} title={reblogTitle} icon='retweet' 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        <div className='detailed-status__button'><IconButton className='bookmark-icon' disabled={!signedIn} active={status.get('bookmarked')} title={intl.formatMessage(messages.bookmark)} icon='bookmark' onClick={this.handleBookmarkClick} /></div>\n\n        <div className='detailed-status__action-bar-dropdown'>\n          <DropdownMenuContainer size={18} icon='ellipsis-h' items={menu} direction='left' title={intl.formatMessage(messages.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 { createSelector } from 'reselect';\nimport { fetchStatus } from 'flavours/glitch/actions/statuses';\nimport MissingIndicator from 'flavours/glitch/components/missing_indicator';\nimport LoadingIndicator from 'flavours/glitch/components/loading_indicator';\nimport DetailedStatus from './components/detailed_status';\nimport ActionBar from './components/action_bar';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport {\n  favourite,\n  unfavourite,\n  bookmark,\n  unbookmark,\n  reblog,\n  unreblog,\n  pin,\n  unpin,\n} from 'flavours/glitch/actions/interactions';\nimport {\n  replyCompose,\n  mentionCompose,\n  directCompose,\n} from 'flavours/glitch/actions/compose';\nimport { changeLocalSetting } from 'flavours/glitch/actions/local_settings';\nimport {\n  muteStatus,\n  unmuteStatus,\n  deleteStatus,\n  editStatus,\n  hideStatus,\n  revealStatus,\n  translateStatus,\n  undoStatusTranslation,\n} from 'flavours/glitch/actions/statuses';\nimport { initMuteModal } from 'flavours/glitch/actions/mutes';\nimport { initBlockModal } from 'flavours/glitch/actions/blocks';\nimport { initReport } from 'flavours/glitch/actions/reports';\nimport { initBoostModal } from 'flavours/glitch/actions/boosts';\nimport { makeGetStatus } from 'flavours/glitch/selectors';\nimport ScrollContainer from 'flavours/glitch/containers/scroll_container';\nimport ColumnBackButton from 'flavours/glitch/components/column_back_button';\nimport ColumnHeader from '../../components/column_header';\nimport StatusContainer from 'flavours/glitch/containers/status_container';\nimport { openModal } from 'flavours/glitch/actions/modal';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { HotKeys } from 'react-hotkeys';\nimport { boostModal, favouriteModal, deleteModal } from 'flavours/glitch/initial_state';\nimport { attachFullscreenListener, detachFullscreenListener, isFullscreen } from '../ui/util/fullscreen';\nimport { autoUnfoldCW } from 'flavours/glitch/utils/content_warning';\nimport { textForScreenReader, defaultMediaVisibility } from 'flavours/glitch/components/status';\nimport Icon from 'flavours/glitch/components/icon';\nimport { Helmet } from 'react-helmet';\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? You will lose all replies, boosts and favourites to it.' },\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  tootHeading: { id: 'account.posts_with_replies', defaultMessage: 'Posts and replies' },\n});\n\nconst makeMapStateToProps = () => {\n  const getStatus = makeGetStatus();\n\n  const getAncestorsIds = createSelector([\n    (_, { id }) => id,\n    state => state.getIn(['contexts', 'inReplyTos']),\n  ], (statusId, inReplyTos) => {\n    let ancestorsIds = Immutable.List();\n    ancestorsIds = ancestorsIds.withMutations(mutable => {\n      let id = statusId;\n\n      while (id && !mutable.includes(id)) {\n        mutable.unshift(id);\n        id = inReplyTos.get(id);\n      }\n    });\n\n    return ancestorsIds;\n  });\n\n  const getDescendantsIds = createSelector([\n    (_, { id }) => id,\n    state => state.getIn(['contexts', 'replies']),\n    state => state.get('statuses'),\n  ], (statusId, contextReplies, statuses) => {\n    let descendantsIds = [];\n    const ids = [statusId];\n\n    while (ids.length > 0) {\n      let id        = ids.pop();\n      const replies = contextReplies.get(id);\n\n      if (statusId !== id) {\n        descendantsIds.push(id);\n      }\n\n      if (replies) {\n        replies.reverse().forEach(reply => {\n          if (!ids.includes(reply) && !descendantsIds.includes(reply) && statusId !== reply) ids.push(reply);\n        });\n      }\n    }\n\n    let insertAt = descendantsIds.findIndex((id) => statuses.get(id).get('in_reply_to_account_id') !== statuses.get(id).get('account'));\n    if (insertAt !== -1) {\n      descendantsIds.forEach((id, idx) => {\n        if (idx > insertAt && statuses.get(id).get('in_reply_to_account_id') === statuses.get(id).get('account')) {\n          descendantsIds.splice(idx, 1);\n          descendantsIds.splice(insertAt, 0, id);\n          insertAt += 1;\n        }\n      });\n    }\n\n    return Immutable.List(descendantsIds);\n  });\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 = getAncestorsIds(state, { id: status.get('in_reply_to_id') });\n      descendantsIds = getDescendantsIds(state, { id: status.get('id') });\n    }\n\n    return {\n      isLoading: state.getIn(['statuses', props.params.statusId, 'isLoading']),\n      status,\n      ancestorsIds,\n      descendantsIds,\n      settings: state.get('local_settings'),\n      askReplyConfirmation: state.getIn(['local_settings', 'confirm_before_clearing_draft']) && state.getIn(['compose', 'text']).trim().length !== 0,\n      domain: state.getIn(['meta', 'domain']),\n      usingPiP: state.get('picture_in_picture').statusId === props.params.statusId,\n    };\n  };\n\n  return mapStateToProps;\n};\n\nconst truncate = (str, num) => {\n  if (str.length > num) {\n    return str.slice(0, num) + '…';\n  } else {\n    return str;\n  }\n};\n\nconst titleFromStatus = status => {\n  const displayName = status.getIn(['account', 'display_name']);\n  const username = status.getIn(['account', 'username']);\n  const prefix = displayName.trim().length === 0 ? username : displayName;\n  const text = status.get('search_index');\n\n  return `${prefix}: \"${truncate(text, 30)}\"`;\n};\n\nexport default @injectIntl\n@connect(makeMapStateToProps)\nclass Status extends ImmutablePureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object,\n    identity: PropTypes.object,\n  };\n\n  static propTypes = {\n    params: PropTypes.object.isRequired,\n    dispatch: PropTypes.func.isRequired,\n    status: ImmutablePropTypes.map,\n    isLoading: PropTypes.bool,\n    settings: ImmutablePropTypes.map.isRequired,\n    ancestorsIds: ImmutablePropTypes.list,\n    descendantsIds: ImmutablePropTypes.list,\n    intl: PropTypes.object.isRequired,\n    askReplyConfirmation: PropTypes.bool,\n    multiColumn: PropTypes.bool,\n    domain: PropTypes.string.isRequired,\n    usingPiP: PropTypes.bool,\n  };\n\n  state = {\n    fullscreen: false,\n    isExpanded: undefined,\n    threadExpanded: undefined,\n    statusId: undefined,\n    loadedStatusId: undefined,\n    showMedia: undefined,\n    revealBehindCW: undefined,\n  };\n\n  componentDidMount () {\n    attachFullscreenListener(this.onFullScreenChange);\n    this.props.dispatch(fetchStatus(this.props.params.statusId));\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    }\n  }\n\n  static getDerivedStateFromProps(props, state) {\n    let update = {};\n    let updated = false;\n\n    if (props.params.statusId && state.statusId !== props.params.statusId) {\n      props.dispatch(fetchStatus(props.params.statusId));\n      update.threadExpanded = undefined;\n      update.statusId = props.params.statusId;\n      updated = true;\n    }\n\n    const revealBehindCW = props.settings.getIn(['media', 'reveal_behind_cw']);\n    if (revealBehindCW !== state.revealBehindCW) {\n      update.revealBehindCW = revealBehindCW;\n      if (revealBehindCW) update.showMedia = defaultMediaVisibility(props.status, props.settings);\n      updated = true;\n    }\n\n    if (props.status && state.loadedStatusId !== props.status.get('id')) {\n      update.showMedia = defaultMediaVisibility(props.status, props.settings);\n      update.loadedStatusId = props.status.get('id');\n      update.isExpanded = autoUnfoldCW(props.settings, props.status);\n      updated = true;\n    }\n\n    return updated ? update : null;\n  }\n\n  handleToggleHidden = () => {\n    const { status } = this.props;\n\n    if (this.props.settings.getIn(['content_warnings', 'shared_state'])) {\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    } else if (this.props.status.get('spoiler_text')) {\n      this.setExpansion(!this.state.isExpanded);\n    }\n  }\n\n  handleToggleMediaVisibility = () => {\n    this.setState({ showMedia: !this.state.showMedia });\n  }\n\n  handleModalFavourite = (status) => {\n    this.props.dispatch(favourite(status));\n  }\n\n  handleFavouriteClick = (status, e) => {\n    const { dispatch } = this.props;\n    const { signedIn } = this.context.identity;\n\n    if (signedIn) {\n      if (status.get('favourited')) {\n        dispatch(unfavourite(status));\n      } else {\n        if ((e && e.shiftKey) || !favouriteModal) {\n          this.handleModalFavourite(status);\n        } else {\n          dispatch(openModal('FAVOURITE', { status, onFavourite: this.handleModalFavourite }));\n        }\n      }\n    } else {\n      dispatch(openModal('INTERACTION', {\n        type: 'favourite',\n        accountId: status.getIn(['account', 'id']),\n        url: status.get('url'),\n      }));\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    const { askReplyConfirmation, dispatch, intl } = this.props;\n    const { signedIn } = this.context.identity;\n\n    if (signedIn) {\n      if (askReplyConfirmation) {\n        dispatch(openModal('CONFIRM', {\n          message: intl.formatMessage(messages.replyMessage),\n          confirm: intl.formatMessage(messages.replyConfirm),\n          onDoNotAsk: () => dispatch(changeLocalSetting(['confirm_before_clearing_draft'], false)),\n          onConfirm: () => dispatch(replyCompose(status, this.context.router.history)),\n        }));\n      } else {\n        dispatch(replyCompose(status, this.context.router.history));\n      }\n    } else {\n      dispatch(openModal('INTERACTION', {\n        type: 'reply',\n        accountId: status.getIn(['account', 'id']),\n        url: status.get('url'),\n      }));\n    }\n  }\n\n  handleModalReblog = (status, privacy) => {\n    const { dispatch } = this.props;\n\n    if (status.get('reblogged')) {\n      dispatch(unreblog(status));\n    } else {\n      dispatch(reblog(status, privacy));\n    }\n  }\n\n  handleReblogClick = (status, e) => {\n    const { settings, dispatch } = this.props;\n    const { signedIn } = this.context.identity;\n\n    if (signedIn) {\n      if (settings.get('confirm_boost_missing_media_description') && status.get('media_attachments').some(item => !item.get('description')) && !status.get('reblogged')) {\n        dispatch(initBoostModal({ status, onReblog: this.handleModalReblog, missingMediaDescription: true }));\n      } else if ((e && e.shiftKey) || !boostModal) {\n        this.handleModalReblog(status);\n      } else {\n        dispatch(initBoostModal({ status, onReblog: this.handleModalReblog }));\n      }\n    } else {\n      dispatch(openModal('INTERACTION', {\n        type: 'reblog',\n        accountId: status.getIn(['account', 'id']),\n        url: status.get('url'),\n      }));\n    }\n  }\n\n  handleBookmarkClick = (status) => {\n    if (status.get('bookmarked')) {\n      this.props.dispatch(unbookmark(status));\n    } else {\n      this.props.dispatch(bookmark(status));\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  handleEditClick = (status, history) => {\n    this.props.dispatch(editStatus(status.get('id'), history));\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', { statusId: this.props.status.get('id'), media, index }));\n  }\n\n  handleOpenVideo = (media, options) => {\n    this.props.dispatch(openModal('VIDEO', { statusId: this.props.status.get('id'), media, options }));\n  }\n\n  handleHotkeyOpenMedia = e => {\n    const { status } = this.props;\n\n    e.preventDefault();\n\n    if (status.get('media_attachments').size > 0) {\n      if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n        this.handleOpenVideo(status.getIn(['media_attachments', 0]), { startTime: 0 });\n      } else {\n        this.handleOpenMedia(status.get('media_attachments'), 0);\n      }\n    }\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  handleToggleAll = () => {\n    const { status, ancestorsIds, descendantsIds, settings } = this.props;\n    const statusIds = [status.get('id')].concat(ancestorsIds.toJS(), descendantsIds.toJS());\n    let { isExpanded } = this.state;\n\n    if (settings.getIn(['content_warnings', 'shared_state']))\n      isExpanded = !status.get('hidden');\n\n    if (!isExpanded) {\n      this.props.dispatch(revealStatus(statusIds));\n    } else {\n      this.props.dispatch(hideStatus(statusIds));\n    }\n\n    this.setState({ isExpanded: !isExpanded, threadExpanded: !isExpanded });\n  }\n\n  handleTranslate = status => {\n    const { dispatch } = this.props;\n\n    if (status.get('translation')) {\n      dispatch(undoStatusTranslation(status.get('id')));\n    } else {\n      dispatch(translateStatus(status.get('id')));\n    }\n  }\n\n  handleBlockClick = (status) => {\n    const { dispatch } = this.props;\n    const account = status.get('account');\n    dispatch(initBlockModal(account));\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  handleHotkeyToggleSensitive = () => {\n    this.handleToggleMediaVisibility();\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  handleHotkeyBookmark = () => {\n    this.handleBookmarkClick(this.props.status);\n  }\n\n  handleHotkeyMention = e => {\n    e.preventDefault();\n    this.handleMentionClick(this.props.status);\n  }\n\n  handleHotkeyOpenProfile = () => {\n    let state = {...this.context.router.history.location.state};\n    state.mastodonBackSteps = (state.mastodonBackSteps || 0) + 1;\n    this.context.router.history.push(`/@${this.props.status.getIn(['account', 'acct'])}`, state);\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, true);\n    } else {\n      let index = ancestorsIds.indexOf(id);\n\n      if (index === -1) {\n        index = descendantsIds.indexOf(id);\n        this._selectChild(ancestorsIds.size + index, true);\n      } else {\n        this._selectChild(index - 1, true);\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, false);\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, false);\n      } else {\n        this._selectChild(index + 1, false);\n      }\n    }\n  }\n\n  _selectChild (index, align_top) {\n    const container = this.node;\n    const element = container.querySelectorAll('.focusable')[index];\n\n    if (element) {\n      if (align_top && container.scrollTop > element.offsetTop) {\n        element.scrollIntoView(true);\n      } else if (!align_top && container.scrollTop + container.clientHeight < element.offsetTop + element.offsetHeight) {\n        element.scrollIntoView(false);\n      }\n      element.focus();\n    }\n  }\n\n  handleHeaderClick = () => {\n    this.column.scrollTop();\n  }\n\n  renderChildren (list) {\n    return list.map(id => (\n      <StatusContainer\n        key={id}\n        id={id}\n        expanded={this.state.threadExpanded}\n        onMoveUp={this.handleMoveUp}\n        onMoveDown={this.handleMoveDown}\n        contextType='thread'\n      />\n    ));\n  }\n\n  setExpansion = value => {\n    this.setState({ isExpanded: value });\n  }\n\n  setRef = c => {\n    this.node = c;\n  }\n\n  setColumnRef = c => {\n    this.column = c;\n  }\n\n  componentDidUpdate (prevProps) {\n    if (this.props.params.statusId && (this.props.params.statusId !== prevProps.params.statusId || prevProps.ancestorsIds.size < this.props.ancestorsIds.size)) {\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      }\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 { isLoading, status, settings, ancestorsIds, descendantsIds, intl, domain, multiColumn, usingPiP } = this.props;\n    const { fullscreen } = this.state;\n\n    if (isLoading) {\n      return (\n        <Column>\n          <LoadingIndicator />\n        </Column>\n      );\n    }\n\n    if (status === null) {\n      return (\n        <Column>\n          <ColumnBackButton multiColumn={multiColumn} />\n          <MissingIndicator />\n        </Column>\n      );\n    }\n\n    const isExpanded = settings.getIn(['content_warnings', 'shared_state']) ? !status.get('hidden') : this.state.isExpanded;\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 isLocal = status.getIn(['account', 'acct'], '').indexOf('@') === -1;\n    const isIndexable = !status.getIn(['account', 'noindex']);\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      bookmark: this.handleHotkeyBookmark,\n      mention: this.handleHotkeyMention,\n      openProfile: this.handleHotkeyOpenProfile,\n      toggleSpoiler: this.handleToggleHidden,\n      toggleSensitive: this.handleHotkeyToggleSensitive,\n      openMedia: this.handleHotkeyOpenMedia,\n    };\n\n    return (\n      <Column bindToDocument={!multiColumn} ref={this.setColumnRef} label={intl.formatMessage(messages.detailedStatus)}>\n        <ColumnHeader\n          icon='comment'\n          title={intl.formatMessage(messages.tootHeading)}\n          onClick={this.handleHeaderClick}\n          showBackButton\n          multiColumn={multiColumn}\n          extraButton={(\n            <button className='column-header__button' title={intl.formatMessage(!isExpanded ? messages.revealAll : messages.hideAll)} aria-label={intl.formatMessage(!isExpanded ? messages.revealAll : messages.hideAll)} onClick={this.handleToggleAll}><Icon id={!isExpanded ? 'eye-slash' : 'eye'} /></button>\n          )}\n        />\n\n        <ScrollContainer scrollKey='thread'>\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, isExpanded)}>\n                <DetailedStatus\n                  key={`details-${status.get('id')}`}\n                  status={status}\n                  settings={settings}\n                  onOpenVideo={this.handleOpenVideo}\n                  onOpenMedia={this.handleOpenMedia}\n                  expanded={isExpanded}\n                  onToggleHidden={this.handleToggleHidden}\n                  onTranslate={this.handleTranslate}\n                  domain={domain}\n                  showMedia={this.state.showMedia}\n                  onToggleMediaVisibility={this.handleToggleMediaVisibility}\n                  usingPiP={usingPiP}\n                />\n\n                <ActionBar\n                  key={`action-bar-${status.get('id')}`}\n                  status={status}\n                  onReply={this.handleReplyClick}\n                  onFavourite={this.handleFavouriteClick}\n                  onReblog={this.handleReblogClick}\n                  onBookmark={this.handleBookmarkClick}\n                  onDelete={this.handleDeleteClick}\n                  onEdit={this.handleEditClick}\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\n        <Helmet>\n          <title>{titleFromStatus(status)}</title>\n          <meta name='robots' content={(isLocal && isIndexable) ? 'all' : 'noindex'} />\n        </Helmet>\n      </Column>\n    );\n  }\n\n}\n"],"sourceRoot":""}