MastoFE: Bundle 2020-01-20
[akkoma] / priv / static / packs / flavours / glitch / async / status.js.map
index fc3490c0296efece71375de2c432c01ef5892c56..012698efb0affe9caded817f27c1fdb8f6bbf196 100644 (file)
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/flavours/glitch/features/status/components/detailed_status.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/flavours/glitch/features/status/components/action_bar.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/flavours/glitch/components/column_back_button.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/flavours/glitch/features/status/index.js"],"names":["DetailedStatus","height","e","button","ctrlKey","altKey","metaKey","_this","context","router","preventDefault","state","Object","_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__","history","location","mastodonBackSteps","push","props","status","getIn","stopPropagation","destination","media","startTime","onOpenVideo","c","node","_measureHeight","href","target","nodeName","parentNode","window","open","heightJustChanged","_this2","this","measureHeight","scheduleIdleTask","setState","Math","ceil","scrollHeight","onHeightChange","componentDidUpdate","prevProps","prevState","render","get","_this$props","expanded","onToggleHidden","settings","outerStyle","boxSizing","compact","mediaIcon","applicationLink","reblogLink","reblogIcon","favouriteLink","_babel_runtime_helpers_esm_jsx__WEBPACK_IMPORTED_MODULE_0__","flavours_glitch_containers_poll_container__WEBPACK_IMPORTED_MODULE_21__","pollId","size","some","item","flavours_glitch_components_attachment_list__WEBPACK_IMPORTED_MODULE_12__","video","flavours_glitch_features_video__WEBPACK_IMPORTED_MODULE_17__","preview","src","alt","inline","sensitive","letterbox","fullwidth","preventPlayback","handleOpenVideo","autoplay","revealed","undefined","flavours_glitch_components_media_gallery__WEBPACK_IMPORTED_MODULE_11__","standalone","hidden","onOpenMedia","_card__WEBPACK_IMPORTED_MODULE_15__","card","className","rel","react_router_dom__WEBPACK_IMPORTED_MODULE_13__","to","react_intl__WEBPACK_IMPORTED_MODULE_14__","value","onClick","handleModalLink","style","react__WEBPACK_IMPORTED_MODULE_5___default","a","createElement","ref","setRef","classNames","data-status-by","handleAccountClick","flavours_glitch_components_avatar__WEBPACK_IMPORTED_MODULE_8__","account","flavours_glitch_components_display_name__WEBPACK_IMPORTED_MODULE_9__","localDomain","domain","flavours_glitch_components_status_content__WEBPACK_IMPORTED_MODULE_10__","collapsed","onExpandedToggle","parseClick","onUpdate","handleChildUpdate","disabled","Date","hour12","year","month","day","hour","minute","flavours_glitch_components_status_visibility_icon__WEBPACK_IMPORTED_MODULE_18__","visibility","ImmutablePureComponent","PropTypes","object","ImmutablePropTypes","map","isRequired","func","bool","string","messages","defineMessages","delete","id","defaultMessage","redraft","direct","mention","reply","reblog","reblog_private","cannot_reblog","favourite","bookmark","mute","muteConversation","unmuteConversation","block","report","share","pin","unpin","embed","admin_account","admin_status","copy","ActionBar","injectIntl","onReply","onReblog","onFavourite","onBookmark","onDelete","onDirect","onMention","onMute","onMuteConversation","onBlock","onReport","onPin","navigator","text","url","onEmbed","textarea","document","textContent","position","body","appendChild","select","execCommand","removeChild","intl","publicStatus","includes","mutingConversation","menu","formatMessage","action","handleCopy","handleEmbed","me","handlePinClick","handleConversationMuteClick","handleDeleteClick","name","handleMentionClick","handleDirectClick","handleMuteClick","handleBlockClick","handleReport","isStaff","accountAdminLink","statusAdminLink","shareButton","jsx","icon_button","title","icon","handleShare","reblog_disabled","reblog_message","handleReplyClick","active","handleReblogClick","animate","handleFavouriteClick","handleBookmarkClick","dropdown_menu_container","items","direction","ariaLabel","React","PureComponent","ColumnBackButton","event","shiftKey","go","goBack","handleClick","index_es","deleteConfirm","deleteMessage","redraftConfirm","redraftMessage","blockConfirm","revealAll","hideAll","detailedStatus","replyConfirm","replyMessage","blockAndReport","tootHeading","Status","connect","getStatus","makeGetStatus","params","statusId","ancestorsIds","Immutable","List","descendantsIds","withMutations","mutable","unshift","ids","length","shift","replies","reverse","forEach","askReplyConfirmation","trim","fullscreen","isExpanded","threadExpanded","setExpansion","dispatch","unfavourite","favouriteModal","handleModalFavourite","openModal","message","confirm","onDoNotAsk","changeLocalSetting","onConfirm","replyCompose","unreblog","boostModal","handleModalReblog","unbookmark","withRedraft","_this$props2","deleteModal","deleteStatus","directCompose","mentionCompose","index","time","initMuteModal","unmuteStatus","muteStatus","_this$props3","values","blockAccount","secondary","onSecondary","initReport","handleMoveUp","handleMoveDown","objectSpread","_this$props4","_selectChild","indexOf","_this$props5","column","scrollTop","isFullscreen","prevRouterProps","_ref","mastodonModalOpen","componentDidMount","attachFullscreenListener","onFullScreenChange","fetchStatus","_this$props6","element","querySelectorAll","requestAnimationFrame","scrollIntoView","getDerivedStateFromProps","autoUnfoldCW","align_top","container","offsetTop","clientHeight","offsetHeight","focus","renderChildren","list","status_container","onMoveUp","onMoveDown","contextType","_this$props7","componentWillUnmount","detachFullscreenListener","ancestors","descendants","_this$props8","_this$state","column_back_button_ColumnBackButton","missing_indicator","handlers","moveUp","handleHotkeyMoveUp","moveDown","handleHotkeyMoveDown","handleHotkeyReply","handleHotkeyFavourite","boost","handleHotkeyBoost","handleHotkeyBookmark","handleHotkeyMention","openProfile","handleHotkeyOpenProfile","toggleSpoiler","handleExpandedToggle","react_default","setColumnRef","label","column_header","handleHeaderClick","showBackButton","extraButton","aria-label","handleToggleAll","aria-pressed","react_router_scroll_4_es","scrollKey","shouldUpdateScroll","react_hotkeys_index_es","tabIndex","textForScreenReader","detailed_status","handleOpenMedia","action_bar_ActionBar","handlePin"],"mappings":"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","file":"flavours/glitch/async/status.js","sourcesContent":["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 { FormattedDate, FormattedNumber } from 'react-intl';\nimport Card from './card';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport Video from 'flavours/glitch/features/video';\nimport VisibilityIcon from 'flavours/glitch/components/status_visibility_icon';\nimport scheduleIdleTask from 'flavours/glitch/util/schedule_idle_task';\nimport classNames from 'classnames';\nimport PollContainer from 'flavours/glitch/containers/poll_container';\n\nexport default class 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    expanded: PropTypes.bool,\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.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(`/accounts/${this.props.status.getIn(['account', 'id'])}`, 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 = (media, startTime) => {\n    this.props.onOpenVideo(media, startTime);\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  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 } = this.props;\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 mediaIcon       = null;\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('poll')) {\n      media = <PollContainer pollId={status.get('poll')} />;\n      mediaIcon = 'tasks';\n    } else 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        media = (\n          <Video\n            preview={video.get('preview_url')}\n            src={video.get('url')}\n            alt={video.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            revealed={settings.getIn(['media', 'reveal_behind_cw']) && !!status.get('spoiler_text') ? true : undefined}\n          />\n        );\n        mediaIcon = 'video-camera';\n      } else {\n        media = (\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            revealed={settings.getIn(['media', 'reveal_behind_cw']) && !!status.get('spoiler_text') ? true : undefined}\n          />\n        );\n        mediaIcon = 'picture-o';\n      }\n    } else {\n      media = <Card onOpenMedia={this.props.onOpenMedia} card={status.get('card', null)} />;\n      mediaIcon = 'link';\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 })} 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={media}\n            mediaIcon={mediaIcon}\n            expanded={expanded}\n            collapsed={false}\n            onExpandedToggle={onToggleHidden}\n            parseClick={this.parseClick}\n            onUpdate={this.handleChildUpdate}\n            disabled\n          />\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} · <VisibilityIcon visibility={status.get('visibility')} />\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, isStaff } from 'flavours/glitch/util/initial_state';\nimport { accountAdminLink, statusAdminLink } from 'flavours/glitch/util/backend_links';\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  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  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});\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    onBookmark: PropTypes.func.isRequired,\n    onMute: PropTypes.func,\n    onMuteConversation: PropTypes.func,\n    onBlock: PropTypes.func,\n    onDelete: 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  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    const textarea = document.createElement('textarea');\n\n    textarea.textContent    = url;\n    textarea.style.position = 'fixed';\n\n    document.body.appendChild(textarea);\n\n    try {\n      textarea.select();\n      document.execCommand('copy');\n    } catch (e) {\n\n    } finally {\n      document.body.removeChild(textarea);\n    }\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.copy), action: this.handleCopy });\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      }\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    } 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 && (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) && 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' && me !== status.getIn(['account', 'id'])));\n    let reblog_message  = status.get('visibility') === 'private' ? messages.reblog_private : messages.reblog;\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(reblog_message)} 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        <div className='detailed-status__button'><IconButton className='bookmark-icon' 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' ariaLabel='More' />\n        </div>\n      </div>\n    );\n  }\n\n}\n","import React from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport PropTypes from 'prop-types';\n\nexport default class ColumnBackButton extends React.PureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object,\n  };\n\n  handleClick = (event) => {\n    // if history is exhausted, or we would leave mastodon, just go to root.\n    if (window.history.state) {\n      const state = this.context.router.history.location.state;\n      if (event.shiftKey && state && state.mastodonBackSteps) {\n        this.context.router.history.go(-state.mastodonBackSteps);\n      } else {\n        this.context.router.history.goBack();\n      }\n    } else {\n      this.context.router.history.push('/');\n    }\n  }\n\n  render () {\n    return (\n      <button onClick={this.handleClick} className='column-back-button'>\n        <i className='fa fa-fw fa-chevron-left column-back-button__icon' />\n        <FormattedMessage id='column_back_button.label' defaultMessage='Back' />\n      </button>\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 'flavours/glitch/actions/statuses';\nimport MissingIndicator from 'flavours/glitch/components/missing_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 { blockAccount } from 'flavours/glitch/actions/accounts';\nimport { muteStatus, unmuteStatus, deleteStatus } from 'flavours/glitch/actions/statuses';\nimport { initMuteModal } from 'flavours/glitch/actions/mutes';\nimport { initReport } from 'flavours/glitch/actions/reports';\nimport { makeGetStatus } from 'flavours/glitch/selectors';\nimport { ScrollContainer } from 'react-router-scroll-4';\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, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { HotKeys } from 'react-hotkeys';\nimport { boostModal, favouriteModal, deleteModal } from 'flavours/glitch/util/initial_state';\nimport { attachFullscreenListener, detachFullscreenListener, isFullscreen } from 'flavours/glitch/util/fullscreen';\nimport { autoUnfoldCW } from 'flavours/glitch/util/content_warning';\nimport { textForScreenReader } from 'flavours/glitch/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? You will lose all replies, boosts and favourites to it.' },\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  blockAndReport: { id: 'confirmations.block.block_and_report', defaultMessage: 'Block & Report' },\n  tootHeading: { id: 'column.toot', defaultMessage: 'Toots and replies' },\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      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    };\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    settings: ImmutablePropTypes.map.isRequired,\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    isExpanded: undefined,\n    threadExpanded: undefined,\n    statusId: 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    if (state.statusId === props.params.statusId || !props.params.statusId) {\n      return null;\n    }\n\n    props.dispatch(fetchStatus(props.params.statusId));\n\n    return {\n      threadExpanded: undefined,\n      isExpanded: autoUnfoldCW(props.settings, props.status),\n      statusId: props.params.statusId,\n    };\n  }\n\n  handleExpandedToggle = () => {\n    if (this.props.status.get('spoiler_text')) {\n      this.setExpansion(!this.state.isExpanded);\n    }\n  };\n\n  handleModalFavourite = (status) => {\n    this.props.dispatch(favourite(status));\n  }\n\n  handleFavouriteClick = (status, e) => {\n    if (status.get('favourited')) {\n      this.props.dispatch(unfavourite(status));\n    } else {\n      if ((e && e.shiftKey) || !favouriteModal) {\n        this.handleModalFavourite(status);\n      } else {\n        this.props.dispatch(openModal('FAVOURITE', { status, onFavourite: this.handleModalFavourite }));\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    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        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  }\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  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  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  handleToggleAll = () => {\n    const { isExpanded } = this.state;\n    this.setState({ isExpanded: !isExpanded, threadExpanded: !isExpanded });\n  }\n\n  handleBlockClick = (status) => {\n    const { dispatch, intl } = this.props;\n    const account = status.get('account');\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      secondary: intl.formatMessage(messages.blockAndReport),\n      onSecondary: () => {\n        dispatch(blockAccount(account.get('id')));\n        dispatch(initReport(account, status));\n      },\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  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(`/accounts/${this.props.status.getIn(['account', 'id'])}`, 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  shouldUpdateScroll = (prevRouterProps, { location }) => {\n    if ((((prevRouterProps || {}).location || {}).state || {}).mastodonModalOpen) return false;\n    return !(location.state && location.state.mastodonModalOpen);\n  }\n\n  render () {\n    let ancestors, descendants;\n    const { setExpansion } = this;\n    const { status, settings, ancestorsIds, descendantsIds, intl, domain } = this.props;\n    const { fullscreen, isExpanded } = 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      bookmark: this.handleHotkeyBookmark,\n      mention: this.handleHotkeyMention,\n      openProfile: this.handleHotkeyOpenProfile,\n      toggleSpoiler: this.handleExpandedToggle,\n    };\n\n    return (\n      <Column 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          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} aria-pressed={!isExpanded ? 'false' : 'true'}><i className={`fa fa-${!isExpanded ? 'eye-slash' : 'eye'}`} /></button>\n          )}\n        />\n\n        <ScrollContainer scrollKey='thread' shouldUpdateScroll={this.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                  settings={settings}\n                  onOpenVideo={this.handleOpenVideo}\n                  onOpenMedia={this.handleOpenMedia}\n                  expanded={isExpanded}\n                  onToggleHidden={this.handleExpandedToggle}\n                  domain={domain}\n                />\n\n                <ActionBar\n                  status={status}\n                  onReply={this.handleReplyClick}\n                  onFavourite={this.handleFavouriteClick}\n                  onReblog={this.handleReblogClick}\n                  onBookmark={this.handleBookmarkClick}\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/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/status/components/detailed_status.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/status/components/action_bar.js","webpack:///app/javascript/tank/sources/git/git.pleroma.social/pleroma/mastofe/app/javascript/flavours/glitch/features/status/index.js"],"names":["DetailedStatus","height","e","button","ctrlKey","altKey","metaKey","context","router","preventDefault","state","history","location","mastodonBackSteps","push","props","status","getIn","stopPropagation","destination","media","startTime","onOpenVideo","c","node","_measureHeight","href","target","nodeName","parentNode","window","open","heightJustChanged","this","measureHeight","scheduleIdleTask","setState","Math","ceil","scrollHeight","onHeightChange","componentDidUpdate","prevProps","prevState","render","get","expanded","onToggleHidden","settings","outerStyle","boxSizing","compact","mediaIcon","applicationLink","reblogLink","reblogIcon","favouriteLink","pollId","size","some","item","attachment","src","alt","duration","preload","preview","blurhash","inline","sensitive","letterbox","fullwidth","preventPlayback","handleOpenVideo","autoplay","visible","showMedia","onToggleVisibility","onToggleMediaVisibility","standalone","hidden","onOpenMedia","card","className","rel","id","to","value","onClick","handleModalLink","style","ref","setRef","classNames","data-status-by","handleAccountClick","account","localDomain","domain","collapsed","onExpandedToggle","parseClick","onUpdate","handleChildUpdate","tagLinks","rewriteMentions","disabled","Date","hour12","year","month","day","hour","minute","visibility","ImmutablePureComponent","PropTypes","object","ImmutablePropTypes","map","isRequired","func","bool","string","messages","defineMessages","delete","redraft","direct","mention","reply","reblog","reblog_private","cannot_reblog","favourite","bookmark","mute","muteConversation","unmuteConversation","block","report","share","pin","unpin","embed","admin_account","admin_status","copy","ActionBar","injectIntl","onReply","onReblog","onFavourite","onBookmark","onDelete","onDirect","onMention","onMute","onMuteConversation","onBlock","onReport","onPin","navigator","text","url","onEmbed","textarea","document","createElement","textContent","position","body","appendChild","select","execCommand","removeChild","intl","publicStatus","includes","mutingConversation","menu","formatMessage","action","handleCopy","handleEmbed","me","handlePinClick","handleConversationMuteClick","handleDeleteClick","name","handleMentionClick","handleDirectClick","handleMuteClick","handleBlockClick","handleReport","isStaff","accountAdminLink","statusAdminLink","undefined","shareButton","title","icon","handleShare","reblog_disabled","reblog_message","handleReplyClick","active","handleReblogClick","animate","handleFavouriteClick","handleBookmarkClick","items","direction","ariaLabel","React","PureComponent","deleteConfirm","deleteMessage","redraftConfirm","redraftMessage","revealAll","hideAll","detailedStatus","replyConfirm","replyMessage","tootHeading","Status","connect","getStatus","makeGetStatus","getAncestorsIds","createSelector","_","statusId","inReplyTos","ancestorsIds","Immutable","List","withMutations","mutable","unshift","getDescendantsIds","contextReplies","statuses","descendantsIds","ids","length","shift","replies","reverse","forEach","insertAt","findIndex","idx","splice","params","askReplyConfirmation","trim","fullscreen","isExpanded","threadExpanded","loadedStatusId","revealBehindCW","setExpansion","dispatch","unfavourite","shiftKey","favouriteModal","handleModalFavourite","openModal","message","confirm","onDoNotAsk","changeLocalSetting","onConfirm","replyCompose","unreblog","handleModalReblog","missingMediaDescription","boostModal","unbookmark","withRedraft","deleteModal","deleteStatus","directCompose","mentionCompose","index","time","handleOpenMedia","initMuteModal","unmuteStatus","muteStatus","initBlockModal","initReport","handleToggleMediaVisibility","handleMoveUp","handleMoveDown","_selectChild","indexOf","column","scrollTop","isFullscreen","prevRouterProps","mastodonModalOpen","componentDidMount","attachFullscreenListener","onFullScreenChange","fetchStatus","element","querySelectorAll","requestAnimationFrame","scrollIntoView","getDerivedStateFromProps","update","updated","defaultMediaVisibility","autoUnfoldCW","align_top","container","offsetTop","clientHeight","offsetHeight","focus","renderChildren","list","onMoveUp","onMoveDown","contextType","componentWillUnmount","detachFullscreenListener","ancestors","descendants","multiColumn","handlers","moveUp","handleHotkeyMoveUp","moveDown","handleHotkeyMoveDown","handleHotkeyReply","handleHotkeyFavourite","boost","handleHotkeyBoost","handleHotkeyBookmark","handleHotkeyMention","openProfile","handleHotkeyOpenProfile","toggleSpoiler","handleExpandedToggle","toggleSensitive","handleHotkeyToggleSensitive","openMedia","handleHotkeyOpenMedia","bindToDocument","setColumnRef","label","handleHeaderClick","showBackButton","extraButton","aria-label","handleToggleAll","aria-pressed","scrollKey","shouldUpdateScroll","tabIndex","textForScreenReader","handlePin"],"mappings":"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","file":"flavours/glitch/async/status.js","sourcesContent":["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 { FormattedDate, FormattedNumber } 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 'flavours/glitch/util/schedule_idle_task';\nimport classNames from 'classnames';\nimport PollContainer from 'flavours/glitch/containers/poll_container';\nimport Icon from 'flavours/glitch/components/icon';\n\nexport default class 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    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    onToggleMediaVisibility: PropTypes.func,\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(`/accounts/${this.props.status.getIn(['account', 'id'])}`, 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 = (media, startTime) => {\n    this.props.onOpenVideo(media, startTime);\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  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 } = this.props;\n    const outerStyle = { boxSizing: 'border-box' };\n    const { compact } = this.props;\n\n    if (!status) {\n      return null;\n    }\n\n    let media           = null;\n    let mediaIcon       = null;\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('poll')) {\n      media = <PollContainer pollId={status.get('poll')} />;\n      mediaIcon = 'tasks';\n    } else 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']) === 'audio') {\n        const attachment = status.getIn(['media_attachments', 0]);\n\n        media = (\n          <Audio\n            src={attachment.get('url')}\n            alt={attachment.get('description')}\n            duration={attachment.getIn(['meta', 'original', 'duration'], 0)}\n            height={110}\n            preload\n          />\n        );\n        mediaIcon = 'music';\n      } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n        const attachment = status.getIn(['media_attachments', 0]);\n        media = (\n          <Video\n            preview={attachment.get('preview_url')}\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        mediaIcon = 'video-camera';\n      } else {\n        media = (\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        mediaIcon = 'picture-o';\n      }\n    } else if (status.get('card')) {\n      media = <Card onOpenMedia={this.props.onOpenMedia} card={status.get('card')} />;\n      mediaIcon = 'link';\n    }\n\n    if (status.get('application')) {\n      applicationLink = <span> · <a className='detailed-status__application' href={status.getIn(['application', 'website'])} target='_blank' rel='noopener noreferrer'>{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 = <Icon id={reblogIcon} />;\n    } else if (this.context.router) {\n      reblogLink = (\n        <Link to={`/statuses/${status.get('id')}/reblogs`} className='detailed-status__link'>\n          <Icon id={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          <Icon id={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          <Icon id='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          <Icon id='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 })} 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={media}\n            mediaIcon={mediaIcon}\n            expanded={expanded}\n            collapsed={false}\n            onExpandedToggle={onToggleHidden}\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>{applicationLink} · {reblogLink} · {favouriteLink} · <VisibilityIcon visibility={status.get('visibility')} />\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, isStaff } from 'flavours/glitch/util/initial_state';\nimport { accountAdminLink, statusAdminLink } from 'flavours/glitch/util/backend_links';\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  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  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});\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    onBookmark: PropTypes.func.isRequired,\n    onMute: PropTypes.func,\n    onMuteConversation: PropTypes.func,\n    onBlock: PropTypes.func,\n    onDelete: 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  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    const textarea = document.createElement('textarea');\n\n    textarea.textContent    = url;\n    textarea.style.position = 'fixed';\n\n    document.body.appendChild(textarea);\n\n    try {\n      textarea.select();\n      document.execCommand('copy');\n    } catch (e) {\n\n    } finally {\n      document.body.removeChild(textarea);\n    }\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.copy), action: this.handleCopy });\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      }\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    } 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 && (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) && 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' && me !== status.getIn(['account', 'id'])));\n    let reblog_message  = status.get('visibility') === 'private' ? messages.reblog_private : messages.reblog;\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(reblog_message)} 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        <div className='detailed-status__button'><IconButton className='bookmark-icon' 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' ariaLabel='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 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 { muteStatus, unmuteStatus, deleteStatus } 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 { makeGetStatus } from 'flavours/glitch/selectors';\nimport { ScrollContainer } from 'react-router-scroll-4';\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/util/initial_state';\nimport { attachFullscreenListener, detachFullscreenListener, isFullscreen } from 'flavours/glitch/util/fullscreen';\nimport { autoUnfoldCW } from 'flavours/glitch/util/content_warning';\nimport { textForScreenReader, defaultMediaVisibility } from 'flavours/glitch/components/status';\nimport Icon from 'flavours/glitch/components/icon';\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: 'column.toot', defaultMessage: 'Toots 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) {\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.shift();\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          ids.unshift(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      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    };\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    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  };\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  handleExpandedToggle = () => {\n    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    if (status.get('favourited')) {\n      this.props.dispatch(unfavourite(status));\n    } else {\n      if ((e && e.shiftKey) || !favouriteModal) {\n        this.handleModalFavourite(status);\n      } else {\n        this.props.dispatch(openModal('FAVOURITE', { status, onFavourite: this.handleModalFavourite }));\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    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        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  }\n\n  handleModalReblog = (status) => {\n    const { dispatch } = this.props;\n\n    if (status.get('reblogged')) {\n      dispatch(unreblog(status));\n    } else {\n      dispatch(reblog(status));\n    }\n  }\n\n  handleReblogClick = (status, e) => {\n    const { settings, dispatch } = this.props;\n\n    if (settings.get('confirm_boost_missing_media_description') && status.get('media_attachments').some(item => !item.get('description')) && !status.get('reblogged')) {\n      dispatch(openModal('BOOST', { status, onReblog: this.handleModalReblog, missingMediaDescription: true }));\n    } else if ((e && e.shiftKey) || !boostModal) {\n      this.handleModalReblog(status);\n    } else {\n      dispatch(openModal('BOOST', { status, onReblog: this.handleModalReblog }));\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  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  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']) === 'audio') {\n        // TODO: toggle play/paused?\n      } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n        this.handleOpenVideo(status.getIn(['media_attachments', 0]), 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 { isExpanded } = this.state;\n    this.setState({ isExpanded: !isExpanded, threadExpanded: !isExpanded });\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(`/accounts/${this.props.status.getIn(['account', 'id'])}`, 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  shouldUpdateScroll = (prevRouterProps, { location }) => {\n    if ((((prevRouterProps || {}).location || {}).state || {}).mastodonModalOpen) return false;\n    return !(location.state && location.state.mastodonModalOpen);\n  }\n\n  render () {\n    let ancestors, descendants;\n    const { setExpansion } = this;\n    const { status, settings, ancestorsIds, descendantsIds, intl, domain, multiColumn } = this.props;\n    const { fullscreen, isExpanded } = this.state;\n\n    if (status === null) {\n      return (\n        <Column>\n          <ColumnBackButton multiColumn={multiColumn} />\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      bookmark: this.handleHotkeyBookmark,\n      mention: this.handleHotkeyMention,\n      openProfile: this.handleHotkeyOpenProfile,\n      toggleSpoiler: this.handleExpandedToggle,\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} aria-pressed={!isExpanded ? 'false' : 'true'}><Icon id={status.get('hidden') ? 'eye-slash' : 'eye'} /></button>\n          )}\n        />\n\n        <ScrollContainer scrollKey='thread' shouldUpdateScroll={this.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                  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.handleExpandedToggle}\n                  domain={domain}\n                  showMedia={this.state.showMedia}\n                  onToggleMediaVisibility={this.handleToggleMediaVisibility}\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                  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