{"version":3,"sources":["webpack:///./app/javascript/mastodon/features/status/components/action_bar.jsx","webpack:///./app/javascript/mastodon/components/edited_timestamp/containers/dropdown_menu_container.js","webpack:///./app/javascript/mastodon/components/edited_timestamp/index.jsx","webpack:///./app/javascript/mastodon/features/status/components/detailed_status.jsx","webpack:///./app/javascript/mastodon/features/status/index.jsx"],"names":["messages","defineMessages","delete","id","defaultMessage","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","admin_domain","copy","blockDomain","unblockDomain","unmute","unblock","openOriginalPage","ActionBar","PureComponent","constructor","arguments","handleReplyClick","this","props","onReply","status","handleReblogClick","e","onReblog","handleFavouriteClick","onFavourite","handleBookmarkClick","onBookmark","handleDeleteClick","onDelete","context","router","history","handleRedraftClick","handleEditClick","onEdit","handleDirectClick","onDirect","get","handleMentionClick","onMention","handleMuteClick","relationship","onMute","onUnmute","account","handleBlockClick","onBlock","onUnblock","handleBlockDomain","onBlockDomain","split","handleUnblockDomain","onUnblockDomain","handleConversationMuteClick","onMuteConversation","handleReport","onReport","handlePinClick","onPin","handleShare","navigator","url","handleEmbed","onEmbed","handleCopy","clipboard","writeText","render","intl","signedIn","permissions","identity","publicStatus","includes","pinnableStatus","mutingConversation","writtenByMe","getIn","me","isRemote","replyIcon","menu","push","text","formatMessage","href","action","dangerous","name","domain","PERMISSION_MANAGE_USERS","PERMISSION_MANAGE_FEDERATION","reblogPrivate","reblogTitle","_jsx","className","IconButton","title","icon","onClick","classNames","disabled","active","animate","DropdownMenuContainer","size","items","direction","contextTypes","PropTypes","object","connect","mapStateToProps","state","_ref","injectIntl","statusId","openDropdownId","openedViaKeyboard","loading","mapDispatchToProps","dispatch","_ref2","onOpen","onItemClick","keyboard","fetchHistory","openDropdownMenu","onClose","closeDropdownMenu","DropdownMenu","EditedTimestamp","handleItemClick","item","i","renderHeader","FormattedMessage","values","count","renderItem","index","onKeyPress","formattedDate","RelativeTimestamp","timestamp","short","formattedName","InlineAccount","accountId","label","date","scrollable","formatDate","hour12","month","day","hour","minute","Icon","openModal","modalType","modalProps","public_short","unlisted_short","private_short","direct_short","DetailedStatus","ImmutablePureComponent","height","handleAccountClick","button","ctrlKey","metaKey","preventDefault","stopPropagation","handleOpenVideo","options","onOpenVideo","handleExpandedToggle","onToggleHidden","setRef","c","node","_measureHeight","handleModalLink","target","nodeName","parentNode","window","open","handleTranslate","onTranslate","heightJustChanged","measureHeight","scheduleIdleTask","setState","Math","ceil","scrollHeight","onHeightChange","componentDidUpdate","prevProps","prevState","_properStatus","getAttachmentAspectRatio","attachments","outerStyle","boxSizing","compact","pictureInPicture","media","applicationLink","reblogLink","reblogIcon","favouriteLink","edited","language","PictureInPicturePlaceholder","aspectRatio","attachment","description","Audio","src","alt","lang","duration","poster","backgroundColor","foregroundColor","accentColor","sensitive","visible","showMedia","blurhash","onToggleVisibility","onToggleMediaVisibility","Video","preview","frameRate","width","MediaGallery","standalone","onOpenMedia","length","Card","card","_jsxs","_Fragment","children","rel","visibilityIcon","visibilityLink","Link","to","AnimatedNumber","value","statusContentProps","hashtagBar","getHashtagBarForStatus","expanded","style","ref","fixedWidth","Avatar","DisplayName","localDomain","_jsx2","StatusContent","onExpandedToggle","FormattedDate","Date","year","propTypes","ImmutablePropTypes","map","func","isRequired","bool","string","contains","inUse","available","deleteConfirm","deleteMessage","redraftConfirm","redraftMessage","revealAll","hideAll","statusTitleWithAttachments","detailedStatus","replyConfirm","replyMessage","blockDomainConfirm","titleFromStatus","displayName","username","user","trim","attachmentCount","truncate","str","num","arr","Array","from","slice","join","Status","_this","fullscreen","defaultMediaVisibility","loadedStatusId","undefined","handleToggleMediaVisibility","unfavourite","type","handlePin","askReplyConfirmation","message","confirm","onConfirm","replyCompose","handleModalReblog","privacy","unreblog","shiftKey","boostModal","initBoostModal","unbookmark","withRedraft","deleteModal","deleteStatus","editStatus","directCompose","mentionCompose","handleOpenMedia","handleHotkeyOpenMedia","startTime","initMuteModal","unmuteStatus","muteStatus","handleToggleHidden","revealStatus","hideStatus","handleToggleAll","ancestorsIds","descendantsIds","statusIds","concat","toJS","undoStatusTranslation","translateStatus","initBlockModal","initReport","handleUnmuteClick","unmuteAccount","handleUnblockClick","unblockAccount","handleBlockDomainClick","handleUnblockDomainClick","handleHotkeyMoveUp","handleMoveUp","handleHotkeyMoveDown","handleMoveDown","handleHotkeyReply","handleHotkeyFavourite","handleHotkeyBoost","handleHotkeyMention","handleHotkeyOpenProfile","handleHotkeyToggleHidden","handleHotkeyToggleSensitive","_selectChild","indexOf","onFullScreenChange","isFullscreen","shouldUpdateScroll","prevRouterProps","_ref3","_location$state","_prevRouterProps$loca","_this$node","location","mastodonModalKey","child","querySelector","offsetTop","UNSAFE_componentWillMount","fetchStatus","params","componentDidMount","attachFullscreenListener","_scrollStatusIntoView","UNSAFE_componentWillReceiveProps","nextProps","align_top","container","element","querySelectorAll","scrollTop","scrollIntoView","clientHeight","offsetHeight","focus","renderChildren","list","ancestors","StatusContainer","onMoveUp","onMoveDown","contextType","previousId","nextId","rootId","multiColumn","requestAnimationFrame","_this$node2","_document$querySelect","offset","document","getBoundingClientRect","bottom","scrollingElement","body","scrollBy","_prevProps$status","componentWillUnmount","detachFullscreenListener","descendants","isLoading","Column","LoadingIndicator","BundleColumnError","errorType","isLocal","isIndexable","handlers","moveUp","moveDown","boost","openProfile","toggleHidden","toggleSensitive","openMedia","bindToDocument","ColumnHeader","showBackButton","extraButton","ScrollContainer","scrollKey","HotKeys","tabIndex","textForScreenReader","Helmet","content","makeMapStateToProps","getStatus","makeGetStatus","getPictureInPicture","makeGetPictureInPicture","getAncestorsIds","createSelector","_","inReplyTos","Immutable","List","withMutations","mutable","unshift","getDescendantsIds","contextReplies","statuses","ids","pop","replies","reverse","forEach","insertAt","findIndex","idx","splice"],"mappings":"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","file":"js/features/status-4b4ff74b3e8b02895a67.chunk.js","sourcesContent":["import PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { defineMessages, injectIntl } from 'react-intl';\n\nimport classNames from 'classnames';\n\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { connect } from 'react-redux';\n\nimport { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_FEDERATION } from 'mastodon/permissions';\n\nimport { IconButton } from '../../../components/icon_button';\nimport DropdownMenuContainer from '../../../containers/dropdown_menu_container';\nimport { me } from '../../../initial_state';\n\nconst messages = defineMessages({\n delete: { id: 'status.delete', defaultMessage: 'Delete' },\n redraft: { id: 'status.redraft', defaultMessage: 'Delete & re-draft' },\n edit: { id: 'status.edit', defaultMessage: 'Edit' },\n direct: { id: 'status.direct', defaultMessage: 'Privately mention @{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: 'Favorite' },\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 post in the moderation interface' },\n admin_domain: { id: 'status.admin_domain', defaultMessage: 'Open moderation interface for {domain}' },\n copy: { id: 'status.copy', defaultMessage: 'Copy link to post' },\n blockDomain: { id: 'account.block_domain', defaultMessage: 'Block domain {domain}' },\n unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unblock domain {domain}' },\n unmute: { id: 'account.unmute', defaultMessage: 'Unmute @{name}' },\n unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' },\n openOriginalPage: { id: 'account.open_original_page', defaultMessage: 'Open original page' },\n});\n\nconst mapStateToProps = (state, { status }) => ({\n relationship: state.getIn(['relationships', status.getIn(['account', 'id'])]),\n});\n\nclass ActionBar extends PureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n identity: PropTypes.object,\n };\n\n static propTypes = {\n status: ImmutablePropTypes.map.isRequired,\n relationship: ImmutablePropTypes.map,\n onReply: PropTypes.func.isRequired,\n onReblog: PropTypes.func.isRequired,\n onFavourite: PropTypes.func.isRequired,\n onBookmark: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n onEdit: PropTypes.func.isRequired,\n onDirect: PropTypes.func.isRequired,\n onMention: PropTypes.func.isRequired,\n onMute: PropTypes.func,\n onUnmute: PropTypes.func,\n onBlock: PropTypes.func,\n onUnblock: PropTypes.func,\n onBlockDomain: PropTypes.func,\n onUnblockDomain: PropTypes.func,\n onMuteConversation: PropTypes.func,\n onReport: PropTypes.func,\n onPin: PropTypes.func,\n onEmbed: PropTypes.func,\n intl: PropTypes.object.isRequired,\n };\n\n handleReplyClick = () => {\n this.props.onReply(this.props.status);\n };\n\n handleReblogClick = (e) => {\n this.props.onReblog(this.props.status, e);\n };\n\n handleFavouriteClick = () => {\n this.props.onFavourite(this.props.status);\n };\n\n 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 const { status, relationship, onMute, onUnmute } = this.props;\n const account = status.get('account');\n\n if (relationship && relationship.get('muting')) {\n onUnmute(account);\n } else {\n onMute(account);\n }\n };\n\n handleBlockClick = () => {\n const { status, relationship, onBlock, onUnblock } = this.props;\n const account = status.get('account');\n\n if (relationship && relationship.get('blocking')) {\n onUnblock(account);\n } else {\n onBlock(status);\n }\n };\n\n handleBlockDomain = () => {\n const { status, onBlockDomain } = this.props;\n const account = status.get('account');\n\n onBlockDomain(account.get('acct').split('@')[1]);\n };\n\n handleUnblockDomain = () => {\n const { status, onUnblockDomain } = this.props;\n const account = status.get('account');\n\n onUnblockDomain(account.get('acct').split('@')[1]);\n };\n\n handleConversationMuteClick = () => {\n this.props.onMuteConversation(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 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, relationship, 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 account = status.get('account');\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 && 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\n if (publicStatus && 'share' in navigator) {\n menu.push({ text: intl.formatMessage(messages.share), action: this.handleShare });\n }\n\n if (publicStatus && (signedIn || !isRemote)) {\n menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed });\n }\n\n if (signedIn) {\n menu.push(null);\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, dangerous: true });\n menu.push({ text: intl.formatMessage(messages.redraft), action: this.handleRedraftClick, dangerous: true });\n } else {\n menu.push({ text: intl.formatMessage(messages.mention, { name: status.getIn(['account', 'username']) }), action: this.handleMentionClick });\n menu.push(null);\n\n if (relationship && relationship.get('muting')) {\n menu.push({ text: intl.formatMessage(messages.unmute, { name: account.get('username') }), action: this.handleMuteClick });\n } else {\n menu.push({ text: intl.formatMessage(messages.mute, { name: account.get('username') }), action: this.handleMuteClick, dangerous: true });\n }\n\n if (relationship && relationship.get('blocking')) {\n menu.push({ text: intl.formatMessage(messages.unblock, { name: account.get('username') }), action: this.handleBlockClick });\n } else {\n menu.push({ text: intl.formatMessage(messages.block, { name: account.get('username') }), action: this.handleBlockClick, dangerous: true });\n }\n\n menu.push({ text: intl.formatMessage(messages.report, { name: status.getIn(['account', 'username']) }), action: this.handleReport, dangerous: true });\n\n if (account.get('acct') !== account.get('username')) {\n const domain = account.get('acct').split('@')[1];\n\n menu.push(null);\n\n if (relationship && relationship.get('domain_blocking')) {\n menu.push({ text: intl.formatMessage(messages.unblockDomain, { domain }), action: this.handleUnblockDomain });\n } else {\n menu.push({ text: intl.formatMessage(messages.blockDomain, { domain }), action: this.handleBlockDomain, dangerous: true });\n }\n }\n\n if ((permissions & PERMISSION_MANAGE_USERS) === PERMISSION_MANAGE_USERS || (isRemote && (permissions & PERMISSION_MANAGE_FEDERATION) === PERMISSION_MANAGE_FEDERATION)) {\n menu.push(null);\n if ((permissions & PERMISSION_MANAGE_USERS) === PERMISSION_MANAGE_USERS) {\n menu.push({ text: intl.formatMessage(messages.admin_account, { name: status.getIn(['account', 'username']) }), href: `/admin/accounts/${status.getIn(['account', 'id'])}` });\n menu.push({ text: intl.formatMessage(messages.admin_status), href: `/admin/accounts/${status.getIn(['account', 'id'])}/statuses/${status.get('id')}` });\n }\n if (isRemote && (permissions & PERMISSION_MANAGE_FEDERATION) === PERMISSION_MANAGE_FEDERATION) {\n const domain = account.get('acct').split('@')[1];\n menu.push({ text: intl.formatMessage(messages.admin_domain, { domain: domain }), href: `/admin/instances/${domain}` });\n }\n }\n }\n }\n\n let replyIcon;\n if (status.get('in_reply_to_id', null) === null) {\n replyIcon = 'reply';\n } else {\n replyIcon = 'reply-all';\n }\n\n 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
\n
\n
\n
\n
\n\n
\n \n
\n
\n );\n }\n\n}\n\nexport default connect(mapStateToProps)(injectIntl(ActionBar));\n","import { connect } from 'react-redux';\n\nimport { openDropdownMenu, closeDropdownMenu } from 'mastodon/actions/dropdown_menu';\nimport { fetchHistory } from 'mastodon/actions/history';\nimport DropdownMenu from 'mastodon/components/dropdown_menu';\n\nconst mapStateToProps = (state, { statusId }) => ({\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, keyboard) {\n dispatch(fetchHistory(statusId));\n dispatch(openDropdownMenu(id, keyboard));\n },\n\n onClose (id) {\n dispatch(closeDropdownMenu(id));\n },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(DropdownMenu);\n","import PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { FormattedMessage, injectIntl } from 'react-intl';\n\nimport { connect } from 'react-redux';\n\nimport { openModal } from 'mastodon/actions/modal';\nimport { Icon } from 'mastodon/components/icon';\nimport InlineAccount from 'mastodon/components/inline_account';\nimport { RelativeTimestamp } from 'mastodon/components/relative_timestamp';\n\nimport DropdownMenu from './containers/dropdown_menu_container';\n\nconst mapDispatchToProps = (dispatch, { statusId }) => ({\n\n onItemClick (index) {\n dispatch(openModal({\n modalType: 'COMPARE_HISTORY',\n modalProps: { index, statusId },\n }));\n },\n\n});\n\nclass EditedTimestamp extends 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 \n );\n };\n\n renderItem = (item, index, { onClick, onKeyPress }) => {\n const formattedDate = ;\n const formattedName = ;\n\n const label = item.get('original') ? (\n \n ) : (\n \n );\n\n return (\n
  • \n \n
  • \n );\n };\n\n render () {\n const { timestamp, intl, statusId } = this.props;\n\n return (\n \n \n \n );\n }\n\n}\n\nexport default connect(null, mapDispatchToProps)(injectIntl(EditedTimestamp));\n","import PropTypes from 'prop-types';\n\nimport { injectIntl, defineMessages, FormattedDate, FormattedMessage } from 'react-intl';\n\nimport classNames from 'classnames';\nimport { Link } from 'react-router-dom';\n\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nimport { AnimatedNumber } from 'mastodon/components/animated_number';\nimport EditedTimestamp from 'mastodon/components/edited_timestamp';\nimport { getHashtagBarForStatus } from 'mastodon/components/hashtag_bar';\nimport { Icon } from 'mastodon/components/icon';\nimport PictureInPicturePlaceholder from 'mastodon/components/picture_in_picture_placeholder';\n\nimport { Avatar } from '../../../components/avatar';\nimport { DisplayName } from '../../../components/display_name';\nimport MediaGallery from '../../../components/media_gallery';\nimport StatusContent from '../../../components/status_content';\nimport Audio from '../../audio';\nimport scheduleIdleTask from '../../ui/util/schedule_idle_task';\nimport Video from '../../video';\n\nimport Card from './card';\n\nconst messages = defineMessages({\n public_short: { id: 'privacy.public.short', defaultMessage: 'Public' },\n unlisted_short: { id: 'privacy.unlisted.short', defaultMessage: 'Unlisted' },\n private_short: { id: 'privacy.private.short', defaultMessage: 'Followers only' },\n direct_short: { id: 'privacy.direct.short', defaultMessage: 'Mentioned people only' },\n});\n\nclass DetailedStatus extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n status: ImmutablePropTypes.map,\n onOpenMedia: PropTypes.func.isRequired,\n onOpenVideo: PropTypes.func.isRequired,\n onToggleHidden: PropTypes.func.isRequired,\n onTranslate: PropTypes.func.isRequired,\n measureHeight: PropTypes.bool,\n onHeightChange: PropTypes.func,\n domain: PropTypes.string.isRequired,\n compact: PropTypes.bool,\n showMedia: PropTypes.bool,\n pictureInPicture: ImmutablePropTypes.contains({\n inUse: PropTypes.bool,\n available: PropTypes.bool,\n }),\n onToggleMediaVisibility: PropTypes.func,\n };\n\n state = {\n height: null,\n };\n\n handleAccountClick = (e) => {\n if (e.button === 0 && !(e.ctrlKey || e.metaKey) && this.context.router) {\n e.preventDefault();\n this.context.router.history.push(`/@${this.props.status.getIn(['account', 'acct'])}`);\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 handleExpandedToggle = () => {\n this.props.onToggleHidden(this.props.status);\n };\n\n _measureHeight (heightJustChanged) {\n if (this.props.measureHeight && this.node) {\n scheduleIdleTask(() => this.node && this.setState({ height: Math.ceil(this.node.scrollHeight) + 1 }));\n\n if (this.props.onHeightChange && heightJustChanged) {\n this.props.onHeightChange();\n }\n }\n }\n\n setRef = c => {\n this.node = c;\n this._measureHeight();\n };\n\n componentDidUpdate (prevProps, prevState) {\n this._measureHeight(prevState.height !== this.state.height);\n }\n\n handleModalLink = e => {\n e.preventDefault();\n\n let href;\n\n if (e.target.nodeName !== 'A') {\n href = e.target.parentNode.href;\n } else {\n href = e.target.href;\n }\n\n window.open(href, 'mastodon-intent', 'width=445,height=600,resizable=no,menubar=no,status=no,scrollbars=yes');\n };\n\n handleTranslate = () => {\n const { onTranslate, status } = this.props;\n onTranslate(status);\n };\n\n _properStatus () {\n const { status } = this.props;\n\n if (status.get('reblog', null) !== null && typeof status.get('reblog') === 'object') {\n return status.get('reblog');\n } else {\n return status;\n }\n }\n\n getAttachmentAspectRatio () {\n const attachments = this._properStatus().get('media_attachments');\n\n if (attachments.getIn([0, 'type']) === 'video') {\n return `${attachments.getIn([0, 'meta', 'original', 'width'])} / ${attachments.getIn([0, 'meta', 'original', 'height'])}`;\n } else if (attachments.getIn([0, 'type']) === 'audio') {\n return '16 / 9';\n } else {\n return (attachments.size === 1 && attachments.getIn([0, 'meta', 'small', 'aspect'])) ? attachments.getIn([0, 'meta', 'small', 'aspect']) : '3 / 2'\n }\n }\n\n render () {\n const status = this._properStatus();\n const outerStyle = { boxSizing: 'border-box' };\n const { intl, compact, pictureInPicture } = this.props;\n\n if (!status) {\n return null;\n }\n\n let media = '';\n let applicationLink = '';\n let reblogLink = '';\n let reblogIcon = 'retweet';\n let favouriteLink = '';\n let edited = '';\n\n if (this.props.measureHeight) {\n outerStyle.height = `${this.state.height}px`;\n }\n\n const language = status.getIn(['translation', 'language']) || status.get('language');\n\n if (pictureInPicture.get('inUse')) {\n media = ;\n } else if (status.get('media_attachments').size > 0) {\n if (status.getIn(['media_attachments', 0, 'type']) === 'audio') {\n const attachment = status.getIn(['media_attachments', 0]);\n const description = attachment.getIn(['translation', 'description']) || attachment.get('description');\n\n media = (\n \n );\n } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n const attachment = status.getIn(['media_attachments', 0]);\n const description = attachment.getIn(['translation', 'description']) || attachment.get('description');\n\n media = (\n \n );\n } else {\n media = (\n \n );\n }\n } else if (status.get('spoiler_text').length === 0) {\n media = ;\n }\n\n if (status.get('application')) {\n applicationLink = <> · {status.getIn(['application', 'name'])};\n }\n\n const visibilityIconInfo = {\n 'public': { icon: 'globe', text: intl.formatMessage(messages.public_short) },\n 'unlisted': { icon: 'unlock', text: intl.formatMessage(messages.unlisted_short) },\n 'private': { icon: 'lock', text: intl.formatMessage(messages.private_short) },\n 'direct': { icon: 'at', text: intl.formatMessage(messages.direct_short) },\n };\n\n const visibilityIcon = visibilityIconInfo[status.get('visibility')];\n const visibilityLink = <> · ;\n\n if (['private', 'direct'].includes(status.get('visibility'))) {\n reblogLink = '';\n } else if (this.context.router) {\n reblogLink = (\n <>\n {' · '}\n \n \n \n \n \n \n \n );\n } else {\n reblogLink = (\n <>\n {' · '}\n \n \n \n \n \n \n \n );\n }\n\n if (this.context.router) {\n favouriteLink = (\n \n \n \n \n \n \n );\n } else {\n favouriteLink = (\n \n \n \n \n \n \n );\n }\n\n if (status.get('edited_at')) {\n edited = (\n <>\n {' · '}\n \n \n );\n }\n\n const {statusContentProps, hashtagBar} = getHashtagBarForStatus(status);\n const expanded = !status.get('hidden') || status.get('spoiler_text').length === 0;\n\n return (\n
    \n
    \n {status.get('visibility') === 'direct' && (\n
    \n
    \n \n
    \n )}\n \n
    \n \n
    \n\n \n\n {media}\n\n {expanded && hashtagBar}\n\n
    \n \n \n {edited}{visibilityLink}{applicationLink}{reblogLink} · {favouriteLink}\n
    \n
    \n
    \n );\n }\n\n}\n\nexport default injectIntl(DetailedStatus);\n","import PropTypes from 'prop-types';\n\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\n\nimport classNames from 'classnames';\nimport { Helmet } from 'react-helmet';\n\nimport Immutable from 'immutable';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { connect } from 'react-redux';\nimport { createSelector } from 'reselect';\n\nimport { HotKeys } from 'react-hotkeys';\n\nimport { Icon } from 'mastodon/components/icon';\nimport { LoadingIndicator } from 'mastodon/components/loading_indicator';\nimport ScrollContainer from 'mastodon/containers/scroll_container';\nimport BundleColumnError from 'mastodon/features/ui/components/bundle_column_error';\n\nimport {\n unblockAccount,\n unmuteAccount,\n} from '../../actions/accounts';\nimport { initBlockModal } from '../../actions/blocks';\nimport { initBoostModal } from '../../actions/boosts';\nimport {\n replyCompose,\n mentionCompose,\n directCompose,\n} from '../../actions/compose';\nimport {\n blockDomain,\n unblockDomain,\n} from '../../actions/domain_blocks';\nimport {\n favourite,\n unfavourite,\n bookmark,\n unbookmark,\n reblog,\n unreblog,\n pin,\n unpin,\n} from '../../actions/interactions';\nimport { openModal } from '../../actions/modal';\nimport { initMuteModal } from '../../actions/mutes';\nimport { initReport } from '../../actions/reports';\nimport {\n fetchStatus,\n muteStatus,\n unmuteStatus,\n deleteStatus,\n editStatus,\n hideStatus,\n revealStatus,\n translateStatus,\n undoStatusTranslation,\n} from '../../actions/statuses';\nimport ColumnHeader from '../../components/column_header';\nimport { textForScreenReader, defaultMediaVisibility } from '../../components/status';\nimport StatusContainer from '../../containers/status_container';\nimport { boostModal, deleteModal } from '../../initial_state';\nimport { makeGetStatus, makeGetPictureInPicture } from '../../selectors';\nimport Column from '../ui/components/column';\nimport { attachFullscreenListener, detachFullscreenListener, isFullscreen } from '../ui/util/fullscreen';\n\nimport ActionBar from './components/action_bar';\nimport DetailedStatus from './components/detailed_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? Favorites and boosts will be lost, and replies to the original post will be orphaned.' },\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 statusTitleWithAttachments: { id: 'status.title.with_attachments', defaultMessage: '{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}' },\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 blockDomainConfirm: { id: 'confirmations.domain_block.confirm', defaultMessage: 'Block entire domain' },\n});\n\nconst makeMapStateToProps = () => {\n const getStatus = makeGetStatus();\n const getPictureInPicture = makeGetPictureInPicture();\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\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 askReplyConfirmation: state.getIn(['compose', 'text']).trim().length !== 0,\n domain: state.getIn(['meta', 'domain']),\n pictureInPicture: getPictureInPicture(state, { id: props.params.statusId }),\n };\n };\n\n return mapStateToProps;\n};\n\nconst truncate = (str, num) => {\n const arr = Array.from(str);\n if (arr.length > num) {\n return arr.slice(0, num).join('') + '…';\n } else {\n return str;\n }\n};\n\nconst titleFromStatus = (intl, status) => {\n const displayName = status.getIn(['account', 'display_name']);\n const username = status.getIn(['account', 'username']);\n const user = displayName.trim().length === 0 ? username : displayName;\n const text = status.get('search_index');\n const attachmentCount = status.get('media_attachments').size;\n\n return text ? `${user}: \"${truncate(text, 30)}\"` : intl.formatMessage(messages.statusTitleWithAttachments, { user, attachmentCount });\n};\n\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 ancestorsIds: ImmutablePropTypes.list.isRequired,\n descendantsIds: ImmutablePropTypes.list.isRequired,\n intl: PropTypes.object.isRequired,\n askReplyConfirmation: PropTypes.bool,\n multiColumn: PropTypes.bool,\n domain: PropTypes.string.isRequired,\n pictureInPicture: ImmutablePropTypes.contains({\n inUse: PropTypes.bool,\n available: PropTypes.bool,\n }),\n };\n\n state = {\n fullscreen: false,\n showMedia: defaultMediaVisibility(this.props.status),\n loadedStatusId: undefined,\n };\n\n UNSAFE_componentWillMount () {\n this.props.dispatch(fetchStatus(this.props.params.statusId));\n }\n\n componentDidMount () {\n attachFullscreenListener(this.onFullScreenChange);\n\n this._scrollStatusIntoView();\n }\n\n UNSAFE_componentWillReceiveProps (nextProps) {\n if (nextProps.params.statusId !== this.props.params.statusId && nextProps.params.statusId) {\n this.props.dispatch(fetchStatus(nextProps.params.statusId));\n }\n\n if (nextProps.status && nextProps.status.get('id') !== this.state.loadedStatusId) {\n this.setState({ showMedia: defaultMediaVisibility(nextProps.status), loadedStatusId: nextProps.status.get('id') });\n }\n }\n\n handleToggleMediaVisibility = () => {\n this.setState({ showMedia: !this.state.showMedia });\n };\n\n handleFavouriteClick = (status) => {\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 dispatch(favourite(status));\n }\n } else {\n dispatch(openModal({\n modalType: 'INTERACTION',\n modalProps: {\n type: 'favourite',\n accountId: status.getIn(['account', 'id']),\n url: status.get('uri'),\n },\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({\n modalType: 'CONFIRM',\n modalProps: {\n message: intl.formatMessage(messages.replyMessage),\n confirm: intl.formatMessage(messages.replyConfirm),\n onConfirm: () => dispatch(replyCompose(status, this.context.router.history)),\n },\n }));\n } else {\n dispatch(replyCompose(status, this.context.router.history));\n }\n } else {\n dispatch(openModal({\n modalType: 'INTERACTION',\n modalProps: {\n type: 'reply',\n accountId: status.getIn(['account', 'id']),\n url: status.get('uri'),\n },\n }));\n }\n };\n\n handleModalReblog = (status, privacy) => {\n this.props.dispatch(reblog(status, privacy));\n };\n\n handleReblogClick = (status, e) => {\n const { dispatch } = this.props;\n const { signedIn } = this.context.identity;\n\n if (signedIn) {\n if (status.get('reblogged')) {\n dispatch(unreblog(status));\n } else {\n if ((e && e.shiftKey) || !boostModal) {\n this.handleModalReblog(status);\n } else {\n dispatch(initBoostModal({ status, onReblog: this.handleModalReblog }));\n }\n }\n } else {\n dispatch(openModal({\n modalType: 'INTERACTION',\n modalProps: {\n type: 'reblog',\n accountId: status.getIn(['account', 'id']),\n url: status.get('uri'),\n },\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({\n modalType: 'CONFIRM',\n modalProps: {\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\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, lang) => {\n this.props.dispatch(openModal({\n modalType: 'MEDIA',\n modalProps: { statusId: this.props.status.get('id'), media, index, lang },\n }));\n };\n\n handleOpenVideo = (media, lang, options) => {\n this.props.dispatch(openModal({\n modalType: 'VIDEO',\n modalProps: { statusId: this.props.status.get('id'), media, lang, options },\n }));\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 handleToggleHidden = (status) => {\n if (status.get('hidden')) {\n this.props.dispatch(revealStatus(status.get('id')));\n } else {\n this.props.dispatch(hideStatus(status.get('id')));\n }\n };\n\n handleToggleAll = () => {\n const { status, ancestorsIds, descendantsIds } = this.props;\n const statusIds = [status.get('id')].concat(ancestorsIds.toJS(), descendantsIds.toJS());\n\n if (status.get('hidden')) {\n this.props.dispatch(revealStatus(statusIds));\n } else {\n this.props.dispatch(hideStatus(statusIds));\n }\n };\n\n handleTranslate = status => {\n const { dispatch } = this.props;\n\n if (status.get('translation')) {\n dispatch(undoStatusTranslation(status.get('id'), status.get('poll')));\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({\n modalType: 'EMBED',\n modalProps: { id: status.get('id') },\n }));\n };\n\n handleUnmuteClick = account => {\n this.props.dispatch(unmuteAccount(account.get('id')));\n };\n\n handleUnblockClick = account => {\n this.props.dispatch(unblockAccount(account.get('id')));\n };\n\n handleBlockDomainClick = domain => {\n this.props.dispatch(openModal({\n modalType: 'CONFIRM',\n modalProps: {\n message: {domain} }} />,\n confirm: this.props.intl.formatMessage(messages.blockDomainConfirm),\n onConfirm: () => this.props.dispatch(blockDomain(domain)),\n },\n }));\n };\n\n handleUnblockDomainClick = domain => {\n this.props.dispatch(unblockDomain(domain));\n };\n\n\n handleHotkeyMoveUp = () => {\n this.handleMoveUp(this.props.status.get('id'));\n };\n\n handleHotkeyMoveDown = () => {\n this.handleMoveDown(this.props.status.get('id'));\n };\n\n handleHotkeyReply = e => {\n e.preventDefault();\n this.handleReplyClick(this.props.status);\n };\n\n handleHotkeyFavourite = () => {\n this.handleFavouriteClick(this.props.status);\n };\n\n handleHotkeyBoost = () => {\n this.handleReblogClick(this.props.status);\n };\n\n handleHotkeyMention = e => {\n e.preventDefault();\n this.handleMentionClick(this.props.status.get('account'));\n };\n\n handleHotkeyOpenProfile = () => {\n this.context.router.history.push(`/@${this.props.status.getIn(['account', 'acct'])}`);\n };\n\n handleHotkeyToggleHidden = () => {\n this.handleToggleHidden(this.props.status);\n };\n\n handleHotkeyToggleSensitive = () => {\n this.handleToggleMediaVisibility();\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 renderChildren (list, ancestors) {\n const { params: { statusId } } = this.props;\n\n return list.map((id, i) => (\n 0 ? list.get(i - 1) : undefined}\n nextId={list.get(i + 1) || (ancestors && statusId)}\n rootId={statusId}\n />\n ));\n }\n\n setRef = c => {\n this.node = c;\n };\n\n _scrollStatusIntoView () {\n const { status, multiColumn } = this.props;\n\n if (status) {\n window.requestAnimationFrame(() => {\n this.node?.querySelector('.detailed-status__wrapper')?.scrollIntoView(true);\n\n // In the single-column interface, `scrollIntoView` will put the post behind the header,\n // so compensate for that.\n if (!multiColumn) {\n const offset = document.querySelector('.column-header__wrapper')?.getBoundingClientRect()?.bottom;\n if (offset) {\n const scrollingElement = document.scrollingElement || document.body;\n scrollingElement.scrollBy(0, -offset);\n }\n }\n });\n }\n }\n\n componentDidUpdate (prevProps) {\n const { status, ancestorsIds } = this.props;\n\n if (status && (ancestorsIds.size > prevProps.ancestorsIds.size || prevProps.status?.get('id') !== status.get('id'))) {\n this._scrollStatusIntoView();\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 // Do not change scroll when opening a modal\n if (location.state?.mastodonModalKey !== prevRouterProps?.location?.state?.mastodonModalKey) {\n return false;\n }\n\n // Scroll to focused post if it is loaded\n const child = this.node?.querySelector('.detailed-status__wrapper');\n if (child) {\n return [0, child.offsetTop];\n }\n\n // Do not scroll otherwise, `componentDidUpdate` will take care of that\n return false;\n };\n\n render () {\n let ancestors, descendants;\n const { isLoading, status, ancestorsIds, descendantsIds, intl, domain, multiColumn, pictureInPicture } = this.props;\n const { fullscreen } = this.state;\n\n if (isLoading) {\n return (\n \n \n \n );\n }\n\n if (status === null) {\n return (\n \n );\n }\n\n if (ancestorsIds && ancestorsIds.size > 0) {\n ancestors = <>{this.renderChildren(ancestorsIds, true)};\n }\n\n if (descendantsIds && descendantsIds.size > 0) {\n descendants = <>{this.renderChildren(descendantsIds)};\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 mention: this.handleHotkeyMention,\n openProfile: this.handleHotkeyOpenProfile,\n toggleHidden: this.handleHotkeyToggleHidden,\n toggleSensitive: this.handleHotkeyToggleSensitive,\n openMedia: this.handleHotkeyOpenMedia,\n };\n\n return (\n \n \n )}\n />\n\n \n
    \n {ancestors}\n\n \n
    \n \n\n \n
    \n
    \n\n {descendants}\n
    \n
    \n\n \n {titleFromStatus(intl, status)}\n \n \n \n
    \n );\n }\n\n}\n\nexport default injectIntl(connect(makeMapStateToProps)(Status));\n"],"sourceRoot":""}